В новых библиотеках 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")
);
Сразу после сбора (...) у вас есть короткое окно для сбора ответа. Если вы установите тайм-аут для ответа, твимл не перейдет к следующему произнесению, пока не истечет время ожидания.
Как я могу собрать цифры таким образом, чтобы пользователь мог взаимодействовать с клавиатурой в любой точке во время сообщения?Новый подход кажется шагом назад.
edit: Уточнен вариант использования 4xx, так что люди могут понять, почему цепочка. Скажем, здесь не сработает.
edit: Некоторые люди нижеПредлагаем объединить глагол .Say () сразу после .Gather ().
На самом деле это тоже не так, как ожидалось.Это код 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");
Это результирующий тимл:
<Gather input="dtmf" action="https://callbot21.ngrok.io/RCHHRATool//TwilioCallBot/InputResponse" method="POST" timeout="10" numDigits="1">
</Gather>
<Say>this is a test</Say>
Глагол say должен находиться внутри тега собраний, чтобы получить поведение, которое мы находимсяищу.