Microsoft bot Framework v.4 - передает данные из одного dilogflow в другой - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь передать данные между двумя диалогами в MS Bot Framework 4. Но, это не работает.Я использовал stepContext.Values.Но он не может пересылать данные в другой диалог.Я своего рода новичок в Microsoft Bot Framework.Был бы признателен, если кто-то может помочь мне.

Первый диалог:

public class Step1Dialog : WaterfallDialog
{
    public Step1Dialog(string dialogId, string dataA, IEnumerable<WaterfallStep> steps = null) : base(dialogId, steps)
    {
        AddStep(async (stepContext, cancellationToken) =>
        {              
            var choices = new List<Choice>();

            for (int i = 1; i<3; i++)
            {
                choices.Add(new Choice { Value = "" + i.ToString()});
            }

            PromptOptions _choicePromptOptions = new PromptOptions { Choices = choices, Prompt = stepContext.Context.Activity.CreateReply("What type of help you want? \n 1. Help 1\n 2. Help 2" ) };

            return await stepContext.PromptAsync("choicePrompt", _choicePromptOptions);

        });

        AddStep(async (stepContext, cancellationToken) =>
        {
            stepContext.Values["mamun1"].Equals("Mamun");

            var response = (stepContext.Result as FoundChoice)?.Value;

            if (response == "1")
            {
                return await stepContext.BeginDialogAsync(Help1.Id);
            }

            if (response == "2")
            {
                return await stepContext.BeginDialogAsync(Help2.Id);
            }

            return await stepContext.NextAsync();
        });

        AddStep(async (stepContext, cancellationToken) => { return await stepContext.ReplaceDialogAsync(Id); });
    }

    public static string Id => "step1Dialog";
    public static string data;
    public static Step1Dialog Instance { get;} = new Step1Dialog(Id,data);
}

Второй диалог:

public class Help1 : WaterfallDialog
{
    public Help1(string dialogId, string dataA, IEnumerable<WaterfallStep> steps = null) : base(dialogId, steps)
    {
        AddStep(async (stepContext, cancellationToken) =>
        {
            string msgFromPreviousDilog = (string) stepContext.Values["mamun1"];
            await stepContext.Context.SendActivityAsync($"Hi" + msgFromPreviousDilog );
            return await stepContext.EndDialogAsync();
        });

        AddStep(async (stepContext, cancellationToken) => { return await stepContext.ReplaceDialogAsync(Id); });
    }

    public static string Id => "help1";
    public static string data;
    public static Help1 Instance { get;} = new Help1(Id,data);
}

1 Ответ

0 голосов
/ 26 февраля 2019

У вас есть несколько вариантов здесь.Я объясню два из них.

Вариант 1: параметры диалога

Сначала вы передадите данные в качестве аргумента BeginDialogAsync:

return await stepContext.BeginDialogAsync(Help1.Id, "Mamun");

Затемвы должны получить данные, используя состояние DialogInstance:

string msgFromPreviousDilog = (string)stepContext.ActiveDialog.State["options"];

Обратите внимание, что данные, передаваемые в качестве параметров диалога, сохраняются между поворотами.

Опция 2: Состояние поворота

Если вам не нужны данные для сохранения между поворотами, вы всегда можете использовать состояние поворота.Вы можете добавить данные для изменения состояния следующим образом:

stepContext.Context.TurnState.Add("mamun1", "Mamun");

И вы можете получить их следующим образом:

string msgFromPreviousDilog = (string)stepContext.Context.TurnState["mamun1"];
...