symfony/vonage-notifier
Provides Vonage integration for Symfony Notifier, letting your app send SMS notifications through the Vonage API with no custom transport code. Configure the DSN with your key, secret, and sender: vonage://KEY:SECRET@default?from=FROM. Part of the Symfony Notifier component.
vonage://KEY:SECRET@default?from=FROM in config is the whole integration. That decision (add SMS as a channel vs. not) becomes cheap to test, and cheap to unwind if Vonage underperforms.payload_hash claim on signed webhooks. In plain terms: a correctly signed callback no longer guarantees the body is the one Vonage signed. Any product surface that mutates state from an inbound webhook — delivery receipts flipping an order to "delivered," inbound-SMS-triggered account actions, credit or balance adjustments — was exposed to a tampered-or-replayed-payload class of bug. If you expose callback endpoints, treat "pin ≥ 8.1.7" as a release gate on that milestone. If you don't yet expose them, this is still the moment to decide that you will validate both the signature and the payload hash from day one, rather than retrofitting.hash_equals()) landed in 8.1.0-BETA2 and was backported to 8.0.11 / 7.4.11 / 6.4.39. v8.1.7's payload_hash fix, as published, appears on the 8.1 line only. That asymmetry matters for planning: older LTS branches may carry unpatched webhook-integrity gaps, so "we're on 6.4 LTS, we're fine" is not a safe assumption for callback-exposing features. Budget the branch upgrade as part of any webhook roadmap item.Adopt if:
symfony/notifier — the bridge is a natural extension, not a new dependency axis.payload_hash fix has reached your branch before you expose any callback endpoint.Look elsewhere if:
symfony/notifier and adapting your notification classes, or bypassing Laravel's Notification/Notifiable conventions. The official vonage/laravel-notification-channel (or the Vonage SDK directly behind a NotificationChannel) is the lower-friction, lower-surprise path. Do not let a "package exists" finding drive this decision. Note also that webhook-signature hardening described here does not automatically transfer to a hand-rolled or Laravel-channel implementation — if you go the Laravel route, that validation is yours to own and to test.One caveat for the evaluation itself: 5 stars and 0 dependents is a measurement artifact, not a signal. This is a split-out repo from the Symfony monorepo — usage is real but attributed to symfony/notifier. Don't present those numbers to stakeholders as adoption evidence in either direction. The same caution applies in reverse to release notes: a one-line "bug #65776" entry is not a triviality signal. It's a security fix that arrived with no marketing around it, and it's the kind of thing that only surfaces in a post-incident review if you skipped it.
For executives (decision framing, one paragraph): "This is a small, MIT-licensed adapter that lets our notification system send SMS and voice messages through Vonage without us building or maintaining provider integration code. The value isn't the library — it's the option it buys: we can ship phone verification and transactional alerts on a short timeline, and if Vonage's pricing or reliability disappoints, we change a config string rather than rewriting features. Risk is low and bounded: no license cost, no lock-in, maintained alongside Symfony itself, and the only material commitment is Vonage's per-message usage spend, which scales with actual volume. The latest patch closed a webhook integrity gap — the check that a callback body actually matches what the provider signed — which is exactly the sort of thing we want handled upstream rather than in our own code. I'd recommend we greenlight a scoped pilot on phone verification before committing to broader rollout, and require the current patched version before we accept any inbound provider callbacks."
For engineering (be direct about the fit):
"This is the Symfony Notifier transport for Vonage — DSN-configured (vonage://KEY:SECRET@default?from=FROM), so it slots into symfony/notifier and symfony/messenger with no bespoke HTTP client. Two things to weigh: it's a transport adapter only — no retry policy, template management, or delivery analytics beyond what Vonage and your own code provide. And if we're on Laravel, this is a mismatch: our notification layer is Illuminate\Notifications, so we should either use the official Laravel Vonage channel or wrap the Vonage SDK directly. On security: pin to ≥ 8.1.7, which verifies the payload_hash claim on signed webhooks — signature validity alone was not sufficient to trust the body. The earlier hash_equals() timing-attack fix was backported to 8.0.11 / 7.4.11 / 6.4.39, but this newest fix as published is on the 8.1 line; confirm backport status before shipping callback endpoints on an older branch, and treat webhook body validation as an integration test we own. Release cadence is low-churn — expect near-zero upgrade work, and expect nothing new in the way of features."
For product managers (what you're actually committing to): "This unlocks a specific, high-value capability — phone verification for signup and account recovery — with a config-level integration instead of a build. Sequence it: verification first (measurable on conversion and support volume), transactional alerts second (measurable on 'where is my order' contacts), broader engagement messaging last and only if the first two show returns. Add one dependency to that plan: anything that reacts to an inbound webhook — delivery status updates, reply handling — is a security-relevant surface, and the patched version is a prerequisite, not a follow-up ticket. What you own either way: message copy, opt-out and consent compliance, send throttling, and the decision of when not to send. What this package does not give you: a provider SLA, cost controls, or delivery analytics — budget those as separate line items."
How can I help you explore Laravel packages today?