6.5 KiB
6.5 KiB
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 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