2017-04-08 4 views
0

ボット内のダイアログに切り替えるための最良の方法何であるかの状態を確認した後、それは他の部分に行くべき正常に動作してformFlow、それはありませんが、それ以外の部分でのコード行はここに私の基本コード</p> <p><a href="https://i.stack.imgur.com/gxJd1.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/gxJd1.png" alt="enter image description here"></a> あるからか出formFlowからのフレームワーク

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

AskMeAnythingがIdialogを実装するクラスですが書いています。問題は、上記のダイアログにジャンプするのではなく、フォームフローを再度呼び出すことです。

私はIdialogStackについて読んだが、スタックやそれに関連するものの上にあるダイアログを削除する方法を理解できなかった。

私はフォームフローにループせずに他のダイアログに移動する際に助けが必要です。

おかげ

答えて

1

あなたが実際にあなたの会話のためのルートダイアログを作成Conversation.SendAsync(...)呼び出し初めて。ボットを連続して呼び出すたびにコントローラに入りますが、スタックの一番上にあるダイアログにルーティングされます。

Conversation.SendAsync(...)をもう一度呼び出すと、スタックのルートダイアログを実際に変更しようとしています。私はこれが可能だとは思わないし、あなたのフォームが再び呼び出される理由です。

この問題を解決するには、別のダイアログを作成し、そのダイアログをルートダイアログにします。このルートダイアログから、フォームと他のダイアログを呼び出すことができます。

+0

コメントをいただき、ありがとうございます。私はroot dilaogを作成し、サブダイアログを一度呼び出しました。次回は、ルートダイアログがスタックの上に表示され、最初のサブダイアログが表示されます。その下に私の新しいサブダイアログはどのように呼ばれるのですか?どのような例や詳細な説明も役に立つでしょう。 –

+0

それは正しくありません。ルートダイアログから「呼び出し」または「転送」メソッドを使用してサブダイアログを開始すると、サブダイアログがスタックの最上部に置かれます。すべてのメッセージは、コントローラーからスタックの最上位に向かいます。このアクションの後にサブダイアログが表示されます。そのため、メッセージはルートダイアログでは処理されなくなります。ダイアログが終了すると、ダイアログを終了するための "Done"メソッドを呼び出すと、スタックからスタックダイアログが表示され、ルートダイアログがスタックの一番上に表示されます。 –

+0

ありがとうXeno - 上記の写真を見て私のprobに解決策を与えるなら、私はもっと幸せになるでしょう。私は "makerootdialog"をConversation.sendasync()を使ってformflowを呼び出して呼び出しています。フォームフローが完了したら、私はその.Done()メソッドを呼び出しています。新しい要求があると、Conversation.SendAsync(...)を使用して別のダイアログを呼び出していますが、その呼び出し元のフォームフローを再び呼び出す部分(図のように)に移動します。 –

関連する問題

 関連する問題