Эта статья изначально была опубликована здесь.

Сегодня я напишу краткое руководство о том, как создать «умного», но очень простого чат-бота для Slack. Мы будем использовать Botkit, чтобы позаботиться о логистике (интеграция со Slack) и «Разговор» IBM Watson, чтобы наш бот действительно мог «понимать» наши сообщения и реагировать на них соответствующим образом. На первый взгляд это может показаться несколько сложным, но это не так. Поверьте мне ;)

Для этого мы:

  • Создать Slack-приложение
  • Настройте SDK Botkit
  • Зарегистрируйтесь в Bluemix, чтобы использовать IBM Watson’s Conversation
  • Используйте Conversation вместе с Botkit
  • Развлекайся

Создайте приложение Slack

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

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

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

После этого вам нужно будет 1) установить бота для своего приложения и 2) установить его для своей команды разработчиков.

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

Настройка Botkit

Теперь мы начнем строить скелет ChatBot с помощью Botkit, который является очень полезным инструментом, который предоставляет нам необходимые строительные блоки для чат-приложений. В настоящее время Botkit поддерживает следующие платформы обмена сообщениями:

  • Слабый
  • Сиско Спарк
  • Facebook-мессенджер
  • IP-сообщения Twilio
  • Платформа Майкрософт для ботов

Но пока мы сосредоточимся только на Slack. Процесс очень похож для всех других платформ.

Сначала немного теории. У вашего бота (и любого другого потребителя API) есть три способа связи с вашей командой Slack:

API обмена сообщениями в реальном времени — это API на основе WebSocket, который позволяет вам получать события из Slack в режиме реального времени и отправлять сообщения от имени пользователя. Иногда его называют просто «RTM API».

Входящие веб-перехватчики — это простой способ публиковать сообщения из внешних источников в Slack. Они используют обычные HTTP-запросы с полезной нагрузкой JSON, которая включает текст сообщения и некоторые параметры. Вложения сообщений также можно использовать во входящих веб-перехватчиках для отображения сообщений с расширенным форматированием, которые выделяются среди обычных сообщений чата.

- Слеш-команды

Слэш-команды позволяют пользователям Slack взаимодействовать с вашим приложением непосредственно из Slack. (например, `/start` будет командой с косой чертой)

В этом примере основное внимание будет уделено получению ввода от Slack, его обработке и последующей отправке ответа. Для этой цели, на мой взгляд, лучше всего использовать соединение RTM, так как оно более элегантно и кажется более естественным, чем использование команд с косой чертой. Мы все равно распознаем намерение пользователя, используя искусственный интеллект, а не создавая скучные слэш-команды :)

Наша цель здесь — дать конечному пользователю возможность общаться с ботом, как если бы это был разговор с другим человеком, а не только ввод команд, подобных CLI. Не поймите меня неправильно, я действительно люблю использовать командную строку :)

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

Для того, чтобы начать работать с Botkit, достаточно установить его с помощью NPM: `npm install botkit — сохранить`. А затем давайте напишем что-нибудь очень простое, что позволит нам напрямую подключить экземпляр Botkit к нашей команде Slack:

В этом примере всякий раз, когда кто-то упоминает бота на канале, где бот присутствует, или всякий раз, когда он получает прямое сообщение, он отвечает: «Я получил ваше сообщение».

На этом этапе мы могли бы создать некоторую логику, которая ищет определенные ключевые слова в объекте «сообщение» выше, выполняет некоторые действия в соответствии с его содержимым и доставляет пользовательский ответ. Но это было бы слишком скучно. Мы хотим, чтобы бот действительно каким-то образом понимал, что означает входящее сообщение, а не просто искал какие-то ключевые слова. Процесс будет медленным и неэффективным. Здесь нам понадобится помощь великого IBM Watson.

IBM Watson/Bluemix

IBM Watson предлагает несколько действительно крутых услуг, связанных с искусственным интеллектом и машинным обучением, которые доступны каждому благодаря платформе облачной разработки IBM Bluemix, которая не только включает Watson, но и предлагает множество других услуг (очень похожих на AWS). Существует хороший SDK для использования Watson на Node.js, размещенный на GitHub, который включает подробную документацию о том, как использовать каждый из его модулей. Посмотреть на это можно здесь. Мы сосредоточимся только на модуле под названием Разговор. Подробнее см. здесь и здесь.

Чтобы начать работу с IBM Watson и Conversation, вам необходимо создать учетную запись в Bluemix (подробнее здесь).

Я не буду вдаваться в подробности того, как создать сервис Conversation и настроить его в Bluemix. Официальная документация неплохо объясняет это.

Вот как работает разговор:

Прежде всего вам нужно будет установить рабочее пространство (экземпляр беседы). После того, как вы все настроите, вам нужно понять три основных принципа работы Conversation:

Вы можете поэкспериментировать с различными намерениями, сущностями и потоками диалогов, а затем давайте добавим в наш код диалог. Для этого мы будем использовать SDK IBM Watson, о котором я упоминал выше. Опять же, вы можете найти его здесь. Обратите внимание, что для доступа к API вам потребуются учетные данные вашей рабочей области. Получить их можно следующим образом:

Чтобы получить доступ к REST API сервиса Conversation, ваше приложение должно иметь возможность пройти аутентификацию с помощью IBM® Bluemix® и подключиться к нужному рабочему пространству Conversation. Вам нужно будет скопировать учетные данные службы и идентификатор рабочей области и вставить их в код приложения.

Вы можете получить доступ к учетным данным службы и идентификатору рабочей области из своей рабочей области, выбрав меню «Меню» и выбрав «Учетные данные».

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

Как только вы получите свои учетные данные, мы начнем с написания небольшой библиотеки, которая позволит нам начать использовать Conversation:

npm install watson-developer-cloud --save

А затем добавим его в логику нашего чат-бота:

Итак, как вы видите, вы можете отправить сообщение Watson, а затем просто переслать его ответ обратно пользователю, или вы можете взять намерение из объекта ответа Watson и самостоятельно проделать некоторую логику:

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

Заключение

Я знаю, что это не обширное пошаговое руководство с большим количеством деталей, но это и не было моей целью. Моя цель состояла в том, чтобы быстро показать вам, как можно объединить эти два инструмента, чтобы создать несколько крутых проектов и получить от этого удовольствие.

Как всегда, я более чем рад любой обратной связи! Спасибо, что прочитали этот материал, и до скорой встречи!

Весь код вы можете найти в этом репозитории.