Skip to content

Боты: оповещения и команды из чата ​

Telegram ​

Бот Telegram присылает оповещения хаба с кнопками и принимает команды из чата. Хаб сам ходит к Telegram: отправляет сообщения и забирает команды и нажатия кнопок долгим опросом (getUpdates). Поэтому ни edge, ни открытого порта для бота не нужно — он работает и с хабом за NAT.

Боты

Настройка ​

  1. У @BotFather — /newbot, получите токен (123456789:AA…).
  2. «Оповещения» → «Настройка» → «Бот Telegram» → «Настроить»: вставьте токен — хаб проверит его у Telegram и покажет имя бота.
  3. Напишите боту /start в нужном чате (группу — сначала добавьте в неё бота): он ответит номером чата. Добавьте чат в настройках:
    • роль — чтение: состояние и кнопки просмотра; администратор — ещё выкладка, сухой прогон, бан и разбан;
    • оповещения — слать ли в этот чат события.
  4. Кому можно действовать — Telegram user id людей (свой бот назовёт на /id). Пусто — любому участнику чата с ролью «администратор»; для групп список лучше задать.
  5. Оповещения — какие события присылать (ничего не отмечено — все), язык текстов.

Правка — в окне с диффом «что изменится», всё — в журнале действий. «Пробное сообщение» у чата — проверка, что бот туда пишет.

Команды ​

КомандаЧтоРоль чата
/statusсколько хостов отвечает, проблемы по важностичтение
/hostsхосты: отвечает ли, проблемычтение
/alertsпоследние оповещениячтение
/pipelinesконвейеры и итог последней выкладкичтение
/deploy <конвейер>выкладка — после кнопки «Выложить»администратор
/dryrun <конвейер>сухой прогон с галочками, выбранными у конвейераадминистратор
/ban <IP>, /unban <IP>бан и разбан на всех хостах с fail2ban — после кнопкиадминистратор
/idномер чата и вашлюбая

Конвейер — по имени или номеру. Итог запущенного задания бот присылает сам (статус и последние строки журнала).

Как выглядят сообщения ​

Событие — блок: жирная шапка (значок, хост, что случилось, время) и текст; новые находки — списком, до трёх, дальше «…и ещё N»:

text
⚠️ cz281 — новые проблемы · 13:05
Серьёзных находок: 25 (было 11)
• Deployment carcheck/…-carcheck-server: доступно 0 из 1 реплик
• Deployment carcheck/…-ledger-admin: доступно 0 из 1 реплик
• Под carcheck/…-tz4fc: ImagePullBackOff
…и ещё 11
  • Время — «13:05» сегодня, «вчера 22:40», «30.09 08:15» раньше, в часовом поясе из настроек бота; по умолчанию — как у машины хаба (окно настройки показывает, какой это пояс; хаб в Docker обычно в UTC).
  • /alerts — пять последних; одинаковые события разных хостов в пределах двух минут (например, узлы одного кластера) — одним блоком «crem1, cg221 — новые проблемы». Под списком — кнопки «⚠️ Проблемы» хостов. Оповещения, которые бот шлёт сам, не склеиваются — приходят сразу.
  • /hosts и /status — по состоянию, худшие первыми: 🔴 не отвечает или ошибка (с её текстом), 🟠 есть критичные или высокие находки, 🟡 только средние, 🟢 серьёзных нет, ⚪ нет данных (новый, ставится, ещё не опрошен).

Кнопки в оповещениях ​

  • оповещение о хосте — «Обзор» (состояние, версия, проблемы); о новых проблемах — ещё «Проблемы» (десять самых важных);
  • выкладка — «Журнал» (последние строки); не прошла — ещё «Повторить» (с подтверждением, роль «администратор»).

Безопасность ​

  • Чужим чатам бот отвечает только их номером на /start и /id.
  • Действия — только в чатах с ролью «администратор», от людей из списка (если он задан) и только после кнопки подтверждения; подтверждение живёт 10 минут и срабатывает только у того, кто вызвал команду.
  • Действия идут от имени telegram:<имя> и пишутся в журнал действий.
  • Токен бота хранится зашифрованным ключом хаба и в журналах ошибок не показывается.

Slack ​

Бот Slack умеет то же: оповещения с кнопками в каналах и команду /nkt (/nkt status, /nkt hosts, /nkt alerts, /nkt pipelines, /nkt deploy <конвейер>, /nkt dryrun <конвейер>, /nkt ban|unban <IP>, /nkt id). Права, подтверждения и журнал — как у Telegram.

Отличие — вход. Команды и нажатия кнопок Slack присылает сам, запросами на адрес приложения. Хабу за NAT нужен nkt-edge с ролью «колбэки»: он принимает только POST /callbacks/slack/… и передаёт хабу. Хаб, доступный из интернета, принимает их сам на /api/hub/callbacks/slack/…. Каждый запрос хаб проверяет подписью Slack (X-Slack-Signature, v0, секрет подписи приложения) и временем — не старше 5 минут; без верной подписи — 401. Оповещения хаб шлёт в Slack сам (chat.postMessage) — для них вход не нужен.

Настройка ​

  1. api.slack.com/apps → Create New App:
    • OAuth & Permissions → Bot Token Scopes: chat:write, commands;
    • Slash Commands → /nkt, Request URL — https://<edge>/callbacks/slack/commands;
    • Interactivity & Shortcuts → On, Request URL — https://<edge>/callbacks/slack/interactive;
    • Install to Workspace; пригласите бота в каналы (/invite @бот).
  2. «Оповещения» → «Настройка» → «Slack» → «Настроить»: Bot User OAuth Token (xoxb-…, хаб проверит его у Slack) и Signing Secret (Basic Information). Карточка показывает готовые Request URL — с edge с ролью «колбэки», если он есть, иначе адрес самого хаба.
  3. Каналы — номер (C0123ABCD; /nkt id назовёт), роль, оповещения. Кому можно действовать — Slack user id (U0123ABCD); пусто — любому в канале с ролью «администратор».

Чужим каналам бот отвечает только их номером. «Пробное сообщение» у канала — проверка, что бот туда пишет.

Пример целиком ​

Бот вместе с n8n, edge и проверкой из CI — пример: автоматизация вокруг хаба.