Microsoft Teams
Datafly Signal posts events to a Microsoft Teams channel as MessageCard notifications using a per-channel Incoming Webhook. Useful for routing operational alerts, lead notifications, and high-value order events to the team that owns them.
Alpha integration. Webhook delivery is operational and the default preset covers Lead Submitted, Order Completed, and Signed Up. Adaptive Card payload variants are on the roadmap. Contact your account team for help wiring this to your channel layout.
Prerequisites
Before configuring Microsoft Teams in Signal you need:
- A Microsoft Teams team that you can administer.
- A target channel (one webhook per channel — split traffic by creating multiple Signal integrations, each pointing at a different channel).
- Permission to add connectors to the channel.
Get your credentials
Step 1: Add an Incoming Webhook connector to your channel
- In Microsoft Teams, open the channel you want to post to.
- Click the … menu next to the channel name and choose Connectors.
- Find Incoming Webhook in the connector list and click Configure (or Add, then Configure).
- Give the webhook a recognisable name (e.g. Datafly Signal Alerts).
- Optionally upload an icon — this becomes the avatar of every notification.
- Click Create.
Step 2: Copy the webhook URL
Teams now displays the webhook URL. It looks like:
https://yourorg.webhook.office.com/webhookb2/<guid>@<tenant>/IncomingWebhook/<connector>/<user>Copy this URL immediately and store it as a secret. Teams shows it only once; if you lose it you will need to delete and recreate the connector. Anyone holding this URL can post to the channel — treat it like a password.
- Click Done to finish.
Configure in Signal
Configuration fields
| Field | Required | Description |
|---|---|---|
webhook_url | Yes | The Incoming Webhook URL from step 2. Stored as a secret. |
Management UI setup
- Go to Integrations > Add Integration > Microsoft Teams.
- Paste the
webhook_urlinto thewebhook_urlfield. - Select the General preset (the default for this integration).
- Leave consent categories at the default (
essential) — Teams notifications are operational, not marketing. - Click Save.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integrations \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"source_id": "src_abc123",
"vendor": "microsoft_teams",
"name": "Teams - Sales Alerts",
"enabled": true,
"config": {
"webhook_url": "https://yourorg.webhook.office.com/webhookb2/..."
},
"consent_categories": ["essential"]
}'API endpoint
POST {webhook_url}
Content-Type: application/jsonSignal posts a MessageCard JSON document to the URL. Microsoft Teams renders the card directly in the target channel.
Event mapping
General preset
| Signal event | Card title | Card body source |
|---|---|---|
Lead Submitted | ”New lead submitted” | properties.lead_type |
Order Completed | ”Order completed” | properties.order_id |
Signed Up | ”New signup” | properties.plan |
To customise the card text, summary, or theme colour, edit the integration’s field mappings in the Management UI. Every event renders as a MessageCard with these top-level fields:
| Field | Source |
|---|---|
@type | static "MessageCard" |
@context | static "http://schema.org/extensions" |
themeColor | static "0076D7" (Datafly blue) |
summary | per-event mapping |
title | per-event mapping |
text | per-event mapping |
Example: Order Completed
Datafly.js call:
datafly.track("Order Completed", {
order_id: "ORD-001",
total: 129.99,
currency: "USD"
});Teams payload sent by Signal:
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"themeColor": "0076D7",
"summary": "Order completed",
"title": "Order completed",
"text": "ORD-001"
}Teams renders this as a card in the channel with the title, body text, and configured theme colour.
Splitting events across channels
Each Incoming Webhook posts to exactly one channel. To route different event classes to different channels (sales channel for leads, ops channel for failures), create one Signal integration per channel:
- Configure an Incoming Webhook on each target channel and copy each URL.
- Add multiple Microsoft Teams integrations in Signal, each with its own
webhook_urland its own enabled event list. - Use the pipeline event filter to restrict which events reach each integration.
Identity
Signal sends no identity data to Microsoft Teams. The MessageCard contains only the event title and the property values you explicitly map. Personal data, IP address, user agent, and identifier cookies are all stripped before delivery. This is deliberate — Teams notifications are operational signals and should not leak PII into a chat channel.
If you need to include a customer name or order ID in the card, map only the specific property you need (e.g. properties.order_id) rather than passing the full property bag.
Consent
The default consent category is essential. Microsoft Teams notifications are treated as operational signalling, not marketing, so they fire regardless of the visitor’s marketing consent state. This matches how most legal teams classify internal team alerting.
If your data-governance policy requires this integration to honour marketing or analytics consent, change the consent category in the Management UI.
Verify it’s working
Step 1: Trigger a test event
From a page running Datafly.js:
datafly.track("Lead Submitted", {
lead_type: "Test from Signal"
});Step 2: Check the Teams channel
Within a few seconds, a card titled New lead submitted with body Test from Signal should appear in the channel.
Step 3: Inspect the Signal event debugger
In the Signal Management UI, open the integration’s Recent Events tab. You should see the event with a 2xx response and the full MessageCard payload that was posted.
Troubleshooting
| Problem | Solution |
|---|---|
| No card appears in the channel | Verify the webhook URL was pasted correctly. In Teams, open the channel’s Connectors > Configured > Incoming Webhook > Manage and re-copy the URL. |
| Cards appear but show “Summary or Text is required.” | Check that the per-event mapping populates summary or text. Microsoft Teams rejects MessageCards with both fields empty. |
| Burst of events causes some to drop | Microsoft Teams enforces a hard cap of approximately 4 requests/second per channel connector. Signal rate-limits to stay under this; if you see drops, split traffic across multiple channels. |
| 410 Gone response | The webhook has been deleted or the connector removed. Recreate the Incoming Webhook in Teams and update the integration config. |
| 400 error referencing schema | Custom field mappings have produced a non-MessageCard shape. Remove the problem mapping or revert to preset defaults. |
See also
- Microsoft Teams Incoming Webhooks docs
- MessageCard reference
- PagerDuty integration — for paging on-call rotations instead of chat notifications