日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的asterisk 扩展应用(3)——IVR 实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。