Aditya, Настройте объект состояния для нужных вам сущностей. Это будет кто, что и когда, я думаю? Похоже, вы уже тренируете Луиса, поэтому убедитесь, что вы также тренируете его, чтобы улавливать сущности из высказываний. Когда Луис вернется с вашим новым намерением о встрече, у него также будут сущности, которые он смог извлечь. Сохраните найденные сущности в ваших государственных объектах. Теперь, когда вы выполняете шаги водопада, сначала проверьте объект состояния. Если у вас уже есть этот объект, пропустите запрос. Если вы этого не сделаете, продолжайте с подсказкой. Взгляните на этот образец на github. Это довольно сложно, но показывает, о чем я говорю. Особо обратите внимание на метод GetAllRequiredPropertiesAsync. Вот где samepl делает то, что я впервые описал. Вы на 100% на правильном пути, и это должно привести вас туда, куда вы хотите.
Я редактирую, чтобы добавить образец кода.
В коде с github конструктор объявляет два шага водопада:
var waterfallSteps = new WaterfallStep[]
{
GetAllRequiredPropertiesAsync,
BookTableAsync,
};
Метод GetAllRequiredPropertiesAsync проверяет каждую часть необходимых данных для резервирования таблицы. Метод очень длинный, поэтому я собираюсь показать только небольшой относящийся к делу фрагмент кода.
После кучи настроек этот фрагмент кода в конечном итоге запрашивает у пользователя любые фрагменты, отсутствующие в резервировании стола.
var options = new PromptOptions()
{
Prompt = MessageFactory.Text(reservationResult.NewReservation.GetMissingPropertyReadOut()),
};
// Start the prompt with the first missing piece of information.
return await stepContext.PromptAsync(GetLocationDateTimePartySizePrompt, options);
Теперь взгляните на GetLocationDateTimePartySizePrompt. Этот диалог объявлен на той же странице в строке 53. Он проверяет, завершено ли резервирование, если нет, он считывает то, что ему уже известно, а затем запрашивает остальное. Это происходит примерно так: 101, затем строка 109 в этом коде обрезана await promptValidatorContext.Context.SendActivityAsync(newReservation.GetMissingPropertyReadOut());
Этот метод объявлен здесь. Это действительно просто понять. Он вызывается повторно, пока не вернет пустую строку, означающую, что все свойства были заполнены.
надеюсь, это поможет
person
Ed Boykin
schedule
11.11.2018