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.
Notification/Notifiable system, the experiment costs a config file and one channel class, not a platform migration.AllMySmsChannel directly in notification classes.Adopt when most of the following hold:
^1.4 constraint, and willingness to vendor under MIT.200 OK with an error status in the JSON. If the package swallows that, queued jobs report success while OTPs silently vanish — the worst possible failure mode for a security-adjacent flow, and a one-line fix in a vendored copy.Look elsewhere, or plan supplementary engineering, when the roadmap requires: delivery receipts or a DLR state machine, inbound/two-way messaging, MMS, multi-provider failover, rate-limit handling, per-message cost analytics, or any form of vendor SLA. Also look elsewhere if the org cannot accept a single-maintainer dependency or cannot spare the engineering time to wrap and vendor it. And if cost-per-message or deliverability in non-French markets is the deciding factor, evaluate carriers first and treat the driver as replaceable.
To executives (one paragraph): We can validate whether transactional SMS is worth investing in for roughly 1–3 developer-days and a capped SMS budget, using an existing MIT-licensed Laravel integration rather than a new vendor platform. It lets us test OTP, order updates, and reminders inside our current notification system, and it doesn't lock our code to a carrier — the driver is ~150 lines and replaceable. The trade-off is that it's a one-star, single-maintainer open-source package with no delivery receipts, inbound messaging, failover, or support SLA, so it's appropriate for a scoped experiment and early production on low-volume transactional traffic, not for a revenue-critical or two-way messaging roadmap without added engineering.
To engineering (the ask): Spend the spike on the things that actually determine success — carrier account setup, sender-ID registration, and confirming delivery in our target countries — not on PHP. Three conditions before this ships to anything security-adjacent (OTP):
AllMySmsChannel.php and confirm it throws on non-2xx and on error payloads inside a 200 body. If it doesn't, we vendor the class and fix it.SmsChannel / AllMySmsMessage subclass. Notifications reference our seam, not the vendor channel, so a provider swap is a one-file change and composer update is never a merge conflict.^1.4 and expect a lag window at every future Laravel major. v1.4.0 was compatibility-only; that's the maintenance pattern. MIT makes forking legal and cheap — it does not make it free.Also: send E.164 only, normalise phone numbers on the way in, guard via() on verified numbers so we don't pay to text unverified or malformed ones, keep message bodies ASCII-only (one accented character drops GSM-7 from 160 to 70 chars per segment and silently doubles the bill), never log message bodies or phone numbers, and run config:clear after any credential change — a stale cached config here shows up as a swallowed API-key error in production.
What I need decided, and by whom: (a) Product/marketing — approve the capped SMS budget and the success metric for the spike; (b) Procurement/legal — confirm AllMySMS is acceptable commercially for our target markets before engineering invests; (c) Engineering — accept ownership of a single-maintainer dependency with a seam and a pin. If (b) is unresolved, run the spike against a staging account only and do not put OTP on it.
How can I help you explore Laravel packages today?