2017-05-24 80 views
1

我們有一個Asterisk IVR系統設置,提示輸入星號掛斷,如果主叫方輸入一些早期

用戶

在我們的擴展文件,我們有以下幾點:

[englishprocess] 
exten => s,1,Answer() 
exten => s,n,Wait(1) 
exten => s,n,Set(TIMEOUT(digit)=2) 
exten => s,n,agi(mstts.agi,"Please enter your ID number followed by pound.",en-US) 
exten => s,n,Read(APCODE,,666) 
exten => s,n,agi(mstts.agi,"Your ID Number is",en) 
exten => s,n,SayDigits(${APCODE}) 
exten => s,n,agi(mstts.agi,"If this is correct press, 1, otherwise, press, 3",en-US) 
exten => s,n,Read(CHECK,,1) 
exten => s,n,GotoIf($["${CHECK}" = "3"]?englishprocess,s,1) 
exten => s,n,Set(MYADDR=${CURL(webserviceaddress.php?idnum=${APCODE})}) 
exten => s,n,agi(mstts.agi,${MYADDR},en-US) 
exten => s,n,Hangup() 

的問題是,如果用戶輸入自己的ID的文本到語音提示完成之前,或者如果他們之前打1話說完

「如果這是正確按1,否則按3」

服務掛斷。

我們如何保持過程相同並接受早期用戶輸入?

如果早期接受用戶輸入是不可能的,有沒有辦法防止掛斷並再次提示?

+0

沒有你的agi腳本的代碼,你無法回答你的問題。 – arheops

回答

0

我們切換到亞馬遜的波莉服務來產生聲音文件和使用,以星號方法Playback(filename)代替agi()extensions_custom.conf內從掛斷,如果用戶輸入文本過早停止呼叫。

授予該服務忽略提前投入的輸入,但至少它不會掛斷。更好的解決方案將接受早期輸入。如果我找到替代方案,我會更新它。

編輯:找到一個替代Read()它可以讓我們玩的是可以打斷soundbites,所以我們現在有Read()playback()呼叫的組合和可以控制聲音文件可以通過這種方式,用戶可以跳過。該服務不再掛斷用戶,我們不再使用agi()來電。

-2

瞭解這一行:

print "STREAM FILE $file \"$keys\"\n"; 

https://www.voip-info.org/wiki/view/stream+file

Usage: STREAM FILE <filename> <escape digits> [sample offset] 

Send the given file, allowing playback to be interrupted by the given digits, if any. 

Use double quotes for the digits if you wish none to be permitted. 

If sample offset is provided then the audio will seek to sample offset before play starts. 

Remember, the file extension must not be included in the filename. 

之後,它由於某種原因,工作像waitexten和變革的延伸。我不知道是誰和爲什麼添加到代碼中,你可以問維護者。

因此,只需閱讀您使用的文件,而不是垃圾郵件問題。

+0

有沒有必要有任何經驗,只需要一般的編程經驗來閱讀代碼。完整的命令列表以及他們通過此頁面可以獲得的功能https://www.voip-info.org/wiki/view/Asterisk+AGI – arheops

+0

正確設置 - 刪除所有代碼,設置變量,改爲使用該變量問題之前你的閱讀命令。這樣,即使用戶不聽信息,你也會得到結果。 – arheops

+0

我的意思是流式傳輸以及之後的所有其他人員。我很抱歉,我不是在爲你做你的工作。您至少已閱讀過有關AGI的那一頁。 – arheops

-1

agi(mstts.agi,"text",[language],[intkey],[speed]):如果用戶輸入的任何腳本將停止,並轉到擴展用於

intkey。我不知道它是否會在你的情況下工作,但值得一試。

exten => _X,1,agi(mstts.agi,"You just pressed ${EXTEN}. Try another one please.",en,any) 嘗試使用語言後面的,any,看看是否有效。我從https://github.com/zaf/asterisk-mstts

-1

得到的那個例子Asterisk Dialplan不能認真地用密集的TextToSpeech創建動態服務。

  • 首先是因爲如果您不使用緩存,或者如果您不使用MRCP連接器,則延遲可能會成爲問題。
  • 其次,因爲通過這種方式你不支持bargein(https://www.w3.org/TR/voicexml20/#dml4.1.5),你失去了隨時與DTMF(或語音)交互的方式。

要創建一個語音門戶,您可能需要一個VoiceXML解釋器。你有兩種方式在Asterisk中創建這個服務:Voximal是一個運行在Asterisk上的商業應用程序,或者VoiceGlue是一個免費的GPL死亡項目(你可以在老的Asterisk上運行它)。