Уже достаточно давно я отправлял несколько небольших, но нужных изменений в репозиторий BotBuilder и вот, наконец, они были добавлены в основную ветку репозитория. Данные изменений попадут в версию 3.X SDK, о четвёртой версии я напишу позже.
Сортировка полей в FormFlow
Ранее при использовании FormFlow, порядок полей, выводимых в чат-боте, определялся только их положением в классе, то есть как они описаны в самом классе, точно так же они и передавались в чат-бот. При необходимости изменить порядок заполнения нужно было менять какие-то поля местами, что не всегда удобно.
Для решения данной проблемы я добавил атрибут OrderAttribute
, который принимает в качестве параметра числовое значение. Порядок вывода полей, обозначенных данным атрибутом, определяется по возрастанию их значений. По умолчанию, значение для параметра ноль.
Для примера, создадим класс, содержащий следующие значения:
public string Description;
public string FirstName;
public string LastName;
public int Age = 18;
public string Phone;
С помощью возможностей FormFlow добавим заполнение данных полей используя чат-бот.
Как можно увидеть, порядок соответствует расположению самих полей. Используя атрибут Order
данный порядок можно изменить.
[Order(10)]
public string Description;
[Order(2)]
public string FirstName;
[Order(1)]
public string LastName;
public int Age = 18;
[Order(-1)]
public string Phone;
После этого, чат-бот будет запрашивать заполнение данных полей в требуемом порядке:
Коммит, добавляющий данное изменение, можно увидеть здесь: https://github.com/Microsoft/BotBuilder/commit/4fbea59c57cece4e26c609c175e7d378784988ec
Множественная валидация для вложений в FormFlow
Использование вложений в FormFlow полезно и удобно, но оставался один не доработанный момент. Фактически сразу как добавили этот функционал я понял, что мне не хватает валидации для нескольких типов файлов. То есть, когда мне нужно добавить именно .png
изображение или .docx
файл, то всё работает отлично. Но обычно для пользователя представляется возможным загрузить вложения в различных форматах, если это изображения, то, например в jpg
и png
, если это документ, то pdf
, doc
, docx
. Добавленное изменение позволяет задавать несколько типов вложений, разделив допустимые вертикальной чертой.
[AttachmentContentTypeValidator(ContentType = "png|jpg|bmp")]
public AwaitableAttachment Image;
После этого можно передавать только файлы указанных расширений:
Коммит, добавляющий данное изменение, можно увидеть здесь: https://github.com/Microsoft/BotBuilder/commit/7e5d45987db6a12c3ff3e7b36144947b95342bc3
Несколько полезный ссылок:
Видеоурок работы с FormFlow: http://flash2048.com/post/creating-chat-bots-on-the-microsoft-bot-framework-part6
Описание работы с вложениями в чат ботах: http://flash2048.com/post/microsoft-bot-framework-how-to-add-attachments-to-formflow
Приятного программирования.