Скилл Claude для сбора новостей из Telegram
Кратко. Ежедневный час ручного чтения Telegram-каналов по темам BIM и AI заменён одной командой /tg-bim-news: скрипт собирает посты в Obsidian, Claude отбирает нужное и пишет сводку, второй скрипт публикует её в корпоративный Telegram.
Зачем это понадобилось
Ежедневный ручной просмотр 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 и оплачивается по факту использования.
Полностью автоматический процесс, при котором Claude взаимодействует с Telegram напрямую, на подписке Pro не сделать: нужен Claude API.
Решение задачи
Для обхода всех ограничений Claude предложил другой путь, «полуавтоматический», на основе двух скриптов: один для сбора новостей, второй для публикации.
Заметки ведутся в Obsidian, и коннектор к нему у Claude есть, то есть Claude может читать и писать в хранилище напрямую. Скрипт собирает новости в файл, а сводку делает Claude по запросу в чате.
Итоговая схема:
- Скрипт читает Telegram и берёт новые посты из каналов.
- Пишет их прямо в «сырую» заметку в Obsidian.
- Claude читает свежие посты, отбирает по темам, отбрасывает лишнее и пишет отдельную заметку со сводкой за день.
- Второй скрипт публикует эту сводку в корпоративный 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"), список каналов по категориям и темы фильтрации.
У канала есть ссылка вида https://t.me/digitalmarks; имя — это часть после t.me/, записывать надёжнее с собачкой: "@digitalmarks". Каналы должны быть публичными, с буквенным именем. Закрытые каналы подключить нельзя: публичного имени у них попросту нет.
В конфиг было внесено около 24 каналов по AI (нейросети, ИИ-агенты, инструменты разработчика, обзоры моделей) и около 35 по BIM (Revit, IFC, мероприятия, нормативы).
Настройка тем
Уточнение тем потребовало тонкой настройки. Изначальные формулировки были общими — «BIM-инструменты», «новости ИИ» — и под них попадало много формально подходящего, но неинтересного шума.
Темы пришлось переписать конкретнее:
| Было | Стало |
|---|---|
| Нормативы и стандарты | Стандарты и нормативы, напрямую регулирующие BIM, ТИМ, информационное моделирование, ЦИМ/ЦМ ОКС, ГИСОГД |
| — | Судебная практика и нормотворчество именно по BIM, ТИМ, информационным моделям и СОД (не общие законы о стройке, недвижимости, ЖКХ или земле) |
| — | Применение ИИ в проектировании и BIM — срез на стыке двух тем, который иначе разбегался между категориями |
Сбор новостей — collect.py
- Обходит около 60 каналов.
- Забирает только новые посты с последнего запуска.
- Сохраняет их в две raw-заметки Obsidian, отдельно AI, отдельно BIM, с форматированием, ссылками и реакциями.
Автопостинг в канал компании — publish.py
- Берёт готовую заметку саммари за нужную дату.
- Переводит её в формат Telegram: Telegram не понимает markdown, у него свой синтаксис на основе HTML.
- Учитывает лимит длины: в одном сообщении не больше 4096 символов; если сводка длиннее, она режется по границам абзацев на несколько сообщений.
- Отключает превью ссылок (
link_preview=False), иначе Telegram прицепляет карточку первой ссылки и пост раздувается. - Отправляет в нужное место: канал по числовому ID и, если это супергруппа с форумом, в конкретный топик.
Что получилось в итоге
По одной команде /tg-bim-news происходит следующее:
-
collect.pyсобирает новости в две raw-заметки Obsidian. - Claude читает свежий блок, фильтрует по точно сформулированным темам, убирает рекламу и оффтоп, группирует оставшееся по подтемам.
- Записывает результат в заметку-саммари за текущую дату; при повторном запуске дополняет её новым блоком с временем.
-
publish.pyпереводит саммари в формат Telegram и публикует в нужный топик корпоративного канала. - Claude отчитывается: сколько собрано, сколько вошло в сводку, куда ушло.
Рисунок 1. Пример работы скилла.
Выводы
Программировать не обязательно. Даже без опыта всё собирается шаг за шагом, главное, чтобы рядом был ИИ, которому можно задать любой вопрос.
Отсутствие Claude API — не ограничение. Полной автоматизации обращений к Claude без API не будет, но «полуавтоматический» режим удобнее и экономнее.