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

12 KiB
Raw Blame History

🤖 Аудит 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

Згідно з документацією повинні бути:

  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

Проблема:

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

Рішення:

  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