3.1 KiB
tg-publisher Specification
Purpose
Публикация отобранных новостей через Bot API в тематические Telegram-каналы. Дополняется автораспространением своего контента (fan-out) по нескольким направлениям.
Requirements
Requirement: Автораспространение (fan-out)
Подтверждение СВОЕГО поста (is_own=1) MUST публиковать карточку во ВСЕ тематические каналы @dedinit_vesti___bot, соответствующие выбранным направлениям (по умолчанию — все направления классификации поста). Каждая карточка MUST содержать атрибуцию «Дед в АйТи» (@dedinit) и ссылку на оригинал t.me/dedinit/<post_id>.
Scenario: Мульти-публикация
- WHEN подтверждается свой пост с направлениями [linux, ai]
- THEN карточка отправляется в @dedinit_vesti_linux_ru_bot и @dedinit_vesti_ai_ru_bot; обе содержат ссылку на оригинал
Scenario: Чужой пост — без fan-out
- WHEN подтверждается внешний пост (is_own=0)
- THEN публикуется только в канал своего направления, без атрибуции автора
Requirement: Публикация по списку направлений
Публикатор MUST поддерживать publish_multi(directions) — публикацию карточки по списку
направлений, возвращающую map {direction: message_id}. При пустом списке направлений
MUST публиковать в направление по умолчанию (direction поста).
Scenario: Список направлений рассылки
- WHEN publish_multi вызывается с directions=[linux, ai]
- THEN возвращается {linux: message_id1, ai: message_id2}; каждая публикация записывается в published с distributed_dirs
Scenario: Пустой список направлений
- WHEN publish_multi вызывается без directions
- THEN публикация идёт в канал направления поста (direction по умолчанию), без fan-out
Requirement: Метрики по каждому направлению
Для опубликованных карточек MUST собираться views через Bot API по каждому направлению (каждому message_id), чтобы веб показывал эффективность рассылки по лентам.
Scenario: Метрики fan-out
- WHEN пост разослан в [linux, ai] и каналы набирают просмотры
- THEN get_views вызывается для каждого message_id; views хранятся по направлению