laravel-notification-channels/all-my-sms
Send SMS notifications from your Laravel app through the AllMySMS API. This channel integrates with Laravel's notification system so you can deliver text messages to users alongside mail, database, and other channels.
What this actually is. A ~150-line Laravel notification channel that maps Laravel's Notification/Notifiable abstraction onto the AllMySMS HTTP API. It is an adapter, not a platform: no delivery receipts, no inbound/two-way, no MMS, no failover, no rate-limit handling, no per-message cost analytics. The evaluation should be framed as "do we adopt AllMySMS as a carrier, and is this adapter cheaper than writing our own?" — two separate decisions that this package quietly couples together.
Architecture fit.
mail, database, and push. Domain code stays untouched because routing lives on the notifiable model (routeNotificationForAllMySms()), not in the message.Integration feasibility.
Technical risk.
send() and confirm the channel throws on non-2xx and on error payloads embedded in a 200 OK body (invalid number, unregistered sender, insufficient credit, STOP-listed recipient). If it swallows errors, queued jobs report success while OTPs silently vanish — the worst failure mode for a security-adjacent flow. This is a one-line fix in a vendored copy but a serious blind spot if unverified.Http facade, channel-level tests require a fork.Key questions to close before commitment.
Stack fit.
composer.json's illuminate/* constraint and PHP floor are the gating facts. Laravel 12 is supported as of v1.4.0 — this dependency no longer blocks that upgrade.composer require, publish config, set ALLMY_SMS_API_KEY/ALLMY_SMS_FROM (confirm exact names against the published file), keep .env.example in sync.Notification::route('AllMySms', '+33...') for anonymous recipients — the latter is the fastest smoke test.Migration path.
SmsChannel seam first, delegate to the existing provider, then swap the delegate to the AllMySms channel behind it. Notifications reference our channel, never the vendor class — provider replacement becomes a one-file change.AllMySmsMessage for template()/from() helpers and subclass the channel to fix error semantics, so composer update isn't a merge conflict.Compatibility and configuration hygiene.
^1.4. Treat minor bumps as review-required, not auto-merged.config:clear/re-config:cache part of the deploy runbook.app()->environment() branches inside a notification.Sequencing.
Notification::route(), verify delivery and inspect raw response bodies. Confirm the error-semantics question here, not in production.SmsChannel; vendor/fork the driver under our namespace if error handling or Guzzle→Http changes are needed.Maintenance.
Support.
Scaling.
RateLimited middleware or ->delay()) for bursts and bulk sends.Failure modes to design against.
Log:: calls in the channel before production.Ramp-up.
via()) so SMS can be disabled without a deploy.How can I help you explore Laravel packages today?