2

TwilioとKynetxを使用してToddlerAmusementLine ( 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ステートメントの 1 つだけを置き換えたことに注意してください。同様の方法でそれらすべてを置き換えることもできますが、実際に必要なイベントよりも多くのイベントが Kynetx に発生することになります。それは本当にバランスが取れており、必要に応じて調整できます。

(loves_me ルールの select ステートメントの OR と、1 つのルールで 2 つのアクションを許可する {} の追加にも注意してください。また、アクションの後の ;s にも注意してください。)

リダイレクトを使用するこのパターンは、ユーザーがタイムアウト前にオプションを選択しなかった場合に、メニュー オプションを繰り返したい場合にも役立ちます。これは、Kynetx ドキュメントの電話メニュー チュートリアルに示されています。

于 2010-12-01T07:03:17.347 に答える