我使用core show channels concise
从中获取第8个字段,这是我需要在网页上实时显示的DID。
但我还需要从From SIP INVITE标头获取标签,以将其存储在CDR数据库中。为此,当我使用不允许编辑extensions.conf的freepbx时,我在/etc/asterisk/extensions_custom.conf文件中添加了这个:
[from-pstn-custom]
exten => _X.,1,NOOP("CDR Entered [from-trunk-custom]")
exten => _X.,n,Set(fromstr=${SIP_HEADER(From)})
exten => _X.,n,Set(longtag=${CUT(fromstr,\;,2)})
exten => _X.,n,Set(tagok=${CUT(longtag,\=,2)})
exten => _X.,n,Set(CDR(tag)=${tagok})
效果很好,我确实拥有CDR中需要的标签。但是现在,因为我从-pstn-custom上下文中添加了这个,我遇到core show channels concise
的问题:第8个字段(DID)现在被正在响铃的扩展名取代,或者被接听电话的扩展名替换
似乎是因为这些内容,在extensions.conf中:
[from-pstn]
include => from-pstn-custom ; create this context in extensions_custom.conf to include customizations
include => ext-did
include => ext-did-post-custom
include => from-did-direct
include => ext-did-catchall ; THIS MUST COME AFTER ext-did
也许包含from-pstn-custom之后的所有内容都可能没有被执行,这可以解释一些vars没有设置,而它们应该。 我在from-pstn-custom结束时尝试了一个Goto from-pstn,以确保from-pstn的其他行将被执行,但它会导致无限循环。还尝试将包含from-pstn-custom的4个包含直接放在from-pstn-custom的末尾,不起作用。
您是否知道如何做到这一点?或者也许是另外一种方式来获得这两个变量(实时DID,CDR中的标签),因为我可以继续或另一个但不是两个。最好避免AMI,因为当前项目已经通过调用CLI运行。
这是在Asterisk 11.25.1下使用FreePBX 13.0.190.19,Debian Linux 3.16.0-4-amd64
谢谢
答案 0 :(得分:0)
请阅读拨号方案的工作原理
https://wiki.asterisk.org/wiki/display/AST/Dialplan
在你的情况下,这个上下文会阻塞它之后包含的任何内容,只是因为它具有模式匹配任何以数字(_X。)开头。 它仅阻止前5个优先级
解决方案
答案 1 :(得分:-1)
您可以使用Set(__ MYVAR = $ {EXTEN})将DID保存到自定义变量。