laravel-notification-channels/microsoft-teams
Send notifications to Microsoft Teams from your Laravel app. This channel plugs into Laravel's notification system so you can post rich MessageCard or Adaptive Card messages to Teams channels via incoming webhooks, all through a clean, familiar API.
Feature and roadmap scoping. This package lets a Laravel app push a notification to a Microsoft Teams channel with roughly one notification class and one config entry. That makes "send alerts to Teams" a line item in a sprint, not an initiative — the difference between shipping Teams support this quarter and putting it on a roadmap review.
Build vs. buy. The alternative is building a Teams integration in-house: Azure app registration, OAuth token acquisition and refresh, Adaptive Card JSON schema, webhook throttling (~4 messages/second per webhook), retry and failure handling, and ongoing Microsoft Graph API version churn. That is realistically 4–8 engineer-weeks plus permanent maintenance. Adopting an MIT-licensed channel library collapses this to a day or two of integration work. The buy case here is unusually strong because the work being avoided is undifferentiated — it is plumbing, not product.
Prioritization and addressable market. Most large B2B accounts standardize on Microsoft 365. If your app sends alerts only to Slack or email, "we use Teams, not Slack" is a recurring objection in enterprise evaluations. Teams notifications are cheap to add and can be sequenced as a small enhancement while unlocking a segment that would otherwise require a workaround.
Representative use cases to validate demand against:
Packaging decisions. Teams delivery is a credible checkbox for an enterprise or "integrations" tier. Because the marginal cost is near zero, it is better positioned as a retention/competitive-parity feature than a paid add-on.
Constraint that shapes product scope. This is a one-way, channel-level notification channel. It is not a bot, does not support interactive cards, slash commands, inbound messages, or DMing an individual via Graph. Any roadmap item implying "approve from Teams" or "chat with our app inside Teams" is a different project (Bot Framework + Azure AD app + Graph permissions) and should be scoped and priced separately. Decide this explicitly now so it does not surface as scope creep later.
Adopt when:
Notification system (adoption is essentially a composer require plus a channel in via()).TeamsNotifier interface, and feature-flag it.Look elsewhere or build custom when:
Before committing, run a two-day spike: one real webhook, one high-value alert, one failure scenario (webhook deleted, channel renamed), and confirm the payload format renders acceptably in the Teams client. Low star count and zero dependents are not disqualifying for a thin, well-understood adapter — but they are a reason to verify rather than assume.
To executives — one paragraph: Our customers live in Microsoft Teams, and right now we can't reach them there. This open-source, MIT-licensed Laravel package lets us deliver notifications into Teams channels in about a day of engineering instead of the six-plus weeks it would take to build and maintain the equivalent integration ourselves. There is no license cost and no vendor lock-in — it's a thin adapter we can swap out. It is deliberately limited to one-way notifications, so it satisfies the common "just tell my team something happened" need without committing us to building a Teams bot. Recommendation: approve a small pilot on two or three internal channels, and revisit interactive workflows as a separately scoped investment only if customers ask.
To engineering — the honest version: This removes Graph API, token refresh, Adaptive Card templating and webhook retry work from our backlog. In exchange, we take on a low-traffic community dependency. Mitigations: pin the version, isolate it behind our own notifier interface so a replacement is a one-file change, feature-flag it per tenant, and keep email as the fallback channel. Known limits are one-way delivery and channel-level targeting only — no DMs, no buttons, no inbound. If any of those become requirements, that's a new project, not a config change.
To sales/customer success: "Teams notifications" becomes a demoable checkbox for Microsoft-standardized accounts, at essentially no incremental cost. Position it as delivery to a team channel, not as an interactive Teams app, so we don't over-promise in the room.
How can I help you explore Laravel packages today?