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());
Этот метод объявлен здесь .Это действительно просто понять.Он вызывается несколько раз, пока не вернется пустая строка, означающая, что все свойства были заполнены.
Надеюсь, это поможет