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

Настройка
- У @BotFather —
/newbot, получите токен (123456789:AA…). - «Оповещения» → «Настройка» → «Бот Telegram» → «Настроить»: вставьте токен — хаб проверит его у Telegram и покажет имя бота.
- Напишите боту
/startв нужном чате (группу — сначала добавьте в неё бота): он ответит номером чата. Добавьте чат в настройках:- роль — чтение: состояние и кнопки просмотра; администратор — ещё выкладка, сухой прогон, бан и разбан;
- оповещения — слать ли в этот чат события.
- Кому можно действовать — Telegram user id людей (свой бот назовёт на
/id). Пусто — любому участнику чата с ролью «администратор»; для групп список лучше задать. - Оповещения — какие события присылать (ничего не отмечено — все), язык текстов.
Правка — в окне с диффом «что изменится», всё — в журнале действий. «Пробное сообщение» у чата — проверка, что бот туда пишет.
Команды
| Команда | Что | Роль чата |
|---|---|---|
/status | сколько хостов отвечает, проблемы по важности | чтение |
/hosts | хосты: отвечает ли, проблемы | чтение |
/alerts | последние оповещения | чтение |
/pipelines | конвейеры и итог последней выкладки | чтение |
/deploy <конвейер> | выкладка — после кнопки «Выложить» | администратор |
/dryrun <конвейер> | сухой прогон с галочками, выбранными у конвейера | администратор |
/ban <IP>, /unban <IP> | бан и разбан на всех хостах с fail2ban — после кнопки | администратор |
/id | номер чата и ваш | любая |
Конвейер — по имени или номеру. Итог запущенного задания бот присылает сам (статус и последние строки журнала).
Как выглядят сообщения
Событие — блок: жирная шапка (значок, хост, что случилось, время) и текст; новые находки — списком, до трёх, дальше «…и ещё N»:
⚠️ 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) — для них вход не нужен.
Настройка
- 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 @бот).
- OAuth & Permissions → Bot Token Scopes:
- «Оповещения» → «Настройка» → «Slack» → «Настроить»: Bot User OAuth Token (
xoxb-…, хаб проверит его у Slack) и Signing Secret (Basic Information). Карточка показывает готовые Request URL — с edge с ролью «колбэки», если он есть, иначе адрес самого хаба. - Каналы — номер (
C0123ABCD;/nkt idназовёт), роль, оповещения. Кому можно действовать — Slack user id (U0123ABCD); пусто — любому в канале с ролью «администратор».
Чужим каналам бот отвечает только их номером. «Пробное сообщение» у канала — проверка, что бот туда пишет.
Пример целиком
Бот вместе с n8n, edge и проверкой из CI — пример: автоматизация вокруг хаба.