Добавить в корзинуПозвонить
Найти в Дзене
Vibecode Wiki

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

В этой статье разберем как создать бота, который: Сохрани токен в безопасное место. Это твой BOT_TOKEN. Создай папку и выполни команды: 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 и вставь: BOT_TOKEN=твой_токен_из_BotFather GROQ_API_KEY=твой_groq_ключ SUPABASE_URL=https://... SUPABASE_ANON_KEY=eyJ... Скопируй и отправь целиком в Codex или Claude: Создай полный рабочий каркас бота на 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 Вы
Оглавление

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

  • Автоматически забирает новые посты из любых 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. Создаём проект и устанавливаем зависимости

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

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 и вставь:

BOT_TOKEN=твой_токен_из_BotFather

GROQ_API_KEY=твой_groq_ключ

SUPABASE_URL=https://...

SUPABASE_ANON_KEY=eyJ...

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

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

Создай полный рабочий каркас бота на 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. Второй промпт — архитектура и структура БД

На основе предыдущего кода добавь полную архитектуру универсального парсера любых постов из 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. Третий промпт — парсер публичных каналов

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

Функция 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

Создай два промпта для 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

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

Правила:

- Если confidence >= 78 И (есть contacts ИЛИ links.length > 0) → status: "published"

- Иначе → "skipped" с сохранением причины в БД

- Для published — сохраняем в parsed_posts и (опционально) отправляем в канал бота или личку подписчикам

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

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

Добавь:

- Простые тесты (jest или console.log) на парсер и AI

- Команду в package.json: "dev": "nodemon src/bot/index.js"

- "worker": "node src/worker/importer.js"

- В /start покажи красивую клавиатуру с кнопками

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

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

npm run dev

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

npm run worker

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

/addsource mychannel (без @)

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

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

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

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