Зв'язка профіль ↔ Telegram-бот
Метадані
Section titled “Метадані”| Поле | Значення |
|---|---|
| Статус | 📝 план (дизайн на гілці; prod-рейл зламаний наскрізно) |
| Поверхні | web + bot |
| Доступність | — |
| Власник | @Vladbandurin |
| Останнє підтвердження | 2026-06-14 · код:main (живий частковий рейл) + гілка vladbandurin/vstuplisty-collections (дизайн) |
Призначення
Section titled “Призначення”Двонаправлено пов’язати веб-акаунт abitly.org (BaseUser) з користувачем Telegram-бота (TelegramUser), щоб ділити профіль/налаштування і запускати сегментовані розсилки за обраними спеціальностями. Переважно дизайн (ADR+spec на гілці PR #14); у prod рейл існує лише частково й наскрізно не працює.
Поточний стан (prod, за кодом)
Section titled “Поточний стан (prod, за кодом)”- Єдиний робочий шлях — bot→web через
/auth/telegram-connect?telegramId=→POST /telegram-user/connect-to-web-user/:telegramUserId(прямеUPDATE telegram_users.web_user_id, без токена / nonce / conditional-write). - Напрямок web→bot (
link_<token>) мертвий end-to-end: бот чекає ключabitly:link:<token>у власному sidecar-Redis (linking_service.py redeem()), а mint-ендпоінт не існує в жодному репо org (пошукabitly:link→ порожньо) →redeemзавжди отримуєnil. Колонкиusers.telegramLinkToken*додані міграцією 1752329092462 і одразу DROPPED у 1752830665982 — токен-рейл покинуто. - UI «Підключити Telegram» у
/profile— уCABINET_NAV_ITEMSнемає; не підтверджено без браузера (TODO:).
Запланований дизайн (не в prod)
Section titled “Запланований дизайн (не в prod)”- Bidirectional, no shared Redis: web→bot — компактний binary-packed HMAC-токен (verify-local + durable
telegram.link_nonceCAS); bot→web — Mini AppinitData→ API conditional-UPSERT. - Single-writer на
web_user_id(conditional UPDATE +link_version, 409 на конфлікт). - Подія
link.establishedу Valkey-stream → abitly-marketing сідитьchannel_identity+ consent (межа ADR-0002: marketing-схему пише лише marketing-сервіс). - Код Slices A–D не написано — гейт на Phase-0 schema discovery (реальні назви сутностей, чи
offerнесеspeciality_id, живі mint/redeem + SSM-секрети, minors legal opinion).
Дані та API
Section titled “Дані та API”| Стан | Ендпоінт / entity | Призначення |
|---|---|---|
| prod | POST /telegram-user/connect-to-web-user/:id | єдиний живий лінк (без перевірок) |
| prod | entity telegram_users (web_user_id uuid UNIQUE FK→users.id) | схема abitly (міграція 1752830665982) |
| prod, bot | services/linking_service.py redeem() | чекає abitly:link:<token> (mint відсутній) |
| дизайн | POST /telegram/link/start→{deepLink} · /confirm→{linked}|409 · DELETE /telegram/link | двонаправлений рейл (не реалізовано) |
Зв’язки з іншими фічами
Section titled “Зв’язки з іншими фічами”- bot-deeplinks — рядок
link_<token>— саме цей зламаний рейл (chances_/open_day_працюють,link_— ні). - account-auth — bot→web напрямок через
/auth/telegram-connect. - vstuplysty · chosen-specialties — джерело specialty-сигналів для сегментації (ADR-0011 дизайну).
- marketing/blueprint — куди сідить
link.established(consent ledger).
| Репо | Шлях | Примітка |
|---|---|---|
abitly-api-v2 | src/api/telegram-user/telegram-user.controller.ts | живий connect-to-web-user |
abitly-tg-bot-v3 | services/linking_service.py | redeem() чекає неіснуючий mint |
гілка vladbandurin/vstuplisty-collections | ADR-0010/0011 + spec + plan | повний дизайн (не в main) |
Обмеження та блокери
Section titled “Обмеження та блокери”- ⚠️ Наскрізно не працює (web→bot): немає mint-ендпоінта; sidecar-Redis бота ≠ Redis API.
- Єдиний живий лінк (
connect-to-web-user) — без HMAC/nonce/conditional-write: ризик silent overwrite та link-hijack (дизайн ADR-0010 це закриває, поки лише на гілці). - ⚠️ Колізія номерів ADR: на гілці PR #14 ADR-0010=bidirectional-linking, ADR-0011=specialty-readmodel; у main ADR-0010=
no-supabase, ADR-0011=vstup-knowledge-base. Перенумерувати на 0012/0013 перед мержем PR #14. - Дизайн гейтиться на Phase-0 schema discovery; код Slices A–D не написано.
Історія змін
Section titled “Історія змін”| Дата | Подія | Джерело |
|---|---|---|
| 2026-06-06 | дизайн (ADR-0010/0011 + spec + plan) | гілка vladbandurin/vstuplisty-collections (PR #14) |
| 2026-06-14 | створено картку; зафіксовано зламаний prod-рейл + колізію ADR | PR Wave 2 |