поэтому прямо сейчас я использую Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync
и Microsoft.Bot.Builder.Dialogs.Conversation.ResumeAsync
, чтобы реализовать способ приостановки и возобновления разговора, но кажется невозможным «выйти» или вернуться в предыдущее состояние. Он застрял в диалоге разговора.
Могу ли я просто выполнить команду «Отмена»? Если да, то какие данные мне нужно очистить, чтобы они вернулись в исходное состояние?
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
для обработки команды «Отмена»? Или он должен автоматически отменять разговор, когда пользователь отправляет одну и ту же команду «войти» более одного раза? Кажется немного неуклюжим, если нужно отправлять команду «отменить» отдельно.