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

问题描述 投票:0回答:2

这就是我的拨号方案 (

/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。

这非常适合来电。现在我的问题是拨出电话。在呼叫被应答之前,sip 标头

X-Twilio-CallSid
不存在。 接听电话后如何阅读该标题?我已经尝试在电话挂断后放置
${SIP_HEADER(X-Twilio-CallSid)}
。通过 Wireshark 分析流量,该标头出现在 INVITE 请求之后。

twilio asterisk sip
2个回答
1
投票

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

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


1
投票

我还没有对此进行测试,但是根据文档,您可以将后置处理程序编写为宏(使用

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
SIP_HEADER
功能的实现方式不同?

此外,还有更多 docs on Macros from the book.

© www.soinside.com 2019 - 2024. All rights reserved.