2010-11-30 46 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