laravel-notification-channels/google-chat
Send Laravel notifications to Google Chat with this dedicated channel. Post messages to Google Chat spaces via incoming webhooks using a simple, familiar notification API—no custom HTTP code required.
Architecture fit. Unchanged. The package remains a thin adapter over Laravel's first-party notification system: a channel class wired through via(), a fluent message builder returned from toGoogleChat(), and webhook resolution via routeNotificationForGoogleChat(). It composes with existing Notifiable models, queues, and event/listener flows and introduces no competing abstraction. It is an outbound HTTP edge, not a subsystem.
Integration feasibility. Still low effort once the compatibility gate is cleared. The integration work itself is unchanged — composer require, a via() entry, a builder method, a webhook URL. But v4.0.0 is a breaking release that changes the prerequisite, not the work: it drops PHP 8.1/8.2 and Laravel 9/10/11, and adds PHP 8.4/8.5 and Laravel 13. Confirm composer.json declares PHP 8.3+ and Laravel 12+ (inferred from the drop/add lists — verify, do not assume) before the half-day spike is even schedulable.
Technical risk. The protocol risk is unchanged; the package-level risk profile shifts in two directions at once.
Key questions to resolve before committing.
composer.json in v4.0.0 declare PHP 8.3+ and Laravel 12+? Which exact constraints — and is Laravel 12 still in the matrix?3.3.0...v4.0.0 — if it's metadata only, the runtime behaviour risk of upgrading is near zero once compatible.NotificationFailed dispatch; per-notifiable routing to multiple spaces; testing helpers and whether it uses the fakeable Http client.Stack fit. Native, unchanged. Recommended posture is still secondary delivery channel: PagerDuty/Slack remain the paging path; Google Chat carries low-severity ops signals, deployment events, and chatops.
Migration path. There is no data migration — this is net-new capability — but there is now a version migration decision:
^3.3 and accept an out-of-support dependency with a fork contingency, or (b) sequence the Laravel/PHP upgrade first and adopt v4 after. Do not adopt v4 as a forcing function for a framework upgrade unless that upgrade was already planned.
Whichever path, keep wrapping the builder in an internal factory (App\Support\ChatMessage) so payload construction and the eventual v3→v4 or package→first-party swap touch one file, not dozens of notification classes.Compatibility. This is now step zero rather than a verification step. Check three things concretely: the PHP constraint against the runtime image; the Laravel constraint against our framework line; and whether the channel still uses Laravel's HTTP client so Http::fake() remains a valid test seam. Also confirm the CI matrix actually passes on Laravel 12 stable and not only on 13.
Sequencing.
composer.json and the CI matrix. Confirm PHP/Laravel constraints against our baseline. If incompatible, stop and decide pin-vs-upgrade before any engineering time is spent.3.3.0...v4.0.0. If it is constraints and CI only, record that and treat runtime risk as equivalent to 3.3.0.ShouldQueue on every notification using the channel; confirm failures surface as events.Do not make this the sole path for anything a human must see within minutes.
Maintenance. Improved on cadence, worsened on churn. The v4.0.0 cut is evidence of an engaged maintainer tracking current PHP and framework releases, which answers the prior abandonment concern better than the star count did. The trade is a higher upgrade cadence: one major in this release dropped five support targets, so budget for a version bump roughly annually rather than treating this as install-and-forget. Still no vendor SLA, still pin the version, still accept fork as the contingency. Add one new line item: a written decision on the 3.3.x pin if any service cannot reach Laravel 12 — including who owns the fork if that line goes quiet.
Support. Internal burden stays low but lands on the platform team, and now includes a version question. Extend the runbook to distinguish: incompatible-dependency install failure (Composer constraint), revoked webhook (4xx), rate limit (429), transient (5xx), and policy block (delivery succeeds to Google, message never appears). Add a note recording which services are on 3.3.x versus 4.x so triage doesn't chase a bug already fixed — or already removed — in the other line.
Scaling. Unchanged. Throughput is bounded by Google's per-webhook rate limits, not our application. Keep the channel on a dedicated queue so a throttled Google endpoint cannot starve transactional mail. Retries remain our responsibility; verify the major didn't silently change retry or timeout defaults — a constraint-only release won't have, but confirm from the diff rather than the release note.
Failure modes. Re-ranked for this release:
Ramp-up. Unchanged. A Laravel-fluent engineer is productive in under a day; the via() / to{Channel}() contract is a couple of hours for everyone else and transfers to every other channel. Add a small, non-obvious cost: engineers must now know which major the service is on, so record the constraint and the reason in the repo rather than leaving it to composer.json archaeology.
Recommendation: Trial, conditional on the compatibility gate. On Laravel 12+ / PHP 8.3+, v4.0.0 is a straightforward adopt for non-critical, internal-facing notifications behind a queue, with a first-party fallback identified in advance — the release improves confidence in maintainer engagement without changing the runtime risk picture. On Laravel ≤11, treat this as a dependency-strategy decision first: pin ^3.3 with a named fork owner, or schedule the framework upgrade, and do not adopt for paging or compliance-relevant alerting in either case until the error-surfacing and card-version questions are answered.
How can I help you explore Laravel packages today?