serwersms/serwersmsbundle
SerwerSMSBundle is a Symfony bundle for integrating the SerwerSMS API, providing configuration and services to send single or bulk SMS, manage contacts and groups, and handle delivery reports within Symfony applications.
Framing correction up front. The artifact is serwersms/serwersmsbundle, a Symfony bundle (declared support: Symfony 2, 3, 4), not a Laravel package. It has no service provider, no facade, no publishable config, and no Illuminate coupling — Symfony bundles are discovered through AppKernel/bundles.php and wired via DependencyInjection\Extension plus YAML service definitions. None of that wiring transfers to Laravel. The only reusable asset is the underlying SerwerSMS API v2 client code and the endpoint/payload knowledge it encodes.
Architecture fit — poor as a dependency, adequate as a reference. SMS delivery is an outbound side-effect adapter: exactly the kind of thing that should sit behind a narrow, swappable interface (SmsGateway::send(...)). This bundle instead exposes a concrete provider-bound service, so adopting it would couple your domain code to SerwerSMS with no seam for a fallback provider, no test double boundary, and no cost/segment abstraction. For a TPM, that is the central architectural objection — the package adds coupling without adding capability.
Integration feasibility — technically trivial, legally/version-wise blocked. Wrapping the vendor client in a ~150–300 line Laravel service provider is a 1–2 day job. The blocker is the dependency graph, not the code: a 2019-05-27 release predates PHP 7.4/8.x support and almost certainly pins php: ^5.6|^7.0 plus an older Guzzle. Laravel 9 requires PHP 8.0, Laravel 10 requires 8.1, Laravel 11 requires 8.2. Composer will refuse the install or the code will emit deprecations/fatals on 8.x. That alone ends the "adopt the bundle" path.
Technical risk — high and concentrated.
username/password in YAML with no rotation, no per-tenant scoping, and no secret-manager integration — a poor fit for a Laravel app that should read from env/Vault.Key questions to close before any decision.
composer.json constraints — PHP, Guzzle, symfony/*? Does a --ignore-platform-reqs install actually run on PHP 8.2?serwersms/php-client or equivalent) published and maintained separately? That is the only component worth reusing.Verdict: Do not adopt as a production dependency. Treat the repository as API v2 documentation and build a native adapter. Score the opportunity low (~2/10) on maintenance and fit; moderate on "cheap to reimplement," which is the actual takeaway.
Stack fit. If the target is Laravel (8+), the recommended shape is:
App\Contracts\SmsGateway — one method plus a SmsResult value object (message id, segments, cost, provider status).App\Services\Sms\SerwerSmsGateway — implements the contract using Laravel's Http facade against API v2 endpoints. ~200 lines, no third-party dependency.App\Providers\SmsServiceProvider — binds the contract to the implementation from config/sms.php.config/sms.php — driver, username, password, sender, format, timeout, retry, all sourced from env().app/Jobs/SendSms.php — queued, $tries = 3, exponential backoff, failed() handler that alerts.If you insist on reusing the vendor SDK, install it via a VCS composer repository pinned to a specific commit, add platform constraints yourself, and wrap it behind the same contract so it can be swapped in a day.
Migration path (works whether or not you ever touch the bundle).
Http::fake().Compatibility. Target PHP 8.2/8.3 and the Laravel version you already run; verify the provider client supports TLS 1.2+, HTTP/2, and a configurable timeout. If the app is on Symfony 5.4/6/7 instead, the same guidance applies: skip the bundle, register the SDK as a service manually. In both cases, pin and own the transport.
Sequencing rationale. Build the interface first even though there is only one provider. Provider-swapping in SMS is a real, recurring event (pricing changes, deliverability, regulatory), and the interface is the only cheap insurance available here. Do not migrate an existing working integration onto this bundle under any circumstances — the migration has downside and no upside.
Maintenance — you will own it. Fork-and-own is the realistic outcome: expect to maintain a vendored copy or a from-scratch adapter. Budget roughly 1–3 engineer-days per year for routine dependency and API-shape upkeep, plus a hard fork event if SerwerSMS changes API versions. This is not a "install and forget" dependency; it is a code snippet with a composer.json.
Support. There is no support contract for the bundle. SerwerSMS's support covers the HTTP API — authentication failures, account limits, sender-name registration, delivery reports — not this Symfony wrapper. Escalation for bugs in the wrapper terminates at a GitHub issue on a repository with 2 stars.
Scaling. Volume is bounded by the provider's rate limits and your budget, not by your infrastructure. Two operational realities:
Failure modes to design against.
sent.Compliance. Phone numbers are personal data under GDPR. A Polish provider is a positive on EU data residency, but you still need a data-processing agreement, a retention policy for message bodies and numbers, and — for marketing traffic — documented consent under Polish electronic-communications rules. Marketing and transactional traffic should be separable in config so consent enforcement is not a code change.
Ramp-up. Low. A Laravel developer reaches first-send in under a day using the bundle as a spec. The learning cost is negligible; the risk is entirely in the absence of maintained code, tests, and observability scaffolding — all of which you supply.
Instrumentation to ship with v1: send latency p50/p95, provider error rate by code, DLR delivery rate, segments per message, spend per day, queue depth and dead-letter count. If those six metrics exist, this integration is operationally safe regardless of which client library sits underneath it.
How can I help you explore Laravel packages today?