asterisk 扩展应用(3)——IVR 实现

1      IVR 实现1.1       简单IVR配置

1:进入System Recordings,上传wav语音文件。语音文件必须是音频采样为16位。音频采样级别8kHz。使用PCM编码。

2:进入freepbx IVR模块,建立菜单

3:对入特殊设置可以加入customer-app。自定义的app。这样可以满足需求。

1.2       一个IVR实例1.2.1   IVR实例描述

拨打进入号61302350进入XX公司,首先播放欢迎进入公司录音。然后提示:

1:按1进入销售座席队列

2:按2进入技术支持座席队列

3:按任意分机号直接拨打

4:获得公司通讯录按#

1.2.2  实例脚本实现

1:配置拨打呼叫号进行IVR。

exten => 61302350,1,Goto(ivr-2,s,1)

2:配置ivr-2 context

[ivr-2]

include => ivr-2-custom

include => ext-findmefollow

include => ext-local

include => app-directory

exten => #,1,dbDel(${BLKVM_OVERRIDE})

exten => #,n,Set(__NODEST=)

exten => #,n,Goto(app-directory,#,1)

exten => h,1,Hangup

exten => s,1,Set(LOOPCOUNT=0)

exten => s,n,Set(__DIR-CONTEXT=)

exten => s,n,Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT})

exten => s,n,Set(_IVR_CONTEXT=${CONTEXT})

exten => s,n,GotoIf($["${CDR(disposition)}" = "ANSWERED"]?begin)

exten => s,n,Answer

exten => s,n,Wait(1)

exten => s,n(begin),Set(TIMEOUT(digit)=3)

exten => s,n,Set(TIMEOUT(response)=10)

exten => s,n,Background(custom/qqtech2)

exten => s,n,WaitExten(,)

exten => hang,1,Playback(vm-goodbye)

exten => hang,n,Hangup

exten => 1,1,dbDel(${BLKVM_OVERRIDE})

exten => 1,n,Set(__NODEST=)

exten => 1,n,agi(agi://218.16.124.234/queue.agi?extern=7707499&timeout=10&retry=3&sayDig=1)

exten => 2,1,dbDel(${BLKVM_OVERRIDE})

exten => 2,n,Set(__NODEST=)

exten => 1,n,agi(agi://218.16.124.234/queue.agi?extern=7707499&timeout=10&retry=3&sayDig=1)

exten => 3,1,dbDel(${BLKVM_OVERRIDE})

exten => 3,n,Set(__NODEST=)

exten => 4,n,GotoIf($["x${IVR_CONTEXT_${CONTEXT}}" = "x"]?from-did-direct,200,1:${IVR_CONTEXT_${CONTEXT}},return,1)

exten => i,1,Playback(invalid)

exten => i,n,Goto(loop,1)

exten => t,1,Goto(loop,1)

exten => loop,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])

exten => loop,n,GotoIf($[${LOOPCOUNT} > 2]?hang,1)

exten => loop,n,Goto(ivr-2,s,begin)

exten => return,1,Set(_IVR_CONTEXT=${CONTEXT})

exten => return,n,Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT_${CONTEXT}})

exten => return,n,Goto(ivr-2,s,begin)

exten => fax,1,Goto(ext-fax,in_fax,1)

      1.3       IVR同第三方APP联合编程1.3.1    IVR配置FastAgi

如果在IVR中需要第三方App支持,这是最常见的实现方法。如有一个实例,

1:请输入用户名并以#号结束(用户输入)

2:请输入密码并以#号结束(用户输入)

3:核对用户名和密码

4:返回结果

实现原理:当输入用户名和密码后,把用户名和密码做为一个临时变量保存。用户名和密码很明显同asterisk无关,需要交给第三方APP处理。设置我们的FastAgi服务器为127.0.0.1。发送出类似的命令:

agi(agi://127.0.0.1/checkpasswd.agi?username=${username}&password=${password}

当AGI接收到此请求时,处理。并把外理结果存储到变量当中,返回。伪代码如下:

String username = agirequest.getParamer(“username”);

String password= agirequest.getParamer(“password”);

Int result =checkUser(username,password);

agiChannle.SerVar(“CHECKRESULT”,result);

if(result==-1)//用户不存在

{

agiChannle.StreamFile(“user is not exist”);

}else if(result==2){//密码不正确

agiChannle.StreamFile(“password is not right”);

}

return;

脚本通过 ${ CHECKRESULT }来查看返回值,进行相应的处理

1.3.2    在通话中触发IVR

有时需要在第三方APP中触发IVR。如在通话过程中需要对方输入用户名和密码。实例如下:

1:在通话过程中,座席按1,向对方播放语音提示对方输入用户名和密码

2:进入 IVR配置FastAgi 中的实例

3:如果核对正确,回来继续通话

实现原理

在通话过程中,要响应对方的输入,需要调用waitExtern命令。

实现伪代码:

int result = agiChannel.Dial();//拨号

if(result==-1)

{

       int result = agiChannel.sendCmd(ivr-4,1)

}

进入ivr-4,当前通话不断,ivr-4中等待用户输入,ivr-4中伪脚本.

[ivr-4]

include => ivr-4-custom

include => ext-findmefollow

include => ext-local

include => app-directory

exten => h,1,Hangup

exten => s,1,Set(LOOPCOUNT=0)

exten => s,n,Set(__DIR-CONTEXT=default)

exten => s,n,Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT})

exten => s,n,Set(_IVR_CONTEXT=${CONTEXT})

exten => s,n,GotoIf($["${CDR(disposition)}" = "ANSWERED"]?begin)

exten => s,n(begin),Set(TIMEOUT(digit)=3)

exten => s,n,Set(TIMEOUT(response)=10)

exten => s,n,WaitExten(,)

exten => hang,1,Playback(vm-goodbye)

exten => hang,n,Hangup

exten => 1,1,dbDel(${BLKVM_OVERRIDE})

exten => 1,n,Set(__NODEST=)

exten => 1,n,Goto(from-did-direct,3001,1)

exten => 2,1,dbDel(${BLKVM_OVERRIDE})

exten => 2,n,Set(__NODEST=)

exten => 2,n,Goto(from-did-direct,3009,1)

exten => i,1,Playback(invalid)

exten => i,n,Goto(loop,1)

exten => t,1,Goto(loop,1)

exten => loop,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])

exten => loop,n,GotoIf($[${LOOPCOUNT} > 2]?hang,1)

exten => loop,n,Goto(ivr-3,s,begin)

exten => return,1,Set(_IVR_CONTEXT=${CONTEXT})

exten => return,n,Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT_${CONTEXT}})

exten => return,n,Goto(ivr-3,s,begin)

exten => fax,1,Goto(ext-fax,in_fax,1)

后继步骤见IVR配置FastAgi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Andoid 采用ListView三种显示数据列表

Android系统中列表形式的显示方式应该是我们最熟悉不过的界面了,例如通讯录、通话记录、信息列表等等,例如下面的形式: 我们在开发项目需要用到这种形式显示信息时除了调用系统给我们提供的ListView控件以外我们还可以自定义该控件&#xff0…

url采集器_Linux「第三节」-centos7.5部署数据采集器Telegraf

Telegraf采集器采集数据后,会存储到influxdb数据库,然后grafana从influxdb读取数据,在grafana面板上展示,整体的流程就是这样。下面就演示下Telegraf、influxdb、grafana相互间的配置与衔接下载Telegrafwget https://dl.influxdat…

css宋体代码_html布局中统一设置文字字体样式

html组织中对立设置装备摆设笔墨字体名堂后,结构部份时候须要变幻从新设置装备摆设一种字体若何完成呢?贪图门径:结构时先一般会抗衡设置装备摆设整个网页字体,预防差距浏览器显露不同默认字体,而设置装备摆设字体css属…

Asterisk队列(Queue)振铃方式(ring strategy)

队列振铃方式有:ringall,roundrobin,leastrecent,fewestcalls,random,rrmemory。 ringall是呼叫所有可到达的分机直到有接听的。 roundrobin是轮流呼叫每一个可以达到的分机。 leastrecent是呼叫最近被这…

简述用UCenter整合第三方应用程序

UCenter除了对实现用户通行,各个应用通用信息的存储和处理之外,还有一个重要的功能就是开放的接口协议,其他第三方应用程序通过简单修改,即可很容易将程序纳入UCenter体系中来,和其他应用共享用户以及其他数据 &#x…

西门子主程序调用子程序_S7200Smart 子程序局部变量使用教程

全新的 S7-200 SMART 带来两种不同类型的 CPU 模块,标准型和经济型,全方位满足不同行业、不同客户、不同设备的各种需求。标准型作为可扩展 CPU 模块,可满足对 I/O 规模有较大需求,逻辑控制较为复杂的应用 ;而经济型 C…

电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路

伙伴们我们每天都在用电脑,电脑和手机已经离不开了,可以说手机和电脑就是我们的左膀右臂。我们用电脑的时候,如果电脑卡了或者反应慢了,我们都会想到吧任务管理器调出来看看,可以说调出任务管理器就像医生看病一样&…

Asterisk 1.4.42将成绝唱

随着Asterisk 1.4最后的bug维护日期已过,当Asterisk 1.4.41在4月26日发布之后,Digium随即宣布将择机发布Asterisk 1.4的最后一个版本——1.4.42。如果有什么bug需要报告的,有什么代码需要提交的,赶紧提交,这将是为Aste…

hdu4353 Finding Mine三角形内的点数

http://acm.hdu.edu.cn/showproblem.php?pid4353 题意&#xff1a; 求多边形面积和这个多边形内的金矿数的比值的最小值。 当xi<xj<xk时&#xff1a; 三角形内的点数|ik上方的点-(ij上方的点jk上方的点)| 1 #include <iostream>2 #include <cstdio>3 #inclu…

手机连接投影机的步骤_家用投影仪如何安装 家用投影仪安装方法【步骤详解】...

家用投影仪怎么安装 根据安装方式的不同&#xff0c;投影仪可以分为桌式正投、吊顶正投、桌式背投、吊顶背投几种。方便随时随地使用的便携式投影仪一般是桌式正投&#xff0c;这种投影方法受环境光影响较大 但如果装修时就设计成吊顶正投方式&#xff0c;不仅在性价比方面更加…

insmod 和modprobe的区别

insmod 与 modprobe 都是载入 kernel module&#xff0c;不过一般差别于 modprobe 能够处理 module 载入的相依问题。比方你要载入 a module&#xff0c;但是 a module 要求系统先载入 b module 时&#xff0c;直接用 insmod 挂入通常都会出现错误讯息&#xff0c;不过 modprob…

win7锁屏时间怎么设置_电脑锁屏时间怎么设置

以WIN10系统为例演示。1/3打开“控制面板”&#xff1b;点击“电源选项”2/3点击“更改计划设置”&#xff1b;设置锁屏时间3/3点击“保存修改”即可

Ajax原理

引用&#xff1a;http://www.cnblogs.com/xugang/archive/2007/10/16/925993.html 看了“坐断东南 笑煞之”的那篇 .net组件开发系列(二)之武林系列 太极拳 开发ajax控件 总有一种意犹味尽的感觉。没有想到 金色海洋&#xff08;jyk&#xff09;竟“晕了”&#xff0c;我感觉写…

cdh界面 hue 配置hbase_海量数据存储技术之HBase:使用HBase Shell操纵HBase

Apache HBase Shell是JRuby的IRB&#xff0c;并在此基础上加入了HBase特有的命令。JRuby是用Java实现的Ruby解释器。通过JRuby&#xff0c;你可以在JVM上直接运行Ruby程序&#xff0c;调用Java的类库。IRB即interactive ruby&#xff0c;交互式Ruby。运行HBase Shell&#xff1…

安卓 图像清晰度识别_智能车牌识别系统的常见故障和解决方法

车牌号是车辆的唯一身份标志&#xff0c;它的特殊性与重要性从而决定了车牌识别系统在智慧城市交通管理系统中成为不可或缺的重要组成部分。下面智能车牌识别系统厂家畅荧智能科技将详细为您介绍一些智能车牌识别系统常见的故障问题和对应的解决方法。智能车牌识别系统的常见故…

asterisk使用SIP相互对接

当用户数量上去,单凭一台asterisk是很能支持庞大的用户群体,所以要根据用户量来部署多台asterisk来应付实际情况的需求.但部署多台asterisk所带来的一个问题就是A服务器的用户如果Call B服务器的用户呢?其实asterisk的设计者早已帮我们解决问题,以下是通过SIP把两台asterisk对…

企业技术

缓存使用条件&#xff1a; 1.访问量大 2.数据不经常更新 缓存缺点&#xff1a;容易产生【脏数据】--- 即&#xff1a;当用户第一次访问页面&#xff0c;读取数据库&#xff0c;并将数据存入缓存后&#xff0c;在该缓存失效前&#xff0c;其他访问都是读取缓存中的数据&#xf…

post postman 传递数组对象_如何使用postman做接口测试

一&#xff0c;接口测试是什么什么是接口测试&#xff0c;不说广泛的概念&#xff0c;直接电脑打开浏览器&#xff0c;进入开发者工具(F12)随意进入一些网站可以看到下面左侧栏出现了一系列的数据&#xff1a;上面条数据都是一个单独的接口&#xff0c;点击单个接口&#xff0c…

形位公差符号大全_玩转CAD快捷键(大全),一篇文章就够了

CAD快捷键命令大全符号键&#xff08;CTRL开头&#xff09;CTRL1 PROPCLOSEOROPEN 对象特性管理器CTRL2或4 ADCENTER 设计中心CTRL3 CTOOLPALETTES 工具选项板CTRL8或QC QuickCalc 快速计算器控制键CTRLA AI_SELALL 全部选择CTRLC或CO/CP COPYCLIP或COpy 复制CTRLD或F6 COORDIN…

Ubuntu 13.10配置root登录

Ubuntu 13.10默认是不允许使用root登录的&#xff0c;要想使用root权限&#xff0c;就必须使用 sudo 命令来执行&#xff0c;很繁琐。 要解决这个问题&#xff0c;需要两个步骤&#xff1a; 1、设置root密码&#xff0c;开启root账号 ubuntu默认的root密码据说是每隔5min就…