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

Skebby Bundle Laravel Package

zen/skebby-bundle

A Composer-installable Symfony bundle for integrating the Skebby SMS gateway into PHP applications. It provides configuration and service wiring so you can send SMS messages through Skebby with minimal setup, keeping API credentials and delivery logic organized in your Symfony project.

View on GitHub
Deep Wiki
Context7

Getting Started

Before anything else, note the framework mismatch: zen/skebby-bundle is a Symfony bundle, not a Laravel package. It ships with a Symfony Bundle class, services.yaml/Extension loading, and Configuration tree definitions — none of which Laravel's container understands natively. "Day-to-day" use in Laravel therefore means one of three paths: (a) use it inside a Laravel-Symfony bridge, (b) pull the underlying Skebby HTTP calls out of the bundle into a small Laravel wrapper, or (c) skip it and use the skebby API directly with Http:: calls. Option (b) is what most teams actually end up doing.

If you do install it:

composer require zen/skebby-bundle

Then look, in this order, at the repo's:

  1. DependencyInjection/ — the config tree tells you exactly which credentials and options the bundle expects (username, password, sender, type, delivery mode, etc.).
  2. The main service class (likely Services/ or Skebby/) — this is your only integration surface; the rest is Symfony plumbing.
  3. Any Resources/config/ YAML — this is where defaults and parameter names live.

A realistic first use case is transactional SMS: "order shipped," "OTP code," "appointment reminder." You instantiate the service once with credentials, call a send()-style method with recipient + message, and log the returned message ID.

// conceptual wrapper — not shipped by the bundle
$skebby = new SkebbyClient(config('services.skebby.username'), config('services.skebby.password'));
$skebby->send('+393331234567', 'Your order has shipped.');

Implementation Patterns

Wrap, don't fight the bundle. Create app/Services/Sms/SkebbySmsService.php that owns the client lifecycle and exposes a small interface (send, sendBulk, getCredit). Bind it in a SkebbyServiceProvider reading from config/services.php. This is the seam where a future migration away from the abandoned bundle is a one-file change rather than a repo-wide rewrite.

Notification channel. The idiomatic Laravel pattern is a custom notification channel:

// config/services.php
'skebby' => [
    'username' => env('SKEBBY_USERNAME'),
    'password' => env('SKEBBY_PASSWORD'),
    'sender'   => env('SKEBBY_SENDER', 'MyApp'),
    'type'     => env('SKEBBY_TYPE', 'basic'),
],

// app/Notifications/Channels/SkebbyChannel.php
public function send($notifiable, Notification $notification)
{
    if (! $to = $notifiable->routeNotificationFor('skebby')) return;
    $this->skebby->send($to, $notification->toSkebby($notifiable)->message);
}

Then via() returns 'skebby' alongside mail/database. This gives you per-user opt-out, rate limiting, and logging for free — all things the raw bundle does not provide.

Queue everything. SMS is a slow, external, occasionally-failing dependency. Make SMS notifications implements ShouldQueue, or dispatch a SendSms job with retry/backoff. The bundle's HTTP layer is synchronous and will otherwise block web requests, often for seconds when Skebby's API is degraded.

Bulk and templating. Skebby supports CSV bulk uploads and templated/placeholder sends (e.g. #NAME#). If you need volume, do not loop send() — batch recipient arrays in one call. Keep templates in your own config/DB and interpolate before handing to the bundle, so message content stays testable and version-controlled.

Testing. Fake the service, not the bundle. Bind a FakeSkebbySmsService that records calls so Http::assertSent style assertions work without hitting Skebby. Never let a test suite touch the real gateway — it costs real money per message and can trigger abuse flags.

Log every outbound message. Persist to, message, provider_id, status, cost, sent_at in your own table. The bundle will not do this, and reconciling billing without it is painful.

Gotchas and Tips

  • The bundle is effectively dormant. Empty stars, zero dependents, and Bitbucket hosting (with a .git URL that predates most current Bitbucket usage) mean you are likely the only person running it. Treat every dependency bump, PHP version bump, and Symfony component in its composer.json as a potential breakage with no upstream fix incoming. Pin it, and be ready to vendor the source.
  • No Laravel service provider. You cannot php artisan vendor:publish anything here. Expect to hand-port the Configuration.php tree into config/services.php and hand-wire the client. Do not assume Illuminate\Support\ServiceProvider exists in the package — it won't.
  • Skebby credentials are environment-specific. Sandbox/test credentials differ from production and behave differently on billing. Confirm which host the bundle targets; if it's hardcoded to the production endpoint, add a config override for the base URL so you can test against the sandbox.
  • Character encoding and GSM-7. Skebby charges by segment (160 GSM-7 / 70 UCS-2 chars). Emoji, accented characters, and smart quotes silently push you from single-segment to multi-segment SMS. Sanitize or explicitly count and split before sending; don't trust the provider to warn you.
  • Phone number format. Skebby expects E.164 (+39...). Laravel stores almost anything. Normalize at the channel boundary — a validator plus a formatter (e.g. propaganistas/laravel-phone) prevents a whole class of silent "message accepted, never delivered" tickets.
  • Delivery receipts are asynchronous and separate. A 200 response from the send call is acceptance, not delivery. If you need delivery confirmation, you'll need to build the callback/webhook handling yourself — the bundle almost certainly doesn't provide it, and the Skebby docs' webhook schema is the source of truth.
  • Credential handling. The Symfony config likely wants plain credentials in YAML. In Laravel, pull from env() / secrets manager only, and never commit services.skebby values. Rotate on any leak — Skebby accounts are routinely abused for SMS pumping fraud if credentials escape.
  • Extension points you actually have: (1) the injected HTTP client if the bundle accepts one, (2) subclassing the service to override the send method, (3) replacing the service entirely via your container binding. Given the maintenance risk, favor (3) long-term and keep the vendor code isolated behind your SkebbySmsService interface.
  • Cost guardrails. Add a per-user and per-day send cap in your wrapper, plus an internal enabled flag per environment. SMS pumping is the single most expensive failure mode of an SMS integration, and this package gives you no protection against it.
  • Before production, verify two things manually: that the sender ID is approved for the destination country (Italy's rules differ from the US), and that your account has the basic vs classic API level the bundle was written against. A silent 200 with a -- credit response is the classic symptom of wrong credentials against the wrong endpoint.
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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums