Ответ должен обрабатываться диалогом, переданным методу SendAsync
.
В диалоговом окне вы обычно будете иметь метод, который получает контекст и сообщение, отправленное пользователем. Например:
public async virtual Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var message = await result;
}
В StartAsync
методе диалога вы должны установить этот метод, как тот, который будет вызываться один раз пользователь посылает сообщение боту
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
Тогда это вам решать, что делать после получения сообщения.
Вы хотите использовать PromptDialog
, например. Подтвердить? Вы можете просто создать диалоговое окно, вызвать его и получить результат в методе ResumeAfter<bool>
.
PromptDialog.Confirm(context, ResumeAfterPrompt, "prompt dialogue", "retry dialog", 3);
private async Task ResumeAfterPrompt(IDialogContext context, IAwaitable<bool> result)
{
try
{
// try get user response
bool response = await result;
await context.PostAsync($"You said: {result}");
}
catch (TooManyAttemptsException)
{
// handle error
}
// wait for another message from the user. Could be the same method or a new one following the same signature.
context.Wait(this.MessageReceivedAsync);
}
Вы хотите использовать FormFlow? Вы также просто создаете экземпляр FormDialog
и получите результат в методе ResumeAfter<T>
, который вы определяете.
Это всегда один и тот же шаблон при работе с несколькими диалогами (приглашения и формы - это диалоги!): Вызовите диалог, получите результат в методе ResumeAfter и дождитесь появления нового сообщения пользователя.
Все эти понятия хорошо объяснены и также продемонстрированы в Multi-Dialogs sample. Пройдите через readme и кодовую базу, и вы поймете, что я объяснил. В этом примере отображаются подсказки, FormFlow, настраиваемые диалоги и т. Д. Here есть еще несколько деталей.
Я не уверен, если я буду следовать за вами ... ответ должен обрабатываться диалогом, переданным методу SendAsync ... –
Не помешало бы мне использовать FormFlow, PromptDialog и т. Д., Так как они внутренне PostAsync в контексте? –
Совсем нет ... вы можете использовать диалоговые окна и внутри этих диалоговых окон вызывать FormFlow или любой тип подсказки. Дайте мне знать, если вам нужны примеры. –