Twilio 5x C#库-读取消息时收集数字

时间:2018-09-22 00:37:06

标签: c# asp.net twilio twilio-api

新的Twilio 5x库引入了一些奇怪的方法来收集电话呼叫中的DTMF数字。

聚会的旧4x代码看起来像这样:

twiml.BeginGathertwiml.BeginGather(new { numDigits = "1", action = "/TwilioCallbacks/InputResponse" });
if(x == 10){
    twiml.Say("I am saying a thing because x = 10");
}
else{
    twiml.Say("I am saying the other thing");
}
twiml.EndGather();

现在,如果您希望在机器人与他们聊天时让用户在键盘上打数字,那会很好。

但是在Twilio 5x中,它看起来像这样:

twiml.Say("I am saying a really long thing where the user must wait until the twiml script reaches the gather phrase");
twiml.Say("press 1 if stack overflow is awesome, press 2 to quit programming forever");
twiml.Gather(
            numDigits: 1,
            input: new List<InputEnum>() { InputEnum.Dtmf },
            timeout: 10,
            method: "POST",
            action: new System.Uri(Startup.hostAddress + "/TwilioCallbacks/InputResponse")
        );

在Gather(...)之后,您将有一个短窗口来收集响应,如果您在响应上设置了超时,则twiml不会继续进行下一个发言,直到超时到期为止。

如何收集数字以使用户可以在消息过程中的任何时候与小键盘进行交互?新方法似乎向后退了一步。

编辑: 阐明了4xx用例,以便人们可以理解为什么链接。说不能在这里使用。

编辑: 下面的一些人建议在.Gather()之后紧接.Say()动词。

这实际上也不符合预期。这是C#代码。

    twiml.Gather(
        numDigits: 1,
        input: new List<InputEnum>() { InputEnum.Dtmf },
        timeout: 10,
        method: "POST",
        action: new System.Uri(Startup.hostAddress + "/TwilioCallBot/InputResponse")
    ).Say("this is a test");

这是生成的twiml:

<Gather input="dtmf" action="https://callbot21.ngrok.io/RCHHRATool//TwilioCallBot/InputResponse" method="POST" timeout="10" numDigits="1">
</Gather>
<Say>this is a test</Say>

“说”动词必须位于collect标记内才能获得我们正在寻找的行为。

1 个答案:

答案 0 :(得分:2)

好的,我已经找到了问题。看起来Fourwhey指向那里的API文档是正确的。我没发现的是.Say已以特定方式附加到集合中。

此:

twiml.Gather(...).Say("say a thing");

与此不同:

var gather = new Twilio.TwiML.Voice.Gather(...).Say("say a thing");

我能弄清楚的是,实际上有两个方法,而twiml.Gather(...)实际上是在调用Twilio.TwiML.Gather。

从这里我们可以构建动态语音消息并像这样嵌套Say动词:

gather.Say("Say a thing");
gather.Say("Say another thing");

twiml将像我们想要的那样吐出来:

<gather>
    <say>say a thing</say>
    <say>say another thing</say>
</gather>