ADC自动转接功能Lua实现
一、背景介绍:
虽然使用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实现的更多相关文章
- 基于JQuery实现的文本框自动填充功能
1. 实现的方法 /* * js实现的文本框的自动完成功能 */ function doAutoComplete(textid,dataid,url){ $("#" + texti ...
- redis技巧--自动完成功能实现
自动完成功能一般都伴随搜索框出现,就是用户在输入时帮助其自动补全. 比如对成语进行补全,现有如下成语:一心一意,一心二用,一帆风顺. 两种实现方式: 实现方式一: 为每个成语的每个前缀都使用一个集合类 ...
- eclipse自动提示功能没了的解决办法(转载)
eclipse自动提示功能没了的解决办法 标签: eclipse联想 2012-08-09 14:32 24687人阅读 评论(7) 收藏 举报 分类: Android(38) 版权声明:本文为博 ...
- xcode6 beta 中智能提示(自动完成)功能有时不显示的问题
xcode6 beta 中智能提示(自动完成)功能有时不显示的问题 周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...
- 修改eclipse的自动完成功能
修改eclipse的自动完成功能 周银辉 用eclipse时还是比较习惯Visual Studio那样的敲一个字母就弹出自动完成框,而不是总要等到敲.号,其实可以设置的: 在preferences ...
- 禁用datagridview中的自动排序功能
把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...
- 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
大部分PHP框架中,为了防止一个类被重复实例化,往往采用“单例模式”实例化类.我们的项目框架是这样做的: 先写好一个基类 /framework/Base.class.php,内容如下: <?ph ...
- 在MyEclipse显示struts2源码和doc文档及自动完成功能
分类: struts2 2010-01-07 16:34 1498人阅读 评论(1) 收藏 举报 myeclipsestruts文档xmlfileurl 在MyEclipse显示struts2源码和d ...
- Eclipse配置PHP及自动提示功能
Eclipse是一个开发工具,具有强大的插件功能,虽然用于Java理所当然,但为PHP所用,也为尝不可.虽然我一直用的是notepad,但发现开发工具也可以省去一些不必要的记忆. 言归正传,下面就来实 ...
随机推荐
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...
- 锋利的jQuery复制粘贴(一)
两者区别:$(document).ready();网页中多有dom结构绘制完毕后就执行, 可能dom元素关联的东西没用加载完.[若有多个弹框,均可以执行输出] window.onload 必须等待多有 ...
- GBDT原理详解
从提升树出发,——>回归提升树.二元分类.多元分类三个GBDT常见算法. 提升树 梯度提升树 回归提升树 二元分类 多元分类 面经 提升树 在说GBDT之前,先说说提升树(boosting tr ...
- springboot配置多环境
https://www.cnblogs.com/jason0529/p/6567373.html Spring的profiles机制,是应对多环境下面的一个解决方案,比较常见的是开发和测试环境的配 ...
- ansible-playbook组件解析及操作全解
转载于http://www.178linux.com/7001 一.ansible-playbook介绍: playbook是由一个或多个”play”组成的列表.play的主要功能在于将事先归为一组的 ...
- django中命令行调试程序
(1)进入到程序manage.py所在的目录下 (2)python manage.py shell 这样可在命令行中引入models.views.class等所有的包,然后进行命令行试运行.
- 5个强大的Java分布式缓存框架
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...
- HTML格式化标签
除了div.p.h1~h6.a.span这几个极常用的标签外,HTML还有一些不常见的标签(10个,5对:加粗.斜体.大小.上下标.特殊),默认效果如下: 当然,我们习惯用css编写效果来替代这些效果 ...
- Tomcat的配置文件详解
Tomcat的配置文件详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Tomcat的配置文件 Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中, ...
- javascript 5秒后关闭广告案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...