Files
autoreg-skills-max/skills/sms-verification-automation/SKILL.md

182 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: sms-verification-automation
description: 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.
trigger: 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
```bash
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
```bash
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)
```