- Node-guardian running on MacBook and updating metrics - NODE2 agents (Atlas, Greeter, Oracle, Builder Bot) assigned to node-2-macbook-m4max - Swapper models displaying correctly (8 models) - DAGI Router agents showing with correct status (3 active, 1 stale) - Router health check using node_cache for remote nodes
12 KiB
🤖 Аудит 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 рядків):
@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)
Лог помилки:
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 Конфігурація
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
Згідно з документацією повинні бути:
- ✅ DAARWIZZ (@DAARWIZZBot) — токен є, endpoint
/telegram/webhookпрацює - ✅ Helion (@HelionEnergyBot) — токен є, endpoint зареєстрований
- ⚠️ GREENFOOD — токен є, endpoint зареєстрований, але 500 error
- ❌ CLAN — токен є, endpoint НЕ зареєстрований
- ❌ DRUID — токен є, endpoint НЕ зареєстрований
- ❌ EONARCH — токен є, endpoint НЕ зареєстрований
- ❌ SOUL — токен є, endpoint НЕ зареєстрований
- ❌ YAROMIR — токен є (CrewAI Orchestrator), endpoint НЕ зареєстрований
- ❌ NUTRA — PLACEHOLDER токен
🎯 План Виправлення
Фаза 1: Виправити GREENFOOD (500 error)
Файл: /opt/microdao-daarion/gateway-bot/http_api.py:729
Проблема:
from_user = update.message.get("from", {}) # update.message is None
Рішення:
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):
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
# Скрипт для перереєстрації всіх webhook
ssh root@144.76.224.179 "cd /opt/microdao-daarion && ./scripts/register-all-webhooks.sh"
Або вручну:
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 для кожного бота:
@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 централізовано
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 для кожного бота
@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
#!/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
Рішення:
- ✅ Виправити баг в
handle_telegram_webhook(GREENFOOD 500) - ✅ Додати universal webhook endpoint
- ✅ Створити централізований BOT_CONFIGS
- ✅ Перереєструвати всі webhooks
- ✅ Додати реальний токен для NUTRA
- ✅ Додати health check для моніторингу
Пріоритет:
- 🔥 КРИТИЧНИЙ: Виправити GREENFOOD (500) + очистити pending updates
- 🔥 КРИТИЧНИЙ: Додати endpoints для CLAN, DRUID, EONARCH, SOUL, YAROMIR
- ⚠️ ВАЖЛИВО: Перереєструвати webhooks з
drop_pending_updates=true - 📝 ДОДАТКОВО: Додати NUTRA токен + health check
Статус: 🟡 ГОТОВО ДО ВИПРАВЛЕННЯ
Час на виправлення: ~2 години
Last Updated: 2025-11-24 by Claude