Как я могу вернуться к предыдущему разговору с пользователем после нажатия кнопки «Назад» в диалоговом окне подтверждения?

В настоящее время я работаю над технологией платформы Bot, в одном из моих проектов я хочу вернуться к разговору с пользователем, как только я нажму кнопку «Назад» в ФОРМЕ, как показано на рисунке ниже. введите здесь описание изображения

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

Как я могу разрешить описанный выше сценарий?


person Pradeep    schedule 17.06.2016    source источник
comment
Я не уверен, что понимаю, о чем вы спрашиваете. Можете ли вы быть более конкретным?   -  person Lars    schedule 03.12.2016
comment
На изображении выше, когда я нажимаю кнопку «Назад», он не переходит к диалоговому окну предыдущего шага. не могли бы вы сказать мне, как я могу вернуться к предыдущему разговору, когда я нажму кнопку «Назад».   -  person Pradeep    schedule 03.12.2016
comment
Так вы говорите, что это работало в эмуляторе, но не где-либо еще?   -  person Lars    schedule 06.12.2016
comment
Даже эмулятор тоже не работает.   -  person Pradeep    schedule 06.12.2016


Ответы (1)


Если это FormDialog, вы можете добавить шаги проверки для каждого элемента в форме. В вашем случае вы, вероятно, используете логическое значение «WantsToCreateAccount» или что-то в этом роде?

В вашем коде FormBuilder вы обычно делаете то, что я сделал здесь, в более простой форме:

public static IForm<UserData> BuildForm()
{
    return new FormBuilder<UserData>()
            .Message("Before we start, let me ask you a couple of questions")
            .AddRemainingFields()

            .Field(new FieldReflector<UserData>(nameof(IsCustomer))
                .SetValidate(async (state, value) => await ValidateIsCustomerFieldAsync(state, value)))

            .Field(new FieldReflector<UserData>(nameof(HasCustomerId))
                .SetValidate(async (state, value) => await ValidateHasCustomerIdFieldAsync(state, value)))

            .Build();
}

Ключом здесь является SetValidate, где вы можете применить любую логику после проверки этого поля, т.е.

private static Task<ValidateResult> ValidateHasCustomerIdFieldAsync(UserData state, object value)
{
    if( (SvarAlternativ) value == SvarAlternativ.Nej)
    {
        state.CustomerId = "Kund, har inte Id";
    }
    return Task.FromResult(new ValidateResult { IsValid = true, Value = value });
}

Обратите внимание, что значение BOOLEAN сложно проверить, потому что это тип значения, который не может быть нулевым, поэтому средство проверки не увидит, имеет ли оно состояние «NoValue» или «false». Из-за этого я только что создал перечисление, где нулевое значение — это состояние «NoValue», установленное фреймворком бота:

public enum SvarAlternativ
    {
        NoValue,
        Ja, 
        Nej
    }

Надеюсь, это поможет вам. Оказавшись внутри метода проверки, вы можете использовать context.close или делать все, что вам нужно.

person Pedro G. Dias    schedule 21.04.2017