在Asterisk PBX上,获取呼出电话的sip标头

时间:2018-09-26 23:37:15

标签: twilio asterisk

这是我的拨号计划(/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捕获的第一个数据包:

enter image description here

换句话说${SIP_HEADER(X-Twilio-CallSid)} = ACbccc967c48dda15d8d1c9b34961d19a0

这非常适合来电。现在我的问题是拨出电话。在应答呼叫之前,sip头X-Twilio-CallSid不存在。 接听电话后,如何读取该标头?当电话挂断后,我尝试放置${SIP_HEADER(X-Twilio-CallSid)}。分析通过Wireshark的流量,该头出现在INVITE请求之后。

2 个答案:

答案 0 :(得分:0)

SIP_HEADER函数仅适用于一个数据包-入站FIRST邀请消息。

您已经使用c / c ++编写了自己的函数,或者使用了诸如homer / sipcapture之类的其他软件。

答案 1 :(得分:0)

我还没有对此进行测试,但是according to the docs,您可以将答案处理程序编写为宏(使用M())或GoSub(使用U()):< / p>

[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的{​​{1}}函数的实现方式不同吗?

此外,本书中还有更多docs on Macros