FreeSWITCH在answer前主動發dtmf

操作系統 :CentOS 7.6_x64
FreeSWITCH版本 :1.10.9
NAT環境的主動外呼場景下,會遇到線路側回鈴音數據無法接收的問題,需要FreeSWITCH主動發送RTP數據,發送DTMF是個選擇。本文記錄下如何使用FreeSWITCH在answer前發送DTMF,我將從以下幾個方面進行展開:
  • FreeSWITCH如何發送DTMF

  • sipp如何模擬180和183

  • FreeSWITCH如何在180和183時發送DTMF

  • 相關腳本及資源下載

一、FreeSWITCH發送DTMF

可使用 uuid_send_dtmf 來發送dtmf,命令格式如下:
uuid_send_dtmf  <uuid> <dtmf_data>
示例如下:
uuid_send_dtmf 4d5b6296-155f-4d9a-9fea-ae3284fc48a6 1
效果如下:

二、sipp模擬180和183

使用sipp模擬180和183的場景,以便測試。
sipp版本: 3.6.1

sipp如何安裝及基礎使用,可參考如下文章:

1、sipp模擬180

實現思路如下:
1)sipp以UAS模式啓動;
2)只發送180信令;
3)在200中設置編碼數據;
4)通過播放pcap文件模擬rtp數據;

示例xml如下(sipp_uas_180_g711a.xml):

完整代碼可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231205 獲取。
啓動腳本如下:
#! /bin/bash

./sipp -i 192.168.137.31 -p 55080 -sf sipp_uas_180_g711a.xml
啓動效果如下:

 2、sipp模擬183

實現思路如下:
1)sipp以UAS模式啓動;
2)只發送183信令;
3)在183中設置編碼數據,通過播放pcap文件模擬回鈴音rtp數據;
4)發送200信令,通過播放pcap文件模擬通話過程的rtp數據;

示例xml如下(sipp_uas_183_g711a.xml):

完整代碼可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231205 獲取。

啓動腳本如下:

#! /bin/bash

./sipp -i 192.168.137.31 -p 55080 -sf sipp_uas_183_g711a.xml
啓動效果如下:

三、FreeSWITCH在180和183時發送DTMF

FS機器:   192.168.137.32
SIPP機器: 192.168.137.31

1、在180時發送dtmf

使用 api_on_ring 進行dtmf發送,會在180時觸發該操作。

1.1 編寫撥號方案
思路如下:
1)設置api_on_ring回調命令;
2)橋接sipp模擬的180場景;

示例如下:
    <extension name="test180">
        <condition field="destination_number" expression="^321$">
             <action application="set" data="hangup_after_bridge=true"/>
             <action application="lua" data="dtmfTest180.lua"/>
        </condition>
    </extension>

lua腳本可從文末提供的渠道獲取。

1.2 使用分機撥打測試
步驟如下:
1)啓動sipp模擬的180場景;
2)註冊分機1000;
3)使用分機1000撥打321號碼;

測試日誌如下:

wireshark抓包效果如下:

運行效果視頻可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2023120501 獲取。

2、在183時發送dtmf

使用 api_on_pre_answer 進行dtmf發送,會在183時觸發該操作,但需要注意的時,此時rtp連接並未建立,需要通過lua腳本進行休眠操作,待rtp連接建立後再發送dtmf數據。
2.1 編寫撥號方案
思路如下:
1)設置api_on_ring回調命令;
2)橋接sipp模擬的183場景;

示例如下:
    <extension name="test183">
        <condition field="destination_number" expression="^322$">
             <action application="set" data="hangup_after_bridge=true"/>
             <action application="lua" data="dtmfTest183.lua"/>
        </condition>
    </extension>

lua腳本可從文末提供的渠道獲取。

2.2 使用分機撥打測試
步驟如下:
1)啓動sipp模擬的183場景;
2)註冊分機1000;
3)使用分機1000撥打322號碼;

測試日誌如下:

wireshark抓包效果如下:

 運行效果視頻可從如下渠道獲取:

關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2023120502 獲取。

四、資源下載

本文涉及資源,可以從如下途徑獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231205 獲取。

 好,就這麼多了,希望對你有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章