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

Turbosms Laravel Package

laravel-notification-channels/turbosms

A Laravel notification channel for sending SMS messages through TurboSMS. Integrate TurboSMS with Laravel notifications and deliver SMS using a simple, familiar channel API.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. The package follows the canonical laravel-notification-channels pattern: an auto-discovered service provider, a publishable config file, a TurboSmsChannel implementing send(), and a TurboSmsMessage value object. It is a thin translation layer between Laravel's Notification/via() dispatch model and the TurboSMS HTTP API. If the application already dispatches multi-channel notifications (mail, push, Slack), this drops into the same mental model with one new toTurboSms() method per notification class. No architectural change is induced beyond that — which is exactly what you want from a channel adapter. Critically, 1.1.1 contains no architectural or behavioral changes: it is a dependency-constraint update only.

Integration feasibility. Mechanically trivial and now marginally de-risked: composer require, publish config, set credentials in .env, add the channel to a notification's via() array. Realistic effort for a production-quality first message (including tests and a staging send) remains 0.5–2 engineer-days. The unknowns are still not "can we wire it up" but "what does it not cover" — API version, error surface, delivery callbacks — and 1.1.1 does not close any of those questions. Treat the integration effort estimate as unchanged and the discovery spike as still mandatory.

Technical risk. Reduced, but not resolved. 1.1.1 adds Laravel 11 (PR #10) and Laravel 12 (PR #12) support, with two separate external contributors merged. That is meaningful evidence against the abandonment vector: the package is tracking framework majors, and the maintainer is accepting community PRs. However:

  • Still 5 stars / ~0 dependents. Ecosystem validation has not materially changed; the release proves maintenance intent, not production usage.
  • Lag is real and instructive. Laravel 11 shipped in March 2024 and Laravel 12 in February 2025; both landed in this release. Expect Laravel 13 support to slip by months, not weeks — plan the upgrade calendar accordingly rather than assuming day-one compatibility.
  • No functional changes. Error surface, API version, segmentation/encoding, auth model, sender IDs, and delivery callbacks are all untouched. The four highest-severity vectors identified previously remain open.
  • Semver observation. Framework-support changes shipped as a patch (1.1.1). That means constraint widening can arrive silently on a routine composer update. It is a low-risk change in practice, but it argues for pinning exact versions and letting CI decide when constraints move.

Key questions.

  1. Which TurboSMS API version does it target (v1 vs. v2 endpoints), and does it cover SMS only or also Viber?
  2. Does it expose provider error codes as Laravel-retryable exceptions, and does it respect 429/backoff?
  3. Is there CI with a mocked HTTP client, and what is the tested Laravel/PHP version matrix? Partially answered: Laravel 11 and 12 are now supported per 1.1.1. Still open: whether CI actually runs a matrix, whether the HTTP client is mocked in tests, and what the tested PHP range is (8.1 vs 8.2+ for Laravel 12).
  4. Does it support per-message sender IDs, alpha-numeric sender registration workflows, and scheduled sends?
  5. Are delivery-status callbacks/webhooks supported, or is it fire-and-forget?
  6. Who maintains it, is there a stated response expectation, and what is the succession plan? Partially answered: two named contributors (MammutAlex, gvital3230) plus the maintainer; still no stated SLA or succession plan.
  7. Does it handle long/Cyrillic message segmentation, or does it push that responsibility to the caller?

Integration Approach

Stack fit. Now Laravel 11–12 with confidence, with Laravel 9–10 presumed supported from the 1.1.0 line (verify in composer.json before relying on it). Fits a standard app that dispatches SMS through queued notifications (ShouldQueue) — SMS should never be sent inline in a request cycle. No infrastructure requirements beyond outbound HTTPS to the TurboSMS endpoint; if the platform has restricted egress, that host must be allowlisted and the proxy configured on the Guzzle client.

Migration path. Unchanged. If SMS is currently sent via ad-hoc Guzzle calls or a hand-rolled wrapper, introduce an internal SmsSender contract first, move call sites onto Notification classes, and then treat this package as one implementation behind that contract. Migration cost is low because the package owns only the dispatch path — not templates, not storage, not consent records. The 1.1.1 framework bump does not alter this; it only means the adapter clears the current upgrade gate.

Compatibility. Verify illuminate/support and guzzlehttp/guzzle constraints against the app's lockfile before committing — and re-verify after any framework upgrade, since that is precisely the axis this release moved. Confirm package discovery registers cleanly, and check for config-key collisions with any existing TurboSMS SDK or custom config. Confirm there is no signature clash if another SMS SDK is already installed.

Sequencing.

  1. Discovery spike (1–2 days): read the source end to end, confirm API version and error handling, run a real send against a TurboSMS trial account in staging with Cyrillic and >160-char content. Explicitly diff 1.1.0 → 1.1.1 to confirm only dependency constraints changed — cheap, and it converts an assumption into a fact.
  2. Abstraction: introduce the internal channel contract so the package is an implementation detail, not a dependency scattered across notification classes.
  3. Primary + fallback: wire a second provider behind a routing rule and exercise failover manually — still the single highest-value mitigation and it decouples "package risk" from "delivery risk."
  4. Observability: structured logging of provider responses, status-callback ingestion if available, alert on failure rate and on first auth error.
  5. Rollout: ship a low-risk notification (reminder/marketing) first, soak for two weeks, then move OTP once the canary and fallback are proven.

Operational Impact

Maintenance. Pin an exact version and treat upgrades as deliberate events rather than composer update side effects — reinforced by 1.1.1, where a patch bump carried framework-support changes. Budget roughly 1–2 days per quarter for upstream review. The fork policy remains necessary but is now a lower-probability path: the maintainer is merging external PRs, so the runbook should read "raise a PR upstream first, fork only if it stalls past one minor cycle." Retain a contract test suite with a mocked HTTP layer regardless — it converts a silent breakage into a red build on the Laravel upgrade PR, and it is what makes the fork/rebase option cheap.

Support. Community-only, no vendor SLA. Ownership is now visibly distributed across the maintainer plus two contributors, which is healthier than the prior single-maintainer read but still not a commitment. Internal ownership must remain explicit — assign a code owner. First-line support is an on-call engineer reading the source, which is only viable because the source is small enough to read in twenty minutes; keep it that way and resist patching it into something larger. Escalate delivery-side issues (sender registration, carrier filtering, blocked traffic) to TurboSMS support, not the package repo.

Scaling. Unchanged. Throughput is bounded by the TurboSMS account tier, provider rate limits, and queue worker concurrency — not by the package, which is stateless and issues one HTTP call per message with no pool to tune. The scaling variable that actually bites is segmentation: a template edit that pushes a Cyrillic message past 70 characters doubles unit cost and can split mid-word. Treat per-segment cost and character budget as a reviewed configuration, not an implementation detail.

Failure modes.

  • Provider outage / 5xx → retries exhaust → lost OTP. Mitigate with fallback routing, a dead-letter queue, and a user-facing resend path.
  • Credential rotation / auth failure → total silent failure if exceptions are swallowed upstream. Mitigate with an alert on the first auth error plus a daily canary message to an internal number.
  • Rate limiting (429) → confirm retryable exception and queue backoff behavior; otherwise bursts drop messages.
  • Encoding/segmentation defects → garbled or split messages in production only; catch in staging with real Cyrillic payloads.
  • No delivery confirmation → "sent" is not "delivered"; without status callbacks, delivery health lives in the provider dashboard and cannot be alerted on internally.
  • Upstream abandonment → downgraded. Laravel 11/12 support landed, so the near-term upgrade-blocking scenario is off the table. Residual risk is latency on Laravel 13, not indefinite drift.
  • Silent patch drift → framework-support changes arrive as 1.1.x. Mitigate with exact pins and upgrade PRs gated on the contract test suite.

Ramp-up. Individual developer onboarding is under an hour — it is a textbook notification channel. Team-level readiness is the real cost: a short runbook covering credential storage and rotation, sender-ID registration, the fallback trigger, the canary check, and the fork procedure. Net assessment: integration risk low, operational risk medium (down from medium-high), and almost entirely reducible by treating the package as a replaceable adapter rather than a load-bearing dependency.

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.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core