相信大家可能接到過一些電話,聽上去不象是真人打過來的,比如:通知“您的信用卡到期了”,或者“您訂的飛機航班取消了,請儘快改簽或取消行程”,這種就是所謂的“自動外呼”系統,技術上講,可以通過 esl inbound模式實現(注:對esl不熟悉的朋友,戳這裏)
大概思路:
- 先把一些要外呼的任務計劃,落地存儲(比如:在某個時間點,應該去撥打哪些號碼,放哪些語音)
- 搞個job去輪詢,把這些任務定時取出來 (注:1-2這二個步驟,也可以用延遲隊列來處理,或者db+延遲mq結合實現,遠期任務存db,近期任務用job撈出來,扔到延遲MQ中)
- 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相同
參考文檔: