← BusySMSCONTENT HISTORY

Update to BusySMS

Snapshot Nov 5, 2026 · 01:19 UTC · version 1.1.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save BusySMS and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Retrieve a one-time verification code that arrived on a phone the user owns, through their BusySMS gateway. Use when the user is waiting on a login, 2FA or signup code, asks you to check for a code, or says a code has not arrived. Also covers why no code appears — an offline phone, an unverified SIM, or a lapsed trial.",
  "included_files": [
    {
      "relative_path": "references/tools.md",
      "size_in_bytes": 2312
    },
    {
      "relative_path": "references/troubleshooting.md",
      "size_in_bytes": 2339
    }
  ],
  "name": "busysms-otp",
  "skill_md_contents": "---\nname: busysms-otp\ndescription: Retrieve a one-time verification code that arrived on a phone the user owns, through their BusySMS gateway. Use when the user is waiting on a login, 2FA or signup code, asks you to check for a code, or says a code has not arrived. Also covers why no code appears — an offline phone, an unverified SIM, or a lapsed trial.\n---\n\n# Getting a verification code from the user's own phone\n\nBusySMS captures verification SMS on phones **the user owns**. It is not a\nrented-number pool, so the code you fetch belongs to a SIM they control, and\nyou only ever see their own organisation's devices.\n\n## The one thing to get right\n\n`wait_for_code` returns **only a code that arrives after you call it**. On\ntimeout it answers `code: null`, never the code that was already sitting\nthere. That is deliberate: handing back a code the user already used makes\nthem submit it again, and on a site that counts attempts, that spends one for\nnothing.\n\nSo the two tools are not interchangeable:\n\n| Tool | Answers with |\n|---|---|\n| `wait_for_code` | the next code to arrive, or nothing |\n| `get_latest_code` | the newest code on record, however old |\n\n**Never reuse a code across attempts, and never type one out that did not come\nfrom a tool result in this conversation.**\n\n## The sequence\n\n1. **Has the code been sent yet?**\n   - Not yet: call `wait_for_code` *first*, then tell the user to press send.\n     It polls for up to 90 seconds (`timeoutMs`, default 60000).\n   - Just now: call `get_latest_code` and check `message.receivedAt`. If it\n     predates their attempt, it is the wrong code — call `wait_for_code`.\n2. **More than one phone or several codes at once?** Narrow it. Call\n   `list_my_devices` to see the verified numbers, then pass `deviceId` for a\n   specific handset, or `service` to match the sender.\n3. **Nothing arrives?** Call `diagnose_my_gateway`. It returns the live counts\n   of enrolled, verified and online devices plus `canReadCodes`, which is the\n   whole answer in one call. See `references/troubleshooting.md` for what each\n   state means and what to tell the user.\n\nDo not loop `wait_for_code` silently. If the first wait times out, say so and\nask whether to wait again, so the user can re-trigger the SMS instead.\n\n## Scope and privacy, which are not negotiable\n\n- Only the caller's own organisation's devices and messages. Never imply access\n  to anyone else's phone.\n- Only verification and OTP messages are captured. There is no access to the\n  rest of the inbox, so do not offer to read other SMS.\n- `send_sms_to_me` and `send_email_to_me` reach only the number and address on\n  the caller's own account. They take no recipient, so never promise to message\n  anyone else. SMS is capped per hour.\n- Reading codes needs an active trial or subscription. Past that, reads return\n  `402 payment_required` and the fix is billing, not retrying.\n\nExact arguments, return shapes and limits: `references/tools.md`.\n"
}

SHA-256 of public snapshot: 49c7c5e3d01726df2e48e5a9b038d6321efaf5f2c61ae3fbcd5f4af7e7d1f5d8