Microsoft Bot Framework: как заполнить значения поля потока формы на основе ввода пользователя для предыдущего поля

У меня есть следующие атрибуты для случая потока формы:

public enum Offices{}

[Describe("Country")]
public string Country;
[Prompt("Which office are you working in?{||}")]
public Offices Office; 

Я хочу заполнить офисы в соответствии с указанной страной. Например, если пользователь вводит Индию в поле «Страна», я хочу, чтобы офисы были в Мумбаи, Нью-Дели и Пуне. Если пользователь входит в ОАЭ, я хочу, чтобы офисы были в Дубае, Абу-Даби и т. д.

Как я могу этого добиться?


person Nour Rteil    schedule 04.10.2018    source источник


Ответы (1)


Это вопросы, аналогичные "Как использовать категорию перечисления и подкатегорию в бот-фреймворке 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();
}
person Ed Boykin    schedule 04.10.2018