我是Twilio的新手。我实际上想要实现的是:
当用户接到电话时,音频会继续播放自定义信息,直到用户按下预期的键“#”;
如果用户按下' 1',我希望Twilio执行我在操作中指定的操作,这将起作用。
但是,如果用户按任何其他键只是不做任何事情并继续播放相同的自定义消息并按时执行特定操作,如果用户没有按下&#39; 1&#39 ;。防爆。 <Redirect>
我阅读了Twilio文档,但没有找到任何有关如何执行此操作的信息。 https://www.twilio.com/docs/api/twiml/gather#hints
文档说&#34;收到第一个数字后,音频将停止播放。&#34; 我想避免这种情况。
有人可以指导我,如果甚至可以使用Twilio吗?
答案 0 :(得分:3)
你实际上无法避免这种情况(据我所知)。 TWIML的工作方式(Twilio的标记语言)是收集数字并发送到服务器进行处理。换句话说,数字的聚集与决定如何处理该数字是完全分开的。
如果我错了,有人会纠正我,但我相信这是真的。
编辑:你可以做的最好的事情是可能有一些音频说“这是一个无效的选项”,然后重新启动你正在播放的原始音频。
答案 1 :(得分:0)
Shieldstroy是正确的。
这是处理这种情况的方法:
//this code is in the original voice script
twiml.Gather(
numDigits: 1,
input: new List<InputEnum>() { InputEnum.Dtmf },
timeout: 5,
method: "POST",
action: new System.Uri(Startup.hostAddress + "/TwilioCallbacks/InputResponse")
);
我在这里使用C#,但是Java实现在概念上是相同的。下面的解释将解释发生的确切情况,并希望给您和想法如何进行。
//C# Web Callback method structure
public ActionResult InputResponse(VoiceRequest request)
{
int digit = 0;
//create a new voice script
var twiml = new VoiceResponse();
try
{
//convert the digit to an int
digit = Convert.ToInt32(request.Digits);
}
catch (FormatException e)
{
//if the digit comes back as NaN for some reason, lets write an exception to debug
Debug.WriteLine(e.StackTrace.ToString());
}
//switch statement for which digit has been pressed
switch (digit)
{
case 1:
twiml.Say("You have chosen the correct digit");
break;
case 2:
twiml.Say("You have chosen the other possible correct digit");
default:
twiml.Say("You have pressed an invalid digit")
//since an invalid digit has been pressed, we redirect to the
//original voice script
var redirect( new Twilio.TwiML.Voice.Redirect(
new System.Uri.(originalVoiceScriptURL));
twiml.Append(redirect);
}
return TwiML(twiml);
}
因此,如果您可以对不合适的C#进行幽默处理,则原始脚本将收集数字,并将用户重定向到InputResponse脚本。在此阶段,您可以找出已按下的数字,然后根据输入内容来指示呼叫脚本。
由于聚集发生在电话系统内部,因此原始脚本无法知道已按下了哪个键。您的软件与电话系统之间没有实际的实时连接,相反,您已提前指示电话系统收集数字。电话系统收集完数字后,便知道将调用InputResponse方法,并将哪些数字已输入到服务器中。
只有在此阶段,您的软件才可能知道已键入了哪个数字。