如果收到错误的密钥 press/digit,Twilio 将无法继续播放音频

Twilio can't continue to play audio if wrong key press/digit is received

我是 Twilio 的新手。我实际上想要实现的是:

当用户接到电话时,音频会继续播放自定义消息,直到用户按下预期的键“1”。

如果用户按下“1”,我希望 Twilio 执行我在操作中指定的操作,这将起作用。

但是,如果用户按下任何其他键,则不执行任何操作并继续播放相同的自定义消息并在超时时执行特定操作,如果用户未按下“1”。前任。 <Redirect>

我阅读了 Twilio 文档,但没有找到任何有关如何执行此操作的信息。 https://www.twilio.com/docs/api/twiml/gather#hints

文档说 "After the first digit is received the audio will stop playing." 我想避免这种情况。

如果使用 Twilio 甚至可以做到这一点,有人可以指导我吗?

你实际上无法避免这一点(据我所知)。 TWIML(Twilio 的标记语言)的工作方式是收集一个数字并将其发送到服务器进行处理。换句话说,数字的收集与决定如何处理该数字完全分开。

如果我错了,请大家指正,但我相信这是真的。

编辑:你能做的最好的事情就是让一些音频说,"That's an invalid option"然后重新启动你正在播放的原始音频。

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 脚本。在此阶段,您找出按下了哪些数字,并根据输入指示调用脚本。

原始脚本不可能知道按下了哪个键,因为收集发生在 phone 系统内部。您的软件与 phone 系统之间并没有实际的实时连接,相反,您已经提前指示 phone 系统收集数字。一旦 phone 系统收集到数字,它就会调用您的 InputResponse 方法,并向您的服务器发送已键入的数字。

只有在这个阶段,您的软件才可能知道输入了哪个数字。