Создание диалогового приложения

 

 

Инструментарий

 

Майкрософт предлагает удобную программную абстракцию в виде Bot Framework, которая позволяет начать достаточно просто создавать свои чат-боты, работающие сразу со многими каналами общения.

 

Создать своего бота, поддерживающего беседу с пользователем на английском языке можно с помощью
Microsoft Bot Framework (https://dev.botframework.com/).

Для работы с ботами используются следующие ключевые элементы:
 

  • Bot Builder SDK (доступен для C# и для Node.js)
    Предназначен для создания ключевой функциональности бота.
    Основан на WebAPI, и определяет протокол общения бота с внешним миром.
    В рамках SDK есть эмулятор, позволяющий отлаживать ботов, а также набор классов для упрощения реализации некоторых ключевых абстракций, таких, как продолжительные диалоги с состоянием.

  • Cognitive Services (составная часть Project Oxford)
    Позволяют упростить анализ естественного языка и выделение смысла из текстовых предложений.
    С помощью веб-интерфейса можно определить основные синтаксические конструкции, и автоматически присвоить им соответствующие намерения пользователя (intents), на которые затем будет реагировать бот.

  • Bot Connector (конфигурирует соединение бота на сайте botframework.com).
    Позволяет привязать бот к одному или нескольким каналам общения, таким, как Skype, Slack, Telegram и др.

  • Каталог ботов, в котором со временем можно будет публиковать ссылки на различные боты.

 

 

 

Создание облачного сервиса

 

Основа бота –  веб-сервис в облаке.

Для создания такого сервиса :

  • должен быть предустановлен пакет Visual Studio 2015 Update 1 с веб-инструментами.

  • нужно скачать Bot Framework Template для Visual Studio

  • полученный ZIP-архив положить в каталог с шаблонами Visual Studio
    (обычно это “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#".

После этого в Visual Studio можно создать новый проект типа Bot Application:

 

 


В созданном проекте за основную функциональность бота отвечает метод
Post
 в файле Controllers/MessagesController.cs.

Для простейшего Hello-бота этот метод реализуется следующим образом:
 

public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
var reply = 
message.Text.ToLower() == "hello" ?
"Hello!" :
"I do not understand you!";
return message.CreateReplyMessage(reply);
}
else
{
return HandleSystemMessage(message);
}
}

 

 

 

 

Тестирование бота

Тестирование бота:

  • необходимо предварительно скачать и установить Microsoft Bot Framework Emulator

  • проект запускается на локальном веб-сервере (F5)

  • из адресной строки открывшегося браузера копируется адрес (и порт!),

  • к адресной строке сайта необходимо дописать путь /api/messages

  • проект открывается в Microsoft Bot Framework Emulator.

 

 

Для простейшего бота можно использовать порт на C# известной программы Eliza. Получившийся чат-бот можно скачать в репозитории GitHub.

В первой версии схема построения бота мало чем отличается от приведенной выше программы, только для формирования ответа вызывается метод готовой библиотеки Eliza.

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

Чтобы это сделать, можно в явном виде смотреть на идентификатор сессии (message.ConversationID), использовать объекты BotUserData/BotConversationData, или же задействовать более прогрессивные API с поддержкой диалогов (о них мы расскажем в дальнейших статьях).

 

 

 

 

Запуск в облако

 

Чтобы запустить бота в облаке, нужно:

  • опубликовать получившися Web API в Azure.

  • войти на сайт http://dev.botframework.com 

  • зарегистрировать нового бота  придумав для него уникальный AppID

  • получить сгенерированный автоматически App Secret.

  • в файле Web.Config (диалогового приложения) добавить App ID и App Key:
     

<configuration>
<appSettings>
<add key="AppId" value="YourAppId" />
<add key="AppSecret" value="YourAppSecret" />
</appSettings>
  • повторно развернуть бота в облаке, чтобы Web Config обновился.

 

Теперь можно протестировать работоспособность бота в панели свойств на сайте Bot Framework (или  воспользоваться эмулятором, для чего надо будет ввести правильные AppID и App Secret):

 

 

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

 

 

Например, в Telegram можно создать новый бот для беседы со специальным ботом Bot Father, после чего получить Access Token, и предоставить его сайту Bot Framework.

После этого Bot Connector возьмет на себя все посреднические операции между Telegram API и ботом, и можно  общаться с ботом из Telegram.

13.04.2016

У Telegram меньше чем за год с момента запуска проекта создано более 3 500 ботов (список некоторых в магазине). Функции ботов разные:

17.04.2016

Руководство  Telegram объявило конкурс на лучшего бота. Призовой фонд конкурса составит миллион долларов. Разработчики лучших ботов будут получать гранты в размере от $25000.
Главными требованиями к ботам заявлены очень быстрая работа, полезность для достаточно большого количества людей, работа в инлайн-режиме (вызов бота через его никнейм из строки ввода в любом чате). Среди областей разработки ботов - искусственный интеллект и обработка естественных языков. 

 

 

 

Еще подробнее!

 

Очень подробно и обстоятельно про создание бота с нуля с помощью Bot Framework
см. в докладе в BUILD (видео 1 час +)

 

 

 

Skype Bot API

 

 

Отдельно для создания Skype-ботов (оптимизированных к возможностям Skype) существует Skype Bot API (позволяет создавать и видео-боты)

У Skype Bot API своя документация, свой каталог ботов и своя регистрация ботов.

Есть Skype SDK для Node.js и для C#. Можно их не использовать, а писать, например, на Python.

Подробнее см. Skype Bot SDK.

Видео о создании бота: https://channel9.msdn.com/events/Build/2016/T611

Подробности (на англ., требуется регистрация):

 

 

Murphy

 

Murphy создан в рамках проекта http://www.projectmurphy.net/.

Зайдя на сайт, можно установить Murphy себе в Skype (если используете последнюю версию, которая поддерживает ботов) и начать с ним общаться.

Murphy можно задавать вопросы вида

  • What if Cindy Crawford were a superman?

  • What if I were a programmer (в этом случае он попросит вас загрузить свою фотографию).

 

 

 

Чат-бот для Facebook

12.04.2016 На конференции F8 Facebook представила платформу для разработки ботов для своего мессенджера.

Чат-боты в Facebook построены на основе личных сообщений с публичной страницей от имени пользователя и для создания бота нужно создать:

  • публичную страницу, с которой будут общаться пользователи (ее название будет соответствоать имени бота)

  • зарегистрировать и настроить приложение в в аккаунте разработчика (для доступа к API) зайдя по ссылке developers.facebook.com/apps, нажав на добавление нового приложения, выбрав настройки вручную

  • в левом меню перейти на вкладку Messenger и «Начать».

  • выбрав страницу, созданную для бота, и копируя token (сохранить его где-нибудь, он пригодится дальше).

  • настроить webhook для обработки входящих сообщений закачав на сервер, где будет размещен бот, скрипт (в переменную $verify_token добавить какой-то текст):

<?php
$verify_token = ""; // Verify token
if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) {
echo $_REQUEST['hub_challenge'];
}

  • на вкладке Messenger в блоке «Webhooks» нажать «Setup Webhooks» и в поле «Обратный URL-адрес» указать адрес бота (SSL — сертификат обязателен)

  • в поле «Поля подписки» выбрать, уведомления получаемые на webhook:
    message_deliveries — уведомления о доставке сообщения
    messages — сообщения, написанные пользователем боту
    и др...

  • связать приложение и страницу

  • найти в мессенджере бота, отправить ему любое сообщение и получить от него ответ.

Бот будет доступен только для владельца аккаунта. Чтобы бот был доступен для всех, нужно:

  • на странице App Review — опубликовать приложение

  • запросить модерацию мессенджера (на вкладке Messenger, в блоке «App Review for Messenger» - кнопка «Request Permissions» - выбрать «pages_messaging» и нажать «Add items».

  • дождаться модерации (несколько дней....)

см. также:

 

 

kmp