`
st780206
  • 浏览: 47905 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

asterisk扩展应用--IVR实现

阅读更多

http://baikgd.blog.163.com/blog/static/35402495200971454429174/

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-java-2.0.3jar包及示例.rar

    6. **VoIP应用开发**:使用Asterisk-Java,开发者可以构建各种基于VoIP的解决方案,例如企业电话系统、自动呼叫分配器(ACD)、交互式语音响应(IVR)系统等。 7. **多线程与并发**:由于Asterisk事件可能在任何...

    certified-asterisk-11.6-current.tar

    1. **Asterisk架构**:Asterisk由多个组件组成,包括拨号计划(Dialplan)、通道驱动(Channel Drivers)、应用程序接口(Asterisk Application Interface,AAGI)以及模块化设计,使得它可以灵活地扩展和定制。...

    asterisk-core-sounds-en-gsm-1.6

    Asterisk的使用不仅限于基础的电话交换功能,它还支持创建复杂的呼叫处理逻辑,如IVR(Interactive Voice Response)系统、会议桥、录音、自动话务员等。这些功能的实现往往依赖于声音资源,因此正确配置和管理声音...

    asterisk-java-0.3.1-sources

    这个库允许开发者通过Java代码来控制Asterisk,执行诸如创建IVR(Interactive Voice Response)、处理电话呼叫、管理电话簿等功能。 "asterisk-java-0.3.1-sources" 是这个项目的源代码版本,对于开发者来说,源...

    asterisk-1.8.32.3.tar.gz

    6. **API接口**:Asterisk提供了AMI(Asterisk Manager Interface)和AGI(Asterisk Gateway Interface),允许开发人员通过编程来控制和扩展Asterisk的功能。 在安装Asterisk 1.8.32.3时,遵循以下步骤: 1. **...

    asterisk AGI应用说明

    通过上述介绍可以看出,AGI在Asterisk中扮演着极其重要的角色,它不仅增强了系统的灵活性,还极大地扩展了Asterisk的应用场景。无论是简单的电话应答还是复杂的IVR流程控制,AGI都能提供强大的支持。掌握了AGI的基础...

    Asterisk 1.6 - Build feature-rich telephony systems with Asterisk Sep 2009

    - **高级路由应用**:利用扩展功能实现更复杂的路由需求,如基于地理位置的路由。 **3. 监控与维护** - **性能监控工具**:利用内置工具或第三方监控系统对Asterisk的运行状态进行实时监控。 - **故障排除技巧**:...

    asterisk-11

    - **高级API**:提供更丰富的编程接口,如Asterisk Gateway Interface (AGI) 和 AMI(Asterisk Manager Interface),便于开发人员集成自定义应用。 - **媒体处理**:增强了媒体处理能力,包括支持更多的编解码和...

    Asterisk AMI 接口代码

    使用这个Java库,开发者可以轻松地构建自己的Asterisk管理应用,例如监控中心、IVR系统、呼叫中心报告工具等。需要注意的是,由于AM接口是明文传输,因此在生产环境中应确保连接的安全性,例如使用SSL/TLS加密或者在...

    asterisk-flite-开源

    Asterisk 以其灵活性和可扩展性而闻名,支持多种协议,如 SIP、IAX2 和 PJSIP,可以与各种硬件和软件电话系统集成。 Flite,全称“Festival Lite”,是 Carnegie Mellon University 开发的一个小型、快速、轻量级的...

    Asterisk,电话未来之路2.0.rar

    6. 扩展性:Asterisk可以与其他系统集成,如CRM、ERP等,实现通信与业务流程的无缝对接。 7. 丰富的社区支持:由于是开源项目,Asterisk拥有庞大的开发者社区,提供了大量的文档、教程和插件,帮助用户解决问题和...

    asterisk-espeak-开源

    Asterisk的核心优势在于其灵活性和可扩展性,它支持多种协议如SIP、IAX2等,可以运行在各种操作系统上,包括Linux、FreeBSD等。 eSpeak,全称为"Espeak-ng",是一款轻量级的文本到语音(TTS)引擎,适用于各种...

    asterisk-gui

    Asterisk能够处理电话呼叫、会议、IVR(Interactive Voice Response)、自动话务员等功能,广泛应用于企业通信、虚拟呼叫中心以及家庭电话系统。 Asterisk GUI作为其图形化管理工具,具备以下关键特性: 1. **配置...

    asterisk-installation-script:星号安装脚本

    通过研究这些文件,我们可以学习到如何将理论知识应用到实际项目中,实现自动化部署Asterisk系统。 四、总结 Python在Asterisk安装脚本中的应用,既简化了安装过程,也提高了系统的可维护性。通过编写这样的脚本,...

    Asterisk 简介 Asterisk 架构 Asterisk程序框图

    Asterisk的核心设计理念是灵活性和可扩展性,这使得它在企业通信、小型办公室、家庭办公环境以及开发实验中都有广泛的应用。 ### Asterisk简介 Asterisk由Digium公司开发,最初由Mark Spencer在1999年创建,旨在为...

    Asterisk 1.4 配置手册

    - **AGI(Asterisk Gateway Interface)**:允许使用任何语言编写脚本来扩展 Asterisk 的功能。 - **AMI(Asterisk Manager Interface)**:通过命令行或 HTTP 接口管理 Asterisk 系统。 - **Dialplan**:使用内置的...

    asterisk语音识别

    在Asterisk环境中,语音识别主要通过Asterisk Gateway Interface (AGI)实现,这是一种用于扩展Asterisk功能的接口。在你提到的"asterisk-speech-recog-0.5"压缩包中,可能包含了实现这一功能的源代码和AGI脚本。 1....

    asterisk-基本语法.docx

    Asterisk是一款功能强大的开源PBX(Private Branch Exchange)系统,主要用于构建语音通信应用。它支持多种协议,包括SIP(Session Initiation Protocol)、IAX2(Inter-Asterisk eXchange version 2)等,并能与...

    VoIP服务器----Asterisk

    - **功能强大**:除了基本的VoIP通话功能外,Asterisk还支持传真、语音邮件、电话会议、交互式语音应答(IVR)等高级应用。 - **灵活性**:Asterisk高度可定制,用户可以根据具体需求调整配置,实现个性化的通信解决...

    Asterisk- The Definitive Guide, 4th Edition

    Asterisk提供了丰富的API接口,允许开发者编写自定义应用程序,进一步扩展其功能。 5. **Asterisk的安全性** - **加密通信** 为了保护通信安全,Asterisk支持加密技术,如TLS(Transport Layer Security,传输...

Global site tag (gtag.js) - Google Analytics