
如果需要实现FreePBX或者Asterisk自定义拨号规则的处理,用户首先在系统中添加一个特殊处理文件,定义其文件名称和拨号规则。具体文件存储在Asterisk默认的系统路径下:/etc/asterisk

编辑extensions_custom.conf 文件,添加以下内容:

注意,用户添加自己自定义的拨号规则文件时需要注意自己的拨号规则,并且了解拨号规则的处理流程和语法。如果不清楚拨号规则和语法,请查询本公众号,Asterisk 语法等内容学习。
[from-internal-custom] // 通过自定义内部分机拨号规则实现灵活拨号需求
[from-internal-custom] // 通过自定义内部分机拨号规则实现灵活拨号需求
exten => _**XXX*XXXX,1,Noop(Entering user defined context from-internal-custom in extensions_custom.conf)
exten => _**XXX*XXXX,n,Noop(ext: ${EXTEN:-4} delay: ${EXTEN:2:3}) // 打印
exten => _**XXX*XXXX,n,Wait(${EXTEN:2:3}) // 秒为单位
exten => _**XXX*XXXX,n,goto(from-internal,${EXTEN:-4},1) // 跳转
以上自定义拨号规则说明:
仅适用于内部分机互相呼叫的自定义拨号规则。
内部分机先拨两个星号(××),然后拨一个三位数的数字表示时长,最后再拨一个星号(×),拨四位数的分机号码。
拨号以后,等待一个时长,然后再执行呼叫分机号码的流程。
示例:××005×1001 表示等待005,然后再拨分机1001
以上流程可以实现各种自定义方式,用户可以根据不同场景做相应修改。当然,首先需要用户熟悉Asterisk 拨号规则的语法。
安全提示:通过此特别自定义的拨号规则,系统内部分机可以通过agi命令执行其他的linux命令,包括重新启动服务器,删除数据等其他命令,所以请用户需要特别注意其自定义文件内容。
然后通过freepbx界面,添加两个PJSIP的分机,分机账号如下:

通过鼎信话机界面访问SIP配置,添加SIP 分机1001.

添加通过FreePBX已创建的分机1001和FreePBX IP地址。

如果一切正常的话,添加以后,几秒钟以后会显示成功注册。

或者用户可以通过Asterisk CLI命令查看分机状态,确认成功注册:
pjsip show endpoints

pjsip debug log,看到dinstar SIP log。


然后我们开始呼叫测试。通过软电话注册分机102,确保成功注册。然后,根据以下演示拨号输入相应的拨号字符串,分别为等待时间和分机号码。


这里输入的是等待5秒钟,然后呼叫1001分机。

Asterisk CLI 输出的呼叫log,拨号规则触发了自定义的规则,并且完整打印出了自定义拨号规则的内容。

以下是分机1001接听呼叫的log日志。

分机之间呼叫的CDR 呼叫记录:
CDR记录:

总结:
笔者通过FreePBX配置两个SIP分机,实现了SIP内部分机(一个软电话,一台鼎信SIP话机)的自定义拨号规则的流程处理。通过自定义规则用户可以轻松实现界面配置不能支持的某些特殊需求,包括自定义呼入前处理(数据库流程,自定义目的地),呼叫后处理和内部分机的某些特殊需求。通过自定义的拨号规则可以完美支持一些界面不能配置的功能。希望读者通过此示例可以让读者进一步挖掘FreePBX强大的业务支持功能,实现更多业务需求。
参考资料:
www.freepbx.org.cn
www.asterisk.org.cn
www.freepbx.org
