Инструкция: делаем простой бот для Slack в облаке

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

Инструкция: делаем простой бот для Slack в облаке

Для создания бота нам понадобятся аккаунты в Yandex.Cloud и Slack.

Шаг 1: создаём приложение в Slack

Авторизуемся в Slack и переходим в панель. Нажимаем кнопку Create an app, выбираем From scratch. Вводим название нашего приложения - ServerlessBotApp и выбираем workspace, для пользователей которого будет работать наш бот.

Инструкция: делаем простой бот для Slack в облаке

Теперь нам нужно дать нашему боту разрешение писать в чат. Переходим в раздел OAuth & Permissions и в подразделе Bot Token Scopes нажимаем кнопку Add an OAuth Scope.

Инструкция: делаем простой бот для Slack в облаке

После того, как мы дали разрешение, переходим в раздел OAuth Tokens for Your Workspace и нажимаем кнопку Install to Workspace, а затем Allow.

Бот установлен для нашего workspace и Slack создал для него Bot User OAuth Token, который понадобится нам позже.

Инструкция: делаем простой бот для Slack в облаке

Шаг 2: создаём сервисный аккаунт в Yandex.Cloud

На стороне Slack мы создали приложение, которое может писать в чат и к которому можно подключиться извне с помощью токена. Теперь нужно создать точку доступа на стороне облака. Сначала создадим сервисный аккаунт. Для этого переходим в консоль Yandex.Cloud. Переходим в рабочий каталог и выбираем пункт меню Сервисные аккаунты. Создаём новый сервисный аккаунт slack-bot и назначаем ему роль editor.

Инструкция: делаем простой бот для Slack в облаке

После создания сервисного аккаунта в разделе Обзор получаем Идентификатор, в дальнейшем он будет использоваться в настройках API-шлюз.

Инструкция: делаем простой бот для Slack в облаке

Шаг 3: создаем API-шлюз для связи облака и Slack

В консоли облака переходим в дашборд каталога и выбираем API Gateway. Нажимаем кнопку Создать API-шлюз и создаём шлюз с названием for-slack-bot.

Инструкция: делаем простой бот для Slack в облаке

После публикации API-шлюза в спецификации появится секция servers со служебным доменом. Этот домен будет точкой входа в приложение. Спецификация содержит правила вызова функций, каждый раз при создании функции мы будем добавлять в спецификацию новую секцию.

Шаг 4: Реализуем функцию, реагирующую на команду

Теперь мы можем реализовать функциональность, которая будет доступна из чата Slack. Для этого сначала перейдем в панель Slack и получим token и secret. В разделе OAuth& Permissions копируем Bot User OAuthToken, в дальнейшем мы используем это значение для переменной SLACK_BOT_TOKEN в облаке. В разделе Basic Information в подразделе App Credentials копируем Signing Secret и в дальнейшем используем его в качестве значения переменной SLACK_SIGNING_SECRET.

Инструкция: делаем простой бот для Slack в облаке

После этого переходим в консоль облака. В дашборде текущего каталога выбираем сервис Cloud Functions. Нажимаем кнопку Создать функцию. Задаем имя for-slack-bot-hello-from-serverless. Выбираем среду выполнения, например python3.7. При создании функции получаем по умолчанию файл index.py. Создадим новый файл requirements.txt, где перечисляем необходимые библиотеки.

Инструкция: делаем простой бот для Slack в облаке

Меняем содержимое созданного автоматически файла index.py на содержимое файла из репозитория. Указываем точку входа index.handler. Увеличиваем тайм-аут до 5 секунд. Указываем идентификатор сервисного аккаунта и переменные SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET. Нажимаем кнопку Создать версию.

Инструкция: делаем простой бот для Slack в облаке

Наша функция готова, теперь нужно опубликовать её через API-шлюз. Для этого копируем идентификатор созданной функции и переходим в дашборд, а из него в раздел API Gateway. Редактируем созданный ранее шлюз for-slack-bot.

Инструкция: делаем простой бот для Slack в облаке

Копируем в спецификацию секцию /hello-from-serverless из файла for-slack-bot.yml. Заменяем IDYOURFUNCTIONHELLO на идентификатор созданной функции, а IDYOURACCOUNT — на идентификатор сервисного аккаунта. Не изменяя секцию servers, копируем из нее url шлюза. Сохраняем изменения, наша функция опубликована.

Шаг 4: создаём команду в Slack

Со стороны Slack функция должна вызываться командой из чата. Создадим эту команду. В панели Slack выбираем созданное приложение ServerlessBotApp. В секции Slash Commands нажимаем кнопку Create New Command. В поле Command вводим /hello-from-serverless. В поле Request URL вставляем скопированный ранее url API Gateway, дополнив его /hello-from-serverless. Заполняем Short Description. Нажимаем Save. Следуя появившейся инструкции переустанавливаем Slack-приложение. В workspace появилась возможность вызывать команду /hello-from-serverless.

Инструкция: делаем простой бот для Slack в облаке

Проверив работу команды получим сообщение от бота.

Инструкция: делаем простой бот для Slack в облаке

Шаг 5: создаём функцию для реагирования на сообщения пользователей

Сейчас наш бот умеет отвечать на команды, но он всё еще не умеет реагировать на сообщения в чате. Создадим для этого функцию. Переходим в консоль облака и создаем функцию for-slack-bot-small-talk с той же средой выполнения python3.7. Создаем файл requirements.txt, аналогичный предыдущему. Меняем содержимое файла index.py, созданного по умолчанию, на код из репозитория.

Инструкция: делаем простой бот для Slack в облаке

Выбираем сервисный аккаунт slack-bot, указываем точку входа index.handler, увеличиваем timeout до 5 секунд, не забываем указать переменные окружения SLACK_BOT_TOKEN и SLACK_SIGNING_SECRET, со значениями как и в функции for-slack-bot-hello-from-serverless. Нажимаем кнопку Создать версию. Копируем идентификатор функции. Для реализации функциональности нам понадобится сделать эту функцию публичной, поэтому в разделе Обзор передвигаем ползунок в поле Публичная функция.

Инструкция: делаем простой бот для Slack в облаке

Теперь нужно опубликовать функцию через API-шлюз. Для этого снова возвращаемся в раздел API Gateway. Редактируем созданный ранее шлюз for-slack-bot. Заменяем секцию / на аналогичную, содержащуюся в файле for-slack-bot.yml, не забываем заменить IDYOURFUNCTIONSMALLTALK на скопированный ранее идентификатор функции, а IDYOURACCOUNT на идентификатор сервисного аккаунта.

Инструкция: делаем простой бот для Slack в облаке

Шаг 6: настраиваем подписку на сообщения в Slack

После создания функции и ее публикации нам нужно настроить подписку на сообщения на стороне Slack. Возвращаемся в панель Slack и переходим в секцию Event Subscriptions. Передвигаем передвигаем ползунок Enable Events в положение on. Указываем адрес API Gateway в поле Request URL и дожидаемся появления Verified.

В секции Subscribe to bot events на той же странице нажимаем кнопку Add Bot User Event и выбираем message.im. Сохраняем изменения. Переустанавливаем приложение следуя появившейся инструкции.

Инструкция: делаем простой бот для Slack в облаке

Наш бот умеет реагировать на сообщения пользователя ":wave:" и "knock knock», проверим его работу в чате.

Инструкция: делаем простой бот для Slack в облаке

Мы создали бота, который может обрабатывать сообщения из чата и реагировать на команды пользователя. Его функциональность можно расширять, например, используя Yandex Database для хранения полученных сторонних данных, или используя Object Storage для хранения необходимых файлов.

Оставляем полезные ссылки на каналы и сообщества Serverless в мире и в России, где вы сможете найти еще больше полезных примеров использования функций:

Подписывайтесь на блог Yandex.Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.

Другие истории, которые активно читают наши подписчики:

11
Начать дискуссию