Библиотеки Twilio 5x C # - собирать цифры во время чтения сообщения - PullRequest
0 голосов
/ 22 сентября 2018

В новых библиотеках 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 должен находиться внутри тега собраний, чтобы получить поведение, которое мы находимсяищу.

1 Ответ

0 голосов
/ 13 октября 2018

Хорошо, я нашел проблему.Похоже, что четверо было правильно указывать на документы по 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");

И твимл вылетит так, как мы собирались, вот так:

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