На самом деле ваш код здесь никогда не вернется в Twilio.
Twilio вызывает события в начале вызова и во время вызова, когда получено указание. Это происходит с твилио: collect_start () и twilio: redirect () среди других.
Когда вы вызываете явное событие, любые подходящие правила будут выбраны и сработают ДО того, как ответ будет отправлен. Из-за вашего цикла ответ никогда не будет отправлен. Хороший способ проверить это - вызвать веб-крючок, который вы даете twilio, из браузера и посмотреть на ответ.
Лучший способ сделать это состоит в том, чтобы дать Twilio часть инструкции и заставить ее вызвать другое событие, когда закончите. Чтобы переписать ваш код выше:
rule callstart {
select when twilio callstart
always { raise explicit event loves_me }
}
rule loves_me {
select when explicit loves_me or twilio loves_me
twilio:say("She loves me.");
always { raise explicit event loves_me_not }
}
rule loves_me_not {
select when explicit loves_me_not
{
twilio:say("She loves me not.");
twilio:redirect("loves_me");
{
}
Обратите внимание, что я заменил только одно из операторов raise explicit event
. Вы можете заменить их все аналогичным образом, но это приведет к тому, что в Kynetx будет больше событий, чем действительно необходимо. Это действительно баланс, и его можно корректировать по мере необходимости.
(Также обратите внимание на ИЛИ в операторе выбора правила loves_me и добавление {} для разрешения двух действий в одном правиле. И; s после действий.)
Этот шаблон использования перенаправления также полезен, когда вы хотите повторить пункты меню, если пользователь не выбирает параметр до истечения времени ожидания. Это показано в Обучающем меню телефона в Документах Kynetx.