Files

10 KiB
Raw Permalink Blame History

name, description, trigger
name description trigger
sms-verification-automation Automated SMS verification for service activation via SMS providers (HeroSMS, GrizzlySMS, 365sms) and ADB-controlled Android device. Covers MyJio and Gemini but generalises to any app requiring SMS OTP. User asks to verify a phone number, get OTP, activate a service via SMS, or automate login with phone verification.

SMS Verification Automation

Automate SMS-based phone verification for any service using SMS activation providers and ADB-controlled Android device.

References

  • references/credentials.md — account credentials for all SMS providers
  • references/pvacodes-api-jiofarm.md — PVACodes API (TLS-blocked, browser-bridge required), Jio service prices India, jiofarm integration (2026-09-19)
  • references/2nd-no-free-polish-numbers.md — 2nd-no.com: бесплатные польские номера (5/день, 3 дня живёт), полный Playwright-флоу реги/логина/модала номера, API-карта 2no.pl (JSON-RPC), tempmail.lol v2 query-token питфолл (2026-09-19)

Бесплатные веб-SMS сервисы (без балансов/платежей)

  • 2nd-no.com (Польша, +48) — рега по email, 5 бесплатных номеров/день, живут 3 дня, продлеваются при входящем SMS. Только через браузер (API за Cloudflare). Полный playbook: references/2nd-no-free-polish-numbers.md.
  • Каталог остальных бесплатников (temp-number.com, quackr.io, sms-activate.guru free и их статусы): skill cybersec/temp-sms-free.
  • Правило: крупные сервисы (Google/Facebook/GitLab) часто режут VoIP/фри-номера — проверять доставку до массового использования.
  • Resend-троттл живёт на ЦЕЛЕВОМ пользователе, не на номере: сервисы (WorkOS-класс) рисуют «код отправлен» на verify-странице, но молча не доставляют повторные SMS тому же user в пределах ~1-2ч — ротация номера не помогает и только жжёт слоты. Ждать cooldown или верифицировать нового user (новый аккаунт = SMS доставляется сразу).
  • Twilio-based верификация (MLH и подобные US-платформы) — блок КАТЕГОРИЧЕСКИЙ: арендные/виртуальные номера не получают SMS НИ в одной стране (add/resend возвращают 200, SMS не приходит никогда; проверено на 8 номерах/7 стран hero-sms, включая пулы с 25k+ physicalCount). НЕ итерировать страны — сразу реальная SIM (попросить юзера продиктовать один код). Мёртвый рент возвращает ban+refund (setStatus status=8). Детали: skill ai-provider-autoreg → references/mlh-ghw-promo-claim.md.

Providers (ordered by effectiveness for Jio/Indian services)

Provider API URL Key Location Best For Notes
GrizzlySMS api.grizzlysms.com/stubs/handler_api.php Account → Settings → API tab MyJio, real SIM cards Requires browser login to get key; MyJio is dedicated service
HeroSMS hero-sms.com/stubs/handler_api.php User provides General DO NOT use herosms.com (wrong domain)
365sms 365sms.org/stubs/handler_api.php In HEROSMS_CLIENT_GPT55_Gothbreach.py General Jio OTP does NOT arrive on this provider
PVACodes beta.pvacodes.com/app/api.php Дашборд ?page=user/api (Влад: [REDACTED-NAME]@gmail.com) India ($0.16-0.33), 50+ стран TLS(JA3)-блок: только через Playwright bridge :18085 (API, credentials:'omit' — include ломает ключ) + :18086 (дашборд, persistent_context). См. references/pvacodes-api-jiofarm.md

All three use sms-activate compatible API protocol.

Crucial Pitfall: Jio Blocks Virtual Numbers

Jio (MyJio) checks if the phone number is a real Jio subscriber. Virtual numbers from HeroSMS/365sms will NOT receive the OTP — the SMS is never sent. Status will be STATUS_WAIT_CODE indefinitely or STATUS_CANCEL.

PVACodes Jio-сервисы: ВСЕ 9 купленных номеров (Jio11/JIO7/Jio17/Jio19/JioSaavn7) = НЕ Jio-абоненты (2026-09-19 финал: sendOtp → 400 INVALID_JIONUMBER_ERROR). Jio17 отдаёт ПОЛНЫЙ номер прямо из API (+916393438597), в отличие от маскированных Jio11/JIO7 (+919****1247). Все Jio-сервисы в каталоге имеют success_count=0. cancel_number = полный авто-рефанд пока код не получен, НО не раньше 60с после покупки («Please wait 60 more seconds before cancelling») — в скриптах ждать 65с. Out of Stock деньги не списывает. Rent-каталог India пуст. PVACodes для Jio = мёртвый путь. Детали: references/pvacodes-api-jiofarm.md.

Only GrizzlySMS explicitly supports MyJio with real SIM cards (Airtel/Jio/Vodafone). It is the only provider observed to have a chance of receiving Jio OTP.

Дешёвый pre-check любого номера на Jio (до покупки следующего): POST https://www.jio.com/api/jio-login-service/login/sendOtp body {"mobileNumber":"<10 цифр>","loginFlowType":"MOBILE","alternateNumber":""} (формат подтверждён сетевым перехватом с jio.com/selfcare/login). Ответ INVALID_JIONUMBER_ERROR = номер не Jio → cancel+refund. Это валидация за $0 вместо ожидания OTP 120с.

GrizzlySMS Setup

Registration

  1. Open https://grizzlysms.com/registration in browser (Chrome DevTools MCP works)
  2. Fill: Name, Email (use guerrillamail.com), Password, Confirm Password
  3. Check both checkboxes (privacy + public offer)
  4. Click Registration
  5. Accept cookie banner if present

Getting API Key

  1. Log in at https://grizzlysms.com/authorization
  2. Navigate to Settings → API tab
  3. Copy API key (readonly textbox, format: 32-char hex)

Top-Up

  • Balance is $0 after registration
  • Click "Top Up balance" in header
  • Minimum deposit required (check UI)

API Usage

# Check balance
curl "https://api.grizzlysms.com/stubs/handler_api.php?api_key=[REDACTED]"

# Get MyJio number — use service code from web UI (not 'myjio' in API)
# Check the service code in the Price page or web UI
curl "https://api.grizzlysms.com/stubs/handler_api.php?api_key=[REDACTED]"

# Poll for SMS
curl "https://api.grizzlysms.com/stubs/handler_api.php?api_key=[REDACTED]"

HeroSMS Usage

Domain: hero-sms.com (NOT herosms.com — connection reset).

# Check balance
curl "https://hero-sms.com/stubs/handler_api.php?api_key=[REDACTED]"

# Get number for India (country=22), try any service
curl "https://hero-sms.com/stubs/handler_api.php?api_key=[REDACTED]"

# Services with most Indian numbers: tg, li, go, ig, dr, wb, vk
# But Jio OTP will NOT arrive on these — use only for non-Jio services

Android Device Control via ADB

Device Info

  • Model: Xiaomi 24117RN76E (Android 15, MIUI)
  • Serial: furcwslfnn6d7drk
  • ADB path: C:/Users/User/AppData/Local/Android/Sdk/platform-tools/adb.exe
  • Resolution: 1080x2400

Critical: ADB from execute_code vs terminal

  • execute_code sandbox CANNOT connect to ADB — commands time out
  • Use terminal tool for ALL ADB commands
  • Always use full path to adb.exe

Essential ADB Commands

ADB="C:/Users/User/AppData/Local/Android/Sdk/platform-tools/adb.exe"
DEV="furcwslfnn6d7drk"

# Wake device
"$ADB" -s "$DEV" shell input keyevent 26

# Launch MyJio (monkey works, am start may fail)
"$ADB" -s "$DEV" shell monkey -p com.jio.myjio 1

# Tap coordinates (MyJio: number field ~540,1100; Generate OTP ~540,1400)
"$ADB" -s "$DEV" shell input tap X Y

# Enter text
"$ADB" -s "$DEV" shell input text "PHONE_NUMBER"

# Delete characters
"$ADB" -s "$DEV" shell input keyevent 67  # KEYCODE_DEL

# Check screen state
"$ADB" -s "$DEV" shell dumpsys power | grep mWakefulness
# "Awake" = screen on, "Asleep" = screen off → wake with keyevent 26

# Screenshot (may be black due to FLAG_SECURE)
"$ADB" -s "$DEV" shell screencap -p /sdcard/screen.png
"$ADB" -s "$DEV" pull /sdcard/screen.png "C:/Users/User/screen.png"

MyJio App Quirks

  • Package: com.jio.myjio
  • Installed via Xiaomi GetApps (not Google Play)
  • Version: 8.0.37
  • FLAG_SECURE enabled — screenshots show black screen
  • Login flow: enter number → "Generate OTP" → OTP screen → auto-reads SMS from device
  • No Skip/Guest option on start screen
  • "Try another way to get OTP" → "Get OTP on call" option exists but doesn't work with virtual numbers

OTP Polling Pattern

ACT_ID="activation_id"
for i in $(seq 1 30); do
  sleep 4
  resp=$(curl -s --max-time 10 "https://API_URL?api_key=[REDACTED]")
  if [ $((i % 5)) -eq 0 ]; then echo "[$i] $resp"; fi
  if echo "$resp" | grep -q "STATUS_OK"; then
    code=$(echo "$resp" | cut -d: -f2)
    echo "OTP: $code"
    # Enter code on device
    "$ADB" -s "$DEV" shell input text "$code"
    break
  elif [ "$resp" != "STATUS_WAIT_CODE" ]; then
    echo "[$i] $resp"
    break
  fi
done

Status codes: STATUS_WAIT_CODE (waiting), STATUS_OK:CODE (SMS received), STATUS_CANCEL (expired/failed).

Helicopter View: Decision Tree

Need SMS OTP?
├── Is it Jio/MyJio?
│   ├── YES → GrizzlySMS only (real SIM cards needed)
│   │   ├── PVACodes/365sms/HeroSMS = non-Jio номера (INVALID_JIONUMBER_ERROR, проверено)
│   │   └── Need to top up balance first (min deposit ~$5-10)
│   ├── Sender is Twilio-based (MLH etc.)?
│   │   └── YES → REAL SIM only (virtual numbers = zero SMS in ANY country)
│   └── NO → HeroSMS or 365sms (virtual numbers work for most services)
│       ├── HeroSMS: hero-sms.com, ~$4.20 balance
│       └── 365sms: 365sms.org, ~$0.52 balance
└── Need browser interaction?
    └── Use Chrome DevTools MCP (mcp__chrome_devtools__*)
        NOT execute_code (sandbox has network restrictions)