265 lines
8.8 KiB
Markdown
265 lines
8.8 KiB
Markdown
# 🔧 КРИТИЧНЕ ВИПРАВЛЕННЯ: Telegram Bots Routing
|
||
|
||
## ❌ ПРОБЛЕМА
|
||
Обидва боти (DAARWIZZ і Helion) відповідають неправильно:
|
||
- Helion відповідає як Qwen (не використовує свій system_prompt)
|
||
- DAARWIZZ може відповідати в чат Helion (неправильний routing)
|
||
|
||
---
|
||
|
||
## 🎯 ЗАВДАННЯ
|
||
|
||
### 1️⃣ ПЕРЕВІРИТИ КОНФІГУРАЦІЮ НА СЕРВЕРІ
|
||
|
||
**Сервер:** 144.76.224.179 (root)
|
||
**Репозиторій на сервері:** `/opt/microdao-daarion`
|
||
|
||
Підключись до сервера і виконай:
|
||
|
||
```bash
|
||
cd /opt/microdao-daarion
|
||
|
||
# Перевірка 1: Токени в .env
|
||
echo "=== ТОКЕНИ ===="
|
||
grep "TELEGRAM_BOT_TOKEN" .env
|
||
|
||
# Має бути:
|
||
# DAARWIZZ_TELEGRAM_BOT_TOKEN=8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M
|
||
# HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM
|
||
# (можна видалити TELEGRAM_BOT_TOKEN якщо є)
|
||
|
||
# Перевірка 2: Структура payload в Helion webhook
|
||
echo -e "\n=== HELION PAYLOAD СТРУКТУРА ==="
|
||
sed -n '466,473p' gateway-bot/http_api.py
|
||
|
||
# Має бути:
|
||
# "payload": {
|
||
# "context": {
|
||
# "agent_name": HELION_NAME,
|
||
# "system_prompt": HELION_SYSTEM_PROMPT,
|
||
# "memory": memory_context,
|
||
# }
|
||
# },
|
||
|
||
# Перевірка 3: Токени в контейнері gateway
|
||
echo -e "\n=== ТОКЕНИ В GATEWAY КОНТЕЙНЕРІ ==="
|
||
docker exec dagi-gateway printenv | grep "TELEGRAM_BOT_TOKEN"
|
||
|
||
# Перевірка 4: Webhooks в Telegram
|
||
echo -e "\n=== WEBHOOK URLs ==="
|
||
curl -s "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/getWebhookInfo" | python3 -c "import sys, json; print('DAARWIZZ:', json.load(sys.stdin)['result'].get('url', 'NOT SET'))"
|
||
|
||
curl -s "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/getWebhookInfo" | python3 -c "import sys, json; print('Helion:', json.load(sys.stdin)['result'].get('url', 'NOT SET'))"
|
||
```
|
||
|
||
---
|
||
|
||
### 2️⃣ ВИПРАВЛЕННЯ
|
||
|
||
#### A. Якщо токени неправильні в .env:
|
||
|
||
```bash
|
||
cd /opt/microdao-daarion
|
||
|
||
# Виправити токени
|
||
cat > .env.tokens << 'EOF'
|
||
DAARWIZZ_TELEGRAM_BOT_TOKEN=8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M
|
||
HELION_TELEGRAM_BOT_TOKEN=8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM
|
||
EOF
|
||
|
||
# Додати в .env (видаливши старі TELEGRAM_BOT_TOKEN рядки спочатку)
|
||
sed -i '/TELEGRAM_BOT_TOKEN/d' .env
|
||
cat .env.tokens >> .env
|
||
rm .env.tokens
|
||
```
|
||
|
||
#### B. Виправити Helion payload структуру:
|
||
|
||
**Файл:** `gateway-bot/http_api.py`
|
||
**Рядки:** 466-473
|
||
|
||
**Замінити:**
|
||
```python
|
||
"payload": {"context": {
|
||
"agent_name": HELION_NAME,
|
||
"system_prompt": HELION_SYSTEM_PROMPT,
|
||
"memory": memory_context,
|
||
},
|
||
},
|
||
```
|
||
|
||
**На:**
|
||
```python
|
||
"payload": {
|
||
"context": {
|
||
"agent_name": HELION_NAME,
|
||
"system_prompt": HELION_SYSTEM_PROMPT,
|
||
"memory": memory_context,
|
||
}
|
||
},
|
||
```
|
||
|
||
**Суть:** `"context"` має бути всередині `"payload"` з правильним indent, а не `"payload": {"context":` в одному рядку.
|
||
|
||
#### C. Додати DAARWIZZ_TELEGRAM_BOT_TOKEN в docker-compose.yml:
|
||
|
||
**Файл:** `docker-compose.yml`
|
||
**Секція:** `gateway` → `environment`
|
||
|
||
Знайди секцію gateway environment і **переконайся що є**:
|
||
```yaml
|
||
environment:
|
||
- ROUTER_URL=http://router:9102
|
||
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
|
||
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-}
|
||
- DAARWIZZ_TELEGRAM_BOT_TOKEN=${DAARWIZZ_TELEGRAM_BOT_TOKEN:-} # ← МАЄ БУТИ
|
||
- DAARWIZZ_NAME=${DAARWIZZ_NAME:-DAARWIZZ}
|
||
- DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
|
||
- HELION_TELEGRAM_BOT_TOKEN=${HELION_TELEGRAM_BOT_TOKEN:-}
|
||
- HELION_NAME=${HELION_NAME:-Helion}
|
||
- HELION_PROMPT_PATH=/app/gateway-bot/helion_prompt.txt
|
||
- MEMORY_SERVICE_URL=http://memory-service:8000
|
||
```
|
||
|
||
#### D. Перевірити webhooks registration:
|
||
|
||
```bash
|
||
# Отримати поточний Cloudflare tunnel URL
|
||
TUNNEL_URL=$(ps aux | grep cloudflared | grep -v grep | grep -oP 'http://[^ ]+' | head -1)
|
||
echo "Tunnel: $TUNNEL_URL"
|
||
|
||
# Якщо тунелю немає - створити новий
|
||
if [ -z "$TUNNEL_URL" ]; then
|
||
# Зупинити старі
|
||
pkill cloudflared
|
||
|
||
# Створити новий
|
||
nohup cloudflared tunnel --url http://localhost:9300 > /var/log/cloudflared.log 2>&1 &
|
||
sleep 3
|
||
|
||
# Отримати URL з логу
|
||
TUNNEL_URL=$(grep -oP 'https://[a-z0-9-]+\.trycloudflare\.com' /var/log/cloudflared.log | head -1)
|
||
fi
|
||
|
||
echo "Using tunnel: $TUNNEL_URL"
|
||
|
||
# Зареєструвати webhooks
|
||
curl -X POST "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/setWebhook" \
|
||
-d "url=${TUNNEL_URL}/telegram/webhook"
|
||
|
||
curl -X POST "https://api.telegram.org/bot8112062582:AAGI7tPFo4gvZ6bfbkFu9miq5GdAH2_LvcM/setWebhook" \
|
||
-d "url=${TUNNEL_URL}/helion/telegram/webhook"
|
||
```
|
||
|
||
---
|
||
|
||
### 3️⃣ ПЕРЕЗАПУСК СЕРВІСІВ
|
||
|
||
```bash
|
||
cd /opt/microdao-daarion
|
||
|
||
# Перезапустити gateway з новими змінними
|
||
docker compose up -d gateway
|
||
|
||
# Перезапустити router (якщо змінювали llm_provider)
|
||
docker compose restart router
|
||
|
||
# Почекати 5 секунд
|
||
sleep 5
|
||
|
||
# Перевірити що все працює
|
||
docker compose ps
|
||
docker compose logs --tail=10 gateway
|
||
docker compose logs --tail=10 router
|
||
```
|
||
|
||
---
|
||
|
||
### 4️⃣ ТЕСТУВАННЯ
|
||
|
||
Після виправлень:
|
||
|
||
#### Тест 1: DAARWIZZ бот
|
||
Надішли боту `@DAARWIZZBot`:
|
||
```
|
||
Хто ти?
|
||
```
|
||
|
||
**Очікувана відповідь:** Має згадувати DAARWIZZ, DAARION.city, microDAO
|
||
|
||
#### Тест 2: Helion бот
|
||
Надішли боту (username потрібно дізнатись через `getMe`):
|
||
```
|
||
Хто ти і що таке EcoMiner?
|
||
```
|
||
|
||
**Очікувана відповідь:** Має згадувати Helion, Energy Union, EcoMiner
|
||
|
||
#### Якщо НЕ працює - дивись логи:
|
||
|
||
```bash
|
||
# Gateway логи (останні 30 рядків)
|
||
docker compose logs --tail=30 gateway | grep -E "helion|daarwizz|Sending to Router"
|
||
|
||
# Router логи (останні 30 рядків)
|
||
docker compose logs --tail=30 router | grep -E "agent=|payload|context|DEBUG"
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 ДІАГНОСТИКА ПРОБЛЕМ
|
||
|
||
### Якщо Helion відповідає як Qwen:
|
||
|
||
1. **Перевір структуру payload** в `gateway-bot/http_api.py` (рядок 466)
|
||
2. **Перевір що HELION_SYSTEM_PROMPT завантажується:**
|
||
```bash
|
||
docker compose logs gateway | grep -i "helion.*prompt\|prompt.*loaded"
|
||
```
|
||
3. **Додай debug в router:**
|
||
```bash
|
||
# В providers/llm_provider.py після рядка 161
|
||
docker exec dagi-router cat /app/providers/llm_provider.py | grep -A5 "_get_system_prompt"
|
||
```
|
||
|
||
### Якщо боти відповідають в неправильний чат:
|
||
|
||
1. **Перевір що `send_telegram_message` отримує правильний токен:**
|
||
```bash
|
||
grep "send_telegram_message.*TELEGRAM_BOT_TOKEN" gateway-bot/http_api.py
|
||
```
|
||
|
||
Має бути:
|
||
- Рядок 198: `os.getenv("DAARWIZZ_TELEGRAM_BOT_TOKEN")`
|
||
- Рядок 262: `os.getenv("DAARWIZZ_TELEGRAM_BOT_TOKEN")`
|
||
- Рядок 498: `os.getenv("HELION_TELEGRAM_BOT_TOKEN")`
|
||
|
||
2. **Перевір webhooks:**
|
||
```bash
|
||
curl -s "https://api.telegram.org/bot8323412397:AAFxaru-hHRl08A3T6TC02uHLvO5wAB0m3M/getWebhookInfo"
|
||
```
|
||
URL має бути `/telegram/webhook` для DAARWIZZ
|
||
|
||
---
|
||
|
||
## ✅ КРИТЕРІЇ УСПІХУ
|
||
|
||
- ✅ DAARWIZZ бот відповідає про DAARION/microDAO
|
||
- ✅ Helion бот відповідає про Energy Union/EcoMiner (НЕ як Qwen)
|
||
- ✅ Кожен бот відповідає у свій чат (не плутає)
|
||
- ✅ Webhooks зареєстровані правильно
|
||
- ✅ Токени передаються в gateway контейнер
|
||
|
||
---
|
||
|
||
## 📝 ВАЖЛИВО
|
||
|
||
- **НЕ змінюй** файли prompt (`helion_prompt.txt`, `daarwizz_prompt.txt`) - вони правильні
|
||
- **НЕ створюй** нові webhook endpoints - вони є
|
||
- **Фокус на:** токени, payload структура, docker-compose environment
|
||
- **Після змін:** обов'язково перезапусти gateway і протестуй
|
||
|
||
---
|
||
|
||
**Після виконання - повідом про результат тестів!**
|