Files

2.8 KiB

Strict OpenAI phone country/area-code gate (2026-05-10)

Trigger

Use this note for any OpenAI auth.openai.com/add-phone automation that buys and submits 5sim phone numbers.

Bug that caused this rule

During a 1085 + Indonesia test, the browser page had silently reverted to the United States selector (美国 (+1)) while the agent bought an Indonesia +62 number. The number was submitted as a US local number, and OpenAI moved to phone-verification showing it had sent to a +1 (...) number. That attempt was invalid and the 5sim order was canceled.

Mandatory rule

Never rely on the intended country in the script. Before buying, after filling, and immediately before clicking Continue, verify BOTH:

  1. Native select value equals the intended ISO country code.
  2. Visible country button text contains the intended country and dialing code.

Examples:

Country ISO Visible text
Argentina AR 阿根廷 (+54)
Netherlands NL 荷兰 (+31)
Indonesia ID 印度尼西亚 (+62)

If either check fails:

  • Do not click Continue.
  • If a 5sim order was already bought, cancel it immediately.
  • Reset the country selector and re-check before retrying.
  • Exclude the invalid attempt from country/provider result statistics.

Reliable country setting

React Aria click/pointer events are unreliable. Use the hidden/native select directly:

const sel = document.querySelector('select');
sel.focus();
sel.value = 'ID'; // AR, NL, ID, etc.
sel.dispatchEvent(new Event('input', { bubbles: true }));
sel.dispatchEvent(new Event('change', { bubbles: true }));
await new Promise(r => setTimeout(r, 800));

Gate function

function visibleCountryText() {
  return [...document.querySelectorAll('button')]
    .map(b => b.innerText)
    .find(t => /\(\+\d+\)/.test(t));
}

function assertCountryGate(iso, visible) {
  const selectValue = document.querySelector('select')?.value;
  const country = visibleCountryText();
  if (selectValue !== iso || country !== visible) {
    throw new Error(`country_gate_failed: select=${selectValue} visible=${country}`);
  }
}

Correct runner behavior

  1. Restore or open add-phone.
  2. Set country via native select.
  3. Run assertCountryGate().
  4. Only then buy a 5sim activation.
  5. Fill the local part of the phone number.
  6. Run assertCountryGate() again.
  7. Click Continue.
  8. Read the result:
    • direct rejection (无法向此电话号码发送验证码 / 电话号码无效) -> cancel and rotate;
    • accepted/waiting -> poll 5sim, click resend once, poll again, then cancel/rotate if still no SMS.

Replacement limit

For the current configured test, BOSS requested 10 replacements:

PHONE_VERIFICATION_REPLACEMENT_LIMIT=10

Keep using configured country order first:

FIVE_SIM_COUNTRY_ORDER=argentina,netherlands,indonesia