2010-11-30 47 views
2

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

// 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

其实,你的代码在这里永远不会回到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语句,并添加{},以允许在单个规则两个动作而;年代后行动)

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

+1

谢谢!我想我现在对此更了解了。 – 2010-12-01 13:53:09