function split(str, reps)
local resultStrsList = {};
string.gsub(str, '[^' .. reps ..']+', function(w) table.insert(resultStrsList, w) end );
return resultStrsList;
end
--read file line by line
local function getRowContent(file)
local content;
local t = file:read()
if not content then
content = t
else
content = content..t
end
return content and (string.gsub(content, " ", ""))
end
--前期以实现功能为主会load整个cdr的csv文件,后期可以按照号码后四位的散列值拆分整个csv为若干桶文件
function loadCdrFile(filePath)
local alls = {}
local file = io.open(filePath, "r")
while true do
local line = getRowContent(file)
if not line then
break
end
table.insert(alls, line)
end
local titles = split(alls[1], ",")
local no = ""
local arrs = {}
for i = 2, #alls, 1 do
local content = split(alls[i], ",")
no = content[1]
arrs[no] = {}
for j = 1, #titles, 1 do
arrs[no][titles[j]] = content[j]
session:consoleLog("crit", "no " .. no .. " titles " .. titles[j] .. " v " .. arrs[no][titles[j]] )
end
end
return arrs
end
session:consoleLog("info","->流程开始");
local uuid = session:get_uuid()
local dnis = "" .. session:getVariable("destination_number")
local cdr = loadCdrFile("/usr/share/freeswitch/sounds/en/us/callie/cdr.csv")
local answerTime = 0
local hangupTime = 0
local result = 0
if cdr[dnis] ~= nil then
answerTime = cdr[dnis].ans
hangupTime = cdr[dnis].hup + answerTime
result = cdr[dnis].result
else
session:consoleLog("crit", "dnis " .. dnis .. " not exist.")
do return 0 end
end
api = freeswitch.API();
api:executeString("uuid_ring_ready " .. uuid)
--session:consoleLog("crit", "sched_api=====fmh" .. result .. " " .. type(result))
if result ~= '1' then
--session:consoleLog("crit", "sched_api=====fmh" .. result .. "==[!!!!!=1]"..type(result))
api:executeString("sched_api +" .. answerTime .. " none uuid_kill " .. uuid) --外呼未接通,客户侧振铃
else
--session:consoleLog("crit", "sched_api=====" .. result .. "==[======1]")
if answerTime == 0 then
api:executeString("sched_api +" .. hangupTime .. " none uuid_kill " .. uuid)
else
api:executeString("sched_api +" .. answerTime .. " none uuid_answer " .. uuid)
api:executeString("sched_api +" .. hangupTime .. " none uuid_kill " .. uuid)
end
end
--session:streamFile("/usr/share/freeswitch/sounds/en/us/callie/service_wait.wav")
session:consoleLog("info","->->uuid " .. uuid);
session:consoleLog("info","->->dnis " .. dnis);
session:consoleLog("info","->->ansT " .. answerTime .. "s");
session:consoleLog("info","->->hupT " .. hangupTime .. "s");
session:consoleLog("info","->流程结束");