Использование программы викторины FormFlow Bots Framework

Наша сборка бота выполняет для пользователя «личностную викторину». Подумайте о Buzzfeed.

У меня есть множество атрибутов, которые я хочу увеличить, только целые числа, на основе выбора пользователя в форме, а затем вернуть конечный результат. Используя Sandwichbot в качестве шаблона, вы спрашиваете что-то вроде (перефразировано):

Вы любите помогать другим? да нет

Код похож:

                       .Confirm(async (state) =>
                       {

                        switch (state.HelpYesNo)
                        {
                            case true: HelpfulValue++; break;
                            case false: HurtfulValue++; break;
                        }
                        return new PromptAttribute("Thanks, choose OK to continue.");

Он работает нормально, но я ненавижу то, что мне приходится заставлять пользователя «Подтвердить», набирая ОК. Это дополнительный шаг, особенно если им приходится делать это после каждого вопроса.

Я попытался написать это с помощью проверки, например, validate: async (state, response) => Что дает лучший пользовательский опыт, но на самом деле не запускает switch-case. Я думаю, что форматирование переключателя не в том месте для валидации? Я не уверен в синтаксисе здесь, чтобы получить «проверку» для обработки дела.

Как правильно сделать что-то подобное в FormFlow?


person Amanda Lange    schedule 04.05.2017    source источник


Ответы (1)


Попробуйте что-нибудь подобное. Логические поля также приводят к ответу на вопрос "да / нет".

[Serializable]
public class QuizForm
{
    public int HelpfulValue;
    public int HurtfulValue;

    [Prompt("Do you like to help people? {||}")]
    public bool HelpPeople;

    public static IForm<QuizForm> BuildForm()
    {
        return new FormBuilder<QuizForm>()
                .Message("Let the quiz begin...")
                .Field(nameof(HelpPeople), validate: ValidateBool)
                // other fields
                .Build();
    }

    private static async Task<ValidateResult> ValidateBool(QuizForm state, object value)
    {
        var TrueOrFalse = (bool) value;

        switch (TrueOrFalse)
        {
            case true: state.HelpfulValue++; break;
            case false: state.HurtfulValue++; break;
        }

        return new ValidateResult{IsValid = true, Value = value};
    }
}
person Xeno-D    schedule 05.05.2017
comment
Ах, спасибо! Это сработало, за исключением одной опечатки - заменил SimpleForm на QuizForm в вашем ValidateBool. Спасибо за помощь! - person Amanda Lange; 05.05.2017