Время чтения ~15 мин.

Привет друзья!

Если вы давно хотели попробовать себя в построении ботов, но думали что это сложно и не знали с чего начать, то отбросьте эти сомнения! В этой статье мы сделаем бота вместе.

Каждый уважающий себя бот должен уметь что-то делать. Поэтому наш бот будет сообщать курс валют. Надо сказать, это довольно актуально, учитывая последние события.

Созданного бота в конце статьи мы интегрируем с одним из мессенджеров. Однако, все это детали, а нам сейчас гораздо важнее понять общий принцип.

Итак, для того, чтобы начать нам потребуется следующее:

  1. Установить Node.js. На нем будет написан простой сервер нашего бота. «Почему Node.js?» — спросите вы. Ведь для этой цели нам отлично подошел бы и, например, Python. На этот вопрос я отвечу ниже.
  2. Для того, чтобы процесс написания сервера не вызывал боль, лучше использовать IDE. Я использовал Visual Studio Code. Не поленитесь и установите ее. С ней вам будет проще.
  3. Установить NGrok. NGrok — это утилита, которая позволит организовать удаленный доступ из интернета к нашему локальному серверу. Это нам очень пригодится, т.к. серверную часть бота мы «поднимем» на своей локальной машине. Для тестирования этого будет более чем достаточно.
  4. Создать аккаунт на cai.tools.sap. SAP CAI (Conversational Artificial Intelligence) — это платформа для разработки ботов. Создана в 2015 году во Франции, под названием Recast.AI. В январе 2017 года ее приобрел SAP и позднее переименовал.

После того, как эти пункты выполнены, можно приступить к самому интересному — созданию бота!

Поехали!

1. Создание нового бота.

После регистрации, находясь в профиле нажмем «+ New Bot».

Создание нового бота

2. Выбор «категории» бота

Далее, из предложенных вариантов выберем тот, что больше подходит нам по описанию. Выбираем правый вариант.

Выбор типа бота по выполняемым действиям

3. Заполнение атрибутов

Даем нашему боту имя, выбираем язык и политики, применяемые по отношению к пользователям и их данным.

Предварительная настройка бота

Наконец, определяем видимость бота (ее потом можно будет изменить, впрочем, как и предыдущие атрибуты) и нажимаем «CREATE A BOT».

Видимость бота

Итак, теперь у нас есть бот currencybot, но пока он ничего не умеет.

Давайте не надолго остановимся и постараемся запомнить следующие принципы:

  • Бот должен уметь понимать намерения (Intents) собеседника.
  • Для этого он распознает в выражениях (Expression) сущности (Entity).
  • Распознав в выражении сущность, бот понимает намерение собеседника и выполняет навык (Skill).
  • Навык состоит из действий (Actions).

Движемся дальше!

4. Создание намерения (Intents)

Давайте научим созданного бота понимать намерения (Intents) его собеседника. Так как основная функция нашего бота — возвращать курс валют, создадим намерение «get-the-exchange-rate».

Создание Намерения «Вернуть курс валют»

Отлично!

5. Создание сущностей (Entity)

Допустим собеседник отправил боту текст: «Курс рубля к евро». Как наш бот поймет намерения собеседника? Все просто. В тексте он будет искать ключевые слова — сущности (Entity).

Создадим 2 сущности:

RUBEUR — курс рубля к евро;

RUBUSD — курс рубля к доллару.

Создание сущности

Создание сущности RUBEUR

Вторую сущность RUBUSD создаем точно так же. Результат должен быть таким:

Результат: две сущности RUBEUR и RUBUSD

6. Добавление выражений (Expression)

Вернемся на вкладку намерений (Intents) и нажмем на созданное ранее намерение «get-the-exchange-rate». После этого мы попадем на вкладку Train.

Здесь нам необходимо добавить предполагаемые выражения, которые будет присылать собеседник.

Например, добавим выражение «Курс рубля к евро». Выделим часть выражения и назначим ему созданную сущность RUBEUR.

Добавление выражения

Добавим еще одно выражение:

Результат добавления выражений

7. Добавление навыков (Skills)

Навык это то, что ваш бот умеет делать. Навыки могут взаимодействовать друг с другом. Но пока взаимодействие навыков мы рассматривать не будем.

Переходим на вкладку Build.

Создадим навык (skill) «return-the-exchange-rate» (вернуть курс валют).

Создание навыка

Нажимаем на название навыка и переходим на вкладку Triggers. Здесь нам необходимо задать условия, при выполнении которых наш бот будет совершать какие-либо действия (например возвращать курс рубля к доллару).

Добавление триггера

Результат, который мы должны получить:

Триггеры

То есть, если в тексте, который пришлет собеседник будет найдена одна из сущностей (rubusd или rubeur), бот выполнит какое-либо действие.

8. Добавление действий (Actions)

Действие это то, что наш бот выполняет в определенный момент времени при выполнении навыка.

Переходим на вкладку Actions.

Добавление новой

Добавим два действия. Первое будет возвращать курс рубля к доллару, а второе курс рубля к евро.

Для того, чтобы оповестить нашего бота о наступившем событии (например, собеседник запрашивает курс рубля), используем механизм веб-хуков (Webhook).

Для Лиги лени: Webhook — механизм оповещения системы о событиях.

Добавим веб-хук как на рисунке ниже и не забудем про условие его выполнения.

Создание веб-хука

В поле POST запроса необходимо указать адрес нашего локального веб-сервера. Здесь нам пригодится Ngrok, который мы установили ранее.

Чтобы получить адрес веб-сервера, выполним в командной строке простую команду:

ngrok http 80

80 — это порт

После этого скопируем адрес и вставим в конфигурацию веб-хука.

Копируем адрес сервера

Создание веб-хука для получения курса рубля к доллару

Таким же образом добавляем веб-хук для запроса курса рубля к евро.

Создание веб-хука для получения курса рубля к евро

Помните, что при следующем запуске Ngrok (например на следующий день), адрес сервера изменится. Не забывайте обновить адрес в конфигурации веб-хука.

На этом создание бота в платформе SAP Conversation AI завершено.

Осталось «поднять» наш сервер, который будет получать POST запрос от платформы, делать запрос курса валют и возвращать ответ обратно платформе.

9. Создание веб-сервера

Почему я выбрал именно Node.js?

Опыта написание вообще чего-либо на Node.js у меня нет, но в руководстве по построению ботов (да, оно есть и очень даже ничего) я нашел несколько простых примеров серверов. То, что нам нужно!

 

Пример на Node.js идет первым, а я, как говорится, человек простой.

Рон Свонсон — простой человек

Перед написанием кода сервера, необходимо выполнить несколько подготовительных операций.

1. Зарегистрироваться и получить API KEY ключ на cryptocompare.com. Через его API мы будем получать курс валют. Ключ лежит в разделе Documentation, здесь:

2. Откройте новую командную строку и выполните следующее (пример для Windows):

mkdir my-bot && cd my-bot — создание папки и переход в нее

npn init — создание файла package.js, хранящего список зависимостей

npn install —save express body-parser node-fetch cryptocompare — загрузка пакетов и сохранение зависимостей в package.js для того, чтобы при необходимости легко развернуть наш сервер в другом месте.

Обратите внимание что перед save два раза знак «минус», а не тире. Редактор в блоге этого не понимает(

Теперь в папке my-bot создайте файл server.js и скопируйте в него код отсюда.


В коде укажите свой ключ, который вы получили в п.1.

В VS Code это будет выглядеть так:

VS Code

В нашем проекте мы используем CryptoCompare JavaScript API.

С ним не нужно изобретать свой велосипед и можно легко получать нужную информацию о курсе валют.

Подробно на описании кода останавливаться не будем, отметим лишь, что центральное место в нем занимает обработка двух POST запросов для получения курса рубля к доллару и евро. Далее я покажу как выполнять отладку и вы сами легко сможете во всем разобраться.

Для удобства работы можно открыть консоль не отдельно, а в самой студии.

Открываем консоль

В консоли пишем команду node server.js

Если все пункты выполнены, мы увидим сообщение:

Server is running on port 80.

Если вы потратили время, дошли до этого пункта, но сервер никак не запускается, не сдавайтесь! Пишите в комментарии или в обсуждения в группе канала. Попробуем разобраться вместе)

Чтобы остановить сервер, нажмите Ctr+C (для Windows).

 

Давайте наконец напишем что-нибудь нашему боту!

Для этого вернемся в платформу SAP Conversation AI и нажмем «CHAT WITH YOUR BOT».

В чате попросим бота прислать нам, к примеру, курс рубля к евро.

Если все отработало как надо, мы увидим ответ:

Ответ бота

Ура!

Если бот не понял наш вопрос, то мы увидим это:

Такой ответ мы можем получить не только если бот «не понял» наше сообщение, но и если например нет связи с сервером, или связь с сервером есть, но он неправильно обрабатывает идущие к нему запросы и т.п.

В таких случаях удобно пользоваться отладчиком.

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

node —inspect server.js — запуск сервера в режиме отладки

Здесь тоже перед inspect два раза знак «минус», а не тире.

Заметьте, что при запуске сервера таким способом полоска внизу студии, которая до этого была синей, станет оранжевой:

Запуск сервера в режиме отладки

Установим брейкпойнт в подходящем месте и попробуем снова послать сообщение.

Запрашиваем курс

Останавливаемся на брейкпойнте

Бот почти готов. Осталось совсем немного.

10. Интеграция с мессенджером

SAP Conversation AI позволяем легко интегрировать вашего бота с большим количеством разных мессенджеров.

Интеграция выполняется на вкладке Соединения (Connect).

Выбираем мессенджер и, следуя пунктам, получаем токен.

Заполняем поле Token

Если ваш бот не работаем с персональными данными, то его можно сделать публичным.

Теперь он будет отвечать всем

11. Что делать дальше?

Мы сделали большую работу. Но впереди еще много интересного. Возможности ботов очень обширны и нам еще многое предстоит узнать.

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

Кем себя ощущаешь, после создания своего бота:

Пока!

Если вам понравилась статья, не забудьте подписаться на канал.