Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex API Gateway
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Создание API-шлюза
    • Изменение API-шлюза и его спецификации
    • Подключение домена
    • Удаление API-шлюза
    • Мониторинг
    • Просмотр журнала выполнения
  • Практические руководства
    • Развертывание веб-приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Разработка Slack-бота
    • Разработка Telegram-бота
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Расширения спецификации
      • Обзор
      • Статический ответ
      • Вызов функции
      • Интеграция с Serverless Containers
      • Обращение по HTTP
      • Интеграция с Object Storage
      • Интеграция с DataSphere
      • Интеграция с Data Streams
      • Интеграция с Message Queue
      • Жадные параметры
      • Обобщенный HTTP-метод
      • Авторизация с помощью функции
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ApiGatewayService
      • OperationService
    • REST (англ.)
      • Overview
      • ApiGateway
        • Overview
        • addDomain
        • create
        • delete
        • get
        • getOpenapiSpec
        • list
        • listAccessBindings
        • listOperations
        • removeDomain
        • setAccessBindings
        • update
        • updateAccessBindings
  • Вопросы и ответы
  1. Практические руководства
  2. Разработка Slack-бота

Как создать чат-бот для Slack

Статья создана
Yandex.Cloud
  • Подготовьте окружение
  • Создайте приложение и подключите его к Yandex Cloud
    • Зарегистрируйте Slack-приложение
    • Настройте связь между Slack и Yandex Cloud
    • Проверьте связь между Slack и Yandex Cloud
  • Получите Token и Secret для приложения
  • Создайте базу данных
  • Создайте функции
    • Функция для обмена сообщениями
    • Функция для реагирования на команду
    • Функция для выбора ответа на команду
  • Отредактируйте API-шлюз
  • Добавьте команды в Slack
  • Протестируйте работу Slack-бота

В этом сценарии вы узнаете, как с помощью serverless-технологий создать Slack-бота, который будет выполнять команды в чате и отвечать на сообщения пользователей.

Подготовьте окружение

  1. Скачайте архив с файлами, необходимыми для создания бота.

  2. Если у вас еще нет каталога, создайте его.

  3. Создайте сервисный аккаунт и назначьте ему роль editor на ваш каталог.

Создайте приложение и подключите его к Yandex Cloud

Зарегистрируйте Slack-приложение

  1. Авторизуйтесь в Slack. Чтобы создать бота, у вас должны быть права на управление рабочим пространством.

  2. Создайте приложение:

    1. Нажмите кнопку Create a custom app.
    2. В поле Name введите имя приложения ServerlessBotApp.
    3. Выберите доступное рабочее пространство и нажмите Create app.
  3. Выдайте разрешения приложению ServerlessBotApp:

    1. В меню управления приложением выберите пункт OAuth & Permissions.
    2. В разделе Bot Token Scopes добавьте разрешения: chat:write, commands, im:history.
    3. После обновления разрешений необходимо переустановить приложение: вверху страницы появится уведомление. Чтобы переустановить приложение, перейдите по ссылке в уведомлении и нажмите Allow.

Настройте связь между Slack и Yandex Cloud

  1. Создайте API-шлюз с именем for-slack-bot.

  2. Создайте функцию с именем for-slack-bot-challenge. Убедитесь, что она приватная.

  3. Создайте версию функции:

    1. Создайте файл index.py и вставьте в него содержимое файла 0_for-slack-bot-challenge.py из архива.
    2. Укажите:
      • среду выполнения python37;
      • точку входа index.handler;
      • таймаут 5 секунд;
      • сервисный аккаунт.
  4. Отредактируйте 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

  1. Скопируйте служебный домен API-шлюза for-slack-bot.

  2. Выберите приложение ServerlessBotApp.

  3. В меню управления приложением выберите раздел Event Subscriptions.

  4. Установите Enable Events в положение on.

  5. В поле 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. Для этого подготовьте таблицу:

  1. Создайте базу данных с именем for-slack-bot в режиме Serverless.

  2. В базе for-slack-bot создайте YDB-таблицу с именем coffee:

    1. Перейдите на вкладку Навигация.
    2. В правом верхнем углу нажмите кнопку SQL-запрос. Откроется страница Запрос.
    3. В поле Запрос введите:
      sql CREATE TABLE coffee ( id Utf8, name Utf8, PRIMARY KEY (id) );
    4. Нажмите кнопку Выполнить.
  3. Добавьте в таблицу запись. Например, укажите название сорта кофе и id = 1.

Создайте функции

С помощью функций можно настраивать реакции бота на действия пользователей в чате. В сценарии будут созданы функции:

  • для обмена сообщениями между ботом и пользователем;
  • для получения реакции бота в ответ на простую команду;
  • для выбора ботом ответа на команду из Managed Service for YDB.

Функция для обмена сообщениями

  1. Создайте функцию с именем for-slack-bot-small-talk. Убедитесь, что она приватная.

  2. Создайте версию функции:

    1. Создайте файл requirements.txt и укажите в нем библиотеки:
      slack_sdk
      slack_bolt
      boto3
      
    2. Создайте файл index.py и вставьте в него содержимое файла 1_for-slack-bot-small-talk.py из архива.
    3. Укажите:
      • среду выполнения python37;
      • точку входа index.handler;
      • таймаут 5 секунд;
      • сервисный аккаунт.
    4. Добавьте переменные окружения:
      • SLACK_BOT_TOKEN;
      • SLACK_SIGNING_SECRET.

Функция для реагирования на команду

  1. Создайте функцию с именем for-slack-bot-hello-from-serverless. Убедитесь, что она приватная.

  2. Создайте версию функции:

    1. Создайте файл requirements.txt и укажите в нем библиотеки:
      slack_sdk
      slack_bolt
      boto3
      
    2. Создайте файл index.py и вставьте в него содержимое файла 2_for-slack-bot-hello-from-serverless.py из архива.
    3. Укажите:
      • среду выполнения python37;
      • точку входа index.handler;
      • таймаут 5 секунд;
      • сервисный аккаунт.
    4. Добавьте переменные окружения:
      • SLACK_BOT_TOKEN;
      • SLACK_SIGNING_SECRET.

Функция для выбора ответа на команду

  1. Создайте функцию с именем for-slack-bot-what-kind-of-coffee. Убедитесь, что она приватная.

  2. Создайте версию функции:

    1. Создайте файл requirements.txt и укажите в нем библиотеки и номер версии Managed Service for YDB:
      slack_sdk
      slack_bolt
      boto3
      ydb==0.0.41
      
    2. Создайте файл index.py и вставьте в него одержимое файла 3_for-slack-bot-what-kind-of-coffee.py из архива.
    3. Укажите:
      • среду выполнения python37;
      • точку входа index.handler;
      • таймаут = 5 секунд;
      • сервисный аккаунт.
    4. Добавьте переменные окружения:
      • SLACK_BOT_TOKEN;
      • SLACK_SIGNING_SECRET.
    5. Добавьте переменные для работы с 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-шлюзе.

  1. Выберите приложение ServerlessBotApp.

  2. В меню управления приложением выберите раздел Slash Commands и нажмите Create New Command.

  3. Добавьте команду для функции for-slack-bot-hello-from-serverless:

    • В поле Command введите /hello-from-serverless.
    • В поле Request URL вставьте адрес url из спецификации API-шлюза for-slack-bot, дополнив его адресом команды /hello-from-serverless.
    • В поле Short descriptions введите любое краткое описание команды.
    • Нажмите Save.
  4. Добавьте команду для функции 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.
  5. После добавления новых команд необходимо переустановить приложение: вверху страницы появится уведомление. Чтобы переустановить приложение, перейдите по ссылке в уведомлении и нажмите Allow.

Протестируйте работу Slack-бота

Откройте клиент Slack и в разделе Apps выберите чат с ботом ServerlessBotApp.

  1. Чтобы проверить функцию for-slack-bot-small-talk:

    • Отправьте в чат сообщение :wave:. Бот должен ответить: Hi there, @<username>!.
    • Отправьте в чат сообщение knock knock. Бот должен ответить: Who's there?.
  2. Чтобы проверить функцию for-slack-bot-hello-from-serverless:

    • Отправьте в чат команду /hello-from-serverless. Бот должен ответить: Thanks!.
  3. Чтобы проверить функцию for-slack-bot-what-kind-of-coffee:

    • Отправьте в чат команду /what-kind-of-coffee. Бот должен ответить: Today we use <запись из таблицы coffee>.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте окружение
  • Создайте приложение и подключите его к Yandex Cloud
  • Зарегистрируйте Slack-приложение
  • Настройте связь между Slack и Yandex Cloud
  • Проверьте связь между Slack и Yandex Cloud
  • Получите Token и Secret для приложения
  • Создайте базу данных
  • Создайте функции
  • Функция для обмена сообщениями
  • Функция для реагирования на команду
  • Функция для выбора ответа на команду
  • Отредактируйте API-шлюз
  • Добавьте команды в Slack
  • Протестируйте работу Slack-бота