ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FreeSwitch:send_dtmf/uuid_send_dtmf发送按键注意事项

2021-08-29 17:03:50  阅读:258  来源: 互联网

标签:27 uuid 08 29 send dtmf


很多时候我们打电话到公司前台,会听到类似“欢迎致电XXX,办公电话请直拨分机,咨询XX请按1,咨询YY请按2”这样的语音提示。在一些特定流程中,如果系统自动发起这样的呼叫,希望实现自动按键(即:模拟人工按键),FreeSwitch提供了2个基本命令: send_dtmf及uuid_send_dtmf ,这2个基本功能一样,通常是send_dtmf常用于ESL Outbound外联模式,不需要指定uuid,而uuid_send_dtmf则需要指定uuid.

 

以uuid_send_dtmf为例,命令行演示下基本用法:

1、先发起一个呼叫

1 freeswitch@DST70276> create_uuid
2 4841d610-fba3-46b3-9432-4a4ebc164b36
3 
4 freeswitch@DST70276> originate {origination_uuid=4841d610-fba3-46b3-9432-4a4ebc164b36}user/1000 &park()

 先生成一个uuid(方便后面uuid_send_dtmf时指定),然后用这个uuid,向内置用户1000发起呼叫,接通后park住,这样就有一个进行的通话了

 

2、模拟按键

uuid_send_dtmf 4841d610-fba3-46b3-9432-4a4ebc164b36 12

上图是freeswitch控制台的输出,有几个细节注意一下:

a) 按键是1个1个送出去的,即先送完1,再送2

b) 单个key发送完,会默认delay 40ms.

 

看上去很简单,对吧?继续折腾,uuid_send_dtmf 命令在按键后,还可以附加一个可选参数 tone_duration,

可以试下效果:

uuid_send_dtmf 4841d610-fba3-46b3-9432-4a4ebc164b36 12 300

猜猜是啥效果?

相当于发送了12300,是不是有点意外?

再试一下:

 uuid_send_dtmf 4841d610-fba3-46b3-9432-4a4ebc164b36 12 @5000

这时候输出的内容太多,就不截完整的图了,输出片段如下:

---------------------------------------------------------------------------

freeswitch@DST70276> uuid_send_dtmf 4841d610-fba3-46b3-9432-4a4ebc164b36 12 @5000
-ERR no reply

2021-08-29 16:27:05.188770 [DEBUG] switch_core_io.c:1894 sofia/internal/1000@10.32.26.25:64045 send dtmf
digit=1 ms=5000 samples=40000
2021-08-29 16:27:05.188770 [DEBUG] switch_core_io.c:1894 sofia/internal/1000@10.32.26.25:64045 send dtmf
digit=2 ms=5000 samples=40000
freeswitch@DST70276> 2021-08-29 16:27:05.199769 [DEBUG] switch_rtp.c:5228 Send start packet for [1] ts=247200 dur=160/160/40000 seq=21903 lw=247200
2021-08-29 16:27:05.218781 [DEBUG] switch_rtp.c:5127 Send middle packet for [1] ts=247200 dur=320/320/40000 seq=21904 lw=247360
2021-08-29 16:27:05.238804 [DEBUG] switch_rtp.c:5127 Send middle packet for [1] ts=247200 dur=480/480/40000 seq=21905 lw=247520
2021-08-29 16:27:05.258771 [DEBUG] switch_rtp.c:5127 Send middle packet for [1] ts=247200 dur=640/640/40000 seq=21906 lw=247680
...

2021-08-29 16:27:10.178511 [DEBUG] switch_rtp.c:5127 Send end packet for [1] ts=247200 dur=40000/40000/40000 seq=22154 lw=286880
2021-08-29 16:27:10.178511 [DEBUG] switch_rtp.c:5075 Queue digit delay of 40ms
2021-08-29 16:27:10.579417 [DEBUG] switch_rtp.c:5228 Send start packet for [2] ts=287360 dur=160/160/40000 seq=22155 lw=287360
2021-08-29 16:27:10.598623 [DEBUG] switch_rtp.c:5127 Send middle packet for [2] ts=287360 dur=320/320/40000 seq=22156 lw=287520
2021-08-29 16:27:10.619422 [DEBUG] switch_rtp.c:5127 Send middle packet for [2] ts=287360 dur=480/480/40000 seq=22157 lw=287680
2021-08-29 16:27:10.639406 [DEBUG] switch_rtp.c:5127 Send middle packet for [2] ts=287360 dur=640/640/40000 seq=22158 lw=287840

...

---------------------------------------------------------------------------

指定了@5000后,每个按键的持续时间就变成了5秒了。

最后1个细节,实际使用中可能会遇到对方收的按键丢失问题,通常是发送太快,特别是号码中间有连续数字时,比如: 700001,发过去后,对方可能收到的是70001(少1个0)

uuid_send_dtmf
Send DTMF digits to <uuid>

Usage: uuid_send_dtmf <uuid> <dtmf digits>[@<tone_duration>]
Use the character w for a .5 second delay and the character W for a 1 second delay.

Default tone duration is 2000ms .

再反复阅读这段惜墨如金的官网文档(也没个示例,确实有点高深晦涩),其实这里给出了1个方法,在每个键后加小写w,可以在每次按键后,多delay 0.5s,如果是W,则多delay 1s

 

参考:https://freeswitch.org/confluence/display/FREESWITCH/mod_commands

标签:27,uuid,08,29,send,dtmf
来源: https://www.cnblogs.com/yjmyzz/p/send_dtmf.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有