---
name: tg_login_widget_fallback
description: Вход через Telegram на zbrcheck и Торги Радар — виджет one-click + auto-fallback на deeplink + auto-confirm (без кнопки)
metadata: 
  node_type: memory
  type: project
  originSessionId: d0c6c5aa-4d05-42e2-a1f9-034482b88603
---

2026-06-19: упростил TG-вход на обоих сайтах ([[zemlya_web_overview]], [[torgiradar_overview]]). Подход (выбор юзера): **официальный Telegram Login Widget «в один клик» (popup, остаёшься на странице) — основной; bot-deeplink с auto-confirm — авто-fallback**, если telegram.org недоступен (оркестратор `components/TelegramLogin.tsx` пробит iframe 5с → нет → fallback).

- **Auto-confirm:** бот при `/start auth_<nonce>` подтверждает вход СРАЗУ, без кнопки «Подтвердить вход» (открытие ссылки = осознанное действие, nonce = секрет). Меньше шагов.
- **Развенчан миф «виджет блокирован в РФ»**: throttle RKN бьёт по серверу mini (потому боты через прокси), но резидентные браузеры юзеров в РФ достают oauth.telegram.org нормально. Виджет годится.
- **zemlya:** при E2E нашёл и пофикшен **прод-баг** — `bot/handlers/web_auth.py` импортировал удалённый `is_required` из `bot.services.membership` → ImportError → fail-closed → ВЕСЬ TG-вход на сайт падал («Временная ошибка проверки подписки»). Фикс: `is_required()`→truthy `get_required_chat_id()`.
- **torgiradar:** TG-входа не было — построен с нуля (`web/auth.py` +4 роута `/api/auth/telegram{,/start,/confirm,/status}`, `bot/web_auth.py` роутер включён первым, фронт-компоненты + `/login` переписан). nonce-store in-memory (API=1 воркер); bot↔API подпись HMAC по `TORGIRADAR_JWT_SECRET`.
- E2E вживую (тест 8688355181): оба бота (zemlya + @TorgiRadarZBR_bot) отвечают «✅ Вход подтверждён» без кнопки, `/status`→`confirmed:true`.

**Осталось от юзера для one-click виджета (до этого работает deeplink-fallback):** BotFather `/setdomain zbrcheck.ru` для @ZemlyaBezRiskaCheck_bot; torgiradar: бот сменён на постоянный **@TorgiRadarZBR_bot** (id 8846112470, старый LotBot отвязан 2026-06-19), `/setdomain torgiradar.zbrcheck.ru` уже выполнен юзером → one-click виджет активен.
