FormFlow ChatBot на платформе Microsoft Bot Framework

Я пытаюсь создать чат-бота с помощью платформы Microsoft Bot Framework. Я создаю бота, управляемого пользователем, с помощью formflow. Я не могу найти правильный способ создания бота, в котором я отображаю другой набор параметров для выбора. Предположим, что первые параметры, которые я предоставляю, - это поддержка, контактные данные и другая информация, когда пользователь выбирает, я должен отображать набор параметров, а когда он выбирает контактные данные, я бы отобразил другой набор параметров, другой набор для другой информации. Как мне это сделать? Кто-нибудь может подсказать?

namespace Microsoft.Bot.Sample.FormBot
{
public enum SupportOptions
{
    Specific,ErrorInformation,ContactInformation
};

[Serializable]
public class Specific
{        
    public ToolOptions? Tools;        
}

public enum ToolOptions
{
    Merge,Extend,Generate,Calculate,Memory
}

[Serializable]
public class SupportBox
{

    public SupportOptions? Sandwich;        

    public static IForm<SupportBox> BuildForm()
    {
        OnCompletionAsyncDelegate<SupportBox> processOrder = async (context, state) =>
        {
            await context.PostAsync("This is the end of the form, you would give a final confirmation, and then start the ordering process as needed.");
        };

        return new FormBuilder<SupportBox>()
                .Message("Welcome to the Support Bot!")
                .OnCompletion(processOrder)
                .Build();
    }
};
}

Когда пользователь впервые здоровается с ботом, он предлагает ему выбрать между Specfic, ErrorInformation и Contact. Теперь, когда он выбирает конкретную поддержку, я хочу отобразить ToolOptions.


person Manjunath S    schedule 10.08.2018    source источник
comment
Это немного расплывчато. У вас есть написанный код?   -  person Wookies-Will-Code    schedule 10.08.2018
comment
Добавил код к исходному вопросу.   -  person Manjunath S    schedule 11.08.2018
comment
Привет, @Manjunath, есть новости? Вы пробуете подход, которым я поделился в ответе, для достижения вашего требования?   -  person Fei Han    schedule 22.08.2018
comment
Большое спасибо @FeiHan. Оно работает. Теперь я использую несколько диалогов, чтобы направлять его в разные диалоговые окна, когда пользователь выбирает разные параметры.   -  person Manjunath S    schedule 03.09.2018


Ответы (1)


Предположим, что первые параметры, которые я предоставляю, - это поддержка, контактные данные и другая информация, когда пользователь выбирает, я должен отображать набор параметров, а когда он выбирает контактные данные, я бы отобразил другой набор параметров, другой набор для другой информации. Как мне это сделать?

Если вы хотите отображать tooloption и другие поля условно, вы можете попробовать использовать метод SetActive, чтобы указать, что поле должно быть включено только в том случае, если пользователь выбрал конкретный параметр. Следующий фрагмент кода предназначен для справки.

return new FormBuilder<SupportBox>()
        .Message("Welcome to the Support Bot!")
        .Field(nameof(supportoption))
        .Field(new FieldReflector<SupportBox>(nameof(tooloption))
        .SetActive(state=>state.supportoption== SupportOptions.Specific)
        )
        .Field(new FieldReflector<SupportBox>(nameof(contactinformation))
        .SetActive(state => state.supportoption == SupportOptions.ContactInformation)
        )
        .OnCompletion(processOrder)
        .Build();

Результат теста:

введите описание изображения здесь

person Fei Han    schedule 13.08.2018