一、背景介绍:

  虽然使用Mod_fifo和mod_callcenter可以做呼叫中心的应用,但在实现应用中,这两个模块很难客制化需求,再此我用Lua实现了5路客服(1000-1004),一个呼叫中心号码:9958 的ADC实施方案,谨在此记录。

二、流程图:

三、具体设定:

  1 .  /usr/local/freeswitch/conf/autoload_confilgs/modules.conf.xml 中加在 mod_lua模块,默认是加载的;

  2.  在/usr/local/freeswitch/conf/var.xml 中添加5个全局变量,标识客服号码通话状态,内容如下:

           <!-- yjCallCenter Sets: 0 allow the call, 1 busy -->

            <X-PRE-PROCESS cmd="set" data="yj1000=0"/>

            <X-PRE-PROCESS cmd="set" data="yj1001=0"/>

           <X-PRE-PROCESS cmd="set" data="yj1002=0"/>

           <X-PRE-PROCESS cmd="set" data="yj1003=0"/>

          <X-PRE-PROCESS cmd="set" data="yj1004=0"/>

  3.  在/usr/local/freeswitch/conf/dialplan/default 目录下添加 9958_callcenter.xml ,内容如下:

     <extension name="yj_callcenter">

         <condition field="destination_number" expression="^(9958)$">

           <action application="lua" data="yjcall.lua"/>

         </condition>

      </extension>

  4.  在/usr/local/freeswitch/scripts 目录下添加yjcall.lua,内容如下:

    print("\n*******logo_fox's CallCenter******\n")

    api=freeswitch.API();

    local yj1000= freeswitch.getGlobalVariable("yj1000");

    local yj1001= freeswitch.getGlobalVariable("yj1001");

      local yj1002= freeswitch.getGlobalVariable("yj1002");

    local yj1003= freeswitch.getGlobalVariable("yj1003");

    local yj1004= freeswitch.getGlobalVariable("yj1004");

    function yjCheck(command,lineNum,info)

       local yjdata=api:executeString(command);

        local i1,j1=string.find(yjdata,"100"..lineNum);

        if(info=="LineStatusCheck") then

           if(i1~=nil  and  i1>0) then

              api:executeString("global_setvar yj100"..lineNum.."=1");

        else

        api:executeString("global_setvar yj100"..lineNum.."=0");

         end

      end

        if(info=="RegistionCheck") then

             if(i1~=nil  and  i1>0) then

              return 1;

          else

               return 0;

        end

     end

    end

    local L1000=yjCheck("sofia status profile internal reg",0,"RegistionCheck");

    local L1001=yjCheck("sofia status profile internal reg",1,"RegistionCheck");

    local L1002=yjCheck("sofia status profile internal reg",2,"RegistionCheck");

    local L1003=yjCheck("sofia status profile internal reg",3,"RegistionCheck");

    local L1004=yjCheck("sofia status profile internal reg",4,"RegistionCheck");

    for  i=0,4,1 do

     yjCheck("show calls",i,"LineStatusCheck");

    end

    yj1000= freeswitch.getGlobalVariable("yj1000");

    yj1001= freeswitch.getGlobalVariable("yj1001");

    yj1002= freeswitch.getGlobalVariable("yj1002");

    yj1003= freeswitch.getGlobalVariable("yj1003");

    yj1004= freeswitch.getGlobalVariable("yj1004");

    if(yj1000=="0" and L1000==1) then

    print("------Customer 1000 is at your service------");

     api:executeString("global_setvar yj1000=1");

      session:transfer("1000","xml","default");

         return;

    end

    if(yj1001=="0" and L1001==1) then

       print("------Customer 1001 is at your service------");

      api:executeString("global_setvar yj1001=1");

     session:transfer("1001","xml","default");

      return;

    end

    if(yj1002=="0" and L1002==1) then

     print("------Customer 1002 is at your service------");

      api:executeString("global_setvar yj1002=1");

      session:transfer("1002","xml","default");

      return;

    end

    if(yj1003=="0" and L1003==1) then

     print("------Customer 1003 is at your service------");

      api:executeString("global_setvar yj1003=1");

       session:transfer("1003","xml","default");

      return;

    end

    if(yj1004=="0" and L1004==1) then

    print("------Customer 1004 is at your service------");

     api:executeString("global_setvar yj1004=1");

       session:transfer("1004","xml","default");

      return;

    end

    print("---------No available line, please wait dial!!----------");

    session:hangup();

  到此,ADC功能已经设定完毕,呼叫9958即可实现5路客服的服务。

ADC自动转接功能Lua实现的更多相关文章

  1. 基于JQuery实现的文本框自动填充功能

    1. 实现的方法 /* * js实现的文本框的自动完成功能 */ function doAutoComplete(textid,dataid,url){ $("#" + texti ...

  2. redis技巧--自动完成功能实现

    自动完成功能一般都伴随搜索框出现,就是用户在输入时帮助其自动补全. 比如对成语进行补全,现有如下成语:一心一意,一心二用,一帆风顺. 两种实现方式: 实现方式一: 为每个成语的每个前缀都使用一个集合类 ...

  3. eclipse自动提示功能没了的解决办法(转载)

    eclipse自动提示功能没了的解决办法 标签: eclipse联想 2012-08-09 14:32 24687人阅读 评论(7) 收藏 举报  分类: Android(38)  版权声明:本文为博 ...

  4. xcode6 beta 中智能提示(自动完成)功能有时不显示的问题

    xcode6 beta 中智能提示(自动完成)功能有时不显示的问题      周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...

  5. 修改eclipse的自动完成功能

    修改eclipse的自动完成功能   周银辉 用eclipse时还是比较习惯Visual Studio那样的敲一个字母就弹出自动完成框,而不是总要等到敲.号,其实可以设置的: 在preferences ...

  6. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  7. 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题

    大部分PHP框架中,为了防止一个类被重复实例化,往往采用“单例模式”实例化类.我们的项目框架是这样做的: 先写好一个基类 /framework/Base.class.php,内容如下: <?ph ...

  8. 在MyEclipse显示struts2源码和doc文档及自动完成功能

    分类: struts2 2010-01-07 16:34 1498人阅读 评论(1) 收藏 举报 myeclipsestruts文档xmlfileurl 在MyEclipse显示struts2源码和d ...

  9. Eclipse配置PHP及自动提示功能

    Eclipse是一个开发工具,具有强大的插件功能,虽然用于Java理所当然,但为PHP所用,也为尝不可.虽然我一直用的是notepad,但发现开发工具也可以省去一些不必要的记忆. 言归正传,下面就来实 ...

随机推荐

  1. TRIE 字典树 前缀紧急集合!

    TRIE: 在计算机科学中,Trie,又称前缀树或字典树,是一种有序树状的数据结构,用于保存关联数组,其中的键通常是字符串.——百度百科 自我理解: trie树,是一种处理字符串前缀的数据结构,通常会 ...

  2. max,min,Zip函数(十一)

    zip函数,拉链,传两个有序的参数,将他们一一对应为元祖形式 max,min比较默认比较一个元素,处理的是可迭代对象,相当于for循环取出每个元素进行比较,注意:不同类型之间不可比较 #!/usr/b ...

  3. Mysq中的流程控制语句的用法

    这篇博客主要是总结一下Mysq中的流程控制语句的用法,主要是:CASE,IF,IFNULL,NULLIF 1.case CASE value WHEN [compare-value] THEN res ...

  4. 2018.10.2浪在ACM 集训队第三次测试赛

    2018.10.26 浪在ACM 集训队第三次测试赛 今天是暴力场吗???????可怕 题目一览表 来源 考察知识点 完成时间 A 1275 珠心算测试 NOIP 普及组 2014 暴力??? 201 ...

  5. Shell中while循环的done 后接一个重定向<

    读文件的方法: 第一步: 将文件的内容通过管道(|)或重定向(<)的方式传给while 第二步: while中调用read将文件内容一行一行的读出来,并付值给read后跟随的变量.变量中就保存了 ...

  6. PHP依赖倒置和控制反转

    判断代码的好坏,我们有自己的标准:高内聚,低耦合.为了解决这一问题,php中有许多优秀的设计模式,比如工厂模式,单例模式. 而在代码中体现出来的设计模式,就如依赖注入和控制反转. 那什么是依赖注入? ...

  7. go struct结构体

    struct结构体 用来自定义复杂数据结构 struct里面可以包含多个字段(属性),字段可以是任意类型 struct类型可以定义方法,注意和函数的区分 struct类型是值类型 struct类型可以 ...

  8. selenium_采集药品数据

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. Http请求中Content-Type讲解以及在Spring MVC中的应用【转】

    完全引用自: http://blog.csdn.net/blueheart20/article/details/45174399#t1   此文讲得很清晰,赞! 引言: 在Http请求中,我们每天都在 ...

  10. 关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结

    相关资料 IO基本概念 Linux环境 同步异步阻塞非阻塞 同步与异步 阻塞与非阻塞 IO模型Reference Link 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动异步IO模型 异步IO模 ...