Twilio 在星号PBX上获取传出呼叫的sip头

Twilio 在星号PBX上获取传出呼叫的sip头,twilio,asterisk,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 由于该功能,我能够获取提供商发

这就是我的拨号计划(
/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_头(X-Twilio-CallSid)}
=ACbccc967c48dda15d8d1c9b34961d19a0


这对来电非常有效。现在我的问题是打外线电话。sip头
X-Twilio-CallSid
在呼叫应答之前不存在呼叫应答后如何读取该标头?我尝试在呼叫挂断后放置
${SIP_标头(X-Twilio-CallSid)}
。通过Wireshark分析在INVITE请求后显示的标头的流量

SIP_头函数仅适用于一个数据包-入站第一邀请消息


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

SIP\u头函数仅适用于一个数据包-入站第一邀请消息


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

我还没有测试过这个,但是,您可以将post应答处理程序编写为宏(使用
M()
)或GoSub(使用
U()
):

我不确定这是否会有什么不同,因为INVITE事务可能只跟踪初始请求,而不跟踪响应,即使我们从另一个通道执行它。您还可以考虑切换到
chan_pjsip
,它具有:

PJSIP_头允许您从入站PJSIP通道读取特定的SIP头,以及在出站通道上写入(添加、更新、删除)头。一个例外是,您可以读取已添加到出站通道上的标题

这可能与
chan\u sip
sip\u头
功能不同


另外,书中还有更多内容。

我还没有测试过这一点,但是,您可以将post应答处理程序编写为宏(使用
M()
)或GoSub(使用
U()
):

我不确定这是否会有什么不同,因为INVITE事务可能只跟踪初始请求,而不跟踪响应,即使我们从另一个通道执行它。您还可以考虑切换到
chan_pjsip
,它具有:

PJSIP_头允许您从入站PJSIP通道读取特定的SIP头,以及在出站通道上写入(添加、更新、删除)头。一个例外是,您可以读取已添加到出站通道上的标题

这可能与
chan\u sip
sip\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()