Microsoft Bot Framework: как заполнить значения полей потока формы на основе ввода пользователя для предыдущего поля
У меня есть следующие атрибуты для случая потока формы:
public enum Offices{}
[Describe("Country")]
public string Country;
[Prompt("Which office are you working in?{||}")]
public Offices Office;
Я хочу заполнить офисы согласно указанной стране. Например, если пользователь вводит Индию как поле Страна, я хочу, чтобы офисы были в Мумбаи, Нью-Дели и Пуне. Если пользователь входит в ОАЭ, я хочу, чтобы офисы были в Дубае, Абу-Даби и т. Д.
Как мне этого добиться?
1 ответ
Это похоже на вопрос " Как использовать enum категории и подкатегории в среде ботов C#?", По крайней мере, в том, как делать то, что вам нужно.
Используя FormBuilder вы можете динамически определять свою форму. Полные документы по FormBuilder находятся здесь.
Возвращаясь к предыдущему ответу StackOverlfow, вы используете FieldReflector, и это позволит вам настроить асинхронный делегат. В этом делегате вы должны построить список городов на основе значения state.Country. Это будет выглядеть примерно так:
public static IForm<Offices> BuildForm()
{
return new FormBuilder<Offices>()
.Message("Welcome!")
.Field(nameof(Country))
.Field(new FieldReflector<Offices>(nameof(Office))
.SetType(null)
.SetDefine(async (state, field) =>
{
//// Define your Officelogic here
switch (state.Country)
{
Country.Dubai:
////logic to add Dubai city
break;
Country.UAE:
////logic to add UAE cities
break;
default:
break;
}
return true;
}))
.Build();
}