Files
microdao-daarion/TELEGRAM-BOTS-AUDIT-NODE1.md
Apple 744c149300
Some checks failed
Build and Deploy Docs / build-and-deploy (push) Has been cancelled
Add automated session logging system
- Created logs/ structure (sessions, operations, incidents)
- Added session-start/log/end scripts
- Installed Git hooks for auto-logging commits/pushes
- Added shell integration for zsh
- Created CHANGELOG.md
- Documented today's session (2026-01-10)
2026-01-10 04:53:17 -08:00

382 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🤖 Аудит Telegram Ботів на NODE1
**Дата:** 2025-11-24
**NODE1 IP:** 144.76.224.179
**Gateway Port:** 8443 (через nginx-gateway)
**Gateway Container:** dagi-gateway (HEALTHY, Up 31 minutes)
---
## 📊 Статус Telegram Ботів
### ✅ Токени в .env (NODE1)
| # | Агент | Token | Статус |
|---|-------|-------|--------|
| 1 | CLAN | `8516872152:AAGbjL6zCMOCqHgu9rcuagdhm0LEwYJFpKw` | ✅ Токен є |
| 2 | DAARWIZZ | `8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M` | ✅ Токен є |
| 3 | DRUID | `8145618489:AAGgR5KmPr9P1_ppSrFa_Gpq5yqf3vNJ5AQ` | ✅ Токен є |
| 4 | EONARCH | `7962391584:AAFYkelLRG3VR_Lxuu6pEGG76t4vZdANtz4` | ✅ Токен є |
| 5 | GREENFOOD | `7495165343:AAHpxY8w3iXevaQT2rfj97OHLauu9Iq8vYM` | ✅ Токен є |
| 6 | HELION | `8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM` | ✅ Токен є |
| 7 | NUTRA | `PLACEHOLDER_ADD_NUTRA_TOKEN_LATER` | ❌ Placeholder |
| 8 | SOUL | `8041596416:AAGyHEjalPEH2TC0AOxfIQ2aZvFTFRanO0g` | ✅ Токен є |
| 9 | YAROMIR | `8128180674:AAGNZdG3LwECI4z_803smsuRHsK3nPdjMLY` | ✅ Токен є |
**ВСЬОГО:** 9 змінних токенів
**Реальних токенів:** 8 (NUTRA = placeholder)
---
## 📝 System Prompts
| # | Файл | Статус |
|---|------|--------|
| 1 | `clan_prompt.txt` | ✅ Існує |
| 2 | `daarwizz_prompt.txt` | ✅ Існує |
| 3 | `dario_prompt.txt` | ✅ Існує (агент без Telegram) |
| 4 | `domir_prompt.txt` | ✅ Існує (CrewAI internal) |
| 5 | `druid_prompt.txt` | ✅ Існує |
| 6 | `eonarch_prompt.txt` | ✅ Існує |
| 7 | `greenfood_prompt.txt` | ✅ Існує |
| 8 | `helion_prompt.txt` | ✅ Існує |
| 9 | `nutra_prompt.txt` | ✅ Існує |
| 10 | `provodnik_prompt.txt` | ✅ Існує (CrewAI internal) |
| 11 | `soul_prompt.txt` | ✅ Існує |
| 12 | `sozdatel_prompt.txt` | ✅ Існує (CrewAI internal) |
| 13 | `vozhd_prompt.txt` | ✅ Існує (CrewAI internal) |
**ВСЬОГО:** 13 промптів
---
## 🔗 Зареєстровані Webhook Endpoints (http_api.py)
З коду `http_api.py` (2066 рядків):
```python
@router.post("/telegram/webhook") # DAARWIZZ (default)
@router.post("/helion/telegram/webhook") # HELION
@router.post("/greenfood/telegram/webhook") # GREENFOOD
```
**ВСЬОГО:** Тільки 3 endpoints зареєстровані! ❌
---
## 🚨 Критичні Проблеми
### 1. ❌ 404 Not Found (6 ботів без endpoints)
**Боти з 404:**
- `CLAN``/clan/telegram/webhook` (NOT REGISTERED)
- `DAARWIZZ``/daarwizz/telegram/webhook` (NOT REGISTERED, використовує `/telegram/webhook`)
- `DRUID``/druid/telegram/webhook` (NOT REGISTERED)
- `EONARCH``/eonarch/telegram/webhook` (NOT REGISTERED)
- `SOUL`НЕ ТЕСТУВАВСЯ
- `YAROMIR`НЕ ТЕСТУВАВСЯ
- `NUTRA` → Немає реального токену
**Причина:** В `http_api.py` зареєстровані тільки 3 webhook endpoints, але вебхуки налаштовані для 8 ботів.
### 2. ❌ 500 Internal Server Error (GREENFOOD)
**Лог помилки:**
```python
AttributeError: 'NoneType' object has no attribute 'get'
File "/app/gateway-bot/http_api.py", line 729, in handle_telegram_webhook
from_user = update.message.get("from", {})
^^^^^^^^^^^^^^^^^^
```
**Причина:** `update.message` є `None`. Баг в обробці Telegram updates.
**Pending Updates:** 10 повідомлень в черзі
### 3. ⚠️ Wrong Webhook URLs
**DAARWIZZ Webhook:**
```
url: "https://144.76.224.179:8443/daarwizz/telegram/webhook"
pending_update_count: 10
last_error: "Wrong response from the webhook: 404 Not Found"
```
**HELION Webhook:**
```
url: "https://144.76.224.179:8443/helion/telegram/webhook"
pending_update_count: 0
last_error: "Connection refused"
```
**GREENFOOD Webhook:**
```
url: "https://144.76.224.179:8443/greenfood/telegram/webhook"
pending_update_count: 10
last_error: "Wrong response from the webhook: 500 Internal Server Error"
```
---
## 🔧 Nginx Конфігурація
```nginx
location ~ ^/([a-z0-9_-]+)/telegram/webhook$ {
proxy_pass http://gateway;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
**Статус:** ✅ Nginx коректно проксує всі `/*/telegram/webhook` запити
**Проблема:** Gateway (dagi-gateway) не має endpoints для всіх ботів
---
## 📋 Telegram Боти з INFRASTRUCTURE.md
Згідно з документацією повинні бути:
1.**DAARWIZZ** (@DAARWIZZBot) — токен є, endpoint `/telegram/webhook` працює
2.**Helion** (@HelionEnergyBot) — токен є, endpoint зареєстрований
3. ⚠️ **GREENFOOD** — токен є, endpoint зареєстрований, але 500 error
4.**CLAN** — токен є, endpoint НЕ зареєстрований
5.**DRUID** — токен є, endpoint НЕ зареєстрований
6.**EONARCH** — токен є, endpoint НЕ зареєстрований
7.**SOUL** — токен є, endpoint НЕ зареєстрований
8.**YAROMIR** — токен є (CrewAI Orchestrator), endpoint НЕ зареєстрований
9.**NUTRA** — PLACEHOLDER токен
---
## 🎯 План Виправлення
### Фаза 1: Виправити GREENFOOD (500 error)
**Файл:** `/opt/microdao-daarion/gateway-bot/http_api.py:729`
**Проблема:**
```python
from_user = update.message.get("from", {}) # update.message is None
```
**Рішення:**
```python
message = getattr(update, 'message', None) or getattr(update, 'edited_message', None)
if not message:
logger.warning(f"No message in update: {update}")
return {"ok": True} # Ignore non-message updates
from_user = message.get("from", {})
```
### Фаза 2: Додати endpoints для всіх ботів
**Архітектура (з INFRASTRUCTURE.md):**
```python
BOT_CONFIGS = {
"clan": {
"agent_id": "agent-clan",
"token": os.getenv("CLAN_TELEGRAM_BOT_TOKEN"),
"prompt_file": "clan_prompt.txt"
},
"druid": {
"agent_id": "agent-druid",
"token": os.getenv("DRUID_TELEGRAM_BOT_TOKEN"),
"prompt_file": "druid_prompt.txt"
},
"eonarch": {
"agent_id": "agent-eonarch",
"token": os.getenv("EONARCH_TELEGRAM_BOT_TOKEN"),
"prompt_file": "eonarch_prompt.txt"
},
"soul": {
"agent_id": "agent-soul",
"token": os.getenv("SOUL_TELEGRAM_BOT_TOKEN"),
"prompt_file": "soul_prompt.txt"
},
"yaromir": {
"agent_id": "agent-yaromir",
"token": os.getenv("YAROMIR_TELEGRAM_BOT_TOKEN"),
"prompt_file": "yaromir_prompt.txt",
"crewai_orchestrator": True
},
"nutra": {
"agent_id": "agent-nutra",
"token": os.getenv("NUTRA_TELEGRAM_BOT_TOKEN"),
"prompt_file": "nutra_prompt.txt"
}
}
# Додати endpoints:
@router.post("/clan/telegram/webhook")
async def clan_telegram_webhook(update: TelegramUpdate):
return await handle_telegram_webhook(BOT_CONFIGS["clan"], update)
@router.post("/druid/telegram/webhook")
async def druid_telegram_webhook(update: TelegramUpdate):
return await handle_telegram_webhook(BOT_CONFIGS["druid"], update)
# ... і так далі для всіх ботів
```
### Фаза 3: Re-register Webhooks
```bash
# Скрипт для перереєстрації всіх webhook
ssh root@144.76.224.179 "cd /opt/microdao-daarion && ./scripts/register-all-webhooks.sh"
```
Або вручну:
```bash
TOKEN="8516872152:AAGbjL6zCMOCqHgu9rcuagdhm0LEwYJFpKw"
curl -X POST "https://api.telegram.org/bot$TOKEN/setWebhook" \
-d "url=https://144.76.224.179:8443/clan/telegram/webhook"
```
### Фаза 4: Додати реальний токен для NUTRA
**BotFather → створити @NUTRABot → отримати токен → додати в .env**
---
## ✅ Рекомендації
### 1. Використати Universal Webhook (Оптимальне рішення)
Замість окремих endpoints для кожного бота:
```python
@router.post("/{bot_id}/telegram/webhook")
async def universal_telegram_webhook(bot_id: str, update: TelegramUpdate):
"""Universal webhook for all Telegram bots."""
bot_config = BOT_CONFIGS.get(bot_id)
if not bot_config:
raise HTTPException(status_code=404, detail=f"Bot '{bot_id}' not found")
return await handle_telegram_webhook(bot_config, update)
```
**Переваги:**
- ✅ Один endpoint для всіх ботів
- ✅ Автоматична підтримка нових ботів
- ✅ Менше коду для підтримки
### 2. Створити BOT_CONFIGS централізовано
```python
BOT_CONFIGS = {
bot_id: {
"agent_id": f"agent-{bot_id}",
"token": os.getenv(f"{bot_id.upper()}_TELEGRAM_BOT_TOKEN"),
"prompt_file": f"{bot_id}_prompt.txt",
"memory_scope": "channel",
"multimodal": True # voice/photo/document support
}
for bot_id in ["clan", "daarwizz", "druid", "eonarch", "greenfood",
"helion", "soul", "yaromir", "nutra"]
}
```
### 3. Додати Health Check для кожного бота
```python
@router.get("/bots/health")
async def bots_health_check():
"""Check health of all Telegram bots."""
results = {}
for bot_id, config in BOT_CONFIGS.items():
token = config["token"]
if not token or token.startswith("PLACEHOLDER"):
results[bot_id] = {"status": "no_token", "token": False}
continue
# Check bot via getMe
try:
resp = requests.get(f"https://api.telegram.org/bot{token}/getMe")
if resp.status_code == 200:
results[bot_id] = {"status": "ok", "bot": resp.json()["result"]}
else:
results[bot_id] = {"status": "error", "error": resp.text}
except Exception as e:
results[bot_id] = {"status": "error", "error": str(e)}
return results
```
### 4. Automated Webhook Registration Script
```bash
#!/bin/bash
# scripts/register-all-webhooks.sh
DOMAIN="144.76.224.179:8443"
BOTS="clan daarwizz druid eonarch greenfood helion soul yaromir nutra"
for bot in $BOTS; do
TOKEN_VAR="${bot^^}_TELEGRAM_BOT_TOKEN"
TOKEN="${!TOKEN_VAR}"
if [[ "$TOKEN" == "PLACEHOLDER"* ]]; then
echo "⚠️ $bot: skipping (placeholder token)"
continue
fi
WEBHOOK_URL="https://$DOMAIN/$bot/telegram/webhook"
echo "🔗 Registering webhook for $bot..."
curl -X POST "https://api.telegram.org/bot$TOKEN/setWebhook" \
-d "url=$WEBHOOK_URL" \
-d "drop_pending_updates=true"
echo ""
done
```
---
## 📊 Підсумок
### Проблеми:
-**6 ботів** не мають зареєстрованих endpoints (404)
-**1 бот** (GREENFOOD) має критичний баг (500)
-**1 бот** (NUTRA) має placeholder токен
- ⚠️ **10+ pending updates** в чергах DAARWIZZ та GREENFOOD
### Рішення:
1. ✅ Виправити баг в `handle_telegram_webhook` (GREENFOOD 500)
2. ✅ Додати universal webhook endpoint
3. ✅ Створити централізований BOT_CONFIGS
4. ✅ Перереєструвати всі webhooks
5. ✅ Додати реальний токен для NUTRA
6. ✅ Додати health check для моніторингу
### Пріоритет:
1. 🔥 **КРИТИЧНИЙ:** Виправити GREENFOOD (500) + очистити pending updates
2. 🔥 **КРИТИЧНИЙ:** Додати endpoints для CLAN, DRUID, EONARCH, SOUL, YAROMIR
3. ⚠️ **ВАЖЛИВО:** Перереєструвати webhooks з `drop_pending_updates=true`
4. 📝 **ДОДАТКОВО:** Додати NUTRA токен + health check
---
**Статус:** 🟡 ГОТОВО ДО ВИПРАВЛЕННЯ
**Час на виправлення:** ~2 години
**Last Updated:** 2025-11-24 by Claude