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

Slack Api Laravel Package

vluzrmos/slack-api

A Laravel wrapper for the Slack API that provides a simple facade and configuration for sending messages, managing channels and users, and working with incoming webhooks, making Slack integrations clean and idiomatic in PHP applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. vluzrmos/slack-api is a thin, opinionated convenience layer: a Laravel/Lumen service provider, a facade, a published config file holding a token, and a dynamic passthrough (__call-style) onto Slack Web API endpoint names (chat.postMessage, users.list, conversations.history). It is not an SDK with typed resources, and it is not an app framework. That means it fits exactly one use case well: a Laravel monolith that already knows which Slack methods it wants and wants to avoid hand-rolling Guzzle calls plus a container binding. It does not fit modern Slack app construction — Events API subscriptions, request signing verification, OAuth v2 install flows, interactivity/slash-command endpoints, Socket Mode, or Block Kit composition. Any team expecting "Slack integration" in the 2026 sense will be disappointed by the scope, not by the code.

Integration feasibility. Mechanically trivial: one composer require, one config publish, one env var. The real feasibility question is version compatibility, and that is where a 99-star, zero-dependent package raises flags. Two concrete things to verify in a spike before any planning commitment:

  1. Framework constraints — whether the service provider and facade declarations are compatible with the target Laravel major (Laravel 9/10/11 tightened return types and dropped legacy Illuminate contracts that older wrappers rely on).
  2. Guzzle pinning — wrappers of this vintage frequently constrain Guzzle to 5.x/6.x, which will conflict with the Guzzle 7.x that most current Laravel stacks and other SDKs pull in. A single transitive conflict makes this a fork-or-replace decision immediately.

Technical risk. Ranked by likelihood × impact:

  • Maintainer/bus factor (high): single-author package, negligible dependent base, no visible commercial backing. The 2026-02-26 release date should be treated as unverified — confirm it is a substantive release (Laravel/PHP support bump) rather than a metadata or tag artifact. A recent timestamp is not the same as active maintenance.
  • Dynamic method surface (high): passthrough wrappers defer failures to runtime. No IDE/static signal that files.upload was sunset or that a parameter was renamed. Every Slack-side deprecation becomes a production error rather than a compile-time one.
  • Legacy auth assumptions (high): the package predates granular scopes and bot-token-first design. Legacy workspace tokens were deprecated in 2020; confirm the wrapper supports OAuth v2 tokens and does not assume a single account-wide token.
  • Error semantics (medium): Slack returns HTTP 200 with {"ok": false, "error": "..."}. Wrappers that only surface Guzzle exceptions will silently swallow failures. Confirm whether ok:false throws.
  • Rate limiting (medium): no evidence of 429/Retry-After handling or tiered throttling. Slack penalizes repeated 429s, so this is a production-stability gap, not a nicety.
  • Security hygiene (medium): token stored in published config; verify it reads from env, is excluded from config:cache leakage paths, and that the wrapper does not log request bodies (tokens in URLs/headers).

Key questions for the spike. Which Laravel and PHP versions are declared in composer.json? Which Guzzle constraint? Does it throw on ok:false and on 429? Are timeouts configurable? Is there a test suite and CI badge, or only README examples? Does it support chat.postMessage against a bot token with chat:write, or only legacy tokens? Who has commit rights, and is there a security disclosure path? What is the actual code size if we have to fork it?

Integration Approach

Stack fit. Adopt only in the narrow band where it wins: a Laravel/Lumen service that needs outbound Slack messaging plus a handful of reads, on a framework version the package verifiably supports. For outbound-only notifications, Laravel's first-party laravel/slack-notification-channel is the default choice — better maintained, webhook and bot-token support, and it composes with the Notifiable/Notification system you already have. Reach for this package only when you need broader Web API coverage (channel listing, user lookup, history) and want it behind a facade.

Explicitly out of scope: using it to build a distributable Slack app. That needs OAuth v2, signing-secret middleware, and an events endpoint — all of which you would write yourself, at which point the wrapper contributes little.

Migration path. Design the integration so the package is replaceable in a sprint, not a quarter:

  • Define an internal port — a SlackClient interface with the 3–5 operations you actually need.
  • Implement it as an adapter over this package. No facade calls, no Slack:: static calls, and no package types in domain or application code. This is the single highest-leverage decision in the whole assessment: the wrapper's value is convenience, and its risk is abandonment, so keep the blast radius at one file.
  • If compatibility fails at step one, or the fork exceeds ~a day of work, swap the adapter for a direct Guzzle or Saloon client. The method surface is small enough that this is a routine substitution.

Compatibility and sequencing.

  1. Spike (1–2 days): in a sandbox workspace, install, publish config, post to a test channel, confirm error semantics and 429 behaviour, record the exact Laravel/PHP/Guzzle matrix.
  2. Contract + adapter (2–3 days): internal interface, config-backed token per environment, secrets in the vault not .env files in the repo.
  3. Harden (2–3 days): explicit timeouts, retry with Retry-After respect, queue the calls off the request path, redact tokens and payloads from logs.
  4. Observability and rollout (1–2 days): structured logs on ok:false, dead-letter queue for failed sends, a dashboard panel for send success rate and 429 count, then enable behind a flag for one non-critical flow before broadening.

Pin an exact version — no caret ranges on a package with this maintenance profile.

Operational Impact

Maintenance. Assume you own the code, not that you consume it. Budget a small standing allotment for: re-validating on every Laravel major upgrade, tracking Slack method deprecations, and token/scope changes. Keep a fork of the repository internally so a security patch or a Slack API change is a branch, not a blocked quarter. Treat the version pin as a dependency-review gate item each cycle.

Support. No vendor, no SLA, no commercial escalation path. Support is entirely internal: designate one owner, document the token rotation runbook and the scope list in the repo, and record the spike findings so the next engineer does not repeat the evaluation.

Scaling. Throughput is governed by Slack's per-method tier limits, not by this package. The wrapper almost certainly does not queue or throttle, so the sending service must own a token bucket per method tier and push calls onto queue workers. Synchronous calls in a request path will add Slack's latency (and timeout exposure) directly to user-facing response times — always dispatch to a job. Cache channel lists and user lookups; users.list and conversations.list are paginated and expensive if called per message.

Failure modes to instrument. ok:false returning HTTP 200 and being mistaken for success; 429 without backoff escalating into extended penalties; invalid_auth/token_revoked after a rotation the app did not pick up; not_in_channel when a bot is not invited; network timeouts blocking a web request; oversized or malformed payloads rejected at the API boundary; and token leakage into logs or exception traces.

Ramp-up. The wrapper itself is under an hour for a mid-level Laravel developer. The real cost is Slack platform literacy — token types, granular scopes, rate tiers, Retry-After semantics, and what "app" means versus "webhook" — call it 2–3 days including a security review of token handling and log redaction. Fold that into the spike estimate rather than discovering it during hardening.

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.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin