CW Bridge now fans out to Microsoft Teams
The original CW Slack Bridge shipped with Slack as the only destination. That covered maybe 40% of MSPs. Most of the rest are Microsoft shops — Teams for everything, Slack never opened. This update adds Teams as a first-class output channel.
What changed
A new teams_default config key accepts a Teams incoming-webhook URL. When set, the engine fans out every non-muted ticket event to Teams in parallel with Slack. Slack routing rules still apply — per-company and per-board overrides, mute filters, priority channels — and muted events are muted on both platforms. Teams gets a flat "all non-muted events to one channel" model for v1, which is how most new installs will want to start.
The Teams messages use MessageCard format: a colour-coded card (blue for new, amber for status changes, purple for reassignments, grey for updates) with a facts table showing Status, Priority, Board, and Assigned To, plus a one-click "Open in CW" button.
No app registration or OAuth required. MSPs paste a connector webhook URL from Teams channel settings — the same flow that's been standard in Teams integrations for years.
Digest mode for Teams
The bridge already had digest_threshold to collapse Slack bursts into a single message. Teams gets its own teams_digest_threshold setting. A dispatcher who bulk-reassigns 20 tickets at shift start triggers 20 individual Slack messages (or one digest above threshold) and one Teams card. The two thresholds are independent because Teams MSPs often want a denser card at a lower threshold than the Slack power users who want per-event channel history.
The product case
Adding Teams triples the addressable market. The bridge is already built around ConnectWise + Slack; the bridge-to-Teams path reuses every existing component (poller, router, engine, state) and only adds a new output format. The incremental complexity is a single 67-line module.
MSPs that use both Slack internally and Teams with clients now get a single install that covers both. MSPs migrating from Slack to Teams don't have to pull the bridge to switch.
Config
# existing Slack config unchanged
default: "https://hooks.slack.com/services/..."
digest_threshold: 5
# add Teams
teams_default: "https://outlook.office.com/webhookb2/..."
teams_digest_threshold: 5
Test coverage
55 new tests across three files: sender (15), formatter (26), engine integration (14). 140 total, all green. The engine tests verify that Teams send failures block cursor advancement the same way Slack failures do — a flaky Teams webhook won't silently drop events.
Branch: cw-slack-bridge:overnight/2026-06-12-teams-channel.