[bot][A] Telegram-адаптер (aiogram 3) поверх движка #11
Notifications
Due Date
No due date set.
Depends on
Reference: MedITron/PTSRaiAgent#11
Reference in New Issue
Block a user
Описание
Реальный канал для демо на синтетике. Тонкий слой: апдейт →
get_engine().handle()→ рендерReply(inline-кнопки); deep-link/start <код>; реализуетOutboxдля пушей шедулера. Подключается черезapp/channels/telegram.py: start()/stop()(уже вызываются из main). БезTG_BOT_TOKEN— no-op. В логах нет текста.Зона и владение файлами
Lane A (бот, Егор) — владеет:
app/dialog/**,app/channels/**,app/llm/**,config/texts/**,tests/test_dialog_*.py,tests/test_telegram*.py.Замороженные контракты (менять только отдельным мелким PR с пингом всех):
app/core/types.py,app/dialog/contracts.py,app/api/schemas.py,app/integrations/base.py,app/services/contracts.py,app/main.py,app/config.py,config/modules.yaml,config/rules.yaml,config/scales/*,pyproject.toml/uv.lock,docker-compose.yml,Makefile.Лог выполнения
2026-10-03
app/channels/telegram.py—TelegramChannel(логика без типов aiogram) +build_router()(aiogram 3) +start()/stop()./start <код>→integrations.identity.verify(code)→ привязкаtg_chat_idв identity-БД (ChatDirectory, кэш chat↔token; повторная привязка чата к другому пациенту освобождает старую) →Event(type="start", params={"code"}). Текст/кнопки привязанного чата →Event(text|button); непривязанный чат получает «откройте ссылку/QR от врача». Ответы:Button→ inline-клавиатура (callback_data > 64 байт отбрасывается), длинный текст режется по строкам до 4096,parse_mode=None— кризисный скрипт уходит дословно. После нажатия кнопки клавиатура снимается (нельзя ответить дважды), перед ответом движка — «печатает…».TelegramOutboxдоставляет пуши шедулера в привязанный чат, иначе — в прежний outbox (веб-консоль). Служебные тексты —config/texts/telegram.yaml.tests/test_telegram.py(включая прогон реальных апдейтов через aiogram Dispatcher с фейковой HTTP-сессией).make lint test— 528 passed.RejectIdentityотклоняет любой код — для живой проверки нужен esia_mock. Уведомления врачу в Telegram (DOCTOR_NOTIFY_CHAT_ID) — этоNotifierзоны B (#14), здесь не делал. Ошибка движка → нейтральное «попробуйте позже».[bot] Telegram-адаптер (aiogram 3) поверх движкаto [bot][A] Telegram-адаптер (aiogram 3) поверх движка