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

Jusibe Laravel Package

laravel-notification-channels/jusibe

A Laravel notification channel for sending SMS messages through Jusibe. Integrate Jusibe’s SMS API with Laravel’s notification system to deliver transactional or alert messages to users via a simple, familiar channel.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Implements the standard laravel-notification-channels shape: a package ServiceProvider, a JusibeChannel honoring Illuminate\Notifications\Notification, a fluent JusibeMessage value object, and a thin client wrapping Jusibe's HTTP API. This maps cleanly onto Laravel's existing notification abstraction, so SMS stays out of domain/services code and is dispatched via the same $user->notify() path as mail and database channels.
  • Fit is good conceptually and poor temporally. The package targets Laravel 5.3 (notification channels were introduced in 5.3), and the last release was 2020-04-26. Its illuminate/support and Guzzle constraints almost certainly cap installation on modern Laravel (8+). Verify composer.json before assuming composer require resolves.
  • With 8 stars and 0 dependents, there is effectively no ecosystem validation. Treat it as reference source code, not as a dependency.

Integration feasibility

  • Happy path is small: install, add jusibe key/token to config/services.php, implement routeNotificationForJusibe() on the notifiable, build a JusibeMessage in a toJusibe() method, and dispatch. Realistically half a day end-to-end including tests.
  • On a current Laravel estate, the install will likely fail on constraints. The fallback is a fork: the whole package is roughly three small classes, so porting it into app/Notifications/Channels/ and swapping the raw Guzzle calls for Laravel's Http facade is a few hours of work, not a project.

Technical risk

  • Abandonment (high). No commits since 2020, single-maintainer history, near-zero adoption. There is no upstream to receive security or compatibility patches; ownership transfers to us on day one.
  • Vendor-on-vendor risk (medium-high). The package is a thin shim over Jusibe, a Nigerian SMS gateway. Confirm Jusibe's API is still live, that new credentials can be provisioned, and that commercial terms are current before writing any code.
  • Constraint drift (high). PHP version, Guzzle major version, and the Notification contract method signature have all moved since 5.3. Any resurrection requires validating against the target framework version explicitly.
  • Capability gaps (medium). Expect no delivery-receipt/webhook handling, no idempotency keys, no retry semantics, and no multi-part/unicode message-length accounting. These are the things that turn SMS from "working" to "auditable," and they will be ours to build either way.
  • Coverage (medium). Unverified test suite. Assume we add HTTP fakes (Http::fake()) and contract tests ourselves.

Key questions

  1. What Laravel/PHP versions are actually in the target estate, and is any service still pinned low enough to install this as-is?
  2. Is Jusibe the chosen SMS vendor, or the incumbent one? What is the exit cost if we switch?
  3. Do we need delivery receipts, sender-ID registration, DND/regulatory handling, or per-message cost reporting? Each of these is out of scope for this package.
  4. Do we need provider failover (a second gateway)? If yes, the channel must not be Jusibe-shaped.
  5. Is outbound SMS in scope for PII/regulatory review in the operating jurisdiction?

Integration Approach

Stack fit

  • Install-as-dependency only if the application is on Laravel 5.3–6.x and the Composer graph resolves. Anything newer: vendor/fork.
  • Preferred pattern regardless of path: define an internal SmsSender contract in the app, have the notification channel depend on that interface, and let the Jusibe implementation be one adapter among potentially several. This is the single decision that de-risks vendor changes and is cheap now.

Migration path

  1. Copy JusibeChannel, JusibeMessage, and the API client into the application (or a private Composer package under our namespace). Retain the MIT license header.
  2. Replace raw Guzzle usage with Laravel's Http facade for testability, timeout configuration, and centralized retry policy.
  3. Re-point the service provider/config to our config/services.php entry and secret manager rather than a published config file.
  4. Add Http::fake() tests covering success, 4xx, 5xx, and timeout, plus a notification-level test asserting the correct payload shape.
  5. Only then delete the third-party dependency from composer.json.

Compatibility

  • Validate the send($notifiable, Notification $notification) signature against the target Laravel version — the contract has evolved.
  • Pin Guzzle explicitly or eliminate it via the Http facade to avoid resolver conflicts with other packages.
  • Verify PHP 8.x compatibility of any remaining code (loose typing, array_get-style helpers, nullable handling).

Sequencing

  1. Vendor due diligence: confirm Jusibe API availability, credentials, sender ID, and pricing.
  2. Spike: attempt install on the real target; timebox to two hours before declaring fork.
  3. Fork/port with the SmsSender abstraction in place; land tests.
  4. Pilot on one low-risk notification (e.g., OTP or internal alert) behind a feature flag.
  5. Ramp to remaining notification types; document credential rotation and vendor contact.

Operational Impact

Maintenance

  • We inherit full ownership. The upside is that the surface area is tiny — three classes, one HTTP call — so the steady-state cost is low and the code is fully readable. Budget a small annual review to check vendor API changes and framework deprecations. Do not leave it unowned in composer.json where a composer update can silently break it.

Support

  • No upstream support channel; the laravel-notification-channels org is semi-active but this repository is dormant. Escalation is internal engineering, plus the Jusibe account manager for anything API-side. Document this in the runbook so on-call doesn't chase a dead GitHub issue.

Scaling

  • Throughput is bounded by Jusibe's rate limits and our queue workers, not by the package. Send via queued notifications with a dedicated queue and a rate limiter to avoid saturating the vendor or starving other jobs.
  • Message segmentation (160 GSM-7 / 70 UCS-2 chars) directly multiplies cost and needs enforcing at the JusibeMessage level, since the package will not do it for us.
  • No connection pooling or batching concerns given single-message HTTP calls; add explicit timeouts so a slow vendor does not hold workers.

Failure modes

  • Vendor 4xx (bad credentials, invalid sender ID, unregistered recipient) surfaces as an exception inside a queue job — configure tries/backoff deliberately, and treat 4xx as non-retryable to avoid burning quotas.
  • Vendor 5xx/timeouts: retry with backoff; without idempotency keys there is a duplicate-delivery risk on retry, which matters for OTP and transactional messaging.
  • Silent failure: absent delivery-receipt handling, "sent" means "HTTP 200," not "delivered." Any compliance or customer-facing flow needs a reconciliation path or a second signal.
  • Vendor outage: no failover unless we built the SmsSender abstraction. This is the most likely real-world incident and the strongest argument for the abstraction over a direct dependency.
  • Credential rotation: key/token live in config; ensure they come from the secret store and that rotation is documented and tested.

Ramp-up

  • Low for any developer already comfortable with Laravel notifications — the mental model is identical to the mail and database channels, and the code is short enough to read in one sitting.
  • The real ramp is domain knowledge, not code: vendor API quirks, sender-ID registration, and local regulatory constraints. Capture that in a short README alongside the fork so it is not tribal knowledge.
  • Net TPM position: do not adopt as a dependency; harvest it as a starting point for a small in-house channel behind an internal SMS interface. Cost is measured in hours, risk reduction is substantial, and the abandoned-upstream problem disappears entirely.
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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource