Перенос кода из Bot Framework V3 в V4 - PullRequest
0 голосов
/ 09 января 2019

У меня больше вопросов при переносе диалога с V3 на V4. ниже наш код. В v3 мы использовали

Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync(conversationContext.CurrentActivity, new RootDialog());

public class RootDialog : IDialog {
    public RootDialog()
    {
      .....
    }

    public async Task StartAsync(IDialogContext context)
    {
        context.Wait(this.MessageReceivedAsync);
    }

    public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
    }

В MessageReceivedAsync мы использовали context.Wait (), context.Done () и context.PostAsync (). Можете порекомендовать, как заменить в V4? А что за оповещение для Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync в V4?

1 Ответ

0 голосов
/ 09 января 2019

Все эти API пропали. Вот объяснения их замены в V4:

context.Wait (...)

Этот метод использовался, чтобы сообщить диалоговой системе, какой метод вызывать следующий в вашем классе, когда новая активность прибыла, а теперь исчезла. Вместо этого вы теперь создаете подкласс Dialog и переопределяете несколько методов для различных событий жизненного цикла:

  • BeginDialogAsync - вызывается, когда диалог впервые помещается в стек с помощью кода бота или другого диалога, вызывающего BeginDialogAsync для DialogContext.
  • ContinueDialogAsync - вызывается, когда приходит новое действие, и бот вызывает ContinueDialog на DialogContext.
  • ResumeDialogAsync - вызывается, когда завершено другое диалоговое окно в стеке, а диалоговое окно, которое ранее находилось в стеке, теперь находится наверху стека.
  • RepromptDialogAsync - вызывается, когда сделан явный запрос на повторную опровержение пользователя. По сути, это способ сообщить диалоговому окну, что ничего не изменилось, но что его следует продолжить с того места, где он остановился, отправив все действия, которые он отправил в последний раз.
  • EndDialogAsync - вызывается, когда диалоговое окно указало, что оно выполнено и выталкивается из стека.

context.Done () /. Сбой ()

Это был один из способов, которым вы сообщали о состоянии вашего диалога, но теперь это достигается путем возврата DialogTurnResult из большинства вышеупомянутых методов жизненного цикла. Одно из свойств называется Status и имеет тип DialogTurnStatus, значения которого указывают на текущее состояние диалога. Например:

  • Waiting - диалоговое окно отправило некоторые действия и ожидает большего ввода и должно оставаться на вершине стека.
  • Complete - диалог завершил свою работу и должен быть завершен и вытолкнут из стека. Когда это состояние возвращается, вызывающие могут также исследовать выходные данные диалогового окна (если оно есть), которое передается обратно через свойство DialogTurnResult::Result.
  • Cancelled - диалог был частично отменен во время его работы.

context.PostAsync () / Conversation.SendAsync

Они оба были использованы для ответа пользователю. И то, и другое теперь заменяется вызовом SendActivityAsync для ITurnContext, который доступен через свойство Context экземпляра DialogContext, который передается большинству вышеупомянутых методов жизненного цикла в качестве параметра. ПРИМЕЧАНИЕ: пара методов жизненного цикла фактически получает параметр ITurnContext напрямую, а затем вы просто используете его.

...