Files
portal/bots
Дмитрий deb54ae1a4
Accessibility (Pa11y live) / a11y (push) Has been cancelled
fix(телеграм-робот): чиним саму осечку — робот путал «не отрисовалось» с «выкинуло»
Прошлая правка лечила последствие: временный отказ возвращал задание в очередь.
Причина осталась. Она была в одной строке src/session.js:

    await gotoStable(page, config.cabinetUrl, config);   // ответ ВЫБРАСЫВАЛСЯ

gotoStable уже возвращал признак «страница так и не ожила» — его игнорировали,
а дальше отсутствие меню объявляли разлогином. Отсюда ложное «Вход слетел»
на живой сессии (приёмка 02.08, 1 прогон из 2).

Теперь checkSession различает четыре разных случая:
- in             — меню кабинета на месте;
- out            — видна страница входа: сессии правда нет. Повтор бесполезен,
                   сдаёмся СРАЗУ с «нужен вход руками» (retryable=false);
- ne-otrisovalos — ни меню, ни формы входа: SPA завис. Три попытки с паузой 5с,
                   потом временный отказ (retryable=true);
- zablokirovan   — «Доступ … запрещён»: МТС не пускает адрес. Сдаёмся сразу,
                   со своей внятной причиной (retryable=false).

Пустую страницу про меню не спрашиваем вовсе — минус 10 секунд на попытку.

Побочно вылечен сторож входа bin/keepalive.js: он болел тем же и слал владельцу
письмо «Вход в кабинет слетел» на каждом зависании кабинета. Теперь в письме
стоит настоящая причина, а временная беда не считается падением сторожа.

Смена смысла: SessionLostError раньше был retryable=true (правка часом раньше).
Теперь настоящий разлогин НЕ повторяется — повтор его не лечит, нужен человек.
Повторяется только зависшая страница.

Тесты писались красными: робот 143/143 (+9 новых, новый файл session-check),
портал 254/254 без изменений — кода портала правка не касается.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 10:45:02 +03:00
..