105 lines
3.5 KiB
Markdown
105 lines
3.5 KiB
Markdown
# Free-country OpenAI phone-verification runner notes (2026-05-10)
|
|
|
|
## Trigger
|
|
|
|
BOSS asked to stop constraining the country list and let the runner choose countries freely:
|
|
|
|
```text
|
|
No fixed region restriction.
|
|
Each country at most 2 attempts.
|
|
Total 20 attempts.
|
|
Try to find whether any country succeeds.
|
|
```
|
|
|
|
## Policy learned
|
|
|
|
For broad country exploration, count only **real 5sim activations** toward the global budget:
|
|
|
|
```text
|
|
real activation = 5sim buy returns an activation id and phone number
|
|
```
|
|
|
|
Do **not** count these as phone attempts:
|
|
|
|
- OpenAI country-gate/CDP failures before buying.
|
|
- 5sim `no free phones` / non-JSON buy responses.
|
|
- Unsupported country mappings.
|
|
- OAuth recovery failures before `add-phone`.
|
|
|
|
This prevents the global budget from being consumed by inventory misses or UI/CDP glitches.
|
|
|
|
## Country scheduling
|
|
|
|
Use a broad candidate list of OpenAI-supported countries, with a per-country cap:
|
|
|
|
```text
|
|
for country in candidate_order:
|
|
try up to 2 real activations for this country
|
|
skip/no-count if no inventory
|
|
move to next country
|
|
repeat/cycle if needed until global real-activation budget is met
|
|
```
|
|
|
|
Keep the same hard gates as the stricter regional runners:
|
|
|
|
1. Recover/verify page is usable `https://auth.openai.com/add-phone`.
|
|
2. Before buying, set and read back OpenAI country selector:
|
|
- `select.value == target ISO`
|
|
- visible text equals expected country and dial prefix, e.g. `越南 (+84)`.
|
|
3. After buying, re-check country before entering the phone number.
|
|
4. If gate fails after buying, cancel the activation immediately.
|
|
5. Probe resend channel before clicking; if WhatsApp, cancel the SMS activation rather than clicking WhatsApp resend.
|
|
|
|
## 5sim API quirks
|
|
|
|
The authenticated/guest prices endpoints may return 403 in this environment:
|
|
|
|
```text
|
|
GET https://5sim.net/v1/guest/prices?product=openai -> 403
|
|
GET https://5sim.net/v1/user/prices?product=openai -> 403
|
|
```
|
|
|
|
When prices are unavailable, use controlled `buy activation` probes and classify inventory misses.
|
|
|
|
5sim buy endpoints can return HTTP 200 `text/plain` instead of JSON:
|
|
|
|
```text
|
|
status=200
|
|
content-type=text/plain; charset=utf-8
|
|
body='no free phones'
|
|
```
|
|
|
|
Treat this as:
|
|
|
|
```json
|
|
{"phase":"buy_failed_not_counted","reason":"no_free_phones"}
|
|
```
|
|
|
|
No activation was created, so no cancellation is needed and it must not count toward the global real-attempt total.
|
|
|
|
## Candidate-country runner shape
|
|
|
|
The session generated a broad runner:
|
|
|
|
```text
|
|
/tmp/phone_verify_free_country_2each_total20.py
|
|
```
|
|
|
|
Initial candidate list included Southeast Asia, Latin America, Africa, Europe, and South Asia. The first inventory checks showed:
|
|
|
|
```text
|
|
Philippines: no free phones
|
|
Malaysia: no free phones
|
|
Thailand: no free phones
|
|
Vietnam: bought activation successfully and proceeded to OpenAI polling
|
|
```
|
|
|
|
Persisted script copies should avoid secrets and should keep the candidate map as data near the top of the script so new countries can be added safely.
|
|
|
|
## Pitfalls
|
|
|
|
- Do not rely on `FIVE_SIM_COUNTRY_ORDER` when BOSS explicitly asks for free-country exploration; the runner should ignore stale env country order or log its effective order clearly.
|
|
- Do not let `no free phones` consume the per-country or global real-activation budget.
|
|
- Keep the visible country/ISO gate even in exploration mode; the country list is larger, so selector mismatches are more likely.
|
|
- If a broad run is still active in the background, record only the stable runner policy and early observations; write final outcome only after process completion and order cleanup verification.
|