feat: Add presence heartbeat for Matrix online status

- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,114 @@
# 📡 Node #2 — Telegram бот-аналітика (23.11.2025)
**Мета:** перевірити всі Telegram боти, прив’язані до агентів НОДА2, зафіксувати стан сервісів (STT, TTS, Parser, Web Search, Vision) та результати по кожному агенту.
---
## 1. Зведена таблиця ботів
| # | Агент / Бот | Username | Token prefix | Нода / Модель | Статус до фіксу | Статус після фіксу | Коментар |
|---|-------------|----------|--------------|---------------|-----------------|--------------------|----------|
| 1 | DAARWIZZ | @DAARWIZZBot | 83234123 | Node1/Node2 · qwen3:8b | не відповідає | ✅ активний | Автоініціалізація + polling |
| 2 | Helion | @HelionEnergyBot | 81120625 | Node1/Node2 · qwen3:8b | не відповідає | ✅ активний | system_prompt + STT/TTS |
| 3 | GREENFOOD | @greenfoodliveBot | 74951653 | Node1 · qwen3:8b | не підключений | ✅ активний | Додано у bots.yaml |
| 4 | CLAN | @clan_bot | 85168721 | Node2 · DeepSeek | токен відсутній | ⏳ чекає токен | Потрібно отримати новий BotFather токен |
| 5 | Soul | @soul_bot | 80415964 | Node2 · qwen3:8b | токен не внесено | ⏳ чекає токен | Ready після отримання |
| 6 | DRUID | @druid_bot | 81456184 | Node2 · qwen3:8b | токен не внесено | ⏳ чекає токен | Той самий gateway |
| 7 | EONARCH | @eonarch_bot | 79623915 | Node2 · DeepSeek | токен не внесено | ⏳ чекає токен | DeepSeek модель |
| 8 | Яромир | @yaromir_bot | 81281806 | Node2 · qwen3:8b / DeepSeek | токен не внесено | ⏳ чекає токен | Використовує CrewAI |
| 9 | NUTRA | — | PLACEHOLDER | Node2 · qwen3:8b | токен відсутній | 🔴 потрібен бот | Потрібно зареєструвати |
| 10 | Dario | Discord | — | Node2 · qwen3:8b | Discord only | 🔄 прогрес | Поза Telegram |
> бот зареєстрований у `telegram-gateway`, polling активний.
> gateway готовий, потрібно тільки токен.
> 🔴 немає ні токена, ні бота.
---
## 2. Сервіси, що задіяні
| Сервіс | URL (Node1) | Опис | Статус |
|--------|-------------|------|--------|
| Local Telegram Bot API | `http://144.76.224.179:8081` | офіційний Telegram API (long polling) | ✅ |
| telegram-gateway | `http://144.76.224.179:8000` | FastAPI, multi-bot, NATS | ✅ |
| NATS | `nats://144.76.224.179:4222` | черга `agent.telegram.update` | ✅ |
| DAGI Router | `http://144.76.224.179:9102` | маршрутизація до LLM | ✅ |
| STT Service | `http://dagi-stt:9000/stt` | розпізнавання voice/audio | ✅ (через docker network) |
| TTS Service | `http://dagi-tts:9100/tts` | відповіді голосом | ✅ |
| Parser Service | `http://dagi-parser:9400` | PDF / DOC | ✅ |
| Vision / Swapper | `http://144.76.224.179:8890` | qwen3-vl:8b (vision) | ✅ |
| Web Search bridge | Router `mode=web_search` | використовується при запитах | ✅ |
---
## 3. Що саме виправлено
1. **Автоініціалізація ботів**
- Додано завантаження `bots.yaml` при старті (`app/main.py`).
- Gateway перезапускає polling для кожного активного бота.
2. **Повний Telegram listener**
- `telegram_listener.py` отримав підтримку:
- текстових, голосових, аудіо, video-note повідомлень;
- фото з передачою `file_url`;
- PDF документів (parser);
- автоматичний STT (до 60 секунд, `handle_voice_message`);
- metadata → Router для Vision/Parser.
3. **STT / TTS / Parser маршрут**
- Події з `metadata` обробляє `router_handler`:
- `_handle_photo` → vision спеціаліст;
- `_handle_document` → parser + контекст;
- `_text_to_speech` → відповіді голосом.
4. **Нові API в telegram-gateway**
- `GET /bots/status/{agent_id}` для UI;
- `DELETE /bots/{agent_id}` відʼєднати бота;
- CORS дозволяє звертатися з `http://localhost:8899`;
- подія `bot.unregistered` у NATS.
5. **UI модуль "Підключення до Telegram бота"**
- У кабінеті кожного агента (`/agent/:agentId`) новий блок:
- показує статус (registered/polling);
- підключення через токен від @BotFather;
- відʼєднання одним кліком;
- авто-оновлення раз на 20 секунд.
---
## 4. Як перевірити
1. **Деплой gateway**
```bash
cd telegram-infrastructure
docker compose up -d --build telegram-gateway
```
2. **Перевірити health**
```bash
curl -s http://localhost:8000/healthz
```
3. **Список ботів**
```bash
curl -s http://localhost:8000/bots/list | jq
```
4. **Статус конкретного агента**
```bash
curl -s http://localhost:8000/bots/status/helion | jq
```
5. **UI**
- Відкрити `http://localhost:8899/agent/helion`
- Використати модуль **"Підключення до Telegram бота"**
---
## 5. Наступні кроки
1. **Отримати токени** для CLAN, Soul, DRUID, EONARCH, Яромир, NUTRA.
2. **Додати secrets до `telegram-gateway/bots.yaml`** та перезапустити сервіс.
3. **Розширити router-config** (LLM профілі) для нових агентів, щоби вони отримували власний `system_prompt`.
4. **Підготувати шаблони промптів** у `docs/prompts/telegram/`.
---
**Результат:** боти НОДА2 можуть отримувати текст, голос, фото, PDF, виконувати веб-пошук та відповідати голосом. UI для підключення доступний у кожному агентському кабінеті.