一個(gè)在FreeSWITCH中外呼的腳本
前幾天,一個(gè)朋友問(wèn)我能否實(shí)現在FS中外呼,然后放一段錄音,我說(shuō)當然能,寫(xiě)個(gè)簡(jiǎn)單的腳本就行。但后來(lái)他說(shuō)還要知道呼叫是否成功,我說(shuō),那就需要復雜一點(diǎn)了。
當然,這個(gè)應用很簡(jiǎn)單,就沒(méi)必要使用event_socket那些復雜的東東。寫(xiě)了一個(gè)Lua腳本,基本能滿(mǎn)足要求了。
思路是將待呼號碼放到一個(gè)文件(number_file_name)中,每個(gè)一行,然后用Lua依次讀每一行,呼通后播放file_to_play,結果寫(xiě)到log_file_name中。為保證對方應該后才開(kāi)始播放,需要ignore_early_media參數,否則,對方傳回鈴音或彩鈴時(shí)播放就會(huì )開(kāi)始,而那不是我們想要的。
prefix = "{ignore_early_media=true}sofia/gateway/cnc/"
number_file_name = "/usr/local/freeswitch/scripts/number.txt"
file_to_play = "/usr/local/freeswitch/sounds/custom/8000/sound.wav"
log_file_name = "/usr/local/freeswitch/log/dialer_log.txt"
簡(jiǎn)單起見(jiàn),包裝一個(gè)函數:
function debug(s)
freeswitch.consoleLog("notice", s .. "\n")
end
定義呼叫函數。freeswitch.Session會(huì )呼叫一個(gè)號碼,并一直等待對方應答。然后,streamFile播放一段聲音,掛機。最后,函數返回掛機原因 hangup_cause。
function call_number(number)
dial_string = prefix .. tostring(number);
debug("calling " .. dial_string);
session = freeswitch.Session(dial_string);
if session:ready() then
session:sleep(1000)
session:streamFile(file_to_play)
session:hangup()
end
-- waiting for hangup
while session:ready() do
debug("waiting for hangup " .. number)
session:sleep(1000)
end
return session:hangupCause()
end
實(shí)際的代碼是從這里開(kāi)始執行的。首先打開(kāi)存放電話(huà)號碼的文件(準備讀),和呼叫日志(準備寫(xiě),追加)。
然后是無(wú)限循環(huán)(while),每次讀取一行,當讀到空行或文件尾時(shí),退出。
while 循環(huán)中,讀到的每一行實(shí)際上是一個(gè)號碼,調用上面定義的call_number進(jìn)行呼叫,并將呼叫結果寫(xiě)到log_file中。
number_file = io.open(number_file_name, "r")
log_file = io.open(log_file_name, "a+")
while true do
line = number_file:read("*line")
if line == "" or line == nil then break end
hangup_cause = call_number(line)
log_file:write(os.date("%H:%M:%S ") .. line .. " " .. hangup_cause .. "\n")
end
很簡(jiǎn)單,很強大,是吧?
將腳本存到scripts目錄中(通常是/usr/local/freeswitch/scripts/),起名叫dialer.lua,在FreeSWITCH控制臺或fs_cli中執行:
luarun dialer.lua
完整的腳本:
另外還有一個(gè) batch_dialer:
http://fisheye.freeswitch.org/browse/freeswitch-contrib/seven/lua/batch_dialer.lua?hb=true
FreeSWITCH提供的API:http://wiki.freeswitch.org/wiki/Mod_lua
Lua語(yǔ)言:http://www.lua.org/