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.
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:
DependencyInjection/ — the config tree tells you exactly which credentials and options the bundle expects (username, password, sender, type, delivery mode, etc.).Services/ or Skebby/) — this is your only integration surface; the rest is Symfony plumbing.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.');
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.
.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.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.+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.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.SkebbySmsService interface.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.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.How can I help you explore Laravel packages today?