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实现相关推荐

  1. FreeSwitch 的初始化及其模块加载过程

    FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...

  2. FreeSWITCH快速录音

    一.背景 测试人员反映FreeSWITCH录音不及时,需要大约5秒的时间才能捕获到RTP流. 二.原因及解决 查了下资料,FreeSWITCH默认的录音参数配置是开启缓冲的, 即RTP流大小到达655 ...

  3. FreeSWITCH IVR中lua调用并执行nodejs代码

    一.功能需求: 通过FreeSWITCH的IVR按键调用相应的脚本文件:nodejs提供很多的模组,可以方便的与其它系统或者进行任何形式的通讯,我的应用是通过nodejs发送http post请求: ...

  4. FreeSWITCH配置文件详解

    为什么80%的码农都做不了架构师?>>>    配置文件默认的目录是 /usr/local/freeswitch/conf 一.freeswitch.xml freeswitch.x ...

  5. FreeSWITCH在呼叫失败的情况下如何播放语音提示

    看到好多网友问到这个问题.一般我们在打电话时会听到"您拨的电话正在通话中,请稍后再拨....",或"电话无应答..."之类的提示,我们在 freeswitch ...

  6. [转载]freeSwitch基本操作(转载)

    什么是 FreeSWITCH ? FreeSWITCH 是一个开源的电话交换平台,它具有很强的可伸缩性--从一个简单的软电话客户端到运营商级的软交换设备几乎无所不能.能原生地运行于Windows. M ...

  7. FreeSwitch自带的电话会议

    FreeSwitch 默认带有电话会议的例子功能,是通过 conference 拨码计划实现的 打开\conf\dialplan\default.xml ,在里面有一段代码 <extension ...

  8. FreeSWITCH异常原因总结

    最经在玩FreeSWITCH的时候,遇到很多的问题,特此总结一下,希望以后不要犯类似的错误了: 1.Client端无法注册,但是FS运行正常? 解决办法:查看防火墙是否关闭./etc/init.d/i ...

  9. freeswitch 按键采集_《FreeSWITCH 1.2》:支持页面呼叫控制

    相对比较新的一个模块mod_httapi 可以支持用户更加动态控制IVR和其他的应用程序.配合这个模块,通过用户输入的不同可以生成自定义的IVR.FreeSWITCH的mod_httapi采用了一个简 ...

最新文章

  1. Unity 创建2D平台游戏开发学习教程
  2. 【转】iOS开发学习计划
  3. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
  4. auto_ptr使用介绍
  5. Leecode题解汇总(附题型归类)
  6. 第5章 初识JQuery
  7. Python的from import和import的区别
  8. 服务器系统盘安装在sdb,从U盘自动安装centos5.3到服务器
  9. Springboot缓存实战笔记之概念篇
  10. Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
  11. pl/mysql安装_MySQL安装
  12. 48. PHP 页面静态化(1)
  13. Atitit.编译原理与概论
  14. 蓝桥杯 C语言 试题 历届试题 格子刷油漆
  15. ASP.Net Ajax框架 Timer控件 计时器
  16. SPSS 数据的统计分析
  17. html弹窗确认取消公告代码,javascript实现确定和取消提示框效果
  18. 深度linux15.4安装教程,国产操作系统深度Deepin15.5安装过程体验!
  19. H264视频传输、编解码----H264数据结构
  20. 笔记本安装双系统教程

热门文章

  1. JobManager 内存简介
  2. 管理是科学还是艺术呢?-----行动力
  3. do还是doing imagine加to_请问,是“imagine sb. to do sth. ”还是“imagine sb. doing sth.”?...
  4. cxf 实名认证---全国公民身份信息系统
  5. php mine类型大全
  6. linux下查看mysql线程_linux-如何查看线程在哪个CPU内核中运行?
  7. 合并/拆分 Excel?Python、VBA轻松自动化
  8. 我是一位40岁的“老程序员”,我有一些想法
  9. linux发广告软件下载,ADPower广告管理系统(Linux手动安装)
  10. hexo butterfly主题添加备案信息