今私はMicrosoft.Bot.Builder.Dialogs.Conversation.SendAsync
とMicrosoft.Bot.Builder.Dialogs.Conversation.ResumeAsync
を使って会話を一時停止して再開する方法を実装していますが、「終了」や前の状態に戻ることは不可能です。それは会話ダイアログに詰まっています。Botフレームワーク:会話を終了するには?
「キャンセル」コマンドを実装するだけですか?その場合、元の状態に戻るためにはどのデータを消去する必要がありますか?
public static readonly IDialog<string> dialog = Chain
.PostToChain()
.Switch(
new Case<Message, IDialog<string>>((msg) =>
{
var regex = new Regex("login", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
}, (ctx, msg) =>
{
return Chain.ContinueWith(new ChatDialog(msg),
async (context, res) =>
{
var token = await res;
//var valid = await Helpers.ValidateAccessToken(token);
//var name = await Helpers.GetProfileName(token);
var name = "User";
context.UserData.SetValue("name", name);
return Chain.Return($"You are logged in as: {name}");
});
})
).Unwrap().PostToUser();
私は「ログイン」を送信する場合それは行くと開始新しいChatDialog
会話をこの状態にはまり込むように思われます。別のコマンドを送信しようとしても、ログインを要求し続けます。 'キャンセル'コマンドを処理する別のCase
クラスを実装していますか?または、ユーザーが同じ「ログイン」コマンドを複数回送信すると、自動的に会話をキャンセルする必要がありますか?別々に 'キャンセル'コマンドを送信する必要があるような気がします。
結局のところ、解決策を見つけましたか?私は同じ問題を抱えている。 – K48