Files
autoreg-skills-max/skills/ai-provider-autoreg/references/tachlisai-autoreg-gateway.md

13 KiB
Raw Permalink Blame History

TachlisAI (tachlisai.com) — авторег + phone-verify + OpenAI-гейтвей

Free tier: 12,000 кредитов rolling каждые 30 дней (лимиты 5,000/7д, 1,500/час), без карты. Косher-фильтр контента всегда включён. API: https://api.tachlisai.com.

Рабочий стек (проверен end-to-end, EN+RU чат): C:/Users/User/tmp/tach_farm/ — tach_autoreg.py (signup+login+onboarding), tach_verify.py (SMS-верификация), tach_gateway.py (OpenAI-compat :16442), пул accounts.jsonl.

Протокол (реверс из JS-бандлов /assets/index-*.js и route-chat-experience-*.js)

  1. Signup: POST /v1/auth/signup ОБЯЗАТЕЛЬНО с заголовком x-aws-waf-token — AWS WAF. Токен даёт локальный sidecar :8877: POST /solve {"type":"awswaf","url":"https://tachlisai.com/signup","real_page":true,"timeout_s":120}. Без токена signup не проходит. ЛОВУШКА: signup БЕЗ токена отдаёт 202 с ПУСТЫМ телом — молчаливый дроп, акк не создан, письма нет. С валидным токеном → HTTP 200 {"status":"signed_in", access_token, id_token, refresh_token} — мгновенная сессия, БЕЗ email-подтверждения (проверено: client_id 6iqgfca19fels7uaqvt3kgveqc + voidash email → инбокс остаётся пустым, код НЕ приходит, не полль его). В бандле два body.status — signed_in (сразу логин) и confirmation_required (код на почту), но фактически возвращается signed_in. Признак успеха — status:signed_in в теле ответа, а не письмо в инбоксе и не HTTP-код. POST signup надёжнее делать in-page fetch() из вкладки tachlisai.com (см. WAF-питфол); curl/urllib через релей может рвать TLS (SSL UNEXPECTED_EOF).
  2. Login: POST /v1/auth/login — поле username (НЕ email) + password → access_token / refresh_token. Refresh: POST /v1/auth/refresh.
  3. Onboarding — гейт перед чатом: POST /v1/onboarding {"acceptedDisclaimer": true} → 200. Без этого чат-джобы блокируются. Минимальное принимаемое тело — только acceptedDisclaimer (остальные поля hashkafa/language/tone опциональны).
  4. Phone-verify (обязательна): POST /v1/me/signup-phone/start {"phoneNumber": <полный номер>, "channel":"sms"} → POST /v1/me/signup-phone/check. Номера: 2nd-no.com (PL) через providers.secondno (Desktop/gitlab-autoreg). На 409 unavailable — ротация номера.
  5. Чат — job-based, НЕ completions: POST /v1/chat/jobs {"input":"...","model":"gpt-6.1-sol"} → {id, status:queued} → поллинг GET /v1/chat/jobs/{id} → response.text + списанные кредиты (~1.9 за простой запрос из 12000).

Модели: gpt-6.1-sol, gpt-6-astra-xhigh (в UI «Smarter» = gpt-6-astra·xhigh·Standard). Третьи стороны (Claude Opus 5.5, Gemini 3.1 Pro, Grok 4.7, Muse Spark 1.3) роутятся через OpenRouter.

Гейтвей

tach_gateway.py :16442 — stdlib-only OpenAI-compat прокси поверх пула verified-акков: round-robin, авто-refresh токенов, учёт кредитов, карантин мёртвых, hot-reload accounts.jsonl (60с). Для OMP обязателен SSE: при stream:true эмулировать chat.completion.chunk (role delta → content delta → finish) поверх job-поллинга. Провайдер в OMP: auth: none + authHeader: false + dummy apiKey (паттерн pitfall #40).

Питфолы

  • ГЕО-БЛОК API: api.tachlisai.com отдаёт 403 (nginx Forbidden) на ВСЁ с IP неподдерживаемого региона — даже на GET /v1/auth/signup/config. Диагноз: тот же запрос через US/IL резидента (1024proxy sticky prxg746509-region-us-sessN / -region-il-, креды в tmp/reg_1024.py) → 200. Перед реверсом всегда проверяй config-эндпоинт через резидент — иначе примешь гео-блок за WAF. Конфиг WAF живёт в GET /v1/auth/signup/config: {enabled, verificationRequired, challengeScriptUrl} (challengeScriptUrl = AWS WAF ...awswaf.com/.../challenge.js, меняется).

  • Headless Chrome НЕ принимает прокси с credentials в URL (--proxy-server=http://user:pass@host → ERR_NO_SUPPORTED_PROXIES на всех страницах). Варианты: локальный auth-free релей на upstream, или CDP Fetch.enable(handleAuthRequests=true) + continueWithAuth. Но Fetch с pattern * на headless вешает драйвер (каждый сабресурс через паузу) — сужай pattern до доменов API/WAF или используй релей.

  • AWS WAF токен — ДВА рабочих пути. (1) sidecar :8877 {"type":"awswaf","real_page":true}. (2) проверено: реальный Chrome --headless=new через локальный auth-free релей (scripts/auth_proxy_relay.py, egress = US/IL резидент) → открыть вкладку tachlisai.com/signup → inject <script src=challengeScriptUrl> → await AwsWafIntegration.getToken() (402-симв. токен) → signup in-page fetch() из ЭТОЙ вкладки (egress+CORS+токен совпадают) → 200 signed_in. Вывод «headless не решает WAF» («We couldn't confirm this browser», AwsWafIntegration отсутствует) был артефактом ГЕО-БЛОКА: camoufox/голый Chrome гонялись с неподдерживаемого UA-IP. Всегда проверяй WAF-решение с egress поддерживаемого региона, прежде чем винить фингерпринт браузера.

  • Реверс-порядок: сначала grep своих skills/references по домену — рабочий пайплайн TachlisAI уже был задокументирован (sidecar+гейтвей :16442); повторный реверс с нуля сжёг сессию на WAF/гео-диагностику.

  • SMS-пул общий: парсить OTP дедупом по message id (не по тексту), требовать Tachlis в тексте, код брать из to: NNNNNN — иначе подхватывается чужой/протухший OTP. Брейкать цикл сразу после валидного кода.

  • write_file маскирует секреты: строка KEY = "..." может записаться как KEY = *** None, (SyntaxError). Чинить заменой строки через terminal, ключ собирать конкатенацией из частей, после правки — ast.parse проверка.

  • Кириллица через curl -d в git-bash ломается (exit 1 / mojibake): писать JSON-тело в файл и слать curl --data-binary @req.json.

  • 409 на повторное использование номера — номер уже занят другим акком, ротация обязательна.

  • Onboarding до phone-verify не пустит чат даже с валидным токеном — порядок: signup → confirm → login → phone-verify → onboarding → chat.

  • 429 signup_phone_cooldown: между start-попытками cooldown 30с; channel принимает только sms|call (call обычно 503 voice_unavailable), whatsapp/voice/email → 422.

Масс-рега: темп и rate-limit

  • Пэйсинг sleep 3-8с между акками; волна ~60 акков упирается в 429 signup_rate_limited примерно на 35-40 акке.
  • На 429 НЕ бери новый email (сжигаешь почтовый пул): ретрай тот же email с backoff 300 + tries*60с, до 6 попыток; исчерпан — останавливай волну, продолжай через 1-2ч.
  • Refresh-токены НЕверифицированных акков живут долго (сутки+): пул pending-акков не сгорает, пока ждёшь SMS-номера. Перед верификацией — refresh (/v1/auth/refresh), фолбэк password-login.

SMS-номера: что реально доходит (проверено live 2026-10)

  • PRAVILO: «start 200 pending» ≠ SMS придёт. Сервисы с VoIP-фильтром молча дропают доставку на фри-номера. Перед батчем — E2E-тест ОДНОГО номера: start → жди 3-5 мин → проверь инбокс целевого номера. Не жги аккаунты батчами до подтверждения доставки.
  • Проверка ТИПА номера ещё на START (Twilio Lookup): signup-phone/start может сразу вернуть 503 signup_phone_lookup_unavailable с details.provider_error_code: 60600 («carrier info недоступна») — сервис валидирует номер через Twilio Lookup и отклоняет фейк/VoIP без carrier-инфы ДО попытки SMS. Диагностика: 60600 = номер не пройдёт (нужна реальная SIM); 200 pending но SMS нет = номер прошёл lookup, но доставка VoIP-фильтром дропнута (тихий дроп). Быстрые повторные start с одного IP → 429 signup_phone_rate_limited. Применимо к любому сервису с Twilio Lookup, не только Tachlis.
  • Tachlis фильтрует VoIP: quackr.io PL-номера принимались start'ом (200), но SMS не дошло ни на один из 5. Путь для Tachlis — только non-VoIP (2nd-no с чистого IP или платные sms-activate/grizzlysms ~$0.05-0.15/шт).
  • quackr.io полный список номеров без CF: GET https://quackr.io/numbers.json → [{number, locale, status}] (~11k, полные номера). Инбокс — Angular SPA: в статическом HTML сообщений нет («Waiting on incoming»), фид грузится рантаймом; внутренний API — cloudfunctions us-central1-quackr-api (только /pricing публичен, message-эндпоинты 404).
  • receive-sms-online.info: JSON-фид GET /get_sms_register.php?phone=<полный_номер> → sender (telefon) + время (data) без логина, ТЕКСТ сообщений только после login. Годится для детекта «дошло ли что-то», не для чтения OTP. Список номеров:主页 href'ы вида 3197010291201-Netherlands.
  • 2nd-no.com — единственный подтверждённый рабочий non-VoIP путь, но под CF: домашний IP может получить жёсткий бан («Sorry, you have been blocked»), фри-прокси (400 шт) его не обходят. Лечится ротацией 4G (ZTE) или резидентами. Регистрация новых 2no-акков ломается при смене DOM («inputs missing») и требует CF-челленджа — перед батчем открой login-страницу браузером и пересними селекторы.
  • 2captcha SMS НЕ продаёт: PhoneNumberTask/GetSmsTask/SmsTask/ReceiveSmsTask → ERROR_TASK_NOT_SUPPORTED; баланс годится только на капчу (Turnstile/AWS WAF). Старый sms-activate-совместимый in.php?action=getNumber через ключ 2captcha не работает.
  • temp-number.com, receive-smss.com, sms24.me — CF 403 на curl. Открыты curl'ом с браузерным UA: quackr.io, receiveasms.com, receivesms.net, supercloudsms.com, receive-sms-online.info, freeonlinephone.org, smscodeonline.com.
  • Один номер = одна верификация: вести numbers_used.json и ротировать на 409.

OMP

Провайдер tachlis: baseUrl: http://127.0.0.1:16442/v1, api: openai-completions (на уровне провайдера И модели), auth: none, dummy apiKey, discoverModels false. Правки через YAML+бэкапы; при «Device or resource busy» на models.db — убить omp.exe/bun.exe (taskkill может не взять — ctypes TerminateProcess). Прямые curl-проверки гейтвея — источник истины при проблемах OMP-рантайма.