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 脚本 接管 分机注册,鉴权等