symfony/slack-notifier
Symfony Slack Notifier integrates Slack messaging into Symfony's Notifier component. Send chat messages via a simple DSN with your bot token and channel, and add interactive Block Kit elements like buttons, sections, images, and dividers using SlackOptions.
SlackSentMessage exposes message and channel IDs, and UpdateMessageSlackOptions lets us edit a message in place. This directly enables "single evolving card" UX for deploy progress, incident status, or long-running job tracking — one message that mutates rather than twelve that scroll away.threadTs() supports reply-in-thread, which is the difference between an incident timeline and an unreadable channel. This should factor into any on-call or incident-response roadmap item.postAt() supports digests, standup reminders, and timezone-aware nudges without building a scheduler-to-Slack shim.Chatter/ChatMessage abstraction. That is a strong argument for standardizing on Notifier: adding Teams, email, or SMS later is a config change, not a rewrite.Adopt when:
symfony/notifier. In that case this is effectively free — same versioning, same security policy, same LTS guarantees.Look elsewhere or plan extra work when:
For executives: This is a small, free (MIT), Symfony-maintained component that lets our product post rich, actionable messages into Slack — approvals, alerts, incident updates — without us building or maintaining a Slack integration ourselves. It is backed by the same team and release/security process as the framework we already run. Risk is contained: it sits at the edge of the system, touches no business logic, and can be swapped for another transport or vendor with limited blast radius. Cost is roughly days of integration, not a workstream.
For engineering: Configuration is a single DSN (slack://TOKEN@default?channel=...) with bot token auth, and channel names/IDs validated at config time. Message content is composed with typed block builders (SlackSectionBlock, SlackActionsBlock, SlackHeaderBlock, SlackContextBlock, SlackDividerBlock) and SlackOptions, so no raw Block Kit JSON in application code. We get interactive buttons with confirmation dialogs, threaded replies, message editing via stored message/channel IDs, and scheduled delivery. It plugs into symfony/notifier, so the same ChatMessage pipeline extends to other channels later. Two caveats to design around: it is send-only (no inbound events or interactivity handlers), and 8.x requires PHP 8.4 — we should pick the major deliberately. On Laravel we would be adding Notifier alongside Laravel's native notification channel; that decision needs a short spike before we commit.
How can I help you explore Laravel packages today?