Как создать чат-бот для Slack с помощью YDB
В этом руководстве вы узнаете, как с помощью serverless-технологий создать бота для Slack, который будет выполнять команды в чате и отвечать на сообщения пользователей.
Чтобы создать бота:
- Подготовьте окружение.
- Создайте приложение и подключите его к Yandex Cloud.
- Получите Token и Secret для приложения.
- Создайте функции.
- Отредактируйте API-шлюз.
- Добавьте команды в Slack.
- Проверьте работу Slack-бота.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки чат-бота входят:
- плата за использование API-шлюза (см. тарифы Yandex API Gateway);
- плата за использование функций (см. тарифы Yandex Cloud Functions).
Подготовьте окружение
- Скачайте
архив с файлами, необходимыми для создания бота. - Если у вас еще нет каталога, создайте его.
- Создайте сервисный аккаунт с именем
sa-slack
и назначьте ему рольeditor
на ваш каталог.
Создайте приложение и подключите его к Yandex Cloud
Зарегистрируйте Slack-приложение
-
Авторизуйтесь в Slack
. Чтобы создать бота, у вас должны быть права на управление рабочим пространством. -
Создайте приложение
:- Нажмите кнопку Create an App.
- Выберите From scratch.
- В поле App Name введите имя приложения:
ServerlessBotApp
. - Выберите доступное рабочее пространство и нажмите Create App.
-
Выдайте разрешения приложению
ServerlessBotApp
:- В меню управления приложением выберите пункт Features → OAuth & Permissions.
- В разделе Scopes → Bot Token Scopes нажмите кнопку Add an OAuth Scope и добавьте разрешения:
chat:write
,commands
,im:history
.
-
Установите приложение: в меню управления приложением выберите пункт Settings → Install App и нажмите Install to Workspace → Allow.
Настройте связь между Slack и Yandex Cloud
-
Создайте функцию с именем
for-slack-bot-challenge
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Создайте API-шлюз:
-
Укажите имя
for-slack-bot
. -
В поле Спецификация добавьте в параметр
paths
конфигурацию методаPOST
:paths: /: get: x-yc-apigateway-integration: type: dummy content: '*': Hello, World! http_code: 200 http_headers: Content-Type: text/plain post: x-yc-apigateway-integration: type: cloud_functions function_id: <идентификатор_функции> service_account_id: <идентификатор_сервисного_аккаунта> operationId: slack-challenge
Где:
function_id
— идентификатор функцииfor-slack-bot-challenge
.service_account_id
— идентификатор сервисного аккаунтаsa-slack
.
-
Проверьте связь между Slack и Yandex Cloud
- Скопируйте служебный домен API-шлюза
for-slack-bot
. - Выберите приложение
ServerlessBotApp
. - В меню управления приложением выберите пункт Features → Event Subscriptions.
- Включите опцию Enable Events.
- В поле Request URL вставьте адрес API-шлюза и дождитесь появления записи
Verified
. - В разделе Subscribe to bot events нажмите кнопку Add Bot User Event и выберите событие
message.im
. - Нажмите кнопку Save Changes.
Получите Token и Secret для приложения
Выберите приложениеServerlessBotApp
:
- В меню управления приложением выберите пункт Settings → Basic Information.
- Скопируйте значение поля Signing Secret из раздела App Credentials: оно будет использоваться для переменной окружения
SLACK_SIGNING_SECRET
. - В меню управления приложением выберите пункт Features → OAuth & Permissions.
- В разделе OAuth Tokens for Your Workspace скопируйте значение поля Bot User OAuth Token: оно будет использоваться для переменной окружения
SLACK_BOT_TOKEN
.
Создайте функции
С помощью функций можно настраивать реакции бота на действия пользователей в чате. В руководстве будут созданы функции:
- Для обмена сообщениями между ботом и пользователем.
- Для получения реакции бота в ответ на простую команду.
Функция для обмена сообщениями
-
Создайте функцию с именем
for-slack-bot-small-talk
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Укажите следующие параметры:
- Среда выполнения —
python312
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт
sa-slack
.
- Среда выполнения —
-
Создайте файл
requirements.txt
и укажите в нем библиотеки:slack_sdk slack_bolt boto3
-
Создайте файл
index.py
и вставьте в него содержимое файла1_for-slack-bot-small-talk.py
из архива. -
Добавьте переменные окружения:
SLACK_BOT_TOKEN
.SLACK_SIGNING_SECRET
.
-
Функция для реагирования на команду
-
Создайте функцию с именем
for-slack-bot-hello-from-serverless
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Укажите следующие параметры:
- Среда выполнения —
python312
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт
sa-slack
.
- Среда выполнения —
-
Создайте файл
requirements.txt
и укажите в нем библиотеки:slack_sdk slack_bolt boto3
-
Создайте файл
index.py
и вставьте в него содержимое файла2_for-slack-bot-hello-from-serverless.py
из архива. -
Добавьте переменные окружения:
SLACK_BOT_TOKEN
.SLACK_SIGNING_SECRET
.
-
Отредактируйте API-шлюз
Чтобы бот начал отвечать на сообщения пользователей, созданные функции необходимо связать с приложением. Для этого отредактируйте спецификацию API-шлюза for-slack-bot
и добавьте в параметр paths
конфигурации метода POST
:
/:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции_1>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: small-talk
/hello-from-serverless:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции_2>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: hello-from-serverless
Где:
service_account_id
— идентификатор сервисного аккаунтаsa-slack
.<идентификатор_функции_1>
— идентификатор функцииfor-slack-bot-small-talk
.<идентификатор_функции_2>
— идентификатор функцииfor-slack-bot-hello-from-serverless
.
Добавьте команду в Slack
С помощью команд/
, и их список всегда виден пользователю.
Примечание
Команда не будет работать, если для нее не настроен соответствующий метод в API-шлюзе.
-
Выберите приложение
ServerlessBotApp
. -
В меню управления приложением выберите пункт Features → Slash Commands и нажмите Create New Command.
-
Добавьте команду для функции
for-slack-bot-hello-from-serverless
:- В поле Command введите
/hello-from-serverless
. - В поле Request URL вставьте адрес
url
из спецификации API-шлюзаfor-slack-bot
, дополнив его адресом команды/hello-from-serverless
. - В поле Short descriptions введите любое краткое описание команды.
- Нажмите Save.
- В поле Command введите
-
Переустановите приложение: в меню управления приложением выберите пункт Settings → Install App и нажмите Reinstall to Workspace → Allow.
-
Включите отправку сообщений: в меню управления приложением выберите пункт Features → App Home и в разделе Show Tabs включите опцию Allow users to send Slash commands and messages from the messages tab.
Проверьте работу Slack-бота
Откройте клиент Slack и в разделе Apps выберите чат с ботом ServerlessBotApp
.
- Чтобы проверить функцию
for-slack-bot-small-talk
:- Отправьте в чат сообщение
:wave:
. Бот должен ответить:Hi there, @<username>!
. - Отправьте в чат сообщение
knock knock
. Бот должен ответить:Who's there?
.
- Отправьте в чат сообщение
- Чтобы проверить функцию
for-slack-bot-hello-from-serverless
, отправьте в чат команду/hello-from-serverless
. Бот должен ответить:Thanks!
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: