这就是我的拨号计划(/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
由于函数标头,我能够获得我的提供者发送给我的呼叫的id。这是我使用WireShark捕获的第一个数据包:
换句话说,${SIP_HEADER(X-Twilio-CallSid)}
= ACbccc967c48dda15d8d1c9b34961d19a0
--这对来电非常有用。现在我的问题是打电话。在响应调用之前,sip报头X-Twilio-CallSid
不存在。,一旦呼叫被应答,我如何读取那个标头?,我尝试过在呼叫挂断后放置${SIP_HEADER(X-Twilio-CallSid)}
。分析通过Wireshark的通信量,消息头出现在INVITE请求之后。
发布于 2018-09-30 15:41:24
SIP_HEADER功能只适用于一个数据包-入站第一次邀请消息。
您已经使用c/c++编写了自己的函数,或者使用了其他一些软件,如homer/sipcapture。
发布于 2018-10-02 23:17:19
我还没有测试这一点,但是根据医生的说法,您可以将应答后处理程序编写为宏(使用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通道读取特定的PJSIP_HEADER,以及在出站通道上写入(添加、更新、删除)报头。一个例外情况是,您可以读取已在出站通道上添加的标头。
也许这是与chan_sip
的SIP_HEADER
函数不同的实现?
另外,书中还有更多的宏文档。
https://stackoverflow.com/questions/52527408
复制相似问题