vibecode.wiki
RU EN
~/wiki / telegram-boty / kak-sozdat-yniversalny-parser

Как создать универсальный Telegram-бот — парсер любых постов из каналов с AI-нормализацией и fallback-правилами

◷ 7 мин чтения 01.03.2026

Следующий шаг

Открой бота или продолжай маршрут внутри раздела.

$ cd раздел/ $ open @mmorecil_bot

Статья -> план в ИИ

Отправь ссылку на эту статью в любой ИИ и получи план внедрения под свой проект.

Прочитай эту статью: https://vibecode.morecil.ru/ru/telegram-boty/kak-sozdat-yniversalny-parser/ Работай в контексте моего текущего проекта. Сделай план внедрения под мой стек: 1) что изменить 2) в каких файлах 3) риски и типичные ошибки 4) как проверить, что всё работает Если есть варианты, дай "быстрый" и "production-ready".
Как использовать
  1. Скопируй этот промпт и отправь в чат с ИИ.
  2. Прикрепи проект или открой папку репозитория в ИИ-инструменте.
  3. Попроси изменения по файлам, риски и короткий чеклист проверки.

В этой статье разберем как создать бота, который:

  • Автоматически забирает новые посты из любых Telegram-каналов (публичных и приватных).
  • Через AI (Groq) превращает хаотичный текст в структурированную карточку: тип поста, категория, заголовок, summary, ссылки, контакты и т.д.
  • При сбое AI мгновенно переключается на надёжные правила (fallback).
  • Полностью автономно публикует чистую ленту — без ручной модерации.
  • Работает 24/7 и легко расширяется под любую нишу.

Что тебе понадобится (подготовка за 10 минут)

  1. Установленный Node.js 20+
  2. Telegram-аккаунт
  3. Бесплатный аккаунт Groq (самый быстрый и дешёвый LLM на 2026 год)
  4. (Опционально) Бесплатный Supabase проект для хранения данных

Шаг 1. Создаём бота через BotFather

  1. Открой Telegram → найди @BotFather
  2. Напиши /newbot
  3. Придумай имя: МойПарсерБот
  4. Придумай username: my_parser_bot (должен заканчиваться на bot)
  5. BotFather пришлёт токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Сохрани токен в безопасное место. Это твой BOT_TOKEN.

Шаг 2. Получаем Groq API-ключ

  1. Перейди на https://console.groq.com/keys
  2. Нажми Create API key
  3. Скопируй ключ (начинается на gsk_)
  4. Сохрани как GROQ_API_KEY

Шаг 3. (Опционально) Создаём Supabase проект

  1. https://supabase.com → Sign up (через GitHub)
  2. New Project → выбери регион (Europe)
  3. Запомни:
    • Project URL (SUPABASE_URL)
    • anon public key (SUPABASE_ANON_KEY)

Шаг 4. Создаём проект и устанавливаем зависимости

Создай папку и выполни команды:

bash
mkdir tg-universal-parser-bot
cd tg-universal-parser-bot
npm init -y
npm install telegraf node-cron axios cheerio groq-sdk dotenv
npm install -D nodemon

Создай файл .env и вставь:

env
BOT_TOKEN=твой_токен_из_BotFather
GROQ_API_KEY=твой_groq_ключ
SUPABASE_URL=https://...
SUPABASE_ANON_KEY=eyJ...

Шаг 5. Первый промпт — базовый каркас бота

Скопируй и отправь целиком в Codex или Claude:

code
Создай полный рабочий каркас бота на Telegraf v4.

Требования:
- Использовать dotenv
- Команды: /start, /addsource, /listsources, /status
- Inline-кнопки и single-navigation (обновлять одно сообщение)
- Подготовь отдельный файл worker.js для cron-воркера (каждые 10 минут)
- Подготовь папки: src/bot, src/worker, src/parsers, src/ai, src/db
- Подключи Supabase (или SQLite как fallback)
- Всё должно запускаться командой npm start и npm run worker
- Добавь комментарии "// TODO" где нужно будет вставить логику парсера и AI

Выведи ВЕСЬ код проекта в виде структуры файлов с содержимым.

Шаг 6. Второй промпт — архитектура и структура БД

code
На основе предыдущего кода добавь полную архитектуру универсального парсера любых постов из Telegram-каналов.

Таблицы Supabase (SQL миграции):
- sources (id, channel_username, type: public|private, cursor, last_import)
- raw_posts (id, source_id, message_id, raw_text, posted_at)
- parsed_posts (id, raw_id, post_type, category, title, summary, links: jsonb, contacts: jsonb, confidence, status: published|skipped, published_at)

Логика:
- worker каждые 10 мин обходит sources
- для public: парсит https://t.me/s/...
- для private: заглушка (потом добавим MTProto)
- После получения raw → AI parse → fallback rules → auto decision (publish если confidence > 75 и есть полезный контент)
- Никакой ручной модерации! Только auto-publish или skip + лог причины

Выведи обновлённые файлы: db/migrations.sql, src/ai/parser.js, src/worker/importer.js

Шаг 7. Третий промпт — парсер публичных каналов

code
На основе предыдущего кода реализуй полноценный парсер публичных каналов.

Функция parsePublicChannel(channel: string, afterTimestamp?: number):
- axios.get(`https://t.me/s/${channel}`)
- cheerio парсит все посты
- Извлекает: message_id, full_text, date, все ссылки, все @username, кнопки
- Убирает шум: футеры канала, рекламу, "подписывайся", повторяющиеся блоки
- Возвращает массив чистых raw-постов

Добавь анти-дубликат по (channel + message_id)

Шаг 8. Четвёртый промпт — AI-контракт + fallback

code
Создай два промпта для Groq (llama-3.3-70b или mixtral):

1. Основной AI-промпт (возвращает ТОЛЬКО JSON):
Системный: "Ты — эксперт по структурированию Telegram-постов. Верни ТОЛЬКО валидный JSON без markdown."

JSON-схема:
{
  "post_type": "announcement | sale | question | news | offer | discussion | other",
  "category": "string (одно слово или короткая фраза)",
  "title": "string",
  "summary": "string до 300 символов",
  "links": ["array of urls"],
  "contacts": ["@username", "phone", "other"],
  "confidence": 0-100,
  "reason": "string коротко"
}

2. Fallback rules (если AI недоступен или confidence < 60):
- Если есть @username или ссылка на внешний ресурс → confidence 70
- Если больше 100 символов осмысленного текста → confidence 50
- Извлекать все ссылки и @ через regex

Реализуй функцию normalizePost(rawText) которая сначала пытается AI, при ошибке — fallback.

Шаг 9. Пятый промпт — полностью автоматический decision engine

code
Добавь decision engine без ручной модерации:

Правила:
- Если confidence >= 78 И (есть contacts ИЛИ links.length > 0) → status: "published"
- Иначе → "skipped" с сохранением причины в БД
- Для published — сохраняем в parsed_posts и (опционально) отправляем в канал бота или личку подписчикам

Реализуй функцию decideAndSave(parsedData)

Шаг 10. Шестой промпт — тесты и запуск

code
Добавь:
- Простые тесты (jest или console.log) на парсер и AI
- Команду в package.json: "dev": "nodemon src/bot/index.js"
- "worker": "node src/worker/importer.js"
- В /start покажи красивую клавиатуру с кнопками

Выведи финальную инструкцию по запуску.

Шаг 11. Запуск бота

bash
npm run dev

В отдельном терминале:

bash
npm run worker

Добавь первый источник:

/addsource mychannel (без @)

Готово! Бот уже парсит, нормализует через AI + fallback и публикует только качественные посты.

Важно, даже запуск бота или добавление каналы в базу можно сделать через ИИ. В статье написан ручной способ, чтобы было понимание, как это работает. Также не нужно слепо копировать каждый промт, вы его всегда можете откорректировать под себя, задача статьи — объяснить алгоритм, архитектуру, дальше вы можете отправить эту статью в свой ИИ и задавать ему вопросы, чтобы проект был реализован под вашу идею. Идеальных промтов не существует.

Что дальше (расширение за 1 час)

  • Добавить приватные каналы (MTProto + grammY userbot)
  • Подписка пользователей на категории
  • Уведомления через Telegram
  • Хостинг на Railway / Render (бесплатно)