Files
vesti/openspec/changes/rich-repost-card/proposal.md
T

50 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
Пользователь опубликовал несколько постов через веб-approve в канал @dedinit_vesti
и увидел, что в канале пост выглядит «как простой агрегатор»:
- только ссылка на чужой канал (заголовок-сниппет из первых 120 символов текста),
- служебная информация по направлениям (📁 направление/язык, 📰 источник, 👁 просмотры),
- в конце Telegram добавляет предпросмотр ссылки (link preview).
Такой репост никому не интересен: не видно ни медиа из оригинального поста, ни
полного текста, ни комментария модератора — только «голая» ссылка и служебка.
## What Changes
Формат публикуемого поста (карточка) меняется на «богатый репост»:
1. **Медиа из оригинального поста** — если у поста есть media_path (фото/видео),
оно отправляется **первым сообщением** (sendPhoto/sendVideo), а текст — следующим.
Сейчас sendPhoto есть, но caption обрезается до 1024 и текст дублируется вторым
сообщением; видео (content_type=video) вообще не отправляется как медиа (фильтр в card.py).
2. **Полный текст поста** — вместо сниппета из первых 120 символов (make_card) или
summary отправляется полный текст исходного поста (обрезанный до Telegram-лимита 4096).
3. **Комментарий модератора** — в веб-форме approve добавляется поле «Комментарий
(по желанию)»; комментарий публикуется первым (или в начале текста), чтобы в канале
было видно мнение/контекст редактора, а не только пересказ.
4. **Ссылка на оригинал БЕЗ предпросмотра** — ссылка на исходный пост остаётся в тексте,
но Telegram-предпросмотр ссылки отключается (sendMessage параметр
`link_preview_options={"is_disabled": True}`), чтобы канал не выглядел как агрегатор
ссылок с превью.
5. **Служебная информация** — частично убирается/переформатируется: направление/язык,
источник, просмотры больше НЕ обязательны в теле поста (внешняя ссылка на оригинал
уже даёт контекст). Остаётся атрибуция для своего контента («Дед в АйТи»).
## Impact
- `publisher/card.py` — построение текста карточки (полный текст + комментарий + ссылка
+ атрибуция, служебка по минимуму).
- `services/publisher/app/telegram.py` — поддержка видео (sendVideo), параметр
`link_preview_options` для sendMessage; send_photo с полным caption без обрезания
(или без дублирования текста).
- `services/publisher/app/main.py` — Card модель: +`comment`; передача link_preview_options.
- `web/app.py` (approve) — чтение комментария из формы, проброс в card.
- `web/templates/candidates.html` — поле ввода комментария в форме approve.
- `publisher/card.py` — фильтр медиа: разрешить video (mp4), не только картинки.
- Rollback: вернуть прежний make_card и вызовы; карточки станут как раньше.
- Безопасность: комментарий — пользовательский ввод → HTML-экранирование как текст поста.