使用lua的Asterisk挂机处理程序
2016-8-29 13:16:2
收藏:0
阅读:347
评论:2
我正在尝试在我的拨号计划中添加一个挂机处理程序,以捕获拨打多个分机的未接来电。但不幸的是,我的挂机处理程序根本没有执行。 以下是我的extensions.lua
CONSOLE = "Console/dsp" -- 演示用控制台界面
IAXINFO = "guest" -- IAXtel用户名/密码
TRUNK = "SIP"
GSMTRUNK = "Dongle/dongle0/"
PRITRUNK = "DAHDI/g0/"
TRUNKMSD = 1
local inspect = require ('inspect')
--从这里开始我们的逻辑是Rajesh
function dialtomobind(number)
app.Dial(GSMTRUNK..number, 50,'egb(add-hangup-handler^'..number..'^1)')
local dialstatus = channel['DIALSTATUS']:get()
app.NoOp('DIAL STATUS:'..dialstatus)
app.Hangup(16)
end
function add_hangup_handler(context, extension)
channel['hangup_handler_push']='hangup-handlers,s,1'
app.NoOp('pre-dial handler, Adding Hangup Handler'..channel['hangup_handler_push']:get())
app.Return()
end
function h_handler(context, extension)
app.NoOp('After Hangup:'..extension)
--app.DumpChan(3)
end
function directdialing(c,e)
app.Answer(5)
app.Playback('tt-monkeys')
dialtomobind(string.sub(e, 4))
app.Hangup(16)
end
function hangup_handler_1(c,e)
--channel['hangup_handler_push']
app.NoOp('Hangup Handler 1执行')
app.Return()
end
extensions = {
['from-internal-sip']={
['h']=h_handler;
['_500XXXXXXXXXX']=directdialing;
};
['dongle_incoming']={
['_.']=gsm_dongle_handler;
};
['add-hangup-handler']={
['_.']=add_hangup_handler;
};
['hangup-handlers']={
['_.']=hangup_handler_1;
};
}
ASTERISK CLI OUT PUT:
-- 正在执行[5008884882772@from-internal-sip:1] Answer("SIP/8884882772-00000047", "5")
> 0x7f14c80072a0 -- 实习已通过 - 将RTP源地址设置为192.168.2.30:54032
[Aug 29 18:24:17] NOTICE[26470][C-000000c5]: res_rtp_asterisk.c:4478 ast_rtp_read: 从'192.168.2.30:54032'接收到未知的RTP编解码器95
-- 正在执行[5008884882772@from-internal-sip:1] Playback("SIP/8884882772-00000047", "tt-monkeys")
-- <SIP/8884882772-00000047> 正在播放'tt-monkeys.gsm'(语言'en')
-- 正在执行[5008884882772@from-internal-sip:1] Dial("SIP/8884882772-00000047", "Dongle/dongle0/8884882772,50,egb(add-hangup-handler^8884882772^1)")
-- Dongle/dongle0-010000000e Internal Gosub(add-hangup-handler,8884882772,1) start
-- 正在执行[8884882772@add-hangup-handler:1] NoOp("Dongle/dongle0-010000000e", "pre-dial handler, Adding Hangup Handlerhangup-handlers,s,1")
-- 正在执行[8884882772@add-hangup-handler:1] Return("Dongle/dongle0-010000000e", "")
== 从(dongle_incoming, 5008884882772, 1)退出非零
-- Dongle/dongle0-010000000e Internal Gosub(add-hangup-handler,8884882772,1) complete GOSUB_RETVAL=
-- 正在被叫Dongle/dongle0/8884882772
-- Dongle/dongle0-010000000e正在进行中,将其传递给SIP/8884882772-00000047
== 从(from-internal-sip, 5008884882772, 1)退出非零
-- 正在执行[h@from-internal-sip:1] NoOp("SIP/8884882772-00000047", "After Hangup:h")
点赞
用户1555772
hangup_handler_push并不是一个通道变量,因此不能使用以下方法访问。channel['hangup_handler_push']='hangup-handlers,s,1'或者
channel['hangup_handler_push']='hangup-handlers,s,1'要设置挂断处理程序,必须使用拨号计划函数CHANNEL(https://wiki.asterisk.org/wiki/display/AST/Hangup+Handlers). 因此,以下方法将起作用。
channel.CHANNEL('hangup_handler_push'):set('hangup-handlers,s,1')由于Asterisk Set应用程序可用于设置通道变量并调用Asterisk函数。 因此,以下代码也可以工作。
app.Set('CHANNEL(hangup_handler)=hangup-handlers,s,1');
参考: Lua中的拨号计划函数 https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=16548029
2016-09-06 06:55:21
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Hangup handler是拨号计划处理程序。如果你想要使用它,在挂机时在提交的上下文/分机处启动其他 lua 脚本。
Extension hangup-handlers,s,1必须有效且存在。你必须使用
app.Set('CHANNEL(hangup_handler)=hangup-handlers,s,1');因为它不是变量,而是函数。