В помощь мобильному разработчику
Microsoft Bot Framework

Добавляем диалоги в приложение при помощи Bot Framework

Александр Алексеев

В технологии появляется новый тренд — концепция диалоговых вычислений. В отличие от вызова серий команд при помощи нажатий и кликов в этом случае команды будут извлекаться из естественных диалогов. Мы используем диалог в качестве органичного пути для взаимодействия с аналоговым миром, и Xamarin позволяет легко добавлять нативный диалоговый интерфейс к цифровому миру и к Вашему будущему приложению. Стоит объединить интерфейс чата с Microsoft Bot Framework, и в результате получается естественный диалог, который позволяет Вам взаимодействовать с пользователями новым, но знакомым образом.

 

Интерфейс чата в приложении

Сильной стороной использования диалога в качестве интерфейса является то, что функция диалога устроена очень естественно, бесшовно и интуитивно понятно. В целях содействия такому взаимодействию важно достигать того, чтобы пользовательский интерфейс воспринимался естественно. С Xamarin можно спроектировать такой интерфейс, который прекрасно впишется в ожидания от платформы приложения. Чтобы это продемонстрировать мы разработаем интерфейс чата под iOS, навеянный приложением Xamarin Shopping. Мы спроектируем такой интерфейс, который будет действовать как чат-клиент для поддержки пользователей приложения покупок. Чтобы приступить к работе, мы создадим пустое приложение (iPhone) в Visual Studio.

Наше приложение iOS будет использовать чудесный контроллер представления сообщений под названием JSQMessagesViewController, который доступен в магазине компонентов Xamarin. Наверняка Вы сумеете без проблем подключить его к проекту, открыв Component Store и добавив к приложению JSQMessagesViewController.

Кроме того, поскольку мы будем осуществлять некоторые вызовы HTTP, мы должны также добавить System.Net.Http через диалоговое окно Add Reference.

Теперь, когда основной подготовительный этап пройден, мы можем приступить к написанию кода! И наша первоочередная задача — добавить в приложение UIViewController, ведь именно он будет основой для интерфейса чата. В качестве примера я создал UIViewController с названием ChatPageViewController и базовым классом MessagesViewController.

После того как контроллер представлений будет создан, нам следует объявить несколько переменных, заданных на уровне класса, и создать экземпляр объекта HttpClient для управления обменом данными с ботом в Azure. Переменные уровня класса должны выглядеть следующим образом:

 

В методе ViewDidLoad мы должны создать экземпляр объекта HttpClient, используя объявленную нами переменную уровня класса, а также установить ряд параметров просмотра и напечатать приветственное сообщение. Метод ViewDidLoad должен выглядеть следующим образом:

 

Поскольку наш MessageViewController является фактически кастомизированным UICollectionViewController, мы должны добавить определённые методы, чтобы создать

UICollectionView.

Наконец, есть несколько классов для создания и обработки сообщений и идентификаторов.

 

Теперь, когда все нужные объекты созданы и переменные установлены, можем приступить к отправке и получению сообщений от нашего бота! Наша первоочередная задача состоит в том, чтобы указать реакцию на нажатие кнопки «отправить». Здесь нам нужно собирать сообщения, отображать определённые индикаторы и отправлять сообщение к боту:

 

Теперь мы добрались до последней части нашего кода, контроллера представления — и им является метод SendMessage. Здесь мы возьмём ввод текста из PressedSendButton и будем обмениваться данными с нашим ботом посредством Directline.

 

И, наконец, мы должны использовать AppDelegate для запуска ChatPageViewController при открытии приложения, и мы сделаем это с помощью:

 

Сейчас, когда приложение создано, нам необходимо настроить бота для диалога.

 

Добавление Microsoft Bot Framework

Сервис бота состоит из двух частей, правая из которых — это language processor (LUIS), а вторая — приложение Bot Service, которое мы будем размещать в Azure. Для наших целей мы импортируем пользовательское приложение LUIS, созданное специально для этого примера. Чтобы произвести настройку LUIS, Вам нужно отправиться на luis.ai и зайти туда, используя учетную запись Microsoft. После того как Вы попадете на главную страницу, нужно кликнуть на New App (новое приложение), а затем на Import Existing App (импорт существующего приложения).  Вы можете загрузить приложение LUIS в формате JSON на GitHub.

Теперь, когда сервис LUIS создан, настало время заняться созданием приложения бота! Возможно, Вы заметили, что для клиента нам нужно создать только несколько вызовов HTTP. Это происходит потому, что большая часть процесса обработки диалога выполняется в рамках приложения Bot Service. Это позволяет использовать один и тот же сервис Bot для различных платформ, в том числе для интеграций, в частности, со Skype. Приступая к работе, не забудете убедиться в том, что у вас установлен шаблон бота. Эти элементы могут быть загружены со страницы Bot Framework page.

Проект бота содержит в себе контроллер и диалог. Шаблон по умолчанию включает в себя контроллер, который возвращает ввод (echo input back) пользователю. Как только наш диалог будет настроен, мы вернёмся к контроллеру и предложим ему использовать вновь созданный диалог. Для того чтобы создать диалог добавьте новый файл класса в ваш проект, назвав его как-нибудь осмыслено. Сам класс должен наследовать от базового класса LuisDialog, и, кроме того, его следует обозначить как [Serializable].

В этом самом классе нам нужно создать метод для каждого Intent, определенный в нашем приложении LUIS.

 

Как вы можете видеть из фрагмента кода, мы создаем метод public async, который возвращает Task и принимает IDialogContext и LuisResult в качестве входных данных. IDialogContext является диалогом, который выполняется, в то время как LuisResult — это строка JSON, вернувшаяся из службы LUIS. Кроме того, этот метод помечен атрибутом [LuisIntent(«»)], и он обозначает тот LUIS Intent метод, который предназначен для ответа. Когда Intent является пустым, он перехватывает  любой фрагмент активной речи, которая не может быть сопоставлена с известным Intent. В случае если этот метод был предназначен для обработки всех фрагментов активной речи, которые сопоставляются с целью «Обслуживания клиентов», тогда мы бы пометили этот метод с атрибутом [LuisIntent(«CustomerService»)]. Тем не менее так как это всеохватывающий intent, в наших интересах сообщить пользователю о том, что сказанное им было непонятно, и предположить альтернативные варианты того, что предположительно могло быть им сказано. Мы вывешиваем сообщение пользователю через context.PostAsync(message) и отмечаем этот диалог как завершенный.

Для более сложных диалогов или тех, в которых должны произойти другие задачи или поиск данных, может возникнуть необходимость обратиться к другим методам от одного из отмеченных LuisIntent методов. Например, следующий фрагмент кода из отмеченного LuisIntent метода обозначает обработчик завершения для вызова после получения результатов вопроса, заданного пользователю.

 

В этом усеченном методе мы обнаруживаем, что пользователь задает вопрос относительно своего пароля, и нам необходимо верифицировать пользователя путём запроса адреса его электронной почты. PromptDialog.Text запрашивает информацию от пользователя, а также содержит обработчик завершения, который вызывает SupportUsernameEntered.

 

В рамках этого метода, мы подтверждаем учетную запись, и отправляем на электронную почту инструкцию по сбросу, если аккаунт был найден. Как только сообщение будет отправлено, мы можем решить, что поставленная цель выполнена, и завершить диалог. С тем чтобы получался естественный диалог между пользователем и приложением, служба Bot должна включать в себя много подобных цепочек речевого общения. Большую часть этих дочерних действий можно также определить и в LUIS, хотя в нашем примере разговор является более базовым и линейным.

Теперь, когда базовый Bot создан, нам нужно опубликовать бота в Azure. В этом нам может помочь официальная документация.

И, наконец, нам нужно настроить службу для обмена данными с ботом в Azure, используя сервис под названием Direct Line. Это обычная служба REST, которая позволяет установить связь между пользовательским клиентом и ботом. Документация Direct Line охватывает требуемые шаги для подключения DirectLine к экземпляру бота. Как только Direct Line будет настроена, Вы должны изменить переменную DirectLineKey в iOS View Controller в соответствии с API Key для Direct Line.

Вот и все! При запуске приложения мы сможем по-настоящему побеседовать с нашим ботом как показано ниже:

Framework Microsoft Bot — это невероятно мощная система, и мы здесь затронули лишь самую малую часть того, чего с её помощью можно достичь. Чтобы ознакомиться с полным примером, загрузите его с GitHub.

Автор: Cody Beyer
ИсточникОфициальный блог Xamarin

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Написать ответ