2

如果我使用 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哭了。

4

1 回答 1

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,然后真的有必要。这确实是一种平衡,可以根据需要进行调整。

(还要注意 love_me 规则的 select 语句中的 OR,以及添加 {} 以允许在单个规则中执行两个操作。以及 ;s after 操作。)

如果用户在超时之前没有选择选项,当您希望重复菜单选项时,这种使用重定向的模式也很有用。这在 Kynetx 文档中的电话菜单教程中显示。

于 2010-12-01T07:03:17.347 回答