Explainers

Мобильные сети и CAPTCHA: диагностика поведения собственных приложений

Безопасный scope: руководство описывает диагностику собственной или явно авторизованной интеграции — QA, staging и production-мониторинг вашего мобильного приложения. Здесь нет маршрутизации трафика через сторонние прокси и обхода чужих защит — только измерение и логирование поведения CAPTCHA в контролируемой среде.

Если в проде мобильные пользователи вдруг чаще видят CAPTCHA, а в тестовом Wi-Fi всё стабильно, причина почти всегда не в самой CAPTCHA-логике, а в переключении LTE ↔ Wi-Fi, скачках задержки и смене IP посреди сессии. Эта статья — про то, как воспроизвести такие сценарии в staging, снять метрики и не перепутать сетевую проблему с багом бэкенда.

Почему мобильная сеть меняет поведение CAPTCHA

Мобильный клиент живёт в среде, которую сложно эмулировать локальным Wi-Fi: канал плавает по задержке и потере пакетов, оператор может перекинуть сессию на другую соту, а переход между LTE и Wi-Fi почти всегда означает смену внешнего IP. Для виджета CAPTCHA в собственной форме это значит: дольше грузится скрипт, чаще срабатывает таймаут ожидания токена, а токен, полученный до смены сети, backend может не принять. Для QA это не «капча барахлит», а нормальное поведение сети, которое нужно воспроизводить осознанно, а не ловить случайно уже на проде.

Практический ориентир: если staging развёрнут в регионе с более высоким RTT до вашего backend (например, EU-хостинг для аудитории из Казахстана или Центральной Азии), закладывайте таймаут ожидания токена с запасом — иначе тестовый прогон будет ложно фиксировать «сетевые» сбои, которых нет у реальных пользователей ближе к дата-центру.

Сценарии для эмуляции в staging

Соберите набор сетевых профилей и прогоняйте их через одну и ту же форму по одной методике:

  1. стабильное LTE — baseline;
  2. стабильное 3G — увеличенная задержка;
  3. переход Wi-Fi → LTE — смена IP посреди сессии (типичный кейс: команда садится в метро в Москве или Алматы, и сеть переключается прямо на середине формы);
  4. потеря и восстановление соединения — сработает ли повторная отправка формы или пользователь застрянет.

Каждый сценарий проходит по одному и тому же чек-листу: время до токена, статус верификации, количество retries.

Какие метрики фиксировать на каждом сценарии

По ходу прогонов из списка выше фиксируйте:

  • время загрузки виджета CAPTCHA в собственной форме;
  • частоту повторных запросов к виджету;
  • частоту таймаутов backend-верификации;
  • долю случаев, когда токен не принимается из-за смены IP в процессе сессии;
  • время между получением токена и его проверкой на backend — чем больше разрыв, тем выше риск инвалидации.

CaptchaAI как источник валидных токенов для тестов

Для воспроизводимых прогонов в собственной staging-среде CaptchaAI выступает источником валидных токенов, которые можно предсказуемо получать столько раз, сколько нужно для сравнения сетевых профилей. Это убирает ручное решение из цикла и позволяет сравнивать поведение CAPTCHA между сетями, а не между людьми разной скорости.

Логи и наблюдаемость: что писать в дашборд

Структурированные логи помогают сравнивать поведение CAPTCHA между релизами и быстро находить регрессии в собственных формах:

import json, time, logging

log = logging.getLogger('captcha-qa')

def record(event: str, **fields) -> None:
    payload = {'ts': time.time(), 'event': event, **fields}
    log.info(json.dumps(payload, ensure_ascii=False))

Минимальный набор полей для каждой попытки: slug, captcha_type, task_id, wait_seconds, verify_status, env. Этого достаточно, чтобы построить дашборд медианы / P90 / P99 по типу CAPTCHA и по среде. Если в логи попадают IP или другие персональные данные пользователя — маскируйте их перед хранением: это обычная гигиена логирования и разумная практика в свете 152-ФЗ «О персональных данных» для российской аудитории (и аналогичных требований GDPR для остальных регионов). Собирайте и храните только те данные, которые вы вправе обрабатывать.

Troubleshooting: типичные симптомы и что делать

Симптом Что сделать
Виджет долго грузится Замерьте TTFB до домена провайдера
Токен не принимается после смены сети Регенерируйте токен после смены IP
Большое количество retries Увеличьте таймаут запроса
Разная картина по операторам Сегментируйте дашборд по carrier
Стабильно на Wi-Fi, но не на LTE Проверьте, не режет ли SDK-таймаут медленное соединение

QA-чек-лист перед мерджем

  1. Запрос отправляется только на собственные или авторизованные endpoints.
  2. Тестовые учётные записи, события и платежи помечены как фиктивные.
  3. CAPTCHA-токен проверяется на собственном backend, а не доверяется клиенту.
  4. Логи содержат task_id, тип CAPTCHA, время ожидания и pass/fail, без сырых персональных данных.
  5. Скрипт возвращает корректный exit code, чтобы CI мог принять решение.

FAQ

Почему CAPTCHA чаще срабатывает именно на мобильной сети?

Не из-за самой CAPTCHA — из-за смены IP при переключении LTE/Wi-Fi и более длинной задержки, которая иногда обгоняет таймаут виджета. Диагностика начинается с логирования именно этих двух параметров.

Как отличить сетевую проблему от бага в интеграции?

Прогоните один и тот же сценарий на стабильном LTE и на переходе Wi-Fi → LTE. Если ошибка появляется только при смене сети — это сетевой эффект, а не баг верификации.

Нужно ли тестировать каждый тип CAPTCHA отдельно на мобильных сценариях?

Да, если приложение использует несколько типов: reCAPTCHA v2/v3, Cloudflare Turnstile и GeeTest v3 по-разному реагируют на задержку и таймауты, поэтому дашборд стоит сегментировать по captcha_type.

Что делать, если CaptchaAI вернул ошибку во время теста?

Логируйте task_id, тип CAPTCHA и текст ошибки, повторите запрос с экспоненциальной задержкой и фиксируйте долю ошибок в дашборде. Постоянный рост ошибок — повод проверить sitekey и страницу.

Как сравнивать результаты между релизами?

Сохраняйте логи в одном формате и стройте отчёт по медиане, P90 и P99 на одинаковом наборе сценариев. Сравнивайте только сопоставимые выборки в собственной среде.

Безопасные связанные руководства

Стабильный CAPTCHA-UX в мобильном приложении начинается с воспроизводимых тестов — подключите CaptchaAI.

Комментарии для этой статьи отключены.