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

Intercom Laravel Package

laravel-notification-channels/intercom

Laravel Notification Channels Intercom adds an Intercom channel to Laravel notifications, letting you send messages and updates to users through Intercom from your existing notification classes. Requires Laravel and an Intercom access token.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Unchanged. The package remains a thin adapter over Laravel's native notification system, implementing the send() contract required by Notification::via(). Integration is idiomatic: add IntercomChannel::class to a notification's via() array, implement a toIntercom() payload builder, and resolve the recipient via routeNotificationForIntercom() on the Notifiable model.
  • Still a single-purpose, low-surface-area dependency. It does not alter application bootstrapping, service providers beyond one, or the queue pipeline. Architectural risk is confined to one call site per notification.
  • It still sits underneath Intercom's own PHP SDK (intercom/intercom-php), so the real coupling is transitive — we inherit the SDK's PHP and Guzzle constraints, not just the channel's. v1.4.0 does not change this, and the release notes give no indication the SDK constraint was bumped.

Integration feasibility

  • Straightforward, and marginally improved by v1.4.0: the framework constraint now demonstrably includes Laravel 9, which removes the "will it install at all" question for modern-but-not-current Laravel apps. composer require laravel-notification-channels/intercom, publish config, set the access token via environment, map Notifiable models to Intercom user_id or email. Spike still under a day.
  • The hard part remains identity mapping, not code. Intercom requires a stable, pre-existing user_id or email; our user records must be reconciled with Intercom contacts, and email-only matching inherits email-change and merge semantics that Intercom owns and we cannot audit. v1.4.0 does not touch this, and the changelog shows no new routeNotificationForIntercom behavior or identity-verification support.

Technical risk

  • Primary risk: staleness — partially, not materially, reduced. v1.4.0 is the first release since v1.3.0 (2023-01-27), which is a genuine positive signal: the repo is not archived, a maintainer merged a PR, and a new contributor appeared. But the change is a chore plus a CI style pass. It is not evidence of a maintained release cadence, and it does not lift the package out of single-maintainer status. Reclassify maintenance posture from "unclaimed" to "minimally maintained — reactive, low-cadence, no roadmap." The practical planning assumption does not change: we own it in production.
  • Secondary risk: API drift — unchanged and now more pointed. The release contains nothing about the Intercom-Version header, endpoint coverage, or the upstream SDK version. A 2023-era wrapper with a 2024+ release that still does not pin a version header is a latent production break with no upstream patch path. Intercom's history of breaking, non-negotiable changes (v1 → v2, leads deprecation, contacts unification) is the exposure we are underwriting.
  • Tertiary risk: silent failure — unchanged. No error-handling changes are described. Notification channels commonly swallow or under-report upstream errors; an Intercom 4xx (contact not found, unverified domain, rate limit) may surface as a no-op. Still the worst failure class for customer-facing messaging, and still unverified by this release.
  • New minor risk: framework coverage is now narrower than "current". The headline feature is Laravel 9 support. That is a meaningful step up from the prior state, but it also makes the gap explicit: nothing here asserts Laravel 10, 11, or 12 compatibility, and if the constraint bump raised the PHP floor to ^8.0 (likely, since Laravel 9 requires it), that is a lockfile consideration for any app still on PHP 7.4.
  • The very high opportunity score against a very low adoption score remains the tell: genuine need, no credible incumbent, and the incumbent that does exist is now merely alive rather than healthy.

Key questions

  1. (Partially answered) Framework constraints now cover Laravel 9. Still open: Laravel 10/11/12 and PHP 8.3 — was the composer.json bump additive or did it raise the PHP floor and drop older Laravel lines?
  2. (Open) Does the channel expose or pin Intercom-Version, and can we override it per-request? Nothing in 1.4.0 indicates a change.
  3. (Open) Does the upstream intercom/intercom-php constraint move in 1.4.0, and is that SDK actively maintained? The release notes are silent.
  4. (Open) Does it support the endpoints we need — messages, events, tags, custom attributes — or only one of them?
  5. (Open) Does it implement identity verification (HMAC) for Messenger, or only server-side REST calls?
  6. (Open) On API error, does it throw, log, or return silently? Is ShouldQueue respected and are retries bounded? No described change.
  7. (New) Is a chore-and-lint release a signal of resumed cadence, or a one-off merge? One data point cannot distinguish these; do not plan on the former.

Integration Approach

Stack fit

  • Effectively unchanged in shape, improved at the margin: now a confirmed fit for Laravel 8–9-era apps already using database/queue notifications. For Laravel 10+, still assume a fork or constraint patch before it installs cleanly — v1.4.0 does not claim support there.
  • Correct placement is unchanged: notification classes own the payload, the channel owns transport. Do not let Intercom-specific payload shapes leak into domain services.

Migration path

  • Do not consume the package directly at call sites. Introduce our own IntercomTransport interface with one implementation delegating to the package. This converts "abandoned dependency" from an emergency into a swap — and v1.4.0 is a good reminder that a dormant package can still publish an unexpected diff, so the blast radius should be one class either way.
  • Fork the upstream repo into our VCS on day one if we adopt it in production. The package is small enough that ownership cost is measured in hours, not sprints. Now fork from the v1.4.0 tag rather than v1.3.0 — take the Laravel 9 constraint work for free and avoid rebasing it later.
  • Pin the fork to a known-good Intercom API version rather than floating on whatever the upstream SDK defaults to. The release gives no reason to believe this is handled upstream.

Compatibility

  • Re-validate the full lockfile delta after the bump, not just the channel: intercom/intercom-php, Guzzle, and PSR packages are the actual constraint risk. Because 1.4.0 touches framework constraints, the PHP floor is the thing to check first.
  • Confirm the diff is truly chore-only before trusting it: read the merged PR (#14) and composer.json, not the changelog summary. "laravel 9 support" could mean an additive |^9.0 or a narrowing rewrite.
  • Test against an Intercom sandbox workspace with production-shaped data before trusting the happy path. Intercom's error semantics differ meaningfully between plans and workspace settings (e.g., domain verification for outbound email).
  • Confirm behavior under Laravel's notification fakes so we can assert dispatch in CI without live API calls. Nothing in this release changes that requirement.

Sequencing

  1. Re-pin the spike to v1.4.0; read PR #14 and the composer.json diff; re-run the install against our target Laravel/PHP matrix and record exactly which versions pass.
  2. Build the transport abstraction and a contract test suite (success, 404 contact, 429, 5xx, timeout) — this is still the highest-value work whether or not the package improves.
  3. Wrap the lowest-stakes notification first (internal/admin-facing or lifecycle onboarding), not transactional or billing-adjacent messaging.
  4. Expand to additional notification types once error telemetry is trustworthy.
  5. Revisit buy-vs-build annually. A native Laravel HTTP-client implementation of three Intercom endpoints remains plausibly cheaper than perpetual fork maintenance — one maintenance release does not change that arithmetic, because it does not address API versioning or error semantics, which are the actual cost drivers.

Operational Impact

Maintenance

  • Assume we own it. v1.4.0 slightly improves the outlook — the repo accepts outside PRs and the maintainer is responsive enough to merge and re-release — but the cadence is measured in years, so a recurring dependency-review line item stays budgeted. Dependabot alerts still need human decisions, not merge-and-forget.
  • The fork diverges on the first Intercom API change. That is acceptable and bounded — the codebase is small — but it must be staffed, not assumed. Forking from v1.4.0 rather than v1.3.0 reduces the immediate divergence.
  • MIT license is clean; no legal review beyond standard OSS attribution. The new contributor is a one-line changelog credit, not a governance or provenance concern.

Support

  • No vendor support, no SLA, no security contact. Our escalation path is the Intercom REST documentation plus our own fork history.
  • Intercom-side support will not assist with a community channel's behavior, so any incident triage starts with us proving whether the failure is in the channel, the SDK, or the API. A recent release does not create a support relationship.

Scaling

  • Unchanged. The binding constraint is Intercom's per-workspace rate limits and our queue throughput, not the package.
  • Notifications must implement ShouldQueue; synchronous dispatch inside request cycles will couple API latency to user-facing response times and amplify 429s into request failures.
  • Configure queue-level rate limiting and a dedicated queue for Intercom egress so a retry storm cannot starve other jobs. Backoff should treat 429 as expected, not exceptional.
  • Volume assumptions still govern: thousands/day is trivial; at high volume, per-contact API calls become a real cost and latency surface, and batching/event endpoints may be preferable to individual messages.

Failure modes

Mode Symptom Mitigation
Intercom API version drift 4xx across all sends after a platform change Pin Intercom-Version in the fork; alert on error-rate spike
Contact not found / mismatched identity Message silently dropped Explicit throw on 404; monitor send-vs-intent ratio
Rate limiting (429) Queue backlog, retry amplification Dedicated queue, jittered backoff, concurrency cap
Upstream SDK constraint conflict composer update blocked app-wide Fork; pin SDK major; isolate in a dedicated package
Constraint bump regression Package installs but PHP floor rises / older Laravel line drops Read the 1.4.0 composer.json diff; test the full matrix before merging
Unmaintained security advisory No patch path available Fork ownership + monthly advisory review; note that reactive releases may lag advisories
Notification errors swallowed No signal at all Wrap send() in structured logging and metrics

Ramp-up

  • Engineering: low and slightly lower than before — a mid-level Laravel engineer is productive in half a day; the notification API is well-known and the channel is thin. Laravel 9 support removes an install-time yak-shave.
  • Operations: moderate — the real onboarding cost is Intercom workspace configuration (identity verification, domain verification, contact model, rate-limit expectations), not the PHP.
  • Organizational: the decision to adopt still requires accepting a maintenance obligation in exchange for roughly a day of build effort saved. v1.4.0 makes that trade slightly more favorable — the fork starts from a version that installs on a current-ish framework — but it does not change the underlying asymmetry, because the risks we care about (API version pinning, error semantics, endpoint coverage) were not addressed by this release.
  • Recommendation: conditional adopt, unchanged in substance — viable for non-critical lifecycle messaging with a fork taken from v1.4.0 and a transport abstraction in place; not viable as-is for transactional or compliance-relevant messaging given unverified error semantics and no API version pinning. Treat 1.4.0 as a one-off liveness signal, not evidence of a support commitment, and re-evaluate if a 1.5.x lands within the next two quarters.
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.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib