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

asterisk 扩展应用(3)——IVR 实现相关推荐

  1. Asterisk权威指南/第二章 Asterisk架构

    Asterisk和其他传统的PBX完全不同,因为Asterisk的拨号计划以同样的方式处理所有的入局信道(incoming channels). 传统的PBX在逻辑上区分工作站信道(连接电话机)和电话 ...

  2. Asterisk介绍

    Asterisk是一个开源的软PBX,它由Digium公司开发并一直在不断的进展之中.Asterisk可以运行在Linux和其他Unix平台上,你可以选择或者也可以不选择链接到PSTN的硬件. Ast ...

  3. asterisk拨号规则

    一.前言 本文档以asterisk-1.4.32为基础写作而成,可能和其他版本有些区别.其中参考了一些别的书籍和文章.因为写的比较仓促,而且基本都是晚上写的,里面的内容逻辑性和语句没有仔细斟酌,就是想 ...

  4. asterisk拨号规则(包含匹配规则说明)转

    一.前言     本文档以asterisk-1.4.32为基础写作而成,可能和其他版本有些区别.其中参考了一些别的书籍和文章.因为写的比较仓促,而且基本都是晚上写的,里面的内容逻辑性和语句没有仔细斟酌 ...

  5. FreeSWITCH 与 Asterisk(译)

    Anthony Minssale/文 Seven/译 VoIP通信,与传统的电话技术相比,不仅仅在于绝对的资费优势,更重要的是很容易地通过开发相应的软件,使其与企业的业务逻辑紧密集成.Asterisk ...

  6. Asterisk PBX

    Asterisk PBX Asterisk [1]  是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案.Asterisk是一种功能非常齐全的应用程序,提供了许 ...

  7. 基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能

    说明: 本文档探讨基于Asterisk如何实现VoIP的一些基本功能,包括基本呼叫功能的方案选取.主叫号码透传.如何编写AsteriskAGI程序.Radius认证计费模块等. 本文档VoIP软终端使 ...

  8. 基于Asterisk的VoIP开发指南…

    原文地址:基于Asterisk的VoIP开发指南--(1)实现基本呼叫功能作者:晓晓 说明: 本文档探讨基于Asterisk如何实现VoIP的一些基本功能,包括基本呼叫功能的方案选取.主叫号码透传.如 ...

  9. asterisk源码目录结构

    版本:asterisk-1.8.7.1 下载地址:asterisk-1.8.7.1.tar.gz main函数所在文件:main/asterisk.c (3182行) 文件夹: addons :ast ...

最新文章

  1. WITH AS【原创】
  2. hdu 1115(多边形重心)
  3. ACL 2020 | 消除文本分类问题中歧视现象的研究
  4. Visual Studio 2017新版发布,极大提高开发效率丨附下载 1
  5. java伪协议_通过伪协议解决父页面与iframe页面通信的问题
  6. 南京高中计算机老师,正高级教师、江苏省高中信息技术特级教师——巫雪琴
  7. 181025词霸有道扇贝每日一句
  8. 如何修复cdn服务器异常,cdn服务器连接异常怎么解决
  9. [BUGKU] [PWN] PWN5
  10. 数组的filter方法,数组过滤方法
  11. MySQL性能问题以及查找和处理
  12. ggplot2 | R语言绘制世界地图choropleth
  13. 【入门AUTOSAR网络管理测试】RMS-NOS状态转换
  14. Github testerSunshine/12306 Linux系统部署
  15. EXT4文件系统学习(11)VFS之内存结构sb和inode
  16. html网站点击特效,HTML5 svg和CSS3炫酷鼠标点击按钮特效
  17. 虹科分享 | 如何解决CAN与以太网之间的信息有效传递与智能变送难题?
  18. PCI总线的工作原理?
  19. dnf时装预览怎么打开_dnf坐骑套礼包预览2018 dnf坐骑套礼包时装外观详情
  20. JBoss,Geronimo还是Tomcat? ——三种开源Java应用服务器的比较

热门文章

  1. numpy将所有数据变为0和1_Numpy库学习
  2. angular html清除元素,在Angular js中单击时删除HTML元素
  3. spring mvc 实现单文件 || 多文件上传
  4. linux 浏览器 links,linux下的命令行浏览器links
  5. Hive中COUNT的高级用法(条件过滤等)
  6. 对比Oracle和Mysql在锁机制上的类似和差异点
  7. 12、OpenCV Python 图像梯度
  8. Hibernate查询方式
  9. 什么是cname a记录
  10. 用js将form表单同时提交到两个不同页面的方法