💬 Open source · GitHub Actions · MIT
MAX Action
Уведомления в мессенджер MAX прямо из workflow. Пуши, пул-реквесты, деплои и упавшие сборки приходят в чат, канал или личные сообщения.
Go Docker MAX Bot API GitHub Actions v1
GitHub Marketplace РелизыБыстрый старт
Добавьте секреты MAX_TOKEN и MAX_CHAT_ID в настройках репозитория (Settings → Secrets and variables → Actions) и один шаг в workflow.
name: MAX notification
on:
push:
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Send MAX message
uses: Fgeeha/max-action@v1
with:
token: ${{ secrets.MAX_TOKEN }}
chat_id: ${{ secrets.MAX_CHAT_ID }}
message: |
${{ github.actor }} pushed a commit
Repository: ${{ github.repository }}
Commit: ${{ github.sha }}
Тег @v1 всегда указывает на последний совместимый релиз.
Токен выдаётся при создании бота на платформе MAX для партнёров. Храните его только в GitHub Secrets.
chat_id — ID группового чата или канала, куда добавлен бот. ID групп и каналов бывают отрицательными, это нормально.
user_id — ID пользователя для личного сообщения. Передаётся вместо chat_id: action требует ровно одного получателя. Способы узнать ID описаны в документации MAX.
Что умеет
Чат, канал или личка
Одно сообщение за запуск через официальный POST /messages. Получатель — chat_id или user_id, текст до 4000 символов.
Текст из любого источника
Строка в message, файл из репозитория через message_file или готовая сводка о запуске, если текст не задан. Форматирование Markdown или HTML.
Токен не утекает
Токен маскируется до первой строки лога, идёт только в заголовке Authorization, вычищается из текстов ошибок. Редиректы запрещены, TLS не отключается.
Повторы без спама
Сетевые сбои, 429 и 502–504 повторяются с экспоненциальной задержкой и учётом Retry-After. Ошибки 400/401/403/404 не повторяются.
Outputs для следующих шагов
message_id, recipient_type и recipient_id доступны через steps.<id>.outputs.
Быстрый старт шага
Готовый образ в GHCR на основе scratch, около 6 МБ. Ничего не компилируется в вашем workflow.
Примеры
Только при падении сборки
- name: Send failure notification
if: ${{ failure() }}
uses: Fgeeha/max-action@v1
with:
token: ${{ secrets.MAX_TOKEN }}
chat_id: ${{ secrets.MAX_CHAT_ID }}
format: markdown
message: |
❌ Workflow failed
Repository: ${{ github.repository }}
Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
Текст из файла
- uses: actions/checkout@v4
- run: git log -1 --pretty=%B > notes.txt
- uses: Fgeeha/max-action@v1
with:
token: ${{ secrets.MAX_TOKEN }}
chat_id: ${{ secrets.MAX_CHAT_ID }}
message_file: notes.txt
Сводка о запуске без текста
Если message и message_file не заданы, action соберёт сообщение сам: кто запустил, репозиторий, событие, ветка, короткий SHA и ссылка на запуск — как в примере вверху страницы.
- uses: Fgeeha/max-action@v1
with:
token: ${{ secrets.MAX_TOKEN }}
chat_id: ${{ secrets.MAX_CHAT_ID }}
Параметры
| Input | По умолчанию | Описание |
|---|---|---|
token | — | Токен бота MAX, обязателен |
chat_id | — | ID чата или канала |
user_id | — | ID пользователя для личного сообщения |
message | сводка о запуске | Текст, поддерживает многострочный ввод |
message_file | — | UTF-8 файл, приоритетнее message |
format | пусто | markdown, html или пусто |
notify | true | Уведомлять получателей |
disable_link_preview | false | Не строить превью ссылок |
timeout | 15 | Таймаут запроса, 1–120 секунд |
retries | 2 | Повторы после первой попытки, 0–5 |
debug | false | Безопасный отладочный лог без токена и текста |
api_base_url | platform-api2.max.ru | Базовый URL API, для тестов и миграций |
| Output | Описание | |
|---|---|---|
message_id | ID отправленного сообщения, если API его вернул | |
recipient_type | chat или user | |
recipient_id | Фактически использованный ID получателя | |
Под капотом
- Go без сторонних зависимостей. HTTP-клиент на стандартной библиотеке, ответ API читается с лимитом 1 МиБ, неизвестные поля JSON игнорируются.
- Docker Action. Статический бинарник в образе
scratch, публикуется в GHCR при релизе. Работает на Linux-раннерах. - Цепочка сертификатов MAX.
platform-api2.max.ruиспользует сертификат Russian Trusted CA, которого нет в стандартных хранилищах. Официальный бандл Минцифры вшит в бинарник и добавляется только в пул этого клиента; CI предупреждает за 90 дней до истечения срока. - Проверки. Unit-тесты с race detector, прогон action против заглушки API в CI, actions закреплены по SHA. Живой тест с настоящим токеном вынесен в отдельный ручной workflow.