2017-04-08 2 views
0

Hier mein Basic-Code, was der beste Weg ist, wechseln aus oder verlassen Formflow zu Dialog in Bot-Framework

ist

enter image description here Die Formflow funktionieren gut und nach der, wenn der Bedingung überprüft, es den anderen Teil gehen sollte, der schrieb diese Codezeile

    await Conversation.SendAsync(activity,() => new AskMeAnything()); 

AskMeAnything ist eine Klasse Umsetzung iDialog, die es tut, aber in dem anderen Teil. Das Problem ist, dass es wieder den Formflow aufruft und nicht in den oben erwähnten Dialog springt.

Ich lese über IdialogStack aber nicht zu verstehen, wie das Dialogfeld oben auf Stapel oder etwas damit verbunden zu entfernen.

ich brauche Hilfe beim Verschieben in andere Dialog ohne Schleife in Formflow.

Dank

Antwort

1

Das erste Mal, wenn Sie anrufen Conversation.SendAsync(...) Sie tatsächlich ein Root-Dialog für das Gespräch erstellen. Jeder aufeinanderfolgende Aufruf an den Bot wird immer noch in den Controller eingegeben, wird aber zu dem Dialog am oberen Ende des Stapels weitergeleitet.

Wenn Sie also ein zweites Mal Conversation.SendAsync(...) aufrufen, versuchen Sie tatsächlich, den Stammdialog im Stapel zu ändern. Ich denke nicht, dass das möglich ist und deshalb wird deine Form erneut aufgerufen.

Um dieses Problem zu lösen, würde ich einen anderen Dialog erstellen und diesen Dialog zum Hauptdialog machen. Von diesem Grunddialog können Sie Ihr Formular und jeden anderen Dialog aufrufen.

+0

Danke für den Kommentar, nur zu versuchen, Sie zu verstehen, lassen Sie uns sagen, ich habe eine Root-Dilog und erstellt einen Unter-Dialog einmal, so das nächste Mal, Root-Dialog wird oben auf dem Stapel und dann der erste Unter-Dialog sein wird darunter, wie würde mein neuer Unterdialog heißen? .. irgendein Beispiel oder eine ausführliche Erklärung wird helfen, –

+0

nein, das ist nicht richtig. Wenn Sie einen Unterdialog von Ihrem Stammdialog mit der Methode "Call" oder "Forward" starten, wird der Unterdialog oben auf den Stapel gelegt. Alle Nachrichten werden vom Controller an den Anfang des Stapels geleitet, der nach dieser Aktion der Unterdialog ist. So werden die Nachrichten nicht mehr in Ihrem Root-Dialog behandelt. Sobald der Dialog beendet ist, können Sie die "Fertig" -Methode aufrufen, um den Dialog zu beenden. Der Unterdialog wird dann aus dem Stapel geöffnet und der Stammdialog wird zum Anfang des Stapels. –

+0

Dank Xeno - ich werde mehr glücklich sein, wenn Sie eine Lösung für mein Problem geben, indem Sie das obige Bild sehen .. Ich rufe "Makerootdialog" mit Conversation.sendasync(), die einen Formflow aufruft. Sobald der Formflow abgeschlossen ist, rufe ich seine .Done() -Methode auf. Bei einer neuen Anfrage geht es in den anderen Teil (wie in Abb. gezeigt), wo ich einen weiteren Dialog mit Conversation.SendAsync (...) aufruft, aber seinen Aufrufformflow erneut. können Sie mir dabei helfen –

Verwandte Themen