После отображения карты, как продолжить поток диалога с водопадом в SDK v4.4 - PullRequest
2 голосов
/ 07 июня 2019

Я имею в виду пример кода и попробовал простой сценарий для отображения карты. Как продолжить waterfall_Dialog после показа карты?

Я имею в виду пример кода 05.multi-turn-prompt и 06.using-cards - (https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/05.multi-turn-prompt/dialogs/userProfileDialog.js)

      ...this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [
        this.initialData.bind(this), 
        this.displayCard.bind(this),    
        this.text.bind(this)
    ])); ...

async run(turnContext, accessor) {
   ...}

async initialData(step) {
    return await step.prompt(NAME_PROMPT, `Type anything to display card`);
} 

async displayCard(step) {
   await step.context.sendActivity({ attachments: [this.createAdaptiveCard()]});                
}

async text(step) {
    console.log("step.res"+step.context.activity.text);
    await step.context.sendActivity("Thank you for selecting an option");

}

async displayCard(step) {
   await step.context.sendActivity({ attachments: [this.createAdaptiveCard()]});                
  return await this.text(step);
} 

Для отображения карты и продолжения водопада Диалог.

После отображения карты она должна продолжить поток и отобразить «Спасибо за выбор опции»,

  1. Но он идет к Begin_Dialog и запрашивает «Введите что-нибудь для отображения карты»

  2. Если я попробую другой подход, вызовите следующий диалог. Я получаю "Ой. Что-то пошло не так!" "[onTurnError]: TypeError: Невозможно прочитать свойство 'status' из неопределенного"

1 Ответ

0 голосов
/ 08 июня 2019

Чтобы перейти к следующему шагу диалога, вам необходимо вызвать NextAsync, следуя шагу, который включает карту.

Например,

private async Task<DialogTurnResult> StartSelectionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    // Set the user's age to what they entered in response to the age prompt.
    var userProfile = (UserProfile)stepContext.Values[UserInfo];
    userProfile.Age = (int)stepContext.Result;

    if (userProfile.Age < 25)
    {
        // If they are too young, skip the review selection dialog, and pass an empty list to the next step.
        await stepContext.Context.SendActivityAsync(
            MessageFactory.Text("You must be 25 or older to participate."),
            cancellationToken);
        return await stepContext.NextAsync(new List<string>(), cancellationToken);
    }
    else
    {
        // Otherwise, start the review selection dialog.
        return await stepContext.BeginDialogAsync(nameof(ReviewSelectionDialog), null, cancellationToken);
    }
}

В приведенном выше фрагменте, если пользователь не в правильном возрасте, отображается сообщение, говорящее об этом. Вызывается return await stepContext.NextAsync(), который переводит диалог на следующий шаг. Если пользователь имеет возраст, то начинается новое диалоговое окно («ReviewSelectionDialog»). Фрагмент взят из документации "Создайте расширенный поток разговоров с использованием ветвей и петель", расположенной здесь , на которую вы можете ссылаться.

Надежда на помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...