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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM