freeSwitch DISA实现
D.I.S.A. (Direct Inward System Access),是提供一种呼入平台转呼出的特性。注意这类特性的安全。摘录来自wiki的一个lua实例。
dialplan:
<extension name="disa"><condition field="destination_number" expression="^disa$"><action application="lua" data="disa.lua"/></condition>
</extension>
disa.lua
api = freeswitch.API();
domain = freeswitch.getGlobalVariable("domain_name");
user_id = "";
creds_tries = 0;
creds_tries_limit = 3;
authorized = false;
invalid_entry_sound = "ivr/ivr-that_was_an_invalid_entry.wav";
no_permissions_sound = "ivr/ivr-not_have_permission.wav";
dialtone = "tone_stream://%(10000,0,350,440)";
end_call_sound = "tone_stream://%L=3;(100,100,350,440)";session:answer();if (session:ready()) then-- Line is live, start talkingsession:flushDigits();session:execute("playback", "silence_stream://1500");session:execute("playback", "ivr/ivr-hello.wav");-- Try authenticationwhile (creds_tries_limit >= creds_tries) do-- Prompt for user iduser_id = session:playAndGetDigits(1, 10, creds_tries_limit, 3000, "#", "ivr/ivr-please_enter_extension_followed_by_pound.wav", invalid_entry_sound, "\\d+", "", 3000);if (user_id == "") then-- Exceeded triescreds_tries = creds_tries_limit;elseif (api:executeString("user_exists id ".. user_id .. " " .. domain)) then-- User id exists, prompt for pinpin = session:playAndGetDigits(1, 64, 3, 3000, "#", "ivr/ivr-please_enter_pin_followed_by_pound.wav", invalid_entry_sound, "\\d+", "", 3000);pin_valid = "";freeswitch.consoleLog("info", "PIN valid: " .. pin_valid);if (pin == "") then-- Exceeded triescreds_tries = creds_tries_limit;elsepin_valid = api:executeString("vm_fsdb_auth_login default " .. domain .. " " .. user_id .. " " .. pin);freeswitch.consoleLog("info", "PIN valid: " .. pin_valid);if (pin_valid == "-OK") then-- DISA Authenticated-- Make sure user is authorized for DISAtoll_allow = api:executeString("user_data " .. user_id .. "@" .. domain .. " var toll_allow");if(string.match(toll_allow, "disa")) then-- Authorized for serviceauthorized = true;break;else-- Not authorized for servicesession:execute("playback", no_permissions_sound);break;endelse-- Bad pinsession:execute("playback", invalid_entry_sound);creds_tries = creds_tries + 1;endendelse-- Bad user idsession:execute("playback", invalid_entry_sound);creds_tries = creds_tries + 1;endendif (authorized) then-- Authorized for service, play instructions and give dialtonesession:execute("playback", "ivr/ivr-please_enter_the_phone_number.wav");session:execute("playback", "ivr/ivr-followed_by_pound.wav");digits = session:playAndGetDigits(2, 15, 1, 15000, "#", dialtone, invalid_entry_sound, "\\d+", "", "3000");if (digits == "") thensession:execute("playback", "voicemail/vm-goodbye.wav");else-- Set user using set_user dialplan application, then transfer the callsession:execute("set_user", user_id .. "@" .. domain);session:execute("transfer", digits .. " XML default");endelsesession:execute("playback", "voicemail/vm-goodbye.wav");endend
freeSwitch DISA实现相关推荐
- FreeSwitch 的初始化及其模块加载过程
FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...
- FreeSWITCH快速录音
一.背景 测试人员反映FreeSWITCH录音不及时,需要大约5秒的时间才能捕获到RTP流. 二.原因及解决 查了下资料,FreeSWITCH默认的录音参数配置是开启缓冲的, 即RTP流大小到达655 ...
- FreeSWITCH IVR中lua调用并执行nodejs代码
一.功能需求: 通过FreeSWITCH的IVR按键调用相应的脚本文件:nodejs提供很多的模组,可以方便的与其它系统或者进行任何形式的通讯,我的应用是通过nodejs发送http post请求: ...
- FreeSWITCH配置文件详解
为什么80%的码农都做不了架构师?>>> 配置文件默认的目录是 /usr/local/freeswitch/conf 一.freeswitch.xml freeswitch.x ...
- FreeSWITCH在呼叫失败的情况下如何播放语音提示
看到好多网友问到这个问题.一般我们在打电话时会听到"您拨的电话正在通话中,请稍后再拨....",或"电话无应答..."之类的提示,我们在 freeswitch ...
- [转载]freeSwitch基本操作(转载)
什么是 FreeSWITCH ? FreeSWITCH 是一个开源的电话交换平台,它具有很强的可伸缩性--从一个简单的软电话客户端到运营商级的软交换设备几乎无所不能.能原生地运行于Windows. M ...
- FreeSwitch自带的电话会议
FreeSwitch 默认带有电话会议的例子功能,是通过 conference 拨码计划实现的 打开\conf\dialplan\default.xml ,在里面有一段代码 <extension ...
- FreeSWITCH异常原因总结
最经在玩FreeSWITCH的时候,遇到很多的问题,特此总结一下,希望以后不要犯类似的错误了: 1.Client端无法注册,但是FS运行正常? 解决办法:查看防火墙是否关闭./etc/init.d/i ...
- freeswitch 按键采集_《FreeSWITCH 1.2》:支持页面呼叫控制
相对比较新的一个模块mod_httapi 可以支持用户更加动态控制IVR和其他的应用程序.配合这个模块,通过用户输入的不同可以生成自定义的IVR.FreeSWITCH的mod_httapi采用了一个简 ...
最新文章
- Unity 创建2D平台游戏开发学习教程
- 【转】iOS开发学习计划
- cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
- auto_ptr使用介绍
- Leecode题解汇总(附题型归类)
- 第5章 初识JQuery
- Python的from import和import的区别
- 服务器系统盘安装在sdb,从U盘自动安装centos5.3到服务器
- Springboot缓存实战笔记之概念篇
- Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
- pl/mysql安装_MySQL安装
- 48. PHP 页面静态化(1)
- Atitit.编译原理与概论
- 蓝桥杯 C语言 试题 历届试题 格子刷油漆
- ASP.Net Ajax框架 Timer控件 计时器
- SPSS 数据的统计分析
- html弹窗确认取消公告代码,javascript实现确定和取消提示框效果
- 深度linux15.4安装教程,国产操作系统深度Deepin15.5安装过程体验!
- H264视频传输、编解码----H264数据结构
- 笔记本安装双系统教程
热门文章
- JobManager 内存简介
- 管理是科学还是艺术呢?-----行动力
- do还是doing imagine加to_请问,是“imagine sb. to do sth. ”还是“imagine sb. doing sth.”?...
- cxf 实名认证---全国公民身份信息系统
- php mine类型大全
- linux下查看mysql线程_linux-如何查看线程在哪个CPU内核中运行?
- 合并/拆分 Excel?Python、VBA轻松自动化
- 我是一位40岁的“老程序员”,我有一些想法
- linux发广告软件下载,ADPower广告管理系统(Linux手动安装)
- hexo butterfly主题添加备案信息