HowTo文档
用户使用XSwitch对接运营商线路自动外呼时,经常碰到一个问题,即,外呼后由于运营商回铃音播放导致不能及时获取到挂断信息。比如,当用户由于信号问题无法接听时,会不断听到“您拨打的号码不在服务区”,过了几十秒,系统收到挂断消息,导致资源、时间浪费。此时,系统迫切需要一个回铃音检测模块用于及时获取回铃音信息,从而及时挂断呼叫失败的通话,释放资源。
mod_da2是顶顶通开发的一个FreeSWITCH回铃音检测模块,通过分析FreeSWITCH早期媒体的声音,得到被叫号码状态【可以识别到回铃音、忙音、彩铃、空号、通话中,关机、停机,语音信箱和留言等各种号码状态】。
安装
使用XSwitch
直接加载该模块 mod_da2 模块即可,默认只有一个并发测试,如需更多请联系客户人员。
使用开源FreeXSWITCH
假如你使用的是开源的、自装的FreeSWITCH,首先获取该测试模块,下载访问地址为http://www.dingdingtong.cn/mod_da2_last.rar
将该模块解压后,将 da2.conf.xml 复制到 FreeSWITCH安装目录下的 /conf/autoload_configs/da2.conf.xml (假设FreeSWITCH安装目录是 /usr/local/freeswitch/ ) 将da2.json 复制到 FreeSWITCH安装目录下的 /conf/da2.json(如果是XSwith,则添加到/usr/local/freeswitch/storage/下)
cp da2.conf.xml /usr/local/freeswitch/conf/autoload_configs/da2.conf.xml cp da2.json /usr/local/freeswitch/conf/da2.json cp libda2.so /usr/lib/libda2.so cp mod_da2.so /usr/local/freeswitch/mod/mod_da2.so
该模块为商用模块,如果想要免费测试,可修改da2.json,da2.json的addr修改为 da2.ddrj.com key修改为 aaa,如下所示:
{ "da" : { "connect" : { "addr" : "da2.ddrj.com", "port" : 9977, "reConnectInterval" : 15000, "timer" : 5000 }, "key" : "aaa" } }
如果是从顶顶那获取的更多license测试,可修改da2.json,如下所示:
{ "da" : { "connect" : { "addr" : "127.0.0.1", "port" : 9977, "reConnectInterval" : 15000, "timer" : 5000 }, "key" : "" } }
查询模块状态
在终端里输入如下指令,并获取如下信息则说明模块正常。
da2 show mod_da2:2.19 libda2:da 2.19 status ready:1 limit:1 peak:1 inuse:0 inchace:1
其中ready:1 则表示连接正常;limit:1 则表示并发只有1个,如需更多则联系。
如需更多并发测试,请联系“顶顶通软件有限公司”相关负责人咨询。
测试
使用XSwitch系统
如果使用XSwitch系统,可以直接在对应路由页面,添加“动作”,如下:

然后使用IP话机直接发起呼叫即可。
使用FreeSWITCH系统
如果部署的是开源FreeSWITCH(获取对应地址和端口),可以参考如下在终端发起呼叫(替换成自己系统的地址和端口及被叫号码)
终端 fs_cli 测试
bgapi originate {execute_on_media=start_da2}sofia/external/da1@47.97.5.205:16080 &park bgapi originate sofia/external/da1@47.97.5.205:16080 &da2 bgapi originate {execute_on_media=start_da2,absolute_codec_string=pcma}sofia/external/1300000000@192.168.3.1:5080 wait_for_answer_da,park inline
有的线路,比如IMS,需要FreeSWITCH先发包,才可以接收到早期媒体,可以如下:
bgapi originate {execute_on_media=start_da2}sofia/external/da1@47.97.5.205:16080 wait_for_answer_da,park inline bgapi originate sofia/external/da1@47.97.5.205:16080 &da2(1)
通过API启动
originate {origination_uuid=myuuid,api_on_media='uuid_start_da2 myuuid'}sofia/external/da2@ddrj.com:16060 wait_for_answer_da,park inline originate {origination_uuid=myuuid,api_on_media='bgapi uuid_start_da2 myuuid'}sofia/external/da2@ddrj.com:16060 wait_for_answer_da,park inline
结果
想要获取回铃音检测结果,可以通过订阅事件或在话单中添加回铃音检测结果参数即可。
XSwitch
如果使用XSwitch,可以通过XCC页面或话单页面添加对应通道变量,如下所示:

订阅话单事件即可,获取话单信息如下:
{ "jsonrpc": "2.0", "method": "Event.CDR", "params": { "node_uuid": "aac8f2f2-ed2f-4de0-ac3b-2f406bfb3d45", "cdr": { "sip_hangup_disposition": "send_cancel", "direction": "outbound", "start_stamp": "2024-01-03 10:39:16", "uuid": "0935860e-8207-43ee-8c7c-f32b73d160a6", "da2_finish_cause": "stoptone", "da2_result": "power off", "billsec": "0", "caller_id_name": "xx", "caller_id_number": "819", "destination_number": "123xxxxxxxx", "hangup_cause": "NORMAL_CLEARING", "duration": "9", "context": "context-22", "end_stamp": "2024-01-03 10:39:25", "leg": "b", "other_leg_uuid": "7a45f486-4afa-4314-9f56-2f6e94778ae0", "logical_direction": "outbound" }, "uuid": "0935860e-8207-43ee-8c7c-f32b73d160a6" } }
事件
可在终端执行 /event CHANNEL_HANGUP_COMPLETE CUSTOM da2 可获取如下所示事件信息:
variable_da2_tone: unmatch variable_da2_point_begin: 14478 variable_da2_point_end: 29515 variable_sip_hangup_phrase: Request Terminated variable_last_bridge_hangup_cause: ORIGINATOR_CANCEL variable_last_bridge_proto_specific_hangup_cause: sip:487 variable_da2_finish_cause: bus_close variable_da2_last_tone: prompt variable_da2_all_tone: 140 variable_da2_last_sample_category: 0 variable_da2_result: prompt
说明
回铃音检测样本分类如下:
| id | name | alias | description |
|---|---|---|---|
| 2 | 关机 | power off | 关机 |
| 3 | 空号 | does not exist | 空号 |
| 4 | 停机 | out of service | 停机 |
| 5 | 正在通话中 | hold on | 正在通话中 |
| 6 | 用户拒接 | not convenient | 用户拒接 |
| 7 | 无法接通 | is not reachable | 无法接通 |
| 8 | 暂停服务 | not in service | 暂停服务 |
| 9 | 用户正忙 | busy now | 用户正忙 |
| 10 | 拨号方式不正确 | not a local number | 拨号方式不正确 |
| 11 | 呼入限制 | barring of incoming | 呼入限制 |
| 12 | 来电提醒 | call reminder | 各类秘书服务 |
| 13 | 呼叫转移失败 | forwarded | 呼叫转移失败 |
| 14 | 网络忙 | line is busy | 网络忙 |
| 15 | 无人接听 | not answer | 无人接听 |
| 16 | 欠费 | defaulting | 欠费 |
| 17 | 无法接听 | cannot be connected | 无法接听 |
| 18 | 改号 | number change | 改号 |
| 19 | 线路故障 | line fault | 线路不能呼出,比如SIM卡欠费 |
| 20 | 稍后再拨 | redial later | 各种稍后再拨提示 |
更多详情,可以访问http://www.ddrj.com/asr/mod_da2.html