繁体   English   中英

如果呼叫者提前输入号码,星号会挂断

[英]Asterisk hangs up if caller inputs number early

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

服务挂断。

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

如果无法及早接受用户输入,是否可以防止挂断并再次提示?

我们切换到Amazon的Polly服务来生成声音文件,并使用星号方法Playback(filename)而不是extensions_custom.conf内部的agi()来阻止如果用户过早输入文本而导致电话挂断。

授予服务将忽略早期输入的内容,但至少不会挂断。 更好的解决方案是接受早期输入。 如果有其他选择,我将进行更新。

编辑:找到了一个替代的Read() ,它使我们能够播放可被中断的声音,因此我们现在有了Read()playback()调用的混合,并且可以控制用户可以通过这种方式跳过哪些声音文件。 该服务不再挂断用户,并且我们不再使用agi()调用。

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获得了该示例

Asterisk Dialplan不能认真地使用密集的TextToSpeech创建动态服务。

  • 首先,因为如果您不使用缓存或不使用MRCP连接器,则延迟可能是一个问题。
  • 其次,因为通过这种方式您不支持插入( https://www.w3.org/TR/voicexml20/#dml4.1.5 ),并且您在任何时候都无法与DTMF(或语音)进行交互。

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

查看此行:

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和更改扩展名那样工作。 我不知道谁和为什么将其添加到代码中,您可以询问维护者。

因此,只读取您使用的文件,而不是垃圾邮件问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM