# Скилл Claude для сбора новостей из Telegram

[![Обложка статьи](https://wiki.marksdigital.ru/uploads/images/gallery/2026-09/scaled-1680-/izobrazenie-codex-7-sent-2026-g-20-32-32.png)](https://wiki.marksdigital.ru/uploads/images/gallery/2026-09/izobrazenie-codex-7-sent-2026-g-20-32-32.png)

<p class="callout success"><strong>Кратко.</strong> Ежедневный час ручного чтения Telegram-каналов по темам BIM и AI заменён одной командой <code>/tg-bim-news</code>: скрипт собирает посты в Obsidian, Claude отбирает нужное и пишет сводку, второй скрипт публикует её в корпоративный Telegram.</p>

## Зачем это понадобилось

Ежедневный ручной просмотр Telegram-каналов по двум темам (BIM и AI) занимал около часа. Нужно было автоматизировать сбор, фильтрацию по нужным темам и публикацию короткого дайджеста в корпоративный Telegram.

Также необходимо было не терять интересные посты, а сохранять их в базу знаний на основе Obsidian на локальном компьютере.

## Поиск готового решения

Первый вопрос к Claude был простой: есть ли готовый коннектор к Telegram? Ответ: коннектора к Telegram нет.

Также выяснились ограничения Telegram и имеющейся в распоряжении подписки на Claude.

### Ограничение Telegram

У Telegram есть два разных способа доступа: «бот» и «обычный пользователь». Бот через Telegram Bot API не может читать произвольные публичные каналы: он видит сообщения только там, где сам сделан администратором. Просто «подписать бота на @somechannel» не получится.

Решить эту проблему получилось с помощью **Telethon** — библиотеки Python для работы с официальным Telegram API. Она позволяет управлять обычным пользовательским аккаунтом или создавать полноценные клиентские приложения. По сути читаются собственные подписки, то же самое, что в клиенте, только программно.

Публикация в свой канал тоже идёт через Telethon. В итоге и чтение, и публикация работают через одну библиотеку.

### Ограничение подписки Pro

Подписка Pro и Claude API — разные продукты с разной оплатой. Pro даёт чат и веб-интерфейс, а программный доступ к моделям подключается отдельно в Anthropic Console и оплачивается по факту использования.

<p class="callout warning">Полностью автоматический процесс, при котором Claude взаимодействует с Telegram напрямую, на подписке Pro не сделать: нужен Claude API.</p>

## Решение задачи

Для обхода всех ограничений Claude предложил другой путь, «полуавтоматический», на основе двух скриптов: один для сбора новостей, второй для публикации.

Заметки ведутся в Obsidian, и коннектор к нему у Claude есть, то есть Claude может читать и писать в хранилище напрямую. Скрипт собирает новости в файл, а сводку делает Claude по запросу в чате.

**Итоговая схема:**

1. Скрипт читает Telegram и берёт новые посты из каналов.
2. Пишет их прямо в «сырую» заметку в Obsidian.
3. Claude читает свежие посты, отбирает по темам, отбрасывает лишнее и пишет отдельную заметку со сводкой за день.
4. Второй скрипт публикует эту сводку в корпоративный Telegram-канал.

## Оформление в скилл

«Скилл» у Claude — это папка с инструкцией и скриптами, которую он подхватывает как готовый сценарий.

### Требования к скиллу

| Параметр | Решение |
|---|---|
| Команда | `/tg-bim-news` |
| Категории | AI и BIM, новости идут в разные заметки |
| Режим сбора | Инкрементальный: новый канал — за последнюю неделю; знакомый — только появившееся с прошлого запуска |
| «Сырая» заметка | Одна на категорию, например `D:\Obsidian\user\TgInbox\AI\AI News (raw).md`. Новые посты сверху, между постами разделитель `---`. Шапку с тегами скрипт не трогает |
| Саммари | Отдельная заметка с датой в имени, например `AI News_2026-06-07.md`. При повторном запуске за день дополняется блоком с пометкой времени |
| Темы фильтрации | Задаются в конфигурации |

### Структура папки

По такому ТЗ Claude собрал папку с четырьмя файлами:

```
skills\tg-bim-news\
├── SKILL.md            — инструкция для Claude
├── config.json         — настройки
└── scripts\
    ├── collect.py      — сбор новостей
    └── publish.py      — публикация в Telegram
```

### Конфигурация

В `config.json` записывается часовой пояс (`"Europe/Moscow"`), список каналов по категориям и темы фильтрации.

<p class="callout info">У канала есть ссылка вида <code>https://t.me/digitalmarks</code>; имя — это часть после <code>t.me/</code>, записывать надёжнее с собачкой: <code>"@digitalmarks"</code>. Каналы должны быть публичными, с буквенным именем. Закрытые каналы подключить нельзя: публичного имени у них попросту нет.</p>

В конфиг было внесено около 24 каналов по AI (нейросети, ИИ-агенты, инструменты разработчика, обзоры моделей) и около 35 по BIM (Revit, IFC, мероприятия, нормативы).

### Настройка тем

Уточнение тем потребовало тонкой настройки. Изначальные формулировки были общими — «BIM-инструменты», «новости ИИ» — и под них попадало много формально подходящего, но неинтересного шума.

Темы пришлось переписать конкретнее:

| Было | Стало |
|---|---|
| Нормативы и стандарты | Стандарты и нормативы, напрямую регулирующие BIM, ТИМ, информационное моделирование, ЦИМ/ЦМ ОКС, ГИСОГД |
| — | Судебная практика и нормотворчество именно по BIM, ТИМ, информационным моделям и СОД (не общие законы о стройке, недвижимости, ЖКХ или земле) |
| — | Применение ИИ в проектировании и BIM — срез на стыке двух тем, который иначе разбегался между категориями |

### Сбор новостей — `collect.py`

1. Обходит около 60 каналов.
2. Забирает только новые посты с последнего запуска.
3. Сохраняет их в две raw-заметки Obsidian, отдельно AI, отдельно BIM, с форматированием, ссылками и реакциями.

### Автопостинг в канал компании — `publish.py`

1. Берёт готовую заметку саммари за нужную дату.
2. Переводит её в формат Telegram: Telegram не понимает markdown, у него свой синтаксис на основе HTML.
3. Учитывает лимит длины: в одном сообщении не больше 4096 символов; если сводка длиннее, она режется по границам абзацев на несколько сообщений.
4. Отключает превью ссылок (`link_preview=False`), иначе Telegram прицепляет карточку первой ссылки и пост раздувается.
5. Отправляет в нужное место: канал по числовому ID и, если это супергруппа с форумом, в конкретный топик.

## Что получилось в итоге

По одной команде `/tg-bim-news` происходит следующее:

1. `collect.py` собирает новости в две raw-заметки Obsidian.
2. Claude читает свежий блок, фильтрует по точно сформулированным темам, убирает рекламу и оффтоп, группирует оставшееся по подтемам.
3. Записывает результат в заметку-саммари за текущую дату; при повторном запуске дополняет её новым блоком с временем.
4. `publish.py` переводит саммари в формат Telegram и публикует в нужный топик корпоративного канала.
5. Claude отчитывается: сколько собрано, сколько вошло в сводку, куда ушло.

[![Пример работы скилла](https://wiki.marksdigital.ru/uploads/images/gallery/2026-09/scaled-1680-/skill-work.png)](https://wiki.marksdigital.ru/uploads/images/gallery/2026-09/skill-work.png)

<p class="align-center"><em>Рисунок 1. Пример работы скилла.</em></p>

## Выводы

<p class="callout success"><strong>Программировать не обязательно.</strong> Даже без опыта всё собирается шаг за шагом, главное, чтобы рядом был ИИ, которому можно задать любой вопрос.</p>

<p class="callout success"><strong>Отсутствие Claude API — не ограничение.</strong> Полной автоматизации обращений к Claude без API не будет, но «полуавтоматический» режим удобнее и экономнее.</p>