如果我使用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的一小部分哭了。
答案 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。