[2026-06-16] zulip-router: fix — use Eagle credentials, not a new bot
This commit is contained in:
@@ -5,7 +5,7 @@ _Последнее обновление: 2026-06-16_
|
||||
## Цель
|
||||
|
||||
Event-роутер между Zulip и balda-ботами (Валера, Клавдий).
|
||||
Решает проблему конкурентного получения событий — сейчас оба бота через Events API видят все сообщения одновременно.
|
||||
Решает проблему конкурентного получения событий — сейчас оба бота видят все сообщения одновременно.
|
||||
|
||||
## Проблема (root cause)
|
||||
|
||||
@@ -17,16 +17,16 @@ Event-роутер между Zulip и balda-ботами (Валера, Кла
|
||||
|
||||
```
|
||||
Zulip
|
||||
├── Events API ← Валера (valera-bot, poll на :8091)
|
||||
└── Events API ← Клавдий (claudio-bot, poll на :8092)
|
||||
└── Webhook → оба (outgoing webhook bot_type=3 через @mention)
|
||||
├── Events API ← Валера (valera-bot, poll на :8091) — отключён
|
||||
├── Events API ← Клавдий (claudio-bot, poll на :8092) — отключён
|
||||
└── Webhook → оба (outgoing webhook через @mention)
|
||||
```
|
||||
|
||||
## Архитектура (с роутером)
|
||||
|
||||
```
|
||||
Zulip Event Queue
|
||||
↓ poll (отдельный бот-роутер или reuse одного из существующих)
|
||||
↓ poll (credentials Eagle из ~/.hermes/config.yaml)
|
||||
[zulip-router] (~/Docker/zulip-router/)
|
||||
├── @Валера / @Valera → POST http://balda-agent-valera-1:8091/zulip/webhook
|
||||
├── @Клавдий / @Klavdiy → POST http://claudio-agent-claudio-1:8092/zulip/webhook
|
||||
@@ -34,7 +34,7 @@ Zulip Event Queue
|
||||
↕ ownership: stream+topic → bot (TTL 24h, persisted to /data/ownership.json)
|
||||
```
|
||||
|
||||
**Важно:** таргеты — не Hermes инстансы, а balda-боты (Go бинарники). У каждого уже есть webhook endpoint `/zulip/webhook`.
|
||||
**Ключевое:** credentials — Eagle/Орла (не новый бот). Роутер регистрирует свою event queue (отдельную от очереди Eagle).
|
||||
|
||||
## Правила маршрутизации
|
||||
|
||||
@@ -46,16 +46,15 @@ Zulip Event Queue
|
||||
|
||||
## Что меняется в balda
|
||||
|
||||
После деплоя роутера у обоих ботов нужно **отключить Events API polling** в config.yaml:
|
||||
После деплоя роутера Events API polling уже отключён у обоих ботов (сделано 2026-06-16):
|
||||
|
||||
```yaml
|
||||
zulip:
|
||||
events_polling:
|
||||
enabled: false # ← было true
|
||||
enabled: false
|
||||
```
|
||||
|
||||
После этого сообщения приходят **только через webhook** (от роутера).
|
||||
Перезапуск: `docker-compose up -d` (в каждом compose).
|
||||
Сообщения приходят **только через webhook** от роутера.
|
||||
|
||||
## Код
|
||||
|
||||
@@ -75,45 +74,41 @@ zulip:
|
||||
|
||||
**Compose:** `~/Docker/zulip-router/docker-compose.yaml`
|
||||
|
||||
### Перед запуском: создать бота-роутера в Zulip
|
||||
### Credentials: Eagle, не новый бот
|
||||
|
||||
Нужен **отдельный** бот (не valera-bot, не claudio-bot).
|
||||
Роутер использует credentials Eagle/Орла из `~/.hermes/config.yaml` → `platforms.zulip`.
|
||||
|
||||
1. В Zulip: **Settings → Bots → Add a new bot**
|
||||
2. Тип: **Outgoing webhook**
|
||||
3. Имя: `zulip-router` (или любое)
|
||||
4. Bot email: скопировать (понадобится в .env)
|
||||
5. API key: скопировать (понадобится в .env)
|
||||
6. Endpoint URL: не заполнять (роутер сам поллит, webhook от Zulip ему не нужен)
|
||||
7. Сохранить
|
||||
Не создавать нового бота. Eagle уже имеет права на чтение всех публичных стримов.
|
||||
|
||||
### Env vars
|
||||
|
||||
Создать `~/Docker/zulip-router/.env`:
|
||||
```env
|
||||
ZULIP_ROUTER_BOT_EMAIL=zulip-router-bot@zulip.qentra.top
|
||||
ZULIP_ROUTER_API_KEY=<api-key из шага 5>
|
||||
|
||||
# Куда форвардить
|
||||
```env
|
||||
# Credentials Eagle/Орла — из ~/.hermes/config.yaml
|
||||
ZULIP_BOT_EMAIL=eagle-bot@zulip.qentra.top
|
||||
ZULIP_API_KEY=<скопировать из конфига Eagle>
|
||||
|
||||
# Куда форвардить (Docker DNS, сеть balda_default)
|
||||
VALERA_WEBHOOK=http://balda-agent-valera-1:8091/zulip/webhook
|
||||
CLAUDIO_WEBHOOK=http://claudio-agent-claudio-1:8092/zulip/webhook
|
||||
```
|
||||
|
||||
### Запуск
|
||||
|
||||
```bash
|
||||
cd ~/Docker/zulip-router
|
||||
docker-compose up -d
|
||||
docker logs zulip-router --tail 20 # проверить что poll loop запущен
|
||||
docker logs zulip-router --tail 20 # проверить poll loop
|
||||
```
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] Написать код роутера (~260 LOC)
|
||||
- [ ] Создать compose `~/Docker/zulip-router/docker-compose.yaml`
|
||||
- [ ] Создать бота-роутера в Zulip (или реюзнуть valera-bot/claudio-bot), получить API key
|
||||
- [ ] Набить `.env` с credentials Eagle (из `~/.hermes/config.yaml`)
|
||||
- [ ] `docker-compose up -d`
|
||||
- [ ] Проверить логи: `docker logs zulip-router --tail 50`
|
||||
- [ ] Отключить `events_polling.enabled` у Валеры → `docker-compose up -d`
|
||||
- [ ] Отключить `events_polling.enabled` у Клавдия → `docker-compose up -d`
|
||||
- [ ] Протестировать: @Клавдий и @Валера в разных топиках
|
||||
- [ ] Проверить ownership: сообщение в топик без @mention → последний бот
|
||||
- [ ] Удалить `extractOtherMention()` патч из кода (больше не нужен)
|
||||
|
||||
Reference in New Issue
Block a user