FreeSWITCH中的lua操作小结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeSWITCH中的lua操作小结相关的知识,希望对你有一定的参考价值。

参考技术A FreeSWITCH中的lua操作小结

lua中设置当前通道变量:

方法一:

session:setVariable("fullName", "xxxxx");--需判断session是否为空

方法二:

local uuid =getUUID(callerid);

local res=api:executeString("uuid_setvar ".. uuid .." fullName ".."xxxxxxx")

该处设置的变量可以是通道中本没有的变量,设置完了后,在其他地方就可以引用该变量。

lua中设置全局通道变量(在vars.xml中设置)

local ucall_ip = api:executeString("global_setvar qt_ucall_ip_port 192.168.0.32:9090");

获取当前的通道变量

local callee_num=session:getVariable("qt_ucall_callee");

获取全局通道变量

local ucall_ip = api:executeString("global_getvar qt_ucall_ip_port");

获取当前会话uuid

session:get_uuid()

获取当前路径

--USwitch的当前安装目录

syspath = tostring(api:execute("global_getvar", "base_dir"));

使用uuid_transfer将当前对话的两个号码同时转入会议中

local trf1="uuid_transfer " .. guestuuid .. " -both " .. conferenceNum;

OutputConsoleLog("info" , scriptname ..": try to get guestNum to conference,command is"..trf1.."");

api:executeString(trf1);

外呼方法总结:

originate user/11103139316095XX

originate sofia/external/139316095XX@192.168.2.34 &playback(calloutmusic/welcometoyou.mp3)

originate loopback/139316095XX&playback(calloutmusic/20110126164156.mp3)

在lua脚本中放一段录音

session:streamFile("notonduty.wav");

判断会话是否已建立

session:ready()==true

挂断当前会话

session:hangup();

将当前会话休眠一段时间

session:sleep(5000);

发起http请求

local http = require("socket.http");

--发起http请求,并获取返回结果

local e = http.request(url);

Freeswitch 会议 LUA

【中文标题】Freeswitch 会议 LUA【英文标题】:Freeswitch Conference LUA 【发布时间】:2020-09-04 12:04:28 【问题描述】:

之后无法在 lua 脚本中保持控制

session:execute("会议", conf_name);

以下所有命令都无法执行。

发起拨号字符串 &test.lua

test.lua

api = freeswitch.API()
    freeswitch.consoleLog("DEBUG", "test1")
    session:execute("conference", "test_conf");
    freeswitch.consoleLog("DEBUG", "test2")

test2 没有打印在控制台日志中

【问题讨论】:

提供更多信息。是否有任何错误消息_是否有更多代码要分享? 不,没有错误消息 .. 我有一个简单的 lua 脚本 => 发起 dialstring &test.lua 我将此会话添加到会议 session:execute("conference", conf_name); “无法被执行”是什么意思?什么是conf_name?提供您的脚本并阅读How to Ask test.lua freeswitch,consoleLog("DEBUG", "test1") session:execute("conference", conf_name); freeswitch,consoleLog("DEBUG", "test2") test2 没有打印在控制台日志中 请改进您的帖子,不要在 cmets 中添加代码 【参考方案1】:

从 freeswitch 邮件列表中发布我的答案:Question、answer 1、additional information 2。

据我所知,当您调用session:execute 时,它是一个同步操作。 Lua 脚本将继续运行,等待execute 完成。 如果您将用户踢出会议,lua 脚本将从中断处继续。

(如果您要挂断用户或转移他们,会话将结束,脚本可能会尽力继续,但没有活动会话。)

替代方案: 根据您要完成的任务,您可以在会议之前先安排一个任务。或者只为某些事情调用 lua 脚本,其余的在拨号方案中处理。需要时,将其踢回另一个 lua 脚本以进行进一步处理。


Brian 发布了另一条信息:

除非hangup_after_conference=false,否则它不会继续 lua。但是你 是正确的,脚本正在执行会议,它停在那里。

【讨论】:

【参考方案2】:

是的,在会话转移到会议后,脚本的控制权就丢失了。

从逻辑上讲,我们可以通过会议本身发起呼叫

会议拨号

【讨论】:

以上是关于FreeSWITCH中的lua操作小结的主要内容,如果未能解决你的问题,请参考以下文章

freeswitch嵌入lua脚本

FreeSWITCH 使用 lua 脚本 接管 分机注册,鉴权等

FreeSWITCH 使用 lua 脚本 接管 分机注册,鉴权等

在lua脚本中怎么用freeswitch.session

一次完整的通话过程SIP报文分析

Lua的require小结