feat(bot): Telegram-адаптер поверх движка диалога #51

Merged
Eleboba merged 1 commits from feat/11-telegram into dev 2026-10-03 15:45:35 +03:00
Owner

Что меняется

Telegram-канал поверх движка диалога: deep-link /start <код> → привязка чата через IdentityProvider, текст/кнопки → get_engine().handle(), рендер Reply в inline-клавиатуры (текст дословно, без parse_mode). TelegramOutbox доставляет пуши шедулера; без TG_BOT_TOKEN — no-op.

Closes #11

Зона

A

Как проверить

uv run pytest -q tests/test_telegram.py — 16 тестов, включая реальные апдейты через aiogram Dispatcher на фейковой сессии. Живой бот: TG_BOT_TOKEN=... в .env, make up, код подключения — после #14 (esia_mock).

Чек-лист

  • rebase на origin/dev
  • make lint + make test зелёные (528 passed)
  • лог в issue (### 2026-10-03)
  • нет ПДн в логах, нет реальных данных, нет секретов
  • общие файлы не трогал

🤖 Generated with Claude Code

https://claude.ai/code/session_01DfbiLXFJswz2EK3qtWF7S7

## Что меняется Telegram-канал поверх движка диалога: deep-link `/start <код>` → привязка чата через `IdentityProvider`, текст/кнопки → `get_engine().handle()`, рендер `Reply` в inline-клавиатуры (текст дословно, без parse_mode). `TelegramOutbox` доставляет пуши шедулера; без `TG_BOT_TOKEN` — no-op. Closes #11 ## Зона A ## Как проверить `uv run pytest -q tests/test_telegram.py` — 16 тестов, включая реальные апдейты через aiogram Dispatcher на фейковой сессии. Живой бот: `TG_BOT_TOKEN=...` в `.env`, `make up`, код подключения — после #14 (esia_mock). ## Чек-лист - [x] rebase на origin/dev - [x] make lint + make test зелёные (528 passed) - [x] лог в issue (### 2026-10-03) - [x] нет ПДн в логах, нет реальных данных, нет секретов - [x] общие файлы не трогал 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01DfbiLXFJswz2EK3qtWF7S7
Eleboba added 1 commit 2026-10-03 15:44:47 +03:00
feat(bot): Telegram channel over the dialog engine
CI / ruff · pytest (pull_request) Successful in 39s
8fd1202063
Deep-link /start <code> binds the chat via IdentityProvider, text and
button presses go to get_engine().handle(), replies render as inline
keyboards and are sent verbatim (no parse_mode). TelegramOutbox delivers
scheduler pushes to bound chats and falls back to the previous outbox.
No-op without TG_BOT_TOKEN; logs carry no text or chat ids.

Refs #11

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfbiLXFJswz2EK3qtWF7S7
Eleboba merged commit f6e4828f01 into dev 2026-10-03 15:45:35 +03:00
Sign in to join this conversation.