我使用core show channels concise
从中获取第 8 个字段,这是我需要在网页上实时显示的 DID。
但我还需要从 From SIP INVITE 标头获取标签,以将其存储在 CDR 数据库中。为此,当我使用不允许编辑扩展名.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( 现在被正在振铃的分机或接听呼叫的分机替换。
似乎是因为这些包含,在扩展.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 之后的所有内容都可能没有被执行,这可以解释一些变量没有被设置,而它们应该。 我在 from-pstn-custom 的末尾尝试了一个 Goto from-pstn,以确保 from-pstn 的其他行将被执行,但它会导致无限循环。还试图将 4 个包括在包含 from-pstn-custom,直接放在 from-pstn-custom 的末尾,不起作用。
您知道如何做到这一点吗?或者也许是获取这两个变量的另一种方式(实时 DID,CDR 中的标签(,因为我可以继续或另一个,但不能两者兼而有之。最好避免使用 AMI,因为当前项目已经通过调用 CLI 运行。
这是在Asterisk 11.25.1与FreePBX 13.0.190.19,Debian Linux 3.16.0-4-amd64下
谢谢
请阅读拨号计划的工作原理
https://wiki.asterisk.org/wiki/display/AST/Dialplan
在您的情况下,此上下文会阻止它后面包含的任何内容,只是因为它具有与任何以 digit(_X.( 开头的模式匹配的模式。 它只阻止前 5 个优先级
解决方案是
- 在 SIP 中继设置中 Contex = custom_rewrite
- 将所有员工置于custom_rewrite环境中
- 在序列结束时发送到 from-PSTN。
- 使用星号 -rvvv 对其进行调试
您可以使用 Set(__MYVAR=${EXTEN} 将 DID 保存到自定义变量中。