FreeSwitch: esl inbound模式下外呼撥號

相信大家可能接到過一些電話,聽上去不象是真人打過來的,比如:通知“您的信用卡到期了”,或者“您訂的飛機航班取消了,請儘快改簽或取消行程”,這種就是所謂的“自動外呼”系統,技術上講,可以通過 esl inbound模式實現(注:對esl不熟悉的朋友,戳這裏

大概思路:

  1. 先把一些要外呼的任務計劃,落地存儲(比如:在某個時間點,應該去撥打哪些號碼,放哪些語音)
  2. 搞個job去輪詢,把這些任務定時取出來 (注:1-2這二個步驟,也可以用延遲隊列來處理,或者db+延遲mq結合實現,遠期任務存db,近期任務用job撈出來,扔到延遲MQ中)
  3.  inblound模式連接到FS上,然後發命令給FreeSwitch
    • 方法1:調用lua腳本,實現外呼
    • 方法2:直接發originate命令

方法1的實現細節:(適合擅長lua的朋友,複雜邏輯可以放在lua中處理)

  • lua 腳本示例:\FreeSWITCH\scripts\callout.lua
session = freeswitch.Session("user/1000");
session:setAutoHangup(false);
session:execute("bridge","user/1001");

  這只是1個示例,調用這個腳本會先撥打1000分機號,等它接起來後,會再讓1000呼分機1001 (以前有些詐騙電話,惡意扣費的大致就是這個原理 ,讓你接起來後,自動轉到1個境外電話,所以不要隨便接陌生電話!!! 技術本身本無善惡,但使用技術的人或公司,是分好壞的!!!)

  tips:lua腳本可以接收動態參數,實際應用中肯定不會象這個簡單的示例,把號碼寫死。

  • 然後在esl inbound的代碼中調用:
client.sendAsyncApiCommand("luarun", "callout.lua");

  

方法2的實現細節:直接在java代碼中,發起originate呼叫 (適合熟悉 java的朋友)

client.sendAsyncApiCommand("originate user/1000 &bridge(user/1001)")

  效果與lua相同

 

參考文檔:

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Client-and-Developer-Interfaces/Lua-API-Reference/

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