Как мне предложить пользователю повторно ввести ввод для предыдущего шага водопада, если он / она обнаружит, что введенный ввод неверен - PullRequest
0 голосов
/ 28 мая 2020

Сценарий следующий:

В случае, если введенные пользователем данные кажутся неправильными на этапе водопада (например, неправильное имя, неправильная дата) Пользователь хотел бы ввести последний ввод еще раз, сказав «(повторно войти)» или (введите еще раз).

Это как если бы в диалоговом окне водопада было три шага: Шаг1-> Шаг2-> Шаг3

После ввода данных для Шага 2, если пользователь видит, что ввод неверен, он хотел бы прервать поток, произнеся любое из слов, упомянутых выше, чтобы ввести ввод для предыдущего шага.

Я не смог найти способ go вернуться к предыдущему водопаду step.

Для go возврата к предыдущему шагу доступно несколько решений, но мне не удалось воспроизвести то же самое в python.

Link1: - Bot framework v4. 0 как выполнить предыдущий шаг водопада в диалоговом окне

Link2: - https://pauliom.com/2018/08/08/manipulating-waterfall-steps-botframework-v4/

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

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

То, что вы можете использовать, это Валидаторы , проверьте эту статью для получения дополнительной информации или найдите ниже фрагменты кода [c #] в качестве резюме.
Я также добавил в конце фрагмент Python

Когда пользователь отвечает на ваше приглашение, будет запущена проверка. Если проверка вернет false, пользователю будет отправлено приглашение повторить попытку

Нет необходимости go вернуться к предыдущему шагу, если вы реализуете валидаторы

            AddDialog(new TextPrompt("TextPromptId", UserNameValidation));
            AddDialog(new NumberPrompt<int>("NumberPromptId", MobileNumberValidation));
            AddDialog(new ChoicePrompt("ChoicePromptId", ChoiceValidataion));

Username Validator:


    private Task<bool> UserNameValidation(PromptValidatorContext<string> promptContext, CancellationToken cancellationToken)  
           {  
               return Task.FromResult(true);  
           } 

Валидатор выбора:



    private Task<bool> ChoiceValidataion(PromptValidatorContext<FoundChoice> promptContext, CancellationToken cancellationToken)  
            {  
                return Task.FromResult(true);  
            }  

Валидатор для мобильных телефонов:




    private async Task<bool> MobileNumberValidation(PromptValidatorContext<int> promptcontext, CancellationToken cancellationtoken)  
            {  
                if (!promptcontext.Recognized.Succeeded)  
                {  
                    await promptcontext.Context.SendActivityAsync("Hello, Please enter the valid mobile no",  
                        cancellationToken: cancellationtoken);  

                    return false;  
                }  

                int count = Convert.ToString(promptcontext.Recognized.Value).Length;  
                if (count != 10)  
                {  
                    await promptcontext.Context.SendActivityAsync("Hello , you are missing some number !!!",  
                        cancellationToken: cancellationtoken);  
                    return false;  
                }  

                return true;  
            }   

Я не разработчик Python, но вы нашли образец python в Здесь на вкладке Python и в приведенном ниже фрагменте:

async def age_prompt_validator(prompt_context: PromptValidatorContext) -> bool:
    # This condition is our validation rule. You can also change the value at this point.
    return (
        prompt_context.recognized.succeeded
        and 0 < prompt_context.recognized.value < 150
    )

Надеюсь, что это поможет

0 голосов
/ 02 июня 2020

Вы можете построить что-нибудь, используя подсказку выбора в конце каждого шага, используя диалоги компонентов. Пользователь вводит имя, бот отвечает: «Это то, что вы ввели?» Пользователь подтверждает «да», запускается следующий шаг, пользователь говорит «нет», это диалоговое окно запускается повторно.

Ранее в этом месяце у меня был аналогичный вопрос Повторение шага диалогового окна на основе проверки

...