IntegrationsNotifications & AlertsMicrosoft Teams

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

  1. In Microsoft Teams, open the channel you want to post to.
  2. Click the menu next to the channel name and choose Connectors.
  3. Find Incoming Webhook in the connector list and click Configure (or Add, then Configure).
  4. Give the webhook a recognisable name (e.g. Datafly Signal Alerts).
  5. Optionally upload an icon — this becomes the avatar of every notification.
  6. 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.

  1. Click Done to finish.

Configure in Signal

Configuration fields

FieldRequiredDescription
webhook_urlYesThe Incoming Webhook URL from step 2. Stored as a secret.

Management UI setup

  1. Go to Integrations > Add Integration > Microsoft Teams.
  2. Paste the webhook_url into the webhook_url field.
  3. Select the General preset (the default for this integration).
  4. Leave consent categories at the default (essential) — Teams notifications are operational, not marketing.
  5. 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/json

Signal posts a MessageCard JSON document to the URL. Microsoft Teams renders the card directly in the target channel.

Event mapping

General preset

Signal eventCard titleCard 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:

FieldSource
@typestatic "MessageCard"
@contextstatic "http://schema.org/extensions"
themeColorstatic "0076D7" (Datafly blue)
summaryper-event mapping
titleper-event mapping
textper-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:

  1. Configure an Incoming Webhook on each target channel and copy each URL.
  2. Add multiple Microsoft Teams integrations in Signal, each with its own webhook_url and its own enabled event list.
  3. 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.

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

ProblemSolution
No card appears in the channelVerify 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 dropMicrosoft 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 responseThe webhook has been deleted or the connector removed. Recreate the Incoming Webhook in Teams and update the integration config.
400 error referencing schemaCustom field mappings have produced a non-MessageCard shape. Remove the problem mapping or revert to preset defaults.

See also