Разбор

Утренний дайджест в Telegram: ИИ-агент читает 50 источников пока ты спишь

67 минут — столько уходит на утренний мониторинг ниши, и 90% это шум. Python + Claude читает 50 RSS-источников ночью и в 8:00 шлёт дайджест: 5–7 новостей с комментарием «что делать». Стоит 10–30 руб./мес.

• 8 мин чтения

Среднестатистический директор по маркетингу открывает утром 11 вкладок. Habr, VC.ru, два telegram-канала, рассылка от агентства, LinkedIn, что-то от коллеги в Slack. Через час — закрывает всё это и идёт на встречу с ощущением что он «в курсе». На следующий день — то же самое.

67 мин
в среднем тратит руководитель на чтение новостей и мониторинг ниши каждое утро — по данным опросов McKinsey о распределении рабочего времени топ-менеджеров
McKinsey Global Institute, “Time well spent”

67 минут — это ещё оптимистичный сценарий. Я разговаривал с людьми, у которых это занимает полтора часа, потому что они не могут остановиться: «надо же дочитать, там ещё одна статья». При этом через 4 часа они не могут вспомнить ни одного конкретного тезиса из прочитанного.

Проблема не в дисциплине. Проблема в том, что чтение новостей — это неструктурированный процесс без чёткого критерия «достаточно». И ещё в том, что 80% из тех 67 минут — это шум, который не имеет прямого отношения к вашему бизнесу.

Чего не хватает в стандартном подходе к мониторингу

Руководители обычно решают проблему информационного потока одним из трёх способов.

Первый — читать всё. Открывать всё утром подряд. Результат — час времени и размытое ощущение осведомлённости без конкретных выводов.

Второй — подписаться на кого-то умного. Telegram-каналы с дайджестами, newsletter от консультантов. Проблема: чужая редакция выбирает что важно по чужим критериям. Изменение в законодательстве для e-commerce — важно. Для b2b-разработчиков — нет. Ваш дайджест должен знать ваш контекст.

Третий — игнорировать и реагировать по факту. Работает до момента, когда конкурент запустил что-то три недели назад, а ты узнаёшь только сейчас.

Агент решает это иначе: он знает ваш контекст, читает нужные источники и показывает только то, что требует вашего внимания.

Из чего состоят 67 минут утреннего мониторинга
Шум — новости без действия
~55%
Дубли из разных источников
~20%
Релевантно, но не срочно
~15%
Действительно важное
~10%
Оценка на основе анализа паттернов чтения. Важное — это новости которые требуют конкретного действия или меняют стратегию. Распределение варьируется по нишам.

Как устроена архитектура

Четыре компонента, ни одного лишнего.

📡RSS/Atom20–50 источников
🐍Pythonпарсинг + дедупликация
🤖Claudeфильтр + дайджест
✈️Telegram8:00 каждый день

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.

Код агента

Полный рабочий скрипт. Устанавливается за три минуты.

🐍 morning_digest.py — pip install feedparser anthropic python-telegram-bot
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.

📋Дайджест 31.05.2026Просмотрено: 23 источника
1Яндекс.Директ обновил алгоритм автостратегий: новые сигналы поведенческих факторов
Автостратегии начнут учитывать глубину просмотра и время на сайте — кампании с высоким отказом могут просесть в охвате в первые недели. Стоит проверить посадочные страницы до обновления.
Действие
2ФАС уточнила требования к маркировке рекламы: обновлённые разъяснения для агентств
Новые примеры нарушений — важно сверить формат токенов в кампаниях клиентов, особенно в коллаборациях и нативной рекламе.
Действие
3Mindbox выпустил обновление сегментации: RFM в реальном времени
Если работаете с e-commerce-клиентами на Mindbox — стоит посмотреть, это реально упрощает сегментацию под акции.
Инструмент
4Исследование: конверсия из поиска в звонок упала на 18% у МСБ в апреле
Тренд на рост CPA — не ваша неэффективность, а рыночный сдвиг. Аргумент для разговора с клиентами о пересмотре KPI.
Наблюдение
5Claude API снизил цену на Haiku на 25%, добавлен новый tier для стартапов
Если используете Claude в автоматизации — можно пересчитать unit-экономику автоматических задач, выйдет дешевле.
Инструмент

Два минуты на чтение. Три конкретных действия понятны сразу. Всё остальное за этот день — уже не срочное.

Где брать 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.rusostav.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 шага

1
Установить зависимости

Python 3.10+. Три библиотеки: feedparser для парсинга RSS, anthropic для Claude API, python-telegram-bot для отправки сообщений. Больше ничего не нужно.

pip install feedparser anthropic python-telegram-bot
2
Создать Telegram-бота и получить Chat ID

Написать @BotFather в Telegram, команда /newbot. Получить токен. Написать боту любое сообщение, затем открыть getUpdates — там будет chat.id вашего аккаунта. Это займёт 5 минут.

api.telegram.org/bot{TOKEN}/getUpdates
3
Получить ключ Claude API и прописать токены

Зарегистрироваться на platform.claude.com, создать API key в настройках. Вставить все три константы в скрипт: CLAUDE_API_KEY, TELEGRAM_TOKEN, CHAT_ID. Запустить вручную — убедиться что дайджест пришёл в Telegram.

python morning_digest.py
4
Настроить автозапуск в 7:30

На 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 вопроса — поймёшь, насколько актуальна проблема

Вопрос 1 из 3
Сколько времени уходит на чтение новостей по нише каждое утро?
Вопрос 2 из 3
Бывало ли что узнавал важное изменение в нише через несколько дней или от коллег — не из своего мониторинга?
Вопрос 3 из 3
Можешь вспомнить три конкретных инсайта из новостей за прошлую неделю, которые повлияли на решения?

Что тюнить после первой недели

Агент работает хорошо с первого дня — но становится точнее, когда вы его донастраиваете под реальный сигнал.

Промпт — главный рычаг. Добавьте конкретные примеры того что важно: «Если новость касается изменений в Яндекс.Директ — всегда включать». Или исключения: «Новости о зарубежных рынках только если есть прямое влияние на Россию».

Источники — через неделю станет понятно какие фиды дают качественный сигнал, а какие — только шум. Отключайте шумные, добавляйте точечные.

Порог дедупликации — если агент пропускает связанные новости (события которые развиваются несколько дней), поставьте cutoff_hours=48 вместо 24 или измените логику хешинга на учёт URL, а не только заголовка.

Формат дайджеста — некоторым удобнее получать не текст, а структурированные карточки через Telegram Inline Keyboard. Можно добавить кнопки «Подробнее» со ссылкой прямо в сообщении — python-telegram-bot это поддерживает из коробки.


Я запустил такой агент для одного клиента в феврале. Он работает в нише медицинского оборудования — источников немного, но важные новости (изменения в сертификации, движения дистрибьюторов) нельзя пропускать. До агента — час чтения по утрам, часть новостей всё равно проходила мимо. После — 5 минут на дайджест, три раза за три месяца агент выловил что-то важное раньше, чем это дошло по другим каналам. Стоимость за три месяца — 87 рублей на Claude API.

Похожие кейсы

Источники

Источники

Часто задаваемые вопросы

Сколько стоит запустить ИИ-дайджест новостей через 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 минут на донастройку промпта.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.