freeswitch模拟呼叫场景脚本

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","->流程结束");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值