首页 > 解决方案 > 在 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 请求之后。

标签: twilioasterisk

解决方案


我没有对此进行测试,但根据文档,您可以将答案后处理程序编写为宏(使用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功能不同?

此外,书中还有更多关于宏的文档。


推荐阅读