Key Takeaways
- Symfony queue workers call the Android SMS gateway over HTTPS/JSON — not a first-party Symfony SMS SDK.
- Keep HTTP out of the request cycle; Messenger (or similar) paces to radio reality.
- Idempotency keys prevent duplicate OTP when workers retry.
- Accept ≠ delivered; wire DLR/webhooks for terminal status.
- Developer Center owns live REST fields; /codebase-php is samples only.
- BYO Android and operator credit. We meter devices and volume (Free 300 lifetime; paid from $19/mo).
Summary
Symfony SMS gateway integration with Android device queue workers: Messenger + REST HTTPS/JSON. Hub: Android SMS Gateway API. Samples: PHP language samples. Docs: Developer Center. Laravel sibling: Laravel send SMS.
A worker that retries forever on 4xx is not resilience. It is a prepaid SIM with a Doctrine loop.
Messenger + workers over REST
Controllers authorize and dispatch. Workers call the gateway with env Bearer tokens. Confirm URL/fields in Developer Center. Pair the phone via setup.
Context
Framework choice changes worker wiring, not radio physics. Pace to OEM ceilings and plan caps — no Unlimited SMS titles.
Worker design
- Separate OTP and marketing transports/queues.
- Idempotency / client_ref on every send.
- Timeouts + bounded retries; skip blind 4xx loops.
- Persist gateway message id on your entity.
- Webhook consumer verifies HMAC then updates status.
Layer table
| Layer | Owns | Must not |
|---|---|---|
| Controller | AuthZ + dispatch | Blocking outbound HTTP |
| Worker | REST send + backoff | Log OTP plaintext |
| Webhook | HMAC + status map | Trust unsigned POSTs |
| Android device | Radio + airtime | Hold API keys |
Jobs spend airtime
Accepted sends meter platform volume and carrier credit. Free 300 lifetime; paid from $19/mo. Pricing.
Operations
Watch Messenger failure counts and device last-seen. Canary before customer OTP.
HMAC and secrets
Env keys only. Verify webhook signatures on the raw body.
Decision guide
Prefer Messenger + HttpClient over inventing an SDK package.
Checklist
- Queued REST; idempotency; HMAC inbound.
- OTP pool isolated.
- No Symfony SDK product claim; no Unlimited SMS titles.
Next steps
TypeScript webhook receive: TypeScript receive webhook.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- download the Android gateway appGet the APK





