--输出日志
local test = "test";
--输出info日志
freeswitch.consoleLog("INFO", test);
--输出error日志
freeswitch.consoleLog("err", test);
--输出debug日志
freeswitch.consoleLog("debug", test);
获取通道中的变量
-- 获取通道变量中的主叫
local callerNumber=session:getVariable("caller_id_number");
-- 获取通道变量中的被叫
local calledNumber=session:getVariable("destination_number");
-- 获取通道变量中的uuid,每通通话都是唯一的
local uuid=session:getVariable("uuid");
--注:获取通道中的变量方式session:getVariable("{变量}");
--脚本接收外部传入参数
--传入第一个参数
local argv1 = argv[1];
--传入第二个参数
local argv2 = argv[2];
--...
--注:传入的参数不能为空,为空下一个参数会填充
--脚本简单的一些set操作
--将通话接听
session:answer();
--播放ivr音
session:execute("playback", "/home/test.wav");
--将vccid为1007set到通道变量中
session:execute("set", "vccid=1007");
--通话录音
session:execute("record_session", "/home/record.wav")
--进行外呼操作
--定义参数
local called="18649760218"
--(1)第一种方式
--呼叫18649760218号码,简单的用ip端口外呼方式,lua脚本拼接参数是用..
session:execute("bridge", "sofia/external/"..called.."@172.16.xx.xx:5080")
--使用13000000000为主叫进行外呼
session:execute("bridge", "{origination_caller_id_number=13000000000}sofia/external/"..called.."@172.16.xx.xx:5080")
--呼叫18649760218号码,使用gateway方式呼叫, gatewayName是动态的,在profile里配置的网关
session:execute("bridge", "sofia/gateway/{gatewayName}/"..called.."")
--使用13000000000为主叫进行外呼
session:execute("bridge", "{origination_caller_id_number=13000000000}sofia/gateway/{gatewayName}/"..called.."")
--呼叫18649760218号码,使用轮训组方式呼叫,使用xhsbc这个轮训组,profile为xhsbc
session:execute("bridge", "sofia/gateway/${distributor(xhsbc ${sofia(profile test gwlist down)})}/"..called.."")
--使用13000000000为主叫进行外呼
session:execute("bridge", "{origination_caller_id_number=13000000000}sofia/gateway/${distributor(xhsbc ${sofia(profile test gwlist down)})}/"..called.."")
--(2)第二种方式,将呼叫命令提取出来,单独定义
local command="{origination_caller_id_number=13000000000}sofia/external/"..called.."@172.16.xxx.xx:5080";
session:execute("bridge", command)
--(3)第三种方式,将呼叫命令提取出来,单独定义,并且拆分多个内容
local ostrs = {};
ostrs[1] = "{maxDuration=3600,origination_caller_id_number=13000000000";
ostrs[2] = ",vccid=1007";
ostrs[3] = ",servicekey=1007";
ostrs[4] = "}";
ostrs[5]="sofia/external/"..called.."@172.16.246.38:5080";
--将上述所有指令进行整合
ostr0 = table.concat(ostrs);
--最后是这样的
ostr0="{maxDuration=3600,origination_caller_id_number=13000000000,vccid=1007,servicekey=1007}sofia/external/"..called.."@172.16.246.38:5080";
--最后进行外呼操作
session:execute("bridge", ostr0)
--调用另一个脚本使用bgapi命令
local str1="str1";
local str2="str2";
--注意:传入的参数,两个参数之间要空格
commad = "bgapi lua test.lua "..str1.." "..str2.."";
api:executeString(commad);
--使用uuid方式进行放音
api = freeswitch.API();
-- 获取通道变量中的uuid,每通通话都是唯一的
local uuid=session:getVariable("uuid");
local callCaller = "uuid_broadcast " .. uuid .. " /home/test.wav";
api:executeString(callCaller);
--将某些操作封装成方法
function playback()
session:execute("playback", "/home/test.wav");
end
--执行这个方法
playback();
--判断文件是否存在
function exists(recordHintTone)
local path="/usr/local/freeswitch/sounds/en/us/callie/";
local exists=loadConfig(path..recordHintTone);
if exists then
return "true";
else
return "false";
end
end
--执行这个方法
local exists=exists("test.wav");
--lua脚本get请求url
--(1)没有返回值
require "curl"
--请求完整路径(包含请求参数)
local requestUrl = "http://172.16.xx.xx:80/forward/eventInfo?vccid=1007";
c:setopt(curl.OPT_URL, requestUrl)
c:perform()
freeswitch.consoleLog("INFO", record_id.."|"..callStatus.."|状态推送成功\n");
--(2)有返回值,返回json字符串
require "curl"
local cjson = require "cjson"
c = curl.easy_init()
--主函数
function main()
requestUrl="http://172.16.xx.xx:80/forward/eventInfo?vccid=1007";
freeswitch.consoleLog("INFO", "请求url|"..requestUrl.."\n")
c:setopt(curl.OPT_URL, requestUrl)
c:setopt(curl.OPT_WRITEFUNCTION, function(buffer)
freeswitch.consoleLog("info", "打印日志: "..buffer.."\r\n");
--将字符转转换成json
result = cjson.decode(buffer);
--获取code参数
local code= result["code"];
return #buffer
end)
c:perform()
end