FreeSwitch:send_dtmf/uuid_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为例,演示下基本用法:(FreeSwitch控制台模式下)
1、先发起一个呼叫
1 freeswitch@xxx> create_uuid
2 4841d610-fba3-46b3-9432-4a4ebc164b36
3
4 freeswitch@xxx> 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@xxx> 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@xxx> 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,把刚才发送的按键12,改成1w2W试下

从图上看,1发送完后,多延时了500ms,而2发送完后,多延时了1000ms
小结一下:
1. 不加w或W, 每个按键默认delay 40ms间隔
2. 加W, 可delay 1s, 加w可delay 0.5s ,可以连续加, 比如1Ww2, 表示1之后delay 1+0.5s
3. @后的参数, 表示每个按键的持续时间
参考:https://freeswitch.org/confluence/display/FREESWITCH/mod_commands
FreeSwitch:send_dtmf/uuid_send_dtmf发送按键注意事项的更多相关文章
- Delphi 中的全局快捷键+给指定窗体发送按键
[背景] 公司做视频影像采集,平时采集图像的时候都需要打开采集窗口,然后需要开着采集窗口来进行图像采集.同事问我能不能做一个全局快捷键,哪怕我没有操作也可以采集图像.说干就干,一直想做全局快捷键了,网 ...
- Send key模块发送按键
filename:send_key.py 1 # Author:Bing # Date:07/19/2017 import SendKeys import win32gui import pywin ...
- VBS调用windows api函数(postmessage)实现后台发送按键脚本
'=========================================================================='' VBScript Source File - ...
- 用C#调用Windows API向指定窗口发送按键消息 z
用C#调用Windows API向指定窗口发送 一.调用Windows API. C#下调用Windows API方法如下: 1.引入命名空间:using System.Runtime.Interop ...
- 用C#调用Windows API向指定窗口发送按键消息
一.调用Windows API. C#下调用Windows API方法如下: 1.引入命名空间:using System.Runtime.InteropServices; 2.引用需要使用的方法,格式 ...
- input keyevent发送按键值【转】
本文转载自:http://blog.csdn.net/moyu123456789/article/details/71209893 1.adb shell进入android设备,执行命令input k ...
- Ajax使用post方式发送数据注意事项
Ajax使用post方式给服务器传递数据时,需要将传递的字符串转化为模拟from表单发送数据的XML格式 在open之后奢姿头协议信息,模拟from表单传递数据 xhr.setRequestHeade ...
- VB发送后台按键和组合键
http://files.cnblogs.com/files/liuzhaoyzz/VB%E5%8F%91%E9%80%81%E5%90%8E%E5%8F%B0%E7%BB%84%E5%90%88%E ...
- delphi 向其他程序发送模拟按键
向其他程序发送模拟按键: 1.用keybd_event: varh : THandle;beginh := FindWindow('TFitForm', '1stOpt - [Untitled1]') ...
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...
随机推荐
- 深挖diff算法:揭开代码版本控制神器的神秘面纱
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 使用TVMC进行模型的编译与优化
TVMC介绍 TVMC,是TVM的命令行驱动程序,TVMC是一种通过命令行界面公开TVM功能的工具,例如uto-tuning/compiling/profiling和通过命令行接口运行模型 在完成本节 ...
- 开发一组交易信号--K线与10均线的关系
K线上穿/下穿10日均线,如图所示: 类似于,之前写的基于聚宽平台写的一个典型的双均线策略思想类似,当K线上穿10日均线时,发出买入信号,当K先下穿10日均线时,发出卖出信号. 比较当前的收盘价和MA ...
- Time Series in pandas
Time Series import pandas as pd import numpy as np Date and Time data types and tools from datetime ...
- Jupyter notebook添加Anaconda中的虚拟环境
1.创建虚拟环境 conda create -n your_virtual_env python=3.6 2.激活新创建的环境 activate your_virtual_env 3.安装nb_con ...
- JavaScript入门笔记day2
文章目录 常用互动方法 1. document.write() 直接向页面输出内容 2. `alert();`弹出消息对话框 3. confirm消息对话框 4. prompt弹出消息对话框,用于需要 ...
- Solon AI 正试发布(支持 java8+,RAG,MCP)
Solon AI 正试发布了(版号,随 Solon v3.3.1).历时小半年. 1.简介 Solon AI 是一个 Java AI(智能体) 全场景应用开发框架,提供有丰富的接口能力.主要支持的的智 ...
- HDE演讲---RN应用的鸿蒙化适配经验分享
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- pytest.mark.parametrize 传参
pytest.mark.parametrize 是pytest用来参数化测试的一个装饰器,它允许你为测试函数或测试类提供多组参数list, 这样就可以使用每组参数执行测试函数或测试类,实现参数化驱动, ...
- 探秘Transformer系列之(36)--- 大模型量化方案
探秘Transformer系列之(36)--- 大模型量化方案 目录 探秘Transformer系列之(36)--- 大模型量化方案 0x00 概述 0x01 8位量化 1.1 LLM.int8() ...