Key Takeaways
- bulk campaign checklist for laravel is a go/no-go for queued POST /messages — not a composer “Complete PHP SDK”.
- Pairing, battery exemptions, and operator airtime beat a green Horizon dashboard.
- CSV import is Professional / Business only. API bulk is still REST JSON.
- Pin OTP on another deviceId. Campaign jobs must not starve login codes.
- Priced by devices and SMS send volume. You use your own phone and operator SMS credit. Retries that hit the radio still spend carrier credit.
- scheduleAt is refused beyond 38 days. Docs own live fields.
Laravel jobs, not a PHP SDK
Search intent for bulk campaign checklist for laravel is whether your artisan worker is allowed to fire a promotional batch through an Android SIM. Service pricing is based on device count and total SMS sent through the gateway. Live fields live in docs.sms-gateway.app— not in a fake composer package.
A green Horizon graph is not consent, airtime, or a paired phone. Check those three before the first customer row.
<?php
// SMS Gateway — POST /api/v1/messages (Bearer JSON). Docs: https://docs.sms-gateway.app/
$url = 'https://app.sms-gateway.app/api/v1/messages';
$key = getenv('SMS_GATEWAY_API_KEY'); // never commit real keys
$payload = json_encode([
'to' => ['+14155552671'], // E.164 with +
'text' => 'Hello from SMS Gateway!',
'type' => 'sms',
]);
$ctx = stream_context_create([
'http' => [
'method' => 'POST',
'header' => implode("\r\n", [
'Authorization: Bearer ' . $key,
'Content-Type: application/json',
'Idempotency-Key: ' . bin2hex(random_bytes(16)),
]),
'content' => $payload,
'timeout' => 30,
'ignore_errors' => true,
],
]);
$response = file_get_contents($url, false, $ctx);
$result = json_decode($response, true);
if (!empty($result['messages'][0]['id'])) {
$id = $result['messages'][0]['id'];
echo 'Queued. Message ID: ' . $id;
} else {
$err = $result['error']['code'] ?? 'unknown';
echo 'Error: ' . $err . ' — ' . ($result['error']['message'] ?? $response);
}
That snippet is REST HTTPS/JSON. It is not “Download PHP SDK.” PHP samples. Production checklist for the same stack: Laravel production readiness.
Pre-dispatch gates
Name an owner for each gate. Radio failures and HTTP failures need different pages. Device setup and webhooks setup before you enlarge the to array.
| Gate | Ready | Stop |
|---|---|---|
| Radio | Paired, Doze exempt, last-seen fresh, SIM funded | Phone in a drawer; Horizon still “processing” |
| Worker | Queued job + Idempotency-Key per recipient event | Guzzle in a controller; retries without a key |
| Consent | STOP footer on promo; suppression list loaded | OTP template reused as a blast |
| Isolation | OTP pinned; campaign on another of 5 Pro devices | One SIM for login codes and the sale |
Queues vs radio pace
Laravel can enqueue faster than a handset can transmit. Cap concurrency to healthy devices, not to Horizon workers. Failed jobs that actually hit the radio still burn operator credit — we do not refund airtime. Priced by devices and SMS send volume. You use your own phone and operator SMS credit.
CTIA messaging principles are a useful floor for promotional tone and consent (CTIA messaging principles). Quiet hours still apply when the queue drains overnight.
Keep OTP off the campaign worker
Pin authentication with deviceIds. OTP verification and bulk SMS with consent are different lanes. A sale blast on the login SIM is a no-go even if the JSON is valid.
CSV and scheduleAt
Panel spreadsheet import is a Professional / Business feature — not a hidden Free unlock. Excel and CSV bulk. API campaigns still POST JSON. scheduleAt is ISO-8601 UTC and refused beyond 38 days.
Go / no-go
- Staff canary delivered on a cold SIM before customer rows.
- STOP + suppression list on promotional copy.
- OTP device pinned and idle during the blast.
- Webhook signatures verified; DLR watched for a fail spike.
- On-call named; spare charged; rollback is “pause the queue,” not “hope.”
Next steps
Run the canary, then one segment, then the rest. Device and volume pricing. Laravel SMS gateway.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- bulk SMS from Excel and CSVSpreadsheet campaigns
- bulk SMS with consent best practicesHigh-volume outreach
- SMS API documentationLive endpoint reference
- PHP REST send samplesPHP code examples





