2010-11-30 8 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に指示を与え、終了時に別のイベントを発生させるのが良い方法です。私はraise explicit eventステートメントのいずれかを交換し

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"); 
    { 
} 

注:上記のコードを書き換えます。同様の方法でそれらのすべてを置き換えることができますが、実際に必要なイベントがKynetxに集められます。それは本当にバランスであり、必要に応じて調整することができます。

(またOR loves_meルールのSELECT文、および単一のルール内の2つのアクションを可能にするために、{}のほかに注意し;アクションの後S)

使用するこのパターンユーザーがタイムアウトの前にオプションを選択しなかった場合、リダイレクトはメニューオプションを繰り返す場合にも便利です。これは、Kynetx DocsのPhone Menu Tutorialに示されています。

+1

ありがとうございます!今私はこれをよく理解していると思います。 –

+0

ここには、理解することが重要な校長がいます。イベントがKREに(Twilioまたは他のものによって)発生すると、そのイベントが選択するルールがスケジュールに追加され、エンジンがスケジュールの処理を開始します。明示的なイベントを発生させると、同じスケジュールが修正され、そのイベントによって選択された新しいルールが追加されます。サムが説明したように、その処理の結果と同じイベントを引き続き行うと、ループに入ります。無限ループを防ぐために、コードに回路ブレーカがあります。 –

関連する問題