如果来电者提前输入数字,则星号会挂起

时间:2017-05-24 15:21:19

标签: user-input asterisk ivr agi

我们有一个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"

服务暂停。

我们如何保持流程相同并接受用户的早期输入?

如果无法提前接受用户输入,是否有办法防止挂断并再次提示?

4 个答案:

答案 0 :(得分:0)

我们切换到亚马逊的Polly服务来生成声音文件,并在node内使用星号方法Playback(filename)代替agi(),以阻止呼叫挂起如果用户提前输入文本。

当然,服务会忽略早期输入的输入,但至少它不会挂断。更好的解决方案是接受早期输入。如果我找到替代方案,我会更新。

修改:找到一个替代Read(),让我们可以播放可能被中断的声音,因此我们现在混合了extensions_custom.confplayback()个来电可以控制用户以这种方式跳过哪些声音文件。该服务不再挂断用户,我们不再使用Read()来电。

答案 1 :(得分:-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

那里得到了这个例子

答案 2 :(得分:-1)

Asterisk Dialplan无法严肃地使用密集的TextToSpeech创建动态服务。

  • 首先,如果您不使用缓存,或者如果您不使用MRCP连接器,延迟可能会成为问题。
  • 其次,因为通过这种方式你不支持bargein(https://www.w3.org/TR/voicexml20/#dml4.1.5),你随时都失去了与DTMF(或语音)互动的方式。

要创建语音门户,您可能需要VoiceXML解释器。您有两种方法可以在Asterisk中创建此服务:Voximal运行的商业应用程序和Asterisk,或VoiceGlue一个免费的GPL死项目(您可以通过旧的Asterisk运行它)。

答案 3 :(得分:-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和更改扩展。我不知道是谁以及为什么在代码中添加它,你可以问维护者。

所以只需阅读您使用的文件,而不是垃圾邮件问题。