Как создать чат-бот для Slack
В этом сценарии вы узнаете, как с помощью serverless-технологий создать бота для Slack, который будет выполнять команды в чате и отвечать на сообщения пользователей.
Подготовьте окружение
- Скачайте
архив с файлами, необходимыми для создания бота. - Если у вас еще нет каталога, создайте его.
- Создайте сервисный аккаунт и назначьте ему роль
editor
на ваш каталог.
Создайте приложение и подключите его к Yandex Cloud
Зарегистрируйте Slack-приложение
- Авторизуйтесь в Slack
. Чтобы создать бота, у вас должны быть права на управление рабочим пространством. - Создайте
приложение:- Нажмите кнопку Create a custom app.
- В поле Name введите имя приложения
ServerlessBotApp
. - Выберите доступное рабочее пространство и нажмите Create app.
- Выдайте разрешения приложению
ServerlessBotApp
:- В меню управления приложением выберите пункт OAuth & Permissions.
- В разделе Bot Token Scopes добавьте разрешения:
chat:write
,commands
,im:history
. - После обновления разрешений необходимо переустановить приложение: вверху страницы появится уведомление. Чтобы переустановить приложение, перейдите по ссылке в уведомлении и нажмите Allow.
Настройте связь между Slack и Yandex Cloud
-
Создайте API-шлюз с именем
for-slack-bot
. -
Создайте функцию с именем
for-slack-bot-challenge
. Убедитесь, что она приватная. -
Создайте версию функции:
- Создайте файл
index.py
и вставьте в него содержимое файла0_for-slack-bot-challenge.py
из архива. - Укажите следующие параметры:
- Среда выполнения —
python37
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт.
- Среда выполнения —
- Создайте файл
-
Отредактируйте 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
— идентификатор сервисного аккаунта.
Проверьте связь между Slack и Yandex Cloud
- Скопируйте служебный домен API-шлюза
for-slack-bot
. - Выберите
приложениеServerlessBotApp
. - В меню управления приложением выберите раздел Event Subscriptions.
- Установите Enable Events в положение on.
- В поле Request URL вставьте адрес API-шлюза и дождитесь появления записи Verified.
Получите Token и Secret для приложения
ВыберитеServerlessBotApp
:
- Значение Bot User OAuth Token из раздела OAuth & Permissions будет использоваться для переменной окружения
SLACK_BOT_TOKEN
. - Значение Signing Secret из раздела Basic Information будет использоваться для переменной окружения
SLACK_SIGNING_SECRET
.
Создайте базу данных
Ответы на команды и сообщения в чате бот будет брать из Yandex Managed Service for YDB. Для этого подготовьте таблицу:
- Создайте базу данных с именем
for-slack-bot
в режиме Serverless. - В базе
for-slack-bot
создайте YDB-таблицу с именемcoffee
:-
Перейдите на вкладку Навигация.
-
В правом верхнем углу нажмите кнопку Новый SQL-запрос. Откроется страница Запрос.
-
В поле Запрос введите:
CREATE TABLE coffee ( id Utf8, name Utf8, PRIMARY KEY (id) );
-
Нажмите кнопку Выполнить.
-
- Добавьте в таблицу запись. Например, укажите название сорта кофе и
id
=1
.
Создайте функции
С помощью функций можно настраивать реакции бота на действия пользователей в чате. В сценарии будут созданы функции:
- Для обмена сообщениями между ботом и пользователем.
- Для получения реакции бота в ответ на простую команду;.
- Для выбора ботом ответа на команду из Managed Service for YDB.
Функция для обмена сообщениями
-
Создайте функцию с именем
for-slack-bot-small-talk
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Создайте файл
requirements.txt
и укажите в нем библиотеки:slack_sdk slack_bolt boto3
-
Создайте файл
index.py
и вставьте в него содержимое файла1_for-slack-bot-small-talk.py
из архива. -
Укажите следующие параметры:
- Среда выполнения —
python37
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт.
- Среда выполнения —
-
Добавьте переменные окружения:
SLACK_BOT_TOKEN
.SLACK_SIGNING_SECRET
.
-
Функция для реагирования на команду
-
Создайте функцию с именем
for-slack-bot-hello-from-serverless
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Создайте файл
requirements.txt
и укажите в нем библиотеки:slack_sdk slack_bolt boto3
-
Создайте файл
index.py
и вставьте в него содержимое файла2_for-slack-bot-hello-from-serverless.py
из архива. -
Укажите следующие параметры:
- Среда выполнения —
python37
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт.
- Среда выполнения —
-
Добавьте переменные окружения:
SLACK_BOT_TOKEN
.SLACK_SIGNING_SECRET
.
-
Функция для выбора ответа на команду
-
Создайте функцию с именем
for-slack-bot-what-kind-of-coffee
. Убедитесь, что она приватная. -
Создайте версию функции:
-
Создайте файл
requirements.txt
и укажите в нем библиотеки и номер версии Managed Service for YDB:slack_sdk slack_bolt boto3 ydb==0.0.41
-
Создайте файл
index.py
и вставьте в него одержимое файла3_for-slack-bot-what-kind-of-coffee.py
из архива. -
Укажите следующие параметры:
- Среда выполнения —
python37
. - Точка входа —
index.handler
. - Таймаут, c —
5
. - Сервисный аккаунт — созданный ранее сервисный аккаунт.
- Среда выполнения —
-
Добавьте переменные окружения:
SLACK_BOT_TOKEN
.SLACK_SIGNING_SECRET
.
-
Добавьте переменные для работы с Managed Service for YDB:
ENDPOINT
— первая часть значения поля Эндпоинт из раздела Обзор в свойствах базы данныхfor-slack-bot
(часть до вхождения/?database=
). Например,grpcs://ydb.serverless.yandexcloud.net:2135
.DATABASE
— вторая часть значения поля Эндпоинт из раздела Обзор в свойствах базы данныхfor-slack-bot
(часть после вхождения/?database=
). Например,/ru-central1/r1gra875baom********/g5n22e7ejfr1********
.USE_METADATA_CREDENTIALS
=1
.
-
Отредактируйте API-шлюз
Чтобы бот начал отвечать на сообщения пользователей, созданные функции необходимо связать с приложением. Для этого отредактируйте API-шлюз for-slack-bot
и добавьте в параметр paths
конфигурации метода POST
:
paths:
/:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции_1>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: slack-challenge
/hello-from-serverless:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции_2>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: hello-from-serverless
/what-kind-of-coffee:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции_3>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: /what-kind-of-coffee
Где:
service_account_id
— идентификатор сервисного аккаунта.<идентификатор_функции_1>
— идентификатор функцииfor-slack-bot-small-talk
.<идентификатор_функции_2>
— идентификатор функцииfor-slack-bot-hello-from-serverless
.<идентификатор_функции_3>
— идентификатор функцииfor-slack-bot-what-kind-of-coffee
.
Добавьте команды в Slack
С помощью команд/
, и их список всегда виден пользователю.
Примечание
Команда не будет работать, если для нее не настроен соответствующий метод в API-шлюзе.
- Выберите
приложениеServerlessBotApp
. - В меню управления приложением выберите раздел 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 введите
- Добавьте команду для функции
for-slack-bot-what-kind-of-coffee
:- В поле Command введите
/what-kind-of-coffee
. - В поле Request URL вставьте адрес
url
из спецификации API-шлюзаfor-slack-bot
, дополнив его адресом команды/what-kind-of-coffee
. - В поле Short descriptions введите любое краткое описание команды.
- Нажмите Save.
- В поле Command введите
- После добавления новых команд необходимо переустановить приложение: вверху страницы появится уведомление. Чтобы переустановить приложение, перейдите по ссылке в уведомлении и нажмите Allow.
Протестируйте работу 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!
.
- Отправьте в чат команду
- Чтобы проверить функцию
for-slack-bot-what-kind-of-coffee
:- Отправьте в чат команду
/what-kind-of-coffee
. Бот должен ответить:Today we use <запись_из_таблицы_coffee>
.
- Отправьте в чат команду