asterisk 扩展应用(3)——IVR 实现
1:進入System Recordings,上傳wav語音文件。語音文件必須是音頻采樣為16位。音頻采樣級別8kHz。使用PCM編碼。
2:進入freepbx IVR模塊,建立菜單
3:對入特殊設(shè)置可以加入customer-app。自定義的app。這樣可以滿足需求。
1.2?????? 一個IVR實例1.2.1???IVR實例描述撥打進入號61302350進入XX公司,首先播放歡迎進入公司錄音。然后提示:
1:按1進入銷售座席隊列
2:按2進入技術(shù)支持座席隊列
3:按任意分機號直接撥打
4:獲得公司通訊錄按#
1.2.2??實例腳本實現(xiàn)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聯(lián)合編程1.3.1??? IVR配置FastAgi如果在IVR中需要第三方App支持,這是最常見的實現(xiàn)方法。如有一個實例,
1:請輸入用戶名并以#號結(jié)束(用戶輸入)
2:請輸入密碼并以#號結(jié)束(用戶輸入)
3:核對用戶名和密碼
4:返回結(jié)果
實現(xiàn)原理:當(dāng)輸入用戶名和密碼后,把用戶名和密碼做為一個臨時變量保存。用戶名和密碼很明顯同asterisk無關(guān),需要交給第三方APP處理。設(shè)置我們的FastAgi服務(wù)器為127.0.0.1。發(fā)送出類似的命令:
agi(agi://127.0.0.1/checkpasswd.agi?username=${username}&password=${password}
當(dāng)AGI接收到此請求時,處理。并把外理結(jié)果存儲到變量當(dāng)中,返回。偽代碼如下:
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 }來查看返回值,進行相應(yīng)的處理
1.3.2??? 在通話中觸發(fā)IVR有時需要在第三方APP中觸發(fā)IVR。如在通話過程中需要對方輸入用戶名和密碼。實例如下:
1:在通話過程中,座席按1,向?qū)Ψ讲シ耪Z音提示對方輸入用戶名和密碼
2:進入 IVR配置FastAgi 中的實例
3:如果核對正確,回來繼續(xù)通話
實現(xiàn)原理
在通話過程中,要響應(yīng)對方的輸入,需要調(diào)用waitExtern命令。
實現(xiàn)偽代碼:
int result = agiChannel.Dial();//撥號
if(result==-1)
{
?????? int result = agiChannel.sendCmd(ivr-4,1)
}
進入ivr-4,當(dāng)前通話不斷,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
總結(jié)
以上是生活随笔為你收集整理的asterisk 扩展应用(3)——IVR 实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三个月定开净值型收益怎么计算?收益计算公
- 下一篇: 银行理财和银行基金的区别,注意这几点