Как создать чат-бот для 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
; - таймаут 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: <ID функции> service_account_id: <ID сервисного аккаунта> operationId: slack-challenge
Параметры:
<ID функции>
— идентификатор функцииfor-slack-bot-challenge
;<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
.
Создайте базу данных
Ответы на команды и сообщения в чате бот будет брать из Managed Service for YDB. Для этого подготовьте таблицу:
-
Создайте базу данных с именем
for-slack-bot
в режиме Serverless. -
В базе
for-slack-bot
создайте YDB-таблицу с именемcoffee
:- Перейдите на вкладку Навигация.
- В правом верхнем углу нажмите кнопку SQL-запрос. Откроется страница Запрос.
- В поле Запрос введите:
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
; - таймаут 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
; - таймаут 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
; - таймаут = 5 секунд;
- сервисный аккаунт.
- среду выполнения
- Добавьте переменные окружения:
SLACK_BOT_TOKEN
;SLACK_SIGNING_SECRET
.
- Добавьте переменные для работы с Managed Service for YDB:
DATABASE
— значение поля База данных из раздела Обзор в свойствах базы данныхfor-slack-bot
. Например:/ru-central1/a1bcd23mbaomkfvsleds/etn456khb7jn1ddedfht
ENDPOINT
— значение поля Эндпоинт из раздела Обзор в свойствах базы данныхfor-slack-bot
. Например:grpcs://ydb.serverless.yandexcloud.net:1234
USE_METADATA_CREDENTIALS
= 1.
- Создайте файл
Отредактируйте API-шлюз
Чтобы бот начал отвечать на сообщения пользователей, созданные функции необходимо связать с приложением. Для этого отредактируйте API-шлюз for-slack-bot
и добавьте в параметр paths
конфигурации метода POST
:
paths:
/:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <ID функции_1>
service_account_id: <ID сервисного аккаунта>
operationId: slack-challenge
/hello-from-serverless:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <ID функции_2>
service_account_id: <ID сервисного аккаунта>
operationId: hello-from-serverless
/what-kind-of-coffee:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <ID функции_3>
service_account_id: <ID сервисного аккаунта>
operationId: /what-kind-of-coffee
Параметры:
<ID сервисного аккаунта>
— идентификатор сервисного аккаунта;<ID функции_1>
— идентификатор функцииfor-slack-bot-small-talk
;<ID функции_2>
— идентификатор функцииfor-slack-bot-hello-from-serverless
;<ID функции_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>
.
- Отправьте в чат команду