twilio - 在 Asterisk PBX 上获取拨出呼叫的 sip 标头
问题描述
这就是我的拨号方案 ( /etc/asterisk/extensions.conf
) 的样子:
[default]
exten => _X.,1,NoOp(New call from ${EXTEN} ! )
same => n,NoOp( The header X-Twilio-CallSid = ${SIP_HEADER(X-Twilio-CallSid)})
same => Dial(SIP/SomePeer)
... etc
多亏了SIP_HEADER功能,我能够获得提供商发送给我的呼叫的 ID。这是我使用 WireShark 捕获的第一个数据包:
换句话说${SIP_HEADER(X-Twilio-CallSid)}
= ACbccc967c48dda15d8d1c9b34961d19a0
这非常适合来电。现在我的问题是拨出电话。在呼叫被应答之前, sip 标头X-Twilio-CallSid
不存在。接听电话后如何阅读该标题?${SIP_HEADER(X-Twilio-CallSid)}
电话挂断后,我尝试过放置。通过 Wireshark 分析流量,该标头出现在 INVITE 请求之后。
解决方案
我没有对此进行测试,但根据文档,您可以将答案后处理程序编写为宏(使用M()
)或 GoSub(使用U()
):
[outbound-twilio]
exten => _X.,1,Dial(SIP/${EXTEN}@twilio-trunk,,M(post-answer))
[macro-post-answer]
exten => s,1,Verbose("Answer header shows ${SIP_HEADER(X-Twilio-CallSid)}")
same => s,n,Return()
我不确定这是否会有所不同,因为 INVITE 事务可能只跟踪初始请求,而不是响应,即使我们从另一个通道执行它也是如此。您可能还想考虑切换到chan_pjsip
,它具有PJSIP_HEADER
:
PJSIP_HEADER 允许您从入站 PJSIP 通道读取特定的 SIP 标头,以及在出站通道上写入(添加、更新、删除)标头。一个例外是您可以读取已在出站通道上添加的标头
也许这与chan_sip
's 的SIP_HEADER
功能不同?
此外,书中还有更多关于宏的文档。
推荐阅读
- c# - 预配 Azure 应用程序网关实例时如何引用子资源
- javascript - Nextjs,如何从 _app.tsx 重定向
- google-chrome-devtools - 有没有办法将 chrome profiler 与控制台日志或在时间轴上放置标记相关联?
- php - Laravel selectRaw中按月分组的SQL
- ibm-mq - 如何在 CachingConnectionFactory 中查找会话缓存耗尽
- java - 获取组件需要一个名为“redisTemplate”的 bean,但无法找到。用于多种不同的 RedisTemplates 配置
- ios - 在 CollectionViewCell 中居中 UIImegaeView
- amazon-web-services - 如何创建具有只读访问权限的 Redshift 用户?
- javascript - 期望调用一个断言,但接收到零个断言调用。为什么?
- javascript - 使用脚本重置子值