/itsm2vk_bot

Бот уведомлений для VK Teams

Primary LanguagePython

Бот уведомлений для VK Teams

Бот вычитывает почту, находит письма с инцидентами и событиями мониторинга и отправляет уведомления в указанные чаты VK Teams.

Скриншот сообщения от бота

Письма вычитывает из папок EXC_INC_FOLDER и EXC_MON_FOLDER (описание см. ниже) в соответствии с правилами в src/mail_handler.py. Вычитываются непрочитанные письма. После обработки они отмечаются как прочитанные.

Уведомления отправляет в чаты указанные в перемненных окружения VKT_CHAT_ID и VKT_MONITORING_CHAT_ID (описание см. ниже).

Логи отправляются в чат VKT_ADMIN_ID (описание см. ниже).

Развёртывание

Имеется два варианта развёртывания сервера:

  • с помощью Github Actions - позволяет автоматически переразвёртывать бота при пуше в ветку main, либо по нажатию кнопки в интерфейсе гитхаба
  • ручной: не требует предварительной настройки репозитория, переразвёртывание при изменениях производится также вручную

Подготовка сервера

  1. Сгенерировать ssh-ключ
  2. Добавить публичный ключ в хранилище
  3. Установить докер

Подготовка VK Teams

  1. Создайте бота с помощью @metabot
  2. Создайте чаты или каналы, в которые бот будет скидывать логи и уведомления по инцидентам и мониторингу. Можно как разделить эти три сущности, так и валить всё в один чат (логи советую всё таки в отдельное место собирать, ибо их много).
  3. Добавьте в эти чаты бота и сделайте его админом. Если что-то будете отправлять не в чат/канал, а человеку (например логи себе), то нужно, чтобы этот человек первым написал боту. Просто любое сообщение.

Способ 1: Github Actions

  1. Форкаем репозиторий.
  2. Переходим в настройки репозитория → Secrets and VariablesActions
  3. В Repository secrets добавляем следующие переменные:
    • SSH_PRIVATE_KEY - приватный ключ для подключения к серверу;
    • EXC_PASSWORD - пароль от почтового ящика exchange;
    • VKT_BOT_TOKEN - токен бота VK Teams. Получать у @metabot.
  4. Переходим на вкладку Variables. Добавляем в Repository variables следующие переменные:
    • SERVER_IP - адрес сервера, на котором будет развёртываться бот;
    • SSH_USER - пользователь на сервере бота;
    • EXC_SERVER - exchange сервер, что-то вроде https://db24-ews.<your_host>/EWS/Exchange.asmx;
    • EXC_EMAIL - email почтового ящика exchange;
    • EXC_USER - имя пользователя exchange, например CORP\Username;
    • EXC_INC_FOLDER - папка со входящими письмами об инцидентах. . для указания корневой папки "Входящие". Можно указать вложенные папки, путь будет определяться относительно папки "Входящие", например Notifications/Incidents. Опциональный, при отсутствии письма будут вычитываться из "Входящих";
    • EXC_MON_FOLDER - папка со входящими письмами о событиях мониторинга. Правила такие же, как и для EXC_INC_FOLDER.
    • VKT_BASE_URL - VK Teams Bot API URL. Можно получить у @metabot. Обычно https://api.internal.myteam.mail.ru/bot/v1/
    • VKT_ADMIN_ID - id чата, в который будут сыпаться логи
    • VKT_CHAT_ID - id чата, в который будут сыпаться уведомления об инцидентах
    • VKT_MONITORING_CHAT_ID - id чата, в который будут сыпаться уведомления мониторинга
  5. После этого всего переходим к верхней строке меню → Actions → в левой панели (Re)deploy bot on server → в правой панели Run workflowRun workflow.

Если всё настроено правильно, то сервер начнёт развёртываться. Переразвернуть/перезапустить вручную можно кнопкой из п. 5.

Способ 2: Развёртывание вручную

  1. Склонируйте репозиторий к себе на сервер.
  2. Перейдите в директорию проекта.
  3. Создайте файл .env из шаблона .env.example: cp .env.example .env.
  4. Внесите в .env файл необходимые данные. Описания переменных даны выше.
  5. Запустите make update. Если всё настроено правильно, то произойдёт запуск бота.

С помощью make можно управлять ботом:

  • make update - утащить обновления из репозитория, пересобрать докер-образ, перезапустить бота из образа
  • make build - пересобрать докер-образ
  • make hard_restart - снести работающий контейнер бота и запустить новый из образа