Key Takeaways
- Laravel incident response for an Android SMS gateway is two layers: Horizon/jobs, and the phone that actually sends. Restarting workers does not wake a SIM.
- Pause promotional jobs before you debug. A recovered radio that immediately drains a campaign will starve OTP again.
- Fail over to a spare charged, already-paired Android. Dual SIM is not automatic failover.
- Job retries during an outage spend operator SMS credit and plan send volume. Cap them.
- This Hub I how-to sits beside the Android-app runbook. You still bring the phone and carrier airtime.
People type laravel sms gateway how to incident response for outage at 2 a.m. because Horizon is quiet, POST /messages still returns 200, and nobody received a login code. Laravel did its job. The phone did not. This Hub I how-to is the application-layer runbook. Hardware sibling: Android app incident response. Hub: Laravel SMS gateway.
You need a working Android phone with a SIM and SMS credit from your mobile operator. Operator message costs are yours—we do not sell carrier SMS balance. Service pricing is based on device count and total SMS sent through the gateway. Compare device and SMS volume pricing.
Horizon
Jobs draining. HTTP 200. That is not delivery.
Primary SIM
Last DLR 11 minutes ago. Spare on charger takes OTP.
Queue green, radio dead
Cloud SMS vendors publish interconnect status pages. A phone gateway fails locally: Doze, yanked charger, empty prepaid, pairing drop. Laravel will happily enqueue SendSmsJob until the SIM wakes and then dump six hours of marketing onto a recovered radio. Treat the queue as an amplifier, not a health check. Device health: multi-device routing. Pairing: device setup.
Horizon going green while the SIM is dead is not recovery. Pause the promo job, then pick up the spare phone.
Severity for Laravel ops
| Severity | What Laravel sees | What the radio is doing | First move |
|---|---|---|---|
| SEV-1 | OTP jobs succeeding in Horizon; customers have no codes | Only OTP device offline or unfunded | Fail over spare phone; pause bulk workers |
| SEV-2 | One connection/deviceId failing; others drain | One handset in Doze or no signal | Route OTP off that deviceId; page device owner |
| SEV-3 | Campaign queue depth rising; OTP p95 inside SLA | Slow DLR, still sending | Ops chat; check airtime and OEM battery |
| SEV-4 | Failed job on a staff canary | Lab SIM | Fix the canary; do not page customers |
First 15 minutes
- Is OTP p95 outside SLA? If yes, pause promo workers immediately.
- Is the dedicated OTP Android online, paired, charged, and funded?
- If you cannot reach the handset in five minutes, fail over. Dual SIM is not a spare phone.
- Only then inspect Horizon: failed jobs, retry storms, feature flags still sending bulk.
Do not restart PHP-FPM as step one. The control plane accepting JSON is not the modem. Hardware sequence lives in the Android app outage how-to.
Pause jobs, not hope
Name the workers. sms-otp and sms-promo as separate Horizon supervisors so you canhorizon:pause sms-promo without freezing login codes. A single default queue is how campaigns eat OTP during recovery. Laravel queues: queue documentation.
Feature flags that wrap Http::post to the gateway beat commenting-out jobs in a hotfix. Roll the flag, not the entire release.
OTP during an incident
Isolate OTP on its own device pool before you need it. During SEV-1, do not “help” by retrying every challenge. One resend button in the product plus a capped job is enough. Product lane: OTP verification on Android. Webhooks that mark used codes: Laravel webhook receiver.
Retries burn airtime
Every SendSmsJob that the radio later accepts still spends operator credit and plan volume. An outage plus unbounded retries is how prepaid SIMs empty during the “fix.” Cap tries. Drop expired OTP jobs instead of sending a code the user already abandoned. Aggregators bill differently — we do not: Twilio vs Android SMS gateway.
Runbook checklist
- OTP vs promo Horizon supervisors exist and are named in the wiki.
- Spare Android charged, paired, SIM funded — not in a drawer at 12%.
- On-call owns the cabinet key, not only the PagerDuty schedule.
- Retry ceiling written; expired OTP jobs discarded.
- Postmortem includes device last-seen, not only job throughput.
- Lab drill on Free 300 lifetime SMS before you trust the page.
Next steps
Print the table. Run a failover drill on a staff number. Install the Android app · delivery reports · SMS API documentation. Android connectivity background: Android connectivity.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- PHP REST send samplesPHP code examples
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy





