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
分享到:
相关推荐
6. **VoIP应用开发**:使用Asterisk-Java,开发者可以构建各种基于VoIP的解决方案,例如企业电话系统、自动呼叫分配器(ACD)、交互式语音响应(IVR)系统等。 7. **多线程与并发**:由于Asterisk事件可能在任何...
1. **Asterisk架构**:Asterisk由多个组件组成,包括拨号计划(Dialplan)、通道驱动(Channel Drivers)、应用程序接口(Asterisk Application Interface,AAGI)以及模块化设计,使得它可以灵活地扩展和定制。...
Asterisk的使用不仅限于基础的电话交换功能,它还支持创建复杂的呼叫处理逻辑,如IVR(Interactive Voice Response)系统、会议桥、录音、自动话务员等。这些功能的实现往往依赖于声音资源,因此正确配置和管理声音...
这个库允许开发者通过Java代码来控制Asterisk,执行诸如创建IVR(Interactive Voice Response)、处理电话呼叫、管理电话簿等功能。 "asterisk-java-0.3.1-sources" 是这个项目的源代码版本,对于开发者来说,源...
6. **API接口**:Asterisk提供了AMI(Asterisk Manager Interface)和AGI(Asterisk Gateway Interface),允许开发人员通过编程来控制和扩展Asterisk的功能。 在安装Asterisk 1.8.32.3时,遵循以下步骤: 1. **...
通过上述介绍可以看出,AGI在Asterisk中扮演着极其重要的角色,它不仅增强了系统的灵活性,还极大地扩展了Asterisk的应用场景。无论是简单的电话应答还是复杂的IVR流程控制,AGI都能提供强大的支持。掌握了AGI的基础...
- **高级路由应用**:利用扩展功能实现更复杂的路由需求,如基于地理位置的路由。 **3. 监控与维护** - **性能监控工具**:利用内置工具或第三方监控系统对Asterisk的运行状态进行实时监控。 - **故障排除技巧**:...
- **高级API**:提供更丰富的编程接口,如Asterisk Gateway Interface (AGI) 和 AMI(Asterisk Manager Interface),便于开发人员集成自定义应用。 - **媒体处理**:增强了媒体处理能力,包括支持更多的编解码和...
使用这个Java库,开发者可以轻松地构建自己的Asterisk管理应用,例如监控中心、IVR系统、呼叫中心报告工具等。需要注意的是,由于AM接口是明文传输,因此在生产环境中应确保连接的安全性,例如使用SSL/TLS加密或者在...
Asterisk 以其灵活性和可扩展性而闻名,支持多种协议,如 SIP、IAX2 和 PJSIP,可以与各种硬件和软件电话系统集成。 Flite,全称“Festival Lite”,是 Carnegie Mellon University 开发的一个小型、快速、轻量级的...
6. 扩展性:Asterisk可以与其他系统集成,如CRM、ERP等,实现通信与业务流程的无缝对接。 7. 丰富的社区支持:由于是开源项目,Asterisk拥有庞大的开发者社区,提供了大量的文档、教程和插件,帮助用户解决问题和...
Asterisk的核心优势在于其灵活性和可扩展性,它支持多种协议如SIP、IAX2等,可以运行在各种操作系统上,包括Linux、FreeBSD等。 eSpeak,全称为"Espeak-ng",是一款轻量级的文本到语音(TTS)引擎,适用于各种...
Asterisk能够处理电话呼叫、会议、IVR(Interactive Voice Response)、自动话务员等功能,广泛应用于企业通信、虚拟呼叫中心以及家庭电话系统。 Asterisk GUI作为其图形化管理工具,具备以下关键特性: 1. **配置...
通过研究这些文件,我们可以学习到如何将理论知识应用到实际项目中,实现自动化部署Asterisk系统。 四、总结 Python在Asterisk安装脚本中的应用,既简化了安装过程,也提高了系统的可维护性。通过编写这样的脚本,...
Asterisk的核心设计理念是灵活性和可扩展性,这使得它在企业通信、小型办公室、家庭办公环境以及开发实验中都有广泛的应用。 ### Asterisk简介 Asterisk由Digium公司开发,最初由Mark Spencer在1999年创建,旨在为...
- **AGI(Asterisk Gateway Interface)**:允许使用任何语言编写脚本来扩展 Asterisk 的功能。 - **AMI(Asterisk Manager Interface)**:通过命令行或 HTTP 接口管理 Asterisk 系统。 - **Dialplan**:使用内置的...
在Asterisk环境中,语音识别主要通过Asterisk Gateway Interface (AGI)实现,这是一种用于扩展Asterisk功能的接口。在你提到的"asterisk-speech-recog-0.5"压缩包中,可能包含了实现这一功能的源代码和AGI脚本。 1....
Asterisk是一款功能强大的开源PBX(Private Branch Exchange)系统,主要用于构建语音通信应用。它支持多种协议,包括SIP(Session Initiation Protocol)、IAX2(Inter-Asterisk eXchange version 2)等,并能与...
- **功能强大**:除了基本的VoIP通话功能外,Asterisk还支持传真、语音邮件、电话会议、交互式语音应答(IVR)等高级应用。 - **灵活性**:Asterisk高度可定制,用户可以根据具体需求调整配置,实现个性化的通信解决...
Asterisk提供了丰富的API接口,允许开发者编写自定义应用程序,进一步扩展其功能。 5. **Asterisk的安全性** - **加密通信** 为了保护通信安全,Asterisk支持加密技术,如TLS(Transport Layer Security,传输...