skrepr/teams-connector-bundle
A Symfony bundle for connecting your PHP application to Microsoft Teams. It provides configuration and services for sending notifications and channel messages, so you can wire Teams into your app without building the integration yourself.
What this package is. skrepr/teams-connector-bundle is a Symfony bundle that wraps skrepr/teams-connector, a small library for posting messages/cards to Microsoft Teams channels (typically via incoming webhook / Office 365 Connector URLs). v1.1.0 is a maintenance release: it bumps the underlying connector to 0.3.0 and extends the CI matrix to Symfony 6.2 and PHP 8.2.
Architecture fit. This is a Symfony bundle, not a Laravel package — a material distinction for our stack. It ships a DI extension and service wiring that Laravel will not consume. In a Laravel codebase we would take a dependency on skrepr/teams-connector directly and bind a thin wrapper service in our container, treating the bundle as reference implementation rather than an installable artifact. Confirm this framing before sizing the work; it changes the integration from "composer require + config publish" to "small adapter we own."
Integration feasibility. Low effort. The surface area is narrow (build payload, POST to webhook URL, handle response), there is no persistence, no queue dependency, and no auth handshake beyond the webhook secret. The v1.1.0 PHP 8.2/Symfony 6.2 test coverage is a positive signal for our runtime, though Symfony-version coverage does not validate Laravel-version compatibility.
Technical risk.
0.3.0 — still pre-1.0, meaning semver permits breaking changes on any minor bump. A 0.4.0 could break us without a major-version warning. Pin exactly and gate upgrades behind our own integration tests.teams-connector 0.3.0. We cannot assess blast radius from the notes alone and will need to read the upstream diff.@erkens) with a small dependency. Acceptable for a notification side-channel; not acceptable for anything on a critical path.Key questions for the maintainer / our team.
teams-connector 0.3.0? Is the public API of the bundle unchanged?Stack fit. Treat this as a reference implementation, not a drop-in. Our target is Laravel; the deliverable is a small internal TeamsNotifier service wrapping skrepr/teams-connector, registered as a singleton, configured via a services.teams.webhook_url entry and a queued job for outbound sends. Budget roughly 1–3 engineer-days including tests — the wrapper and its tests are the bulk, not the dependency.
Migration path. Greenfield: no migration. If we already post to Teams via ad-hoc Http::post() calls scattered through the codebase, consolidate behind the new notifier in a single PR and delete the scattered calls, so the transport swap (should connectors be retired) becomes a one-file change.
Compatibility. Verify PHP 8.2+ on our runtime (matches the new test matrix) and confirm the constraint set resolves against our existing illuminate/* versions — the bundle's own symfony/* constraints are irrelevant to us, but the underlying connector's guzzlehttp/guzzle constraint is not. Lock the connector to an exact patch (0.3.0) rather than a caret range.
Sequencing.
teams-connector 0.3.0 diff, confirm transport mechanism and API stability, answer the platform-risk question.Decision gate. If step 1 finds the library is Connector-only with no Workflows/Graph path, escalate before building — we would rather own a ~150-line HTTP client against the supported endpoint than wrap a dependency that may be orphaned.
Maintenance. Low ongoing cost if the wrapper is thin. The real maintenance trigger is upstream 0.x churn and Microsoft platform changes, not our own code. Assign an owner and put a quarterly review on the calendar to check for a 1.0 release and for Teams connector deprecation news.
Support. Expect near-zero inbound support load — this is an outbound-only notification path with no user-facing surface. The operational question is "did the message arrive," which is answered by logging the webhook response code and body per send.
Scaling. Effectively free at our volume: one outbound HTTPS request per notification. Teams webhooks are rate-limited (roughly four messages per second per connector), so high-fanout alerts must be batched or throttled. Route sends through a queue with a rate limiter rather than calling inline from request handlers — this also keeps a slow Teams endpoint from adding latency to user requests.
Failure modes.
1 on success and a non-2xx or error body otherwise; naive if ($response->ok()) checks can mask failures. Parse the body.Ramp-up. A mid-level engineer unfamiliar with the codebase should be productive in under a day — the wrapper is small and self-contained, and the upstream README covers the payload format. The non-obvious knowledge to document is the failure-detection behavior (body parsing, not status code) and the webhook rotation runbook; both should live in the repo, not in someone's head.
Recommendation. Proceed with the spike and the thin-wrapper approach. v1.1.0 itself is a low-risk, positively-signaled release (expanded PHP 8.2 / Symfony 6.2 coverage) and does not change our plan — but it also does not resolve the one question that matters, which is the long-term viability of the Teams Connector transport. Resolve that before committing beyond the spike.
How can I help you explore Laravel packages today?