Разбор
Утренний дайджест в Telegram: ИИ-агент читает 50 источников пока ты спишь
67 минут — столько уходит на утренний мониторинг ниши, и 90% это шум. Python + Claude читает 50 RSS-источников ночью и в 8:00 шлёт дайджест: 5–7 новостей с комментарием «что делать». Стоит 10–30 руб./мес.
Среднестатистический директор по маркетингу открывает утром 11 вкладок. Habr, VC.ru, два telegram-канала, рассылка от агентства, LinkedIn, что-то от коллеги в Slack. Через час — закрывает всё это и идёт на встречу с ощущением что он «в курсе». На следующий день — то же самое.
67 минут — это ещё оптимистичный сценарий. Я разговаривал с людьми, у которых это занимает полтора часа, потому что они не могут остановиться: «надо же дочитать, там ещё одна статья». При этом через 4 часа они не могут вспомнить ни одного конкретного тезиса из прочитанного.
Проблема не в дисциплине. Проблема в том, что чтение новостей — это неструктурированный процесс без чёткого критерия «достаточно». И ещё в том, что 80% из тех 67 минут — это шум, который не имеет прямого отношения к вашему бизнесу.
Чего не хватает в стандартном подходе к мониторингу
Руководители обычно решают проблему информационного потока одним из трёх способов.
Первый — читать всё. Открывать всё утром подряд. Результат — час времени и размытое ощущение осведомлённости без конкретных выводов.
Второй — подписаться на кого-то умного. Telegram-каналы с дайджестами, newsletter от консультантов. Проблема: чужая редакция выбирает что важно по чужим критериям. Изменение в законодательстве для e-commerce — важно. Для b2b-разработчиков — нет. Ваш дайджест должен знать ваш контекст.
Третий — игнорировать и реагировать по факту. Работает до момента, когда конкурент запустил что-то три недели назад, а ты узнаёшь только сейчас.
Агент решает это иначе: он знает ваш контекст, читает нужные источники и показывает только то, что требует вашего внимания.
Как устроена архитектура
Четыре компонента, ни одного лишнего.
feedparser — Python-библиотека, которая умеет разбирать RSS 2.0 и Atom. Принимает URL фида, возвращает список статей с заголовком, описанием, ссылкой и датой. Работает с Habr, VC.ru, любым WordPress-сайтом и через RSSHub — с Telegram-каналами.
Дедупликация по хешу — одна и та же новость часто появляется в трёх источниках за два часа. Агент хранит set хешей заголовков: если заголовок уже видели — пропускает.
Claude получает список из 30–80 заголовков с кратким описанием и возвращает только те 5–7, которые соответствуют критериям важности. Плюс к каждой — одно предложение «что это значит для бизнеса». Это самая ценная часть: не просто пересказ, а интерпретация под контекст.
python-telegram-bot отправляет готовый текст в чат. Всё.
Запускается через cron каждое утро в 7:30 (с запасом), к 8:00 дайджест уже в Telegram.
Код агента
Полный рабочий скрипт. Устанавливается за три минуты.
import feedparser
import anthropic
import hashlib
import json
import asyncio
from datetime import datetime, timedelta, timezone
CLAUDE_API_KEY = "YOUR_CLAUDE_API_KEY"
TELEGRAM_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"
# --- Ваши источники: добавляйте/убирайте ---
FEEDS = [
# Общие технологии и бизнес
"https://habr.com/ru/rss/all/all/",
"https://vc.ru/rss",
# Маркетинг (пример)
"https://sostav.ru/rss",
# Telegram-каналы через RSSHub
# "https://rsshub.app/telegram/channel/ваш_канал",
]
# --- Контекст для Claude: опишите свой бизнес ---
CONTEXT = """
Я руководитель в маркетинговом агентстве.
Меня интересует: изменения в рекламных платформах (Яндекс.Директ, VK Ads),
новые инструменты автоматизации маркетинга, изменения в законодательстве
о рекламе и персональных данных, значимые кейсы конкурентов.
Неважно: развлечения, спорт, международная политика без связи с рынком.
"""
SEEN_FILE = "/tmp/digest_seen.json"
def load_seen() -> set:
try:
with open(SEEN_FILE) as f:
data = json.load(f)
cutoff = datetime.now(timezone.utc) - timedelta(days=3)
return {h for h, ts in data.items()
if datetime.fromisoformat(ts) > cutoff}
except Exception:
return set()
def save_seen(seen: set) -> None:
now = datetime.now(timezone.utc).isoformat()
try:
with open(SEEN_FILE) as f:
old = json.load(f)
except Exception:
old = {}
old.update({h: now for h in seen})
with open(SEEN_FILE, "w") as f:
json.dump(old, f)
def fetch_items(cutoff_hours: int = 24) -> list[dict]:
seen = load_seen()
cutoff = datetime.now(timezone.utc) - timedelta(hours=cutoff_hours)
items = []
for url in FEEDS:
try:
feed = feedparser.parse(url)
for entry in feed.entries[:30]:
title = (entry.get("title") or "").strip()
if not title:
continue
h = hashlib.md5(title.lower().encode()).hexdigest()
if h in seen:
continue
# Фильтр по дате если есть
pub = entry.get("published_parsed")
if pub:
dt = datetime(*pub[:6], tzinfo=timezone.utc)
if dt < cutoff:
continue
items.append({
"title": title,
"summary": (entry.get("summary") or "")[:300],
"link": entry.get("link", ""),
"hash": h,
})
seen.add(h)
except Exception as e:
print(f"Feed error {url}: {e}")
save_seen(seen)
return items
def build_digest(items: list[dict]) -> str:
if not items:
return ""
client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)
news_text = "
".join(
f"{i+1}. {it['title']}
{it['summary']}"
for i, it in enumerate(items[:60])
)
prompt = f"""Контекст: {CONTEXT}
Ниже список {len(items[:60])} новостей за последние 24 часа.
Выбери 5-7 самых важных для описанного контекста.
Для каждой напиши:
- Заголовок (оригинальный или чуть переформулированный)
- 1 предложение: что это значит для бизнеса
Формат ответа (строго):
1. [Заголовок] — [Что значит для бизнеса]
2. ...
Если важных новостей меньше 5 — напиши столько сколько есть.
Не выдумывай новости, работай только с тем что дано.
---
{news_text}"""
msg = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return msg.content[0].text
async def send_telegram(text: str) -> None:
from telegram import Bot
bot = Bot(token=TELEGRAM_TOKEN)
date_str = datetime.now().strftime("%d.%m.%Y")
full = (
f"<b>Дайджест {date_str}</b>\n\n"
f"{text}\n\n"
f"<i>Источников просмотрено: {len(FEEDS)}</i>"
)
await bot.send_message(
chat_id=CHAT_ID,
text=full,
parse_mode="HTML"
)
if __name__ == "__main__":
print("Собираю новости...")
items = fetch_items(cutoff_hours=24)
print(f"Новых элементов: {len(items)}")
if not items:
print("Нет новых материалов.")
else:
digest = build_digest(items)
asyncio.run(send_telegram(digest))
print("Дайджест отправлен.")Несколько деталей которые стоит знать до запуска.
SEEN_FILE хранит хеши заголовков с временными метками — агент не показывает одну и ту же новость дважды, даже если она появилась в пяти источниках. Файл живёт во /tmp, при перезагрузке сервера чистится. Если это важно — перенести в постоянную директорию.
cutoff_hours=24 — агент смотрит только на новости за последние сутки. При первом запуске можно поставить 72, чтобы получить более плотный первый дайджест.
Промпт в CONTEXT — самая важная часть. Чем точнее описан контекст бизнеса, тем лучше работает фильтрация. Потратьте 15 минут на его написание.
Как выглядит результат
Вот пример реального дайджеста для маркетинговой ниши — именно то, что приходит в Telegram в 8:00.
Два минуты на чтение. Три конкретных действия понятны сразу. Всё остальное за этот день — уже не срочное.
Есть вопрос по теме?
Разберу вашу ситуацию и предложу конкретный шаг
Где брать RSS-источники
Большинство профессиональных источников давно раздают RSS — просто об этом не принято говорить вслух.
| Источник | RSS-адрес | Ниша |
|---|---|---|
| Habr — все статьи | habr.com/ru/rss/all/all/ | Технологии, разработка |
| Habr — по хабу (маркетинг) | habr.com/ru/rss/hub/marketing/ | Маркетинг |
| VC.ru — все | vc.ru/rss | Бизнес, стартапы |
| VC.ru — по разделу | vc.ru/marketing/rss | Маркетинг |
| Sostav.ru | sostav.ru/rss | Реклама, маркетинг |
| Telegram-канал | rsshub.app/telegram/channel/ИМЯ | Любая ниша |
| Любой WordPress-сайт | site.ru/feed | Любая ниша |
Для Telegram-каналов через RSSHub адрес строится по шаблону: https://rsshub.app/telegram/channel/{имя_канала}. RSSHub — open source проект, у него есть публичный инстанс, но для надёжности лучше поднять свой (Docker-образ есть). Поднимается за 10 минут.
Хорошая отправная точка — 15–20 источников. Больше источников не всегда лучше: если превысить ~80 новостей за 24 часа, Claude начинает тратить токены на обработку шума и теряет точность. Лучше 25 качественных источников, чем 60 случайных.
Как настроить: 4 шага
Python 3.10+. Три библиотеки: feedparser для парсинга RSS, anthropic для Claude API, python-telegram-bot для отправки сообщений. Больше ничего не нужно.
pip install feedparser anthropic python-telegram-botНаписать @BotFather в Telegram, команда /newbot. Получить токен. Написать боту любое сообщение, затем открыть getUpdates — там будет chat.id вашего аккаунта. Это займёт 5 минут.
api.telegram.org/bot{TOKEN}/getUpdatesЗарегистрироваться на platform.claude.com, создать API key в настройках. Вставить все три константы в скрипт: CLAUDE_API_KEY, TELEGRAM_TOKEN, CHAT_ID. Запустить вручную — убедиться что дайджест пришёл в Telegram.
python morning_digest.pyНа Linux-сервере — cron. На любом VPS достаточно самого дешёвого тарифа (200–300 руб./мес.). Альтернатива без кода — n8n с узлом Schedule Trigger + Execute Command. На Mac — launchd или просто оставить терминал с crontab.
30 7 * * * python /path/to/morning_digest.pyСколько это стоит
Считал для ежедневного запуска с 25 источниками.
Один прогон: загружает ~50 новостей (из которых 20–30 новых после дедупликации), отправляет Claude ~3 000–5 000 токенов и получает ~400 токенов в ответ. При текущих ценах Claude Haiku — около 0.5–1 рубля за запуск. Sonnet — 3–8 рублей.
За месяц при ежедневном запуске: 15–30 рублей на Claude API. VPS для cron — 200–300 рублей если нет своего. Итого 250–350 рублей в месяц.
Один час вашего времени стоит дороже. Агент возвращает 60 минут каждый день, то есть ~22 часа в месяц. При любой разумной оценке времени руководителя ROI считать не нужно.
Проверь себя: нужен ли тебе дайджест
Диагностика
3 вопроса — поймёшь, насколько актуальна проблема
Что тюнить после первой недели
Агент работает хорошо с первого дня — но становится точнее, когда вы его донастраиваете под реальный сигнал.
Промпт — главный рычаг. Добавьте конкретные примеры того что важно: «Если новость касается изменений в Яндекс.Директ — всегда включать». Или исключения: «Новости о зарубежных рынках только если есть прямое влияние на Россию».
Источники — через неделю станет понятно какие фиды дают качественный сигнал, а какие — только шум. Отключайте шумные, добавляйте точечные.
Порог дедупликации — если агент пропускает связанные новости (события которые развиваются несколько дней), поставьте cutoff_hours=48 вместо 24 или измените логику хешинга на учёт URL, а не только заголовка.
Формат дайджеста — некоторым удобнее получать не текст, а структурированные карточки через Telegram Inline Keyboard. Можно добавить кнопки «Подробнее» со ссылкой прямо в сообщении — python-telegram-bot это поддерживает из коробки.
Я запустил такой агент для одного клиента в феврале. Он работает в нише медицинского оборудования — источников немного, но важные новости (изменения в сертификации, движения дистрибьюторов) нельзя пропускать. До агента — час чтения по утрам, часть новостей всё равно проходила мимо. После — 5 минут на дайджест, три раза за три месяца агент выловил что-то важное раньше, чем это дошло по другим каналам. Стоимость за три месяца — 87 рублей на Claude API.
Есть вопрос по теме?
Разберу вашу ситуацию и предложу конкретный шаг
Похожие кейсы
- Лидогенерация через Telegram без спама
- Контент-план для Telegram за 10 минут
- Автопостинг VK и Telegram с адаптацией
- Мониторинг упоминаний бренда в Telegram
Источники
AI-агенты · Персональная карта
4 часа потратил — не работает?
Покажу где ты пошёл не туда и как сделать правильно за 2 недели
Получить разбор бесплатно →AI-агенты · 10 мест
Ты работаешь до полуночи — AI-агент будет работать вместо тебя
Покажу какой агент закроет твою главную операционную боль
Узнать свой маршрут →Есть вопрос по теме?
Разберу вашу ситуацию и предложу конкретный шаг
Источники
Читайте также
Часто задаваемые вопросы
- Сколько стоит запустить ИИ-дайджест новостей через Claude API?
- Один запуск агента — это примерно 3 000–8 000 токенов в зависимости от числа источников и объёма новостей. При ежедневном запуске в 8:00 месячный расход на Claude API составит 10–30 рублей. Для сравнения: 45 минут вашего времени каждое утро при ставке 3 000 руб./час — это 67 500 рублей в месяц.
- Как подключить Telegram-каналы к RSS-агенту?
- Telegram-каналы нативно не раздают RSS. Есть три способа: сервис rsshub.app (генерирует RSS для любого публичного канала по шаблону https://rsshub.app/telegram/channel/{channel_name}), сервис tg.i-c-a.su, или читать через Telegram Bot API напрямую. RSSHub — самый стабильный вариант, поддерживает сотни источников.
- Какие источники подключить для маркетингового дайджеста?
- Базовый сет на старт: Habr (habr.com/ru/rss/all/all), VC.ru (vc.ru/rss), RBK (rbc.ru/v10/ajax/get-news-feed/project/rbcnews.rbc.ru/lastRSS/20), Sostav (sostav.ru/rss), MarketingProfs RSS, блог Яндекс для бизнеса. Для узкой ниши — добавить 3–5 тематических Telegram-каналов через RSSHub. Итого 15–20 источников дают достаточное покрытие.
- Нужно ли программирование для настройки агента?
- Базовый Python уровня 'могу запустить скрипт и установить pip-библиотеки'. Весь код в статье. Для автозапуска нужен cron на любом VPS или n8n (без кода). Настройка занимает 2–3 часа в первый раз, потом агент работает без внимания.
- Как Claude фильтрует новости — что считается важным?
- В промпте задаётся контекст бизнеса и критерии важности: изменения в законодательстве, движения крупных игроков рынка, новые инструменты которые экономят деньги или время, угрозы текущей модели. Всё остальное — события без прямого влияния на бизнес — Claude отсеивает. Промпт можно тюнить под свою нишу.
- Что делать если агент пропускает важные новости или включает мусор?
- Дообучать промпт. Добавить примеры 'хорошей' и 'плохой' новости. Ввести тему и нишу явно: 'Я работаю в e-commerce, меня интересует...'. Чем конкретнее контекст — тем точнее фильтр. За первые 2 недели работы агента обычно уходит 30–40 минут на донастройку промпта.
Канал «Лёха Маркетолог»
Практика без воды: кейсы, инсайты, разборы. 1–2 поста в неделю.
Пока без комментариев. Будьте первым.