Java Twilio can';t如果接收到错误的按键/数字,则不能继续播放音频

Java Twilio can';t如果接收到错误的按键/数字,则不能继续播放音频,java,twilio,Java,Twilio,我是新来的。我真正想要实现的是: 当用户接到呼叫时,音频将继续播放自定义消息,直到用户按预期的键“1” 如果用户按下“1”,我希望Twilio执行我在操作中指定的操作,这将起作用 但如果用户按下任何其他键,只要不做任何事情,继续播放相同的自定义消息,并在超时时执行特定操作,如果用户不按“1”。例如 我阅读了Twilio文档,但没有找到任何关于如何做到这一点的信息 文档中说,“收到第一个数字后,音频将停止播放。”我想避免这种情况 如果使用Twilio甚至可以做到这一点,有人能给我指点一下吗?据我所

我是新来的。我真正想要实现的是:

当用户接到呼叫时,音频将继续播放自定义消息,直到用户按预期的键“1”

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

但如果用户按下任何其他键,只要不做任何事情,继续播放相同的自定义消息,并在超时时执行特定操作,如果用户不按“1”。例如

我阅读了Twilio文档,但没有找到任何关于如何做到这一点的信息

文档中说,“收到第一个数字后,音频将停止播放。”我想避免这种情况


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

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

如果我错了,有人会纠正我,但我相信这是真的


编辑:你能做的最好的事情可能是让一些音频说,“这是一个无效的选项”,然后重新启动你正在播放的原始音频。

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#,原始脚本会收集数字,并将用户重定向到InputResponse脚本。在这一阶段,您将确定按下了哪些数字,并根据输入指示调用脚本

原始脚本不可能知道按下了哪个键,因为采集正在电话系统中进行。您的软件和电话系统之间没有实际的实时连接,相反,您已经提前指示电话系统收集数字。一旦电话系统收集到数字,它就知道如何调用您的InputResponse方法,并将输入的数字发送到服务器


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

Twilio开发者福音传道者,这在工作原理上是完全正确的。这条消息和重定向到原始操作是个好主意。@shieldstory感谢您的反馈,我之前已经考虑过了,播放无效音频,然后重新启动原始操作。但我想避免这种情况,因为你已经提到,现在似乎不可能做到。我会看看我的其他选择。@philnash很高兴Twilio开发人员在这里关注问题。@Aniks我们只是想确保每个人都对Twilio有很好的体验,请随意提问,我们会找到他们的@philnash正如本文中提到的,我已经更改了我的实现,以发送一个新的TwiML响应,该响应与之前生成的响应相同。消息会按照我的要求从头开始播放。但我认为在背景中,旧的信息也与之并行。我能听到两种声音。你能在这方面给我一些指导吗?
//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);
}