包含自定义上下文时丢失DID

时间:2017-08-15 20:08:50

标签: asterisk freepbx

我使用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

谢谢

2 个答案:

答案 0 :(得分:0)

请阅读拨号方案的工作原理

https://wiki.asterisk.org/wiki/display/AST/Dialplan

在你的情况下,这个上下文会阻塞它之后包含的任何内容,只是因为它具有模式匹配任何以数字(_X。)开头。 它仅阻止前5个优先级

解决方案

  1. in sip trunk set contex = custom_rewrite
  2. 将所有员工放入custom_rewrite上下文
  3. 在序列结束时发送给from-pstn。
  4. 使用asterisk -rvvv
  5. 调试它

答案 1 :(得分:-1)

您可以使用Set(__ MYVAR = $ {EXTEN})将DID保存到自定义变量。