当Twilio呼叫结束时,KRL规则是否会停止运行?

时间:2010-11-30 22:53:14

标签: krl

如果我使用Twilio和Kynetx创建幼儿娱乐线(请参阅http://blog.tropo.com/2010/11/22/something-fun-and-quick-to-make-the-toddler-amusement-line/),我是否需要在规则集中设置停止条件,或者当呼叫者挂机时评估是否结束?

// 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 个答案:

答案 0 :(得分:1)

实际上,这里的代码根本不会返回Twilio。

Twilio在通话开始时和通话期间提出事件。这种情况发生在twilio:gather_start()和twilio:redirect()等。

当您举起显式事件时,任何匹配的规则都会在发送响应之前选择并触发。由于你的循环在这里,永远不会发送响应。测试这个的一个好方法是从浏览器调用你给twilio的webhook,并查看响应。

实现这一目标的更好方法是给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规则的select语句中的OR,以及允许在单个规则中执行两个操作的{}的添加。以及操作后的; s。)

如果用户在超时前未选择选项,则希望重复菜单选项时,使用重定向的模式也很有用。这显示在Kynetx文档中的Phone Menu Tutorial