随笔 - 272  文章 - 0  评论 - 283  阅读 - 142万

用dtmf实现asterisk自动拨打分机

背景

系统结构图

现存电话系统中用1026和1027分机,在1026和1027下面各有一个asterisk实现的电话系统。 A : 1027系统下的1011分机 B : 1026系统下的1012分机 现在通过A呼叫B,由于1026系统中实现了语言菜单,首先可以通过91026呼入1026系统(外线加拨9),然后根据提示音输入1012进行呼叫。 现存交换机不支持号码直接拨打(暂时没找到解决方案),即: 从A直接拨打910261012,不能完成对B的呼叫。

原理

双音多频 DTMF(Dual Tone Multi Frequency) 双音多频信号(DTMF),电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。 双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。 有效字符集为: "0123456789*#abcdABCD" 字符w可以进行等待,一个w代表0.5秒的等待时间,如果需要更长时间则需要多个w的组合来实现,比如: 123456wwww789

配置extensions.conf实现

[macro-dtmf]
exten => s,1,Wait(8)
exten => s,n,SendDTMF(${ARG1})

[DLPN_testOut2]
exten => _9XXXXXXXX,1,Dial(DAHDI/g1/${EXTEN:1},30,M(dtmf,${EXTEN:5}))

[DLPN_DialPlan1]
;include = DLPN_testOut  ;define in extension.lua
include = DLPN_testOut2

配置extension.lua实现(lua实现)

extensions = {
        DLPN_testOut = {
                ["_9XXXXXXXX"] = function(context,extension)
                        --app.dial("DAHDI/g1/" .."1026", "10","M(dtmf)tr")
                        num1 = string.sub(extension,2,5)
                        num2 = string.sub(extension,6)
                        app.dial("DAHDI/g1/" ..num1, "30","D(wwwwwwwwwwwwwww"..num2..")")
                end;
        };
}

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2012/20121218_用dtmf实现asterisk自动拨打分机.md

欢迎补充

posted on   Mike_Zhang  阅读(2405)  评论(2编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2012-01-07 线程休眠代码(C++)
2012-01-07 VC6编译pjproject-1.12并生成python的pjsua
< 2013年1月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示