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页面或话单页面添加对应通道变量,如下所示:

XCC CDR配置

订阅话单事件即可,获取话单信息如下:

{
	"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

说明

回铃音检测样本分类如下:

idnamealiasdescription
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

如何在 XSwitch 中对接 Coze 智能体