Files
wiki/skills/telegram-collector/SKILL.md
2026-04-12 21:55:33 +03:00

6.5 KiB
Raw Blame History

name, description, version, tags, requirements, dependencies, allowed-tools, platforms
name description version tags requirements dependencies allowed-tools platforms
telegram-collector Collect, analyze and organize information from Telegram groups and channels. Use to monitor Telegram channels, extract knowledge, build topic databases, and integrate Telegram data into your OpenClaw memory. 2.0.0
telegram
data-collection
knowledge-base
monitoring
python3
telethon>=1.42.0
python-dotenv
exec
read
write
edit
cron
linux

Telegram Collector

Сбор, хранение и инкрементальное обновление сообщений из Telegram-групп и каналов.

Возможности

  • Мониторинг каналов и супергрупп (включая форумные топики)
  • Первичная загрузка всей истории (пакетами по 10 000, пауза 3 мин)
  • Инкрементальная загрузка каждые 6 часов (только новые сообщения)
  • Хранение по структуре: канал → топик → батчи
  • Загрузка медиафайлов (фото, документы ≤50 МБ)
  • Метаданные для видео и файлов >50 МБ (для отложенной загрузки)
  • Восстановление дерева диалогов через reply_to

Структура данных

workspace/data/telegram-collector/
└── raw/
    └── {channel_id}/                   ← числовой ID канала/группы
        ├── meta.json                   ← название, username, список топиков
        └── {topic_id}/                 ← ID форумного топика (1 = Основная)
            ├── state.json              ← прогресс загрузки, last_message_id
            ├── batch_0001.json
            ├── batch_0002.json
            └── media/
                ├── {msg_id}_photo.jpg
                ├── {msg_id}_document.pdf
                └── ...

meta.json

{
  "id": -1001234567890,
  "username": "snowbikerussia",
  "title": "Сноубайк Россия",
  "topics": {
    "1": "Основная",
    "63155": "Барахолка",
    "63467": "Техничка"
  }
}

state.json (на каждый топик)

{
  "topic_id": 63155,
  "topic_title": "Барахолка",
  "first_message_id": 1000,
  "last_message_id": 165197,
  "total_messages": 5432,
  "initial_load_complete": true,
  "last_incremental_at": "2026-03-24T14:00:00Z"
}

Структура сообщения

{
  "id": 165197,
  "date": "2026-03-24T13:08:29Z",
  "text": "Смотрите что купил",
  "from_id": 469188764,
  "reply_to_msg_id": 165180,
  "reply_to_top_id": 63155,
  "quote_text": null,
  "edit_date": null,
  "media": {
    "type": "photo",
    "file_id": "AgACAgI...",
    "size": 245000,
    "mime": "image/jpeg",
    "filename": null,
    "duration": null,
    "width": null,
    "height": null,
    "local_path": "media/165197_photo.jpg",
    "downloaded": true
  }
}

Логика медиафайлов

Тип Размер Действие
Фото любой скачать
Документ / PDF / ZIP / etc ≤ 50 МБ скачать
Видео любой ⏭ только метаданные
Любой файл > 50 МБ ⏭ только метаданные

downloaded: false + local_path: null = файл ожидает отложенной загрузки.

Восстановление диалогов

  • reply_to_msg_id = ID сообщения на которое ответили (или ID топика для корневых)
  • reply_to_top_id = ID топика (для ответов внутри треда)
  • Дерево диалогов строится по этим полям

Credentials (.env)

Хранятся в ~/.openclaw/.env, никогда в файлах скилла:

TELEGRAM_COLLECTOR_API_ID=36911437
TELEGRAM_COLLECTOR_API_HASH=***
TELEGRAM_COLLECTOR_PHONE=+7XXXXXXXXXX
TELEGRAM_COLLECTOR_SESSION=telegram_collector

Сессия: skills/telegram-collector/telegram_collector.session

Конфигурация (config.json)

{
  "data_dir": "/home/node/.openclaw/workspace/data/telegram-collector",
  "incremental_cron": "0 21 * * *",
  "sources": [
    {
      "channel_id": 1242788123,
      "username": "snowbikerussia",
      "title": "Сноубайк Россия",
      "type": "supergroup_forum",
      "enabled": true
    }
  ],
  "media": {
    "download_photos": true,
    "download_documents": true,
    "max_file_size_mb": 50,
    "skip_video": true
  }
}

Скрипты

# Первичная загрузка всей истории (пакетами по 10 000, пауза 3 мин)
python3 scripts/initial_load.py

# Инкрементальная загрузка (только новые сообщения, отчёт в Telegram)
python3 scripts/incremental.py

# Двухпроходный анализ: GPT-4o mini (пасс 1) + Claude Sonnet (пасс 2)
# Поддерживает возобновление, считает стоимость, результат → data/{channel}/knowledge_base.md
python3 scripts/analyzer.py              # оба пасса
python3 scripts/analyzer.py --pass1-only # только извлечение фактов
python3 scripts/analyzer.py --pass2-only # только синтез из готовых фактов
python3 scripts/analyzer.py --reset      # начать заново

Расписание

Настройки расписания (cron expression, job ID) хранятся в config.json (поле incremental_cron) и в raw/{channel_id}/meta.json (поле cron_job_id).

По завершении инкремента скрипт автоматически отправляет отчёт в Telegram.

Логи: /tmp/incremental.log

Источники

Список источников хранится в config.json (поле sources). Детальная информация по каждому каналу (топики, статус загрузки, статистика) — в raw/{channel_id}/meta.json.

Установка зависимостей

curl -sS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
python3 /tmp/get-pip.py --break-system-packages
~/.local/bin/pip install --break-system-packages telethon python-dotenv