Botframework v4: опция Stepcontext

Я использую только Elastic-search. Поскольку я нашел solr, очень сложно начать. Функции Elastic-search:

  1. Легко запускается, очень мало настроек. Даже новичок может настраивать кластер поэтапно.
  2. Simple Restful API, который использует запрос NoSQL. И многие языковые библиотеки для легкого доступа.
  3. Хороший документ, вы можете прочитать книгу:. На официальном сайте есть веб-версия.
0
задан user10860402 25 February 2019 в 20:50
поделиться

2 ответа

@ Данте ответ правильный, но я сделаю его немного легче для понимания:

Допустим, у вас есть ParentDialog, который вызывает ChildDialog.

Если у вас был следующий класс:

public class OptionsPassed
{
    public string ParameterToPass { get; set; }
}
  1. Вызовите свой дочерний диалог, например: await stepContext.BeginDialogAsync(nameof(ChildDialog), new OptionsPassed { ParameterToPass = "ValueToPass" });

  2. иметь доступ к { ParameterToPass: "ValueToPass" } в любом месте в пределах ChildDialog с stepContext.Options.ParemeterToPass. Например, если вы хотите увидеть, какое значение вы передали:

Первый шаг из ChildDialog:

private static async Task<DialogTurnResult> FirstStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken = default(CancellationToken))
{
    var passed = stepContext.Options as OptionsPassed;
    await stepContext.Context.SendActivityAsync($"You passed in {passed.ParameterToPass}");
    return await stepContext.NextAsync();
}
0
ответ дан mdrichardson - MSFT 25 February 2019 в 20:50
поделиться

Что именно ты пытаешься сделать? stepContext.Options - это объект, который можно отправить при вызове Dialog либо с помощью BeginDialog, либо с помощью ReplaceDialog. Например:

await BeginDialogAsync(dialogId, sendobject, cancellationToken)

stepContext.Options - ваш способ получения этого объекта через вызываемый диалог.

Например, в первом документе основной диалог вызывает каждого дочернего диалога и отправляет им объект userInfo.Guest:

return await stepContext.BeginDialogAsync(TableDialogId, userInfo.Guest, cancellationToken);

И вызываемый диалог получает его и преобразует в строку в качестве проверки:

string greeting = step.Options is GuestInfo guest
            && !string.IsNullOrWhiteSpace(guest?.Name)
            ? $"Welcome {guest.Name}" : "Welcome";

Вы можете лишить проверки, и это будет выглядеть так, имея в виду, что это будет работать, только если отправляемый объект (userInfo.Guest) не равен нулю и может быть приведен в строка:

string greeting = (string)step.Options;

Имейте в виду, что: stepContext.Options; является объектом и должен быть приведен к правильному типу. Если вы не добавите проверку null / type, приведение может завершиться неудачей, и ваш бот может потерпеть крах. Это особенность фреймворка, но бот не требует его работы, и вы можете использовать другие способы отправки объектов через методы или классы.

0
ответ дан Dante Nahuel Ciai 25 February 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: