# Релей GlitchTip в Telegram

*Для разработчиков. Состояние на 24.09.2026. Подробности — README `Buharestskie/gitchtip_tg_bot`. Отчёт по оплатам для группы ОС описан отдельно — статья «Отчёт по оплатам группы ОС».*

## Коротко

gitchtip\_tg\_bot — релей в Telegram. Принимает HTTP-вебхуки и пересылает их в чаты: алерты GlitchTip, обращения «Сообщить о проблеме» из дашбордов и виджетов, отчёт смены менеджера МОС. Сам следит, жив ли GlitchTip, и раз в день собирает отчёт по оплатам группы ОС.

<figure id="bkmrk-%D0%90%D0%BB%D0%B5%D1%80%D1%82-glitchtip%2C-%D0%BE%D0%B1%D1%80" style="margin:16px 0; text-align:center">[![Алерт GlitchTip, обращение пользователя и монитор](https://wiki.donula26.ru/uploads/images/gallery/2026-09/bots-glitchtip-alerts.png)](https://wiki.donula26.ru/uploads/images/gallery/2026-09/bots-glitchtip-alerts.png)<figcaption style="font-size:13px; color:#6b7280; margin-top:8px; text-align:center">Алерт GlitchTip, обращение пользователя и монитор</figcaption></figure>## Где живёт

<table id="bkmrk-%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80ulrica-%E2%80%94-%D1%81-%D1%80%D0%BE%D1%81"><tbody><tr><td>Сервер</td><td>`ulrica` — с российских площадок `api.telegram.org` недоступен; каталог, контейнер и адрес — в README</td></tr><tr><td>Адрес</td><td>HTTP без TLS и без reverse proxy, на отдельном порту ulrica</td></tr><tr><td>Код</td><td>доставляется git-бандлом: у ulrica нет доступа к GitHub</td></tr></tbody></table>

## Что куда уходит

Все пути защищены одним токеном в адресе: `/hook/<WEBHOOK_TOKEN>`. Чужой токен — `401`.

<table id="bkmrk-%D0%9A%D1%82%D0%BE-%D1%88%D0%BB%D1%91%D1%82%D0%9F%D1%83%D1%82%D1%8C%D0%9A%D0%B0%D0%BA-%D0%B1%D0%BE%D1%82-"><thead><tr><th>Кто шлёт</th><th>Путь</th><th>Как бот понимает, что это</th><th>Чат</th></tr></thead><tbody><tr><td>GlitchTip (все проекты)</td><td>`/hook/…`</td><td>всё, что не подошло ниже</td><td>`TELEGRAM_CHAT_ID`</td></tr><tr><td>«Сообщить о проблеме»: МОС, МПП1, МПП2, виджет Яндекс.Диска, return\_amo\_hook\_service</td><td>`/hook/…` (у отправителя — `FEEDBACK_WEBHOOK_URL`)</td><td>в теле есть непустой `alias`</td><td>`TELEGRAM_CHAT_ID`</td></tr><tr><td>Отчёт смены из виджета МОС</td><td>`/mos-workday-report/…` (у отправителя — `WORKDAY_REPORT_WEBHOOK_URL`)</td><td>в теле есть объект `report`</td><td>`WORKDAY_REPORT_CHAT_ID`</td></tr><tr><td>Ручной запуск отчёта по оплатам</td><td>`POST /payments-report/…`</td><td>—</td><td>`PAYMENTS_REPORT_CHAT_ID`</td></tr></tbody></table>

Тип определяет **тело**, а не путь: отчёт смены, присланный на `/hook/`, всё равно уйдёт в чат отчётов.

Из пейлоада GlitchTip читаются только `text` и `attachments[].title / title_link / text`. Уровень события не читается — у любого алерта шапка «🔴 GlitchTip».

## Подключить новый проект GlitchTip

1. В GlitchTip, в настройках проекта, — правило алерта с интеграцией **generic webhook**.
2. Адрес — `…/hook/<WEBHOOK_TOKEN>` релея: проще всего скопировать из правила любого уже подключённого проекта; адрес — в README, токен — в `.env` релея на сервере.
3. Как часто алертить, решает правило в GlitchTip: сам релей ничего не фильтрует и не склеивает — один POST, одно сообщение.

## Монитор GlitchTip

Раз в 5 минут релей запрашивает `GLITCHTIP_HEALTH_URL` (таймаут 10 секунд). Пишет только при смене состояния: «🔴 GlitchTip недоступен» с причиной и «🟢 GlitchTip снова доступен». Одного неудачного опроса хватает для алерта; падение и подъём между двумя опросами не заметит.

## На что наступают

- **Нет очереди и повторов.** Если Telegram отказал, отправитель получает `502` и должен повторить сам — иначе сообщение потеряно.
- **Сообщение длиннее 4096 символов** Telegram отклонит — тоже `502`. Режется на части только отчёт по оплатам.
- **Сменили `WEBHOOK_TOKEN`** — поправить адрес в правилах GlitchTip и `FEEDBACK_WEBHOOK_URL` / `WORKDAY_REPORT_WEBHOOK_URL` у всех отправителей.
- **Токен в пути** попадает в access-лог.
- **Поля `…Seconds` в отчёте смены МОС на самом деле минуты** — дашборд уже переводит их, а имена полей не меняет.
- **`aiohttp` не указан в `requirements.txt`** — работает транзитной зависимостью.
- **Отчёт по оплатам падает с `KeyError` молча** — если зарплатный дашборд поменял формат ответа, в чат не придёт ни отчёт, ни сообщение о сбое.
- Внешней пробы у релея нет — окно обслуживания при выкатке открыть не на что.