laravel-notification-channels/bearychat
Send Laravel notifications to BearyChat with this channel driver. Post messages to BearyChat webhooks through Laravel's built-in notification system, keeping your team chat in sync with app events using a simple, familiar API.
Build vs. buy — and for this package the answer is unambiguously build. The entire integration is one channel class implementing Laravel's NotificationChannel contract plus a message value object that POSTs markdown/text to a BearyChat incoming webhook: roughly 100–200 lines of glue. The decision this informs isn't "should we adopt this dependency" but "should we scope a small in-house channel instead." At this size, in-house wins on maintenance ownership, security review, framework-version control, and audit posture. A PM can defend that call with numbers, not vibes.
Roadmap sizing for multi-channel chat notifications. If chat/IM delivery is on the roadmap (Slack, Teams, DingTalk, Feishu/Lark, WeCom, Webex), this repo is a reference for scope, not a dependency to adopt. The reusable asset is the pattern: a channel class with send(), a fluent message builder, and a routeNotificationFor*() routing hook. That lets you size each additional chat channel at roughly 0.5–1 dev-day and defend the estimate in planning without re-litigating it each quarter.
Feature triage on BearyChat specifically. 21 stars, zero dependents, archived status, and a low opportunity score all point to BearyChat as a niche, likely declining integration surface. Treat a BearyChat request as a customer- or team-specific integration cost — priced and scheduled as such — not as a platform capability to productize.
Legitimate use cases that still earn a look. China-based enterprise teams already standardized on BearyChat; on-prem/self-hosted webhook targets; internal ops alerting (deploy finished, CI failed, cron missed) where a plain webhook POST is sufficient and rich interactivity isn't required. These are real, but they're narrow — scope them as such.
Supply-chain policy precedent. An archived package with no maintainer is a standing liability line in dependency review. This is a cheap, concrete, hard-to-argue-with example to cite when setting policy on adopting unmaintained packages — useful in the abstract, and more useful when a specific request lands on your desk.
Reframing "just one more channel" requests. The pattern tells you a single channel is cheap to build; the archived-upstream facts tell you the support burden is what you're actually committing to. That shifts chat-channel requests from "one-day build" to "permanent small ownership line" — which is the correct unit for roadmap trade-offs, and the argument that keeps your integration backlog from growing one exception at a time.
Delivery reliability is a product decision, not an implementation detail. The package does not ship retries with backoff, timeouts, rate limiting, idempotency keys, dead-letter handling, or delivery observability. If chat alerts sit anywhere near an on-call path, those are requirements you must own — and owning them is another vote for the in-house channel.
Consider adopting — or, far more likely, forking — only when:
ChatChannel abstraction. The pattern transfers even when the dependency doesn't.Look elsewhere when:
Executives: "This is a small, archived, MIT-licensed adapter — 21 stars, zero dependents — that lets a Laravel app post notifications into BearyChat, a niche team-chat tool. Recommendation: don't take it as a Composer dependency. If a customer or team genuinely needs BearyChat, we implement the same ~150-line webhook integration ourselves in under a day: lower supply-chain risk, nothing unmaintained in our audit, and we control fixes. The real value to us is as a documented pattern for sizing the chat-channel requests already on the roadmap — each one is roughly a half-day to a day of build plus a permanent small ownership line. That's the number to use when we prioritize them."
Engineering: "Treat it as source, not a package. The whole thing is two files — a channel class and a message value object — and you'll read both to debug it anyway. Copy them into app/Notifications/Channels/BearyChat under the MIT header, pin constraints to our supported PHP/Laravel ranges, and delete the dependency. While you're in there: confirm whether send() checks the response status (Laravel's HTTP client doesn't throw by default, so a 400 can complete 'successfully'), add explicit timeout and retry, keep the webhook URL in the secrets manager and out of failed_jobs payloads, queue it on its own lane, and write one contract test asserting the payload shape with Http::fake(). Define a ChatChannel/ChatMessage interface in our app so BearyChat is one implementation among several rather than a special case."
Risk framing for both: the webhook URL is a credential — anyone holding it can post into the channel — and the upstream is archived with no maintainer, so every future framework upgrade is our problem. Vendoring converts an unowned external liability into a small, owned internal asset. That's the entire pitch, and it's short enough to win the room.
How can I help you explore Laravel packages today?