5.0 KiB
01-BRD — ORCH-080: убрать Telegram link-preview (логотип Plane) в уведомлениях трекера
Work Item ID: ORCH-080
Эпик: ORCH-052 (под-задача ORCH-52g)
Тип: Доработка (UX уведомлений)
Приоритет: LOW (косметика)
Зона: src/notifications.py
1. Контекст и проблема
Каждая задача в Telegram сопровождается одной live-карточкой трекера (src/notifications.py,
ORCH-042/066/067). С ORCH-067 в карточке появился кликабельный номер задачи —
<a href="https://plane.mva154.duckdns.org/.../issues/<id>/">ORCH-NNN</a>.
Telegram по умолчанию разворачивает link-preview (web page preview) для первой ссылки в сообщении. Из-за ссылки на Plane под каждым сообщением трекера раскрывается крупный баннер-превью «Plane — Modern project management».
Жалоба (Слава, 08.06): баннер уродует ленту чата и дублируется на каждой задаче/каждом
обновлении карточки (особенно заметно в дефолтном режиме bump, где карточка пересоздаётся
на каждом переходе).
2. Диагностика (код-аудит src/notifications.py)
| Функция | Эндпоинт | Текущий JSON-payload | Превью |
|---|---|---|---|
send_telegram() (стр. 52-62) |
POST /sendMessage |
chat_id, text, parse_mode: HTML, disable_notification |
разворачивается (нет disable_web_page_preview) |
edit_telegram() (стр. 165-174) |
POST /editMessageText |
chat_id, message_id, text, parse_mode: HTML |
разворачивается (нет disable_web_page_preview) |
Причина баннера: оба payload не содержат ключ disable_web_page_preview. Telegram Bot API
по умолчанию (отсутствие ключа) включает превью.
delete_telegram() (/deleteMessage) превью не порождает — правки не требует.
3. Бизнес-цель
Карточка трекера и уведомления в Telegram не должны показывать баннер link-preview Plane, при этом ссылка на задачу остаётся кликабельной.
4. Бизнес-требования
- BR-1. В payload
sendMessage(send_telegram) присутствуетdisable_web_page_preview: True. - BR-2. В payload
editMessageText(edit_telegram) присутствуетdisable_web_page_preview: True. - BR-3. Баннер-превью Plane больше не появляется ни под карточкой трекера (оба режима
bump/edit), ни под отдельными notify-сообщениями, которые идут черезsend_telegram(notify_approve_requested,notify_error, alert'ы стадий) — все они используют тот же низкоуровневый примитив. - BR-4. Кликабельная ссылка
<a href>на задачу в Plane сохраняется (parse_mode: HTMLне меняется). - BR-5. Контракт never-raise сохранён: отправка/редактирование никогда не валит
оркестратор;
pytestзелёный.
5. Не-цели (вне скоупа)
- Не менять текст/формат/верстку карточки.
- Не трогать
parse_mode(HTML нужен для<a href>). - Не трогать bump/edit-логику (
update_task_tracker), репойнтtracker_message_id, delete-семантику. - Не вводить флаги/конфиг — поведение «без превью» безусловное (превью никому не нужно).
- Не трогать схему БД.
6. Заинтересованные лица
- Слава (Owner) — инициатор, конечный наблюдатель ленты Telegram.
7. Грабли / координация
- Файл
src/notifications.pyзатрагивает также ORCH-067 (и потенциально другие задачи эпика). Сверить, что правки (две строки) не конфликтуют при merge. - Один репозиторий с ORCH-74 → по ORCH-026 действует сериализация merge.
Запускать после того как ORCH-74 доедет в
main(или когда конвейер свободен), чтобы не плодить параллельный merge вorchestrator. - Деплой — штатный через Confirm Deploy (self-hosting, ORCH-059).