Останавливаются ли правила KRL после завершения вызова Twilio? - PullRequest
2 голосов
/ 01 декабря 2010

Если я создаю линию развлечений для малышей (см. http://blog.tropo.com/2010/11/22/something-fun-and-quick-to-make-the-toddler-amusement-line/) с использованием Twilio и Kynetx, нужно ли мне устанавливать условие остановки в моем наборе правил или оценки завершатся, когда вызывающий абонент повесит трубку?

// WARNING! Do not use this ruleset!
rule callstart {
  select when twilio callstart
  always { raise explicit event loves_me }
}

rule loves_me {
  select when explicit 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.")
  always { raise explicit event loves_me }
}

Мое предположение: вызов запускает набор правил. Звонящий звонит. Небольшая часть KNS плачет.

1 Ответ

1 голос
/ 01 декабря 2010

На самом деле ваш код здесь никогда не вернется в 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.

...