Разбор
Агент мониторит упоминания бренда в Telegram и предупреждает о кризисе до того как он стал кризисом
Негативный пост в канале на 80 000 подписчиков набирает 50 000 просмотров за 2 часа. Ты узнаёшь через день. Решение: Telethon + Python + Claude — алерт в Telegram через 15 минут после публикации, ежедневный дайджест репутации.
В пятницу вечером администратор паблика на 80 000 подписчиков написал про онлайн-сервис доставки еды. Не жалобу в поддержку — пост с заголовком «Как меня обманул [название]». К субботнему утру — 54 000 просмотров, 320 комментариев, 12 репостов в каналы поменьше. PR-менеджер увидел в воскресенье вечером, когда проверял почту.
Почему Telegram — особенная среда для репутационных угроз
ВКонтакте и сайты-отзовики можно мониторить через стандартные инструменты. Telegram — другое. Здесь нет публичного поискового API. Яндекс индексирует Telegram-каналы с задержкой в несколько часов, а то и дней. Brand Analytics и YouScan технически могут работать с Telegram, но по факту задержка мониторинга составляет от 1 до 4 часов — этого достаточно, чтобы пост успел разлететься.
Телеграм-аудитория не ждёт. Она делает репосты моментально. Один пост в канале 50к подписчиков через 2 часа превращается в сеть из 15 репостов в каналы помельче — и суммарный охват удваивается без единого нового слова.
Три сценария, которые прилетают без предупреждения:
Жалоба в популярном канале. Блогер или тематический паблик публикует негативный опыт. Первый час критически важен — ответ в комментариях сразу меняет настроение обсуждения. Ответ через 24 часа — просто запись в архиве.
Организованный негатив. Конкуренты или недовольные сотрудники договариваются о волне публикаций. Несколько каналов в один день — это уже кризис.
Фейк или ошибка. Кто-то перепутал компанию, написал фактически неверно, или намеренно исказил факты. Без мониторинга — это живёт своей жизнью.
Как работает агент: схема за 60 секунд
Telethon — Python-библиотека, которая работает с настоящим MTProto API Telegram, а не через Bot API. Это ключевое отличие: она читает сообщения из каналов как обычный пользователь, в реальном времени, без задержки на индексацию.
Схема проста: Telethon слушает новые сообщения в указанных каналах. Каждое новое сообщение проверяется на ключевые слова (название бренда, имена продуктов, CEO, конкурентные запросы). При совпадении текст передаётся Claude для классификации. Claude возвращает уровень угрозы и короткий комментарий. Если уровень выше порога — алерт улетает в личный Telegram.
Что отслеживать: список ключевых слов
Хорошая база мониторинга — 4 категории:
Прямые упоминания: название бренда (все варианты написания: с ошибкой, сокращение, транслит), домен сайта, официальные аккаунты Telegram.
Персоны: имя CEO и топ-менеджеров, которые публично ассоциируются с брендом. Негатив на персону часто предшествует негативу на компанию.
Продукты и сервисы: названия ключевых продуктов, особенно если они уникальны. «[Название] не работает», «[Название] обман» — эти паттерны стоит мониторить отдельно.
Конкуренты (опционально): что пишут о прямых конкурентах. Не для слежки — для понимания контекста рынка и заимствования лучших практик работы с аудиторией.
Классификация кризиса: 4 уровня
| Уровень | Название | Признаки | Реакция |
|---|---|---|---|
| 1 | Упоминание | Нейтральное упоминание, информационный контекст, нет оценки | Логировать, в дайджест |
| 2 | Критика | Негативная оценка продукта/сервиса, жалоба, сравнение не в пользу | Алерт, оценить необходимость ответа |
| 3 | Угроза | Призыв к бойкоту, распространение негативного опыта, фейк | Срочный алерт, подключить PR |
| 4 | Кризис | Несколько каналов одновременно, СМИ подхватили, вирусный охват | Громкий алерт, антикризисный план |
Уровни 1 и 2 уходят в дайджест. Уровни 3 и 4 — немедленный алерт в Telegram. Пороги можно настроить: для маленького бренда уровень 2 уже повод реагировать, для крупного федерального — только уровни 3-4.
Код агента
import asyncio
import anthropic
import requests
from telethon import TelegramClient, events
from datetime import datetime, timezone
# === Конфигурация ===
# Получить на my.telegram.org → API development tools
TG_API_ID = 12345678
TG_API_HASH = "your_api_hash_here"
TG_SESSION_NAME = "brand_monitor_session"
# Claude API и Telegram Bot для алертов
CLAUDE_API_KEY = "your_claude_key"
ALERT_BOT_TOKEN = "your_bot_token" # @BotFather
ALERT_CHAT_ID = "your_chat_id" # куда слать алерты
# Каналы для мониторинга (username без @)
CHANNELS_TO_MONITOR = [
"durov", # примеры — замени на реальные
"techcrunch_ru",
"vc_ru",
"roem_ru",
# ... добавляй нужные
]
# Ключевые слова (в нижнем регистре)
BRAND_KEYWORDS = [
"мой бренд", # название компании
"mybrand", # транслит/домен
"имя CEO", # публичные персоны
"продукт X", # названия продуктов
]
# Порог уровня для немедленного алерта (2=критика, 3=угроза, 4=кризис)
ALERT_THRESHOLD = 2
# Дайджест — список всех упоминаний за день
daily_digest = []
def check_keywords(text: str) -> bool:
"""Проверяем наличие ключевых слов в сообщении."""
text_lower = text.lower()
return any(kw in text_lower for kw in BRAND_KEYWORDS)
def classify_with_claude(text: str, channel: str) -> dict:
"""Передаём текст в Claude для классификации тональности."""
client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)
prompt = f"""Ты PR-аналитик. Оцени репутационный риск для бренда в тексте из Telegram-канала.
Канал: {channel}
Текст сообщения:
---
{text[:2000]}
---
Верни JSON с полями:
- level: число от 1 до 4
1 = упоминание (нейтральное, информационное)
2 = критика (негативная оценка, жалоба)
3 = угроза (призыв к бойкоту, фейк, серьёзный негатив)
4 = кризис (вирусный, массовое распространение, СМИ)
- sentiment: "positive" | "negative" | "neutral"
- summary: краткое описание на русском (1 предложение, максимум 100 символов)
- action: рекомендуемое действие на русском (1 предложение)
Отвечай только JSON, без markdown-обёртки."""
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": prompt}]
)
import json
try:
return json.loads(message.content[0].text)
except Exception:
return {"level": 1, "sentiment": "neutral",
"summary": "Не удалось классифицировать", "action": "Проверить вручную"}
def send_alert(channel: str, text: str, classification: dict, msg_url: str):
"""Отправляем алерт в Telegram."""
level = classification.get("level", 1)
icons = {1: "📌", 2: "⚠️", 3: "🔴", 4: "🚨"}
level_names = {1: "Упоминание", 2: "Критика", 3: "Угроза", 4: "КРИЗИС"}
icon = icons.get(level, "📌")
level_name = level_names.get(level, "Упоминание")
alert_text = (
f"{icon} <b>Уровень {level}: {level_name}</b>\n"
f"Канал: <b>{channel}</b>\n"
f"Оценка: {classification.get('summary', '')}\n"
f"Действие: {classification.get('action', '')}\n"
f"\n<a href='{msg_url}'>Открыть сообщение</a>\n"
f"\n<pre>{text[:300]}{'...' if len(text) > 300 else ''}</pre>"
)
requests.post(
f"https://api.telegram.org/bot{ALERT_BOT_TOKEN}/sendMessage",
json={
"chat_id": ALERT_CHAT_ID,
"text": alert_text,
"parse_mode": "HTML",
"disable_web_page_preview": True,
}
)
def send_daily_digest():
"""Отправляем дайджест всех упоминаний за день."""
if not daily_digest:
return
today = datetime.now(timezone.utc).strftime("%d.%m.%Y")
pos = sum(1 for m in daily_digest if m["sentiment"] == "positive")
neg = sum(1 for m in daily_digest if m["sentiment"] == "negative")
neu = sum(1 for m in daily_digest if m["sentiment"] == "neutral")
digest_text = (
f"📊 <b>Дайджест упоминаний за {today}</b>\n"
f"Всего: {len(daily_digest)} | "
f"✅ {pos} позитивных | "
f"❌ {neg} негативных | "
f"➖ {neu} нейтральных\n\n"
)
for m in daily_digest[-10:]: # последние 10 для краткости
icon = "✅" if m["sentiment"] == "positive" else "❌" if m["sentiment"] == "negative" else "➖"
digest_text += f"{icon} [{m['channel']}] {m['summary']}\n"
requests.post(
f"https://api.telegram.org/bot{ALERT_BOT_TOKEN}/sendMessage",
json={"chat_id": ALERT_CHAT_ID, "text": digest_text, "parse_mode": "HTML"}
)
daily_digest.clear()
async def main():
"""Основной цикл мониторинга."""
client = TelegramClient(TG_SESSION_NAME, TG_API_ID, TG_API_HASH)
@client.on(events.NewMessage(chats=CHANNELS_TO_MONITOR))
async def handler(event):
text = event.message.message
if not text or not check_keywords(text):
return
channel = event.chat.username or str(event.chat_id)
msg_url = f"https://t.me/{channel}/{event.message.id}"
print(f"[{datetime.now().strftime('%H:%M:%S')}] Упоминание в @{channel}")
# Классифицируем через Claude
classification = classify_with_claude(text, channel)
# Сохраняем в дайджест
daily_digest.append({
"channel": channel,
"sentiment": classification.get("sentiment", "neutral"),
"summary": classification.get("summary", ""),
"url": msg_url,
})
# Алерт при угрозе
if classification.get("level", 1) >= ALERT_THRESHOLD:
send_alert(channel, text, classification, msg_url)
print(f" → Алерт отправлен (уровень {classification.get('level')})")
await client.start()
print("Мониторинг запущен. Слушаем каналы...")
# Дайджест каждые 24 часа (86400 секунд)
async def digest_loop():
while True:
await asyncio.sleep(86400)
send_daily_digest()
await asyncio.gather(
client.run_until_disconnected(),
digest_loop()
)
if __name__ == "__main__":
asyncio.run(main())Несколько деталей на старте:
При первом запуске Telethon запросит номер телефона и код подтверждения — это стандартная авторизация Telegram. Сессия сохраняется в файл brand_monitor_session.session. После этого скрипт стартует без повторной авторизации.
CHANNELS_TO_MONITOR принимает username-ы без @. Можно добавлять группы и супергруппы — Telethon слушает оба типа одинаково.
Claude API тратит примерно 150–200 токенов на каждую классификацию. При 50 упоминаниях в день — около 10 000 токенов, это меньше 5 рублей в месяц при текущих ценах API.
Есть вопрос по теме?
Пришлю 2 файла: инструкцию по удалению негатива + базу отзывников по нишам
Как запустить: 4 шага
Зайти на my.telegram.org, авторизоваться, выбрать «API development tools», создать приложение. Получить API ID (число) и API Hash (строка 32 символа). Никому не передавать — это как пароль от аккаунта.
my.telegram.org → API development toolsДве библиотеки: telethon для работы с Telegram MTProto, anthropic для Claude API. Вставить все токены в константы скрипта. Собрать список каналов для мониторинга — начать с 20–30 наиболее релевантных.
pip install telethon anthropic requestsЗапустить скрипт локально. Telethon запросит номер телефона и код из Telegram. После успешной авторизации создастся session-файл. Тест: отправить в один из мониторимых каналов сообщение с ключевым словом (если есть доступ) или подождать естественного упоминания.
python brand_monitor.pyСкопировать скрипт и session-файл на VPS. Запустить через systemd или supervisor — чтобы автоматически перезапускался при падении. Проверить через 24 часа что дайджест пришёл. Telegram периодически требует повторную авторизацию — раз в несколько месяцев.
systemctl enable brand-monitor && systemctl start brand-monitorРеальный кейс: 10 минут против 48 часов
Онлайн-сервис доставки из Москвы настроил агента после того как пропустил крупный негативный пост. История банальная: курьер перепутал адрес, клиент разозлился, написал в канал на 82 000 подписчиков. Пост набрал 61 000 просмотров. Поддержка ответила через двое суток.
После настройки агента тот же сценарий повторился через три месяца. Другой клиент, другой канал (67 000 подписчиков), схожая история. Агент поймал пост через 11 минут после публикации — Claude классифицировал как уровень 3 «Угроза». PR-менеджер получил алерт, позвонил клиенту напрямую, договорился о компенсации. Через 40 минут тот же автор написал апдейт к посту: «Проблему решили, оперативно связались».
Итоговый охват апдейта — 18 000 просмотров. Против 61 000 негатива в первый раз.
Сравнение с Brand Analytics
Brand Analytics оправдывает себя если нужна общая картина по рынку, исторические данные, красивые дашборды для отчётов. Собственный агент — если нужно поймать угрозу раньше всех и реагировать пока конкуренты ещё ждут своих алертов.
Оптимальная схема для среднего бизнеса: собственный агент для мониторинга Telegram в реальном времени + базовый тариф Brand Analytics для аналитики и исторических срезов.
Проверь риски своего бренда
Насколько вы уязвимы для Telegram-кризиса?
4 вопроса — оцените свою репутационную защиту
Негатив в Telegram не ждёт рабочего времени. Он публикуется в пятницу вечером, в воскресенье утром, в праздники. Агент работает 24/7 и не пропускает посты когда команда на даче.
3–4 часа на настройку против 48 часов задержки обнаружения. Это сделка, которая окупается при первом же нетривиальном посте.
Есть вопрос по теме?
Пришлю 2 файла: инструкцию по удалению негатива + базу отзывников по нишам
Источники
AI-агенты · Персональная карта
4 часа потратил — не работает?
Покажу где ты пошёл не туда и как сделать правильно за 2 недели
Получить разбор бесплатно →AI-агенты · 10 мест
Ты работаешь до полуночи — AI-агент будет работать вместо тебя
Покажу какой агент закроет твою главную операционную боль
Узнать свой маршрут →Есть вопрос по теме?
Пришлю 2 файла: инструкцию по удалению негатива + базу отзывников по нишам
Источники
Читайте также
Часто задаваемые вопросы
- Как работает мониторинг упоминаний бренда в Telegram через Python?
- Скрипт использует библиотеку Telethon для подписки на Telegram-каналы и чаты. При каждом новом сообщении Python проверяет наличие ключевых слов (название бренда, CEO, продукты). Если слово найдено — текст передаётся в Claude API для классификации тональности. При обнаружении угрозы или кризиса агент отправляет алерт в личный Telegram. Раз в сутки формирует дайджест всех упоминаний за день.
- Сколько каналов может отслеживать агент одновременно?
- Технически Telethon позволяет подписаться на неограниченное число каналов. На практике ограничивает Telegram API: бесплатный аккаунт — до 500 диалогов. Для мониторинга 50–200 каналов одновременно этого более чем достаточно. При масштабировании выше 500 каналов нужен второй аккаунт или Telegram Bot API с channel_post handler.
- Чем отличается этот подход от Brand Analytics или YouScan?
- Brand Analytics стоит от 15 000 рублей в месяц за базовый тариф, YouScan — дороже. Оба сервиса отслеживают Telegram с задержкой от 30 минут до нескольких часов. Собственный агент: разовая настройка 3–4 часа, расход на Claude API 50–200 рублей в месяц в зависимости от объёма упоминаний. Задержка — 1–2 минуты после публикации. Минус: нет красивых дашбордов и исторических данных.
- Какие уровни угрозы различает агент?
- Четыре уровня: Упоминание (нейтральное упоминание бренда, информационный фон), Критика (негативная оценка продукта/сервиса, требует внимания), Угроза (организованный негатив, призывы к бойкоту, фейки), Кризис (массовое распространение, несколько каналов одновременно, СМИ подхватили). Алерт приходит начиная с уровня Критика. Уровень Кризис триггерит отдельный громкий алерт.
- Нужно ли для работы агента раскрывать логин от Telegram?
- Telethon работает от имени обычного Telegram-аккаунта, не бота. Нужны API ID и API Hash — их выдаёт my.telegram.org после регистрации приложения. Номер телефона и пароль вводятся один раз при первом запуске для создания сессии. Сессия сохраняется в файл. На сервере хранится только session-файл, не пароль.
- Как быстро можно настроить агента с нуля?
- 3–4 часа на первый запуск: 30 минут на регистрацию Telegram App и получение API ключей, 1 час на установку зависимостей и настройку конфигурации, 1 час на сбор списка каналов для мониторинга, 1–1.5 часа на тестирование и настройку порогов чувствительности Claude. Поддержка — 15–20 минут в неделю на обновление списка каналов.
Канал «Лёха Маркетолог»
Практика без воды: кейсы, инсайты, разборы. 1–2 поста в неделю.
Пока без комментариев. Будьте первым.