2010-11-30 11 views
2

Wenn ich mit Twilio und Kynetx eine Kleinkind-Vergnügungslinie (siehe http://blog.tropo.com/2010/11/22/something-fun-and-quick-to-make-the-toddler-amusement-line/) erstelle, muss ich eine Stoppbedingung in meinem Regelwerk setzen oder werden die Auswertungen beendet, wenn der Anrufer auflegt?Beenden die KRL-Regeln, wenn ein Twilio-Anruf beendet wird?

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

Meine Schätzung: Der Aufruf startet den Regelsatz ausgeführt. Der Anrufer klingelt. Ein kleiner Teil von KNS weint.

Antwort

1

Eigentlich wird Ihr Code hier nie zu Twilio zurückkehren.

Twilio löst Ereignisse bei Anrufbeginn und während eines Anrufs aus, wenn Sie dazu aufgefordert werden. Dies geschieht mit einem twilio: gather_start() und twilio: redirect() unter anderem.

Wenn Sie ein explizites Ereignis auslösen, werden alle zutreffenden Regeln ausgewählt und ausgelöst, BEVOR die Antwort gesendet wird. Wegen Ihrer Schleife hier wird die Antwort nie gesendet. Eine gute Möglichkeit, dies zu testen, besteht darin, den Webhook, den Sie twilio geben, von einem Browser aus aufzurufen und sich die Antwort anzusehen.

Ein besserer Weg, dies zu erreichen, ist, Twilio eine Anleitung zu geben, und es ein weiteres Ereignis auslösen zu lassen. Neu zu schreiben den Code oben:

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

Bitte beachte, dass ich nur eine der raise explicit event Aussagen ersetzt. Sie könnten alle auf ähnliche Weise ersetzen, aber das würde dazu führen, dass mehr Ereignisse für Kynetx ausgelöst würden, als wirklich notwendig. Es ist wirklich ein Gleichgewicht und kann nach Bedarf angepasst werden.

(Beachten Sie auch die OR in der select-Anweisung der loves_me Regel, und die Zugabe von {} für zwei Aktionen in einer einzigen Regel zu ermöglichen und die,.. S nach Aktionen)

Dieses Muster der Verwendung Eine Umleitung ist auch nützlich, wenn Sie Menüoptionen wiederholen möchten, wenn der Benutzer vor dem Timeout keine Option auswählt. Dies wird in der Phone Menu Tutorial in den Kynetx Docs gezeigt.

+1

Danke! Ich denke ich verstehe das jetzt besser. –

+0

Hier ist ein Prinzipal im Spiel, das zu verstehen ist. Wenn ein Ereignis auf KRE (von Twilio oder anderem) ausgelöst wird, werden die Regeln, die dieses Ereignis auswählt, dem Zeitplan hinzugefügt, und die Engine beginnt, den Zeitplan zu verarbeiten. Wenn Sie ein explizites Ereignis auslösen, wird derselbe Zeitplan geändert, um die neuen Regeln hinzuzufügen, die von diesem Ereignis ausgewählt wurden. Wenn Sie das gleiche Ereignis wie das Ergebnis dieser Verarbeitung fortsetzen, kommen Sie, wie Sam erklärte, in eine Schleife. Wir haben einen Schutzschalter im Code, um Endlosschleifen zu verhindern. –

Verwandte Themen