Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sms77 Laravel Package

laravel-notification-channels/sms77

Laravel notification channel for sms77 that sends SMS messages through the sms77 API using Laravel’s native notification system. Configure your API key and sender, then deliver transactional, alert, or verification texts via a simple channel class.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. laravel-notification-channels/sms77 is a thin driver package, not a platform. Its entire surface area is a Laravel notification channel class, a message value object, a service provider, and a config file that wraps the Seven (formerly sms77) HTTP API. That means it slots into an existing Laravel notification architecture with essentially zero architectural negotiation: any notifiable model or on-demand route can gain an sms77 channel by adding one entry to via() and one toSms77() method. The architectural question is not "does this fit" but "do we want a vendor-specific channel class threaded through our domain objects," which is a lock-in decision, not a technical one. v1.0.7 does not change this surface area at all — the release is a CI/dependency-hygiene bump with no runtime API changes, no new features, and no deprecations.

Integration feasibility. High and low-effort. Composer install, publish config, set SMS77_API_KEY and sender identity in env, add the channel to a notification. A competent Laravel engineer can have a working send in under an hour. The real integration work is around it: phone number normalization to E.164, queue configuration, failure handling, and abuse throttling — none of which the package provides, and none of which v1.0.7 adds. Note that the Laravel 13 bump in this release is a test-matrix/dev-dependency change (PHPUnit and laravel/framework in require-dev), so it signals upstream readiness rather than altering what the package does at runtime.

Technical risk. The dominant risk remains stewardship, but v1.0.7 is a mild positive revision to that picture: the maintainer merged an external contribution (PR #13) to add Laravel 13 coverage, so the project is not abandoned and is tracking framework releases rather than sitting static. That is the single most likely drift event for a package like this, and it has been addressed proactively. It does not, however, change the community-validation picture — still single-digit stars and no dependents, so edge cases (Guzzle/HTTP client conflicts, Seven API revisions) will still surface on your timeline first. Secondary risks: (1) the sms77 → Seven.io rebrand leaves historical endpoint and payload assumptions in the wrapper that may drift; (2) the release cadence is now confirmable as "low but alive" — one substantive compat release plus automated StyleCI fixes, which is exactly the maintenance floor you would expect for a few-hundred-line driver; (3) SMS channels remain fire-and-forget, with no delivery-receipt or webhook handling, so the deliverability blind spot is unchanged; (4) the provider is a German/EU gateway — data residency and DPA terms still need procurement review if recipient numbers or message bodies include PII.

Key questions.

  • Answered by v1.0.7: Laravel 13 is now in the test matrix. Confirm the published composer.json constraint (e.g. illuminate/*: ^10|^11|^12|^13) and whether earlier Laravel versions were dropped — a narrowing constraint is the one way this "hygiene" release could bite us.
  • Does the channel expose provider response IDs / message IDs so we can reconcile delivery, or is it fire-and-forget? (v1.0.7: still no change.)
  • What is the maintainer's cadence and responsiveness over the last 12 months? (Partially answered: active, external PRs merged, automated fixes flowing.)
  • Does it support sender-ID configuration, and does our use case (alphanumeric sender vs. dedicated number) meet EU regulatory constraints in each destination country?
  • Is Seven's API key scoped/rotatable, and what is the blast radius of a leaked key given the account's balance-based billing?
  • Given MIT and ~a few hundred lines, is forking into our own namespace cheaper than the dependency risk? (Cheaper than before — the fork would now start from a Laravel 13-compatible base.)

Verdict. Adopt conditionally — usable, cheap, and low-complexity, with a slightly improved but still unproven stewardship profile. Justify it only behind an internal abstraction (see below) so the exit cost stays near zero. The v1.0.7 release does not change the verdict; it marginally de-risks the maintainer half of it.

Integration Approach

Stack fit. Native. This is a first-party-shaped Laravel package conforming to Illuminate\Notifications\Notification conventions; it requires no bootstrapping beyond auto-discovery and no framework modification. It composes cleanly with queued notifications, Notifiable traits, and Notification::route() for on-demand recipients. v1.0.7 is a drop-in patch — no migration steps, no config republish, no code changes expected.

Update action for v1.0.7. Treat as a routine patch pin: bump, run the notification test suite, and verify the resolved illuminate/support and guzzlehttp/guzzle versions in composer.lock. The only failure mode worth pre-checking is a minimum-version raise: if the release narrowed constraints to require a newer Laravel than we run, the bump will fail resolution rather than fail at runtime — which is the safe way to find out, but it should be caught in CI, not in a deploy.

Abstraction layer (recommended, non-negotiable). Do not let Sms77Channel::class appear in domain code. Define an application-level SmsSender port (send(string $to, string $body, array $opts): SendResult) with a Seven/Sms77 adapter and a null adapter for tests. Notifications then reference our own channel that delegates to the port. Cost: roughly a day. Benefit: provider swap (Vonage, Twilio, MessageBird, a local aggregator) becomes a container binding plus config, and we can A/B or fail over between providers during incidents. This single decision converts the package's low stewardship score from a strategic risk into an operational nuisance — and it is what makes accepting a maintainer-driven Laravel bump a one-line change instead of a project.

Migration path. If we already send SMS through a direct SDK call or a hand-rolled Guzzle client, migrate per-notification rather than per-system: stand up the new channel alongside the old sender, route one low-risk notification through it, and dual-run compare before cutting over. If we are greenfield, start on the abstraction from day one and treat the package as an interchangeable driver.

Compatibility checks before merge. Verify (a) the post-v1.0.7 Laravel/PHP constraint set against our composer.json and our next framework upgrade — this release exists specifically to satisfy that check for Laravel 13; (b) transitive HTTP client version constraints — guzzlehttp/guzzle conflicts are the most common failure for packages in this family; (c) config publishing does not collide with existing config/sms77.php; (d) the dev-dependency changes in this release do not leak into our production install (--no-dev resolution).

Sequencing.

  1. Spike (0.5 day): sandbox/test API key from Seven, prove send to an internal number, capture full request/response including error shapes.
  2. Foundation (1–2 days): SmsSender port + adapter + null/fake implementation for CI; config and secret management; E.164 normalizer with a validation library.
  3. First production use (1 day): lowest-blast-radius notification — internal ops/on-call alerts, not customer-facing.
  4. Harden (2–3 days): queuing, retry policy, per-recipient and global throttles, structured logging of provider message IDs, alerting on error-rate and balance.
  5. Expand: transactional/OITP notifications, one at a time, each gated behind a config flag for instant disable.

Operational Impact

Maintenance. The package itself is near-zero-maintenance; the maintenance load is version-drift. v1.0.7 moves that risk out by one framework cycle: the project is demonstrably tracking Laravel majors, which was the single most probable trigger for a private fork. Push the expected fork horizon from 12–18 months out, but keep the budget — roughly ~1 engineer-day per year for vendoring, plus review time on each upstream Seven API change. Pin the version exactly; the cadence here is infrequent, small, and low-signal, so floating on ^1.0 buys nothing and forfeits the ability to review a diff before it lands. Note the composition of this release — one compat PR plus automated StyleCI — and calibrate expectations: this maintainer ships hygiene, not features. The functional gaps identified earlier (no receipts, no throttling, no retry semantics) will not close on their own.

Support. Two disjoint support surfaces: the package (community-only, no SLA, no commercial backing — but now with evidence of a maintainer who merges outside contributions) and the gateway (Seven provides account-level support, delivery troubleshooting, and sender-ID registration). Architecturally, put delivery disputes in the vendor's lap: log provider message IDs on every send so any "did the customer get it" ticket is answerable from our own records rather than a manual vendor query. Confirm DPA, sub-processor list, and EU data-residency posture during procurement, not after launch.

Scaling. SMS volume is typically bursty and modest, so raw throughput is rarely the constraint — but three things bite. (1) Queueing: notifications must implement ShouldQueue and sit on a dedicated queue so an SMS provider slowdown cannot stall web requests or share a worker pool with critical jobs. (2) Provider rate limits and balance: Seven enforces per-account limits; a depleted balance returns an error, not a silent drop, so a balance-check job with alerting is mandatory. (3) Fraud: OTP endpoints are a known SMS-pumping target; the package has no throttling, so per-phone-number, per-IP, and per-account-per-minute limits must live in our application layer before we expose any OTP flow. None of this is affected by v1.0.7.

Failure modes.

  • Auth/credential failure (401/403): total send outage; surface as a distinct alert class, not a generic error.
  • Insufficient balance / account suspension: total outage with provider-specific error codes; requires a runbook and a top-up owner.
  • Timeout / 5xx: notification job fails and retries — must be idempotent or accept duplicate sends; cap retries and route to a dead-letter queue rather than retrying indefinitely.
  • Invalid or misformatted number: silent per-recipient failure; E.164 normalization and validation at the boundary is the only reliable defense.
  • Business-transaction coupling: the highest-severity failure mode is an SMS exception rolling back or blocking a signup, payment, or onboarding step. SMS must be a side effect, never a precondition — catch, log, and continue.
  • Deliverability degradation: no receipt handling means we cannot distinguish "sent" from "delivered"; add a periodic reconciliation job if Seven's receipts API is exposed, otherwise instrument with a delivery-rate proxy (support tickets, OTP completion rate).
  • Dependency-resolution failure on upgrade: new as of v1.0.7 — a tightened Laravel constraint can block our own framework upgrade. Mitigate by resolving the version bump in a branch before the framework upgrade lands, not after.

Ramp-up. Low: one Laravel engineer, half a day to first send, two to three days to production-grade including the abstraction, throttling, and runbook. The knowledge that matters is not the package — it is the operational envelope: which destinations require pre-registered sender IDs, what Seven's error codes mean, how the balance check works, and who gets paged. Write that runbook before the first customer-facing send.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console