← Help & Docs

Task Notifications Setup

Route new-task alerts to staff email and a Microsoft Teams channel. Last updated 2026-06-05

When a new TATER Ops task is created - by the endpoint agent (Self-Service Fix follow-ups), an MCP agent, the web UI, or the public intake portal - TATER fires a notification through every channel you've enabled. Configure per org in TATER Manage → Connections → Task Notifications.

Configuration overview

Stored under Settings.integrations.taskNotifications. Fields:

Per-channel toggles let you choose, for example, "always page Teams for agent failures, but only email for human-created tasks." Set the flag to false to suppress.

Email setup

  1. Open TATER ManageConnectionsTask Notifications.
  2. Tick Enable email.
  3. Add one address per line under Recipients. Up to 20 addresses; commas and semicolons in a single line are split automatically.
  4. Save. Delivery uses the system-level Graph or SMTP config from Settings → System (SuperAdmin) - see Settings reference.

Each email is sent individually with the recipient on the To line (not BCC) so reply-all behaviors work cleanly when staff coordinate on a ticket.

Microsoft Teams setup

Microsoft retired the classic "Incoming Webhook" connector for Teams in October 2025. The replacement is a Power Automate Workflow that exposes a webhook URL. The setup below is the current Microsoft-supported path as of 2026 and reflects exactly the steps we used to wire CB's helpdesk channel.

Step 1 - Pick the destination channel

Decide which Teams channel TATER tickets should land in. A dedicated channel ("TATER Tickets", "Helpdesk Alerts") is better than General (which gets noisy). The channel can be private - only members will see the cards.

Group chats are not supported. Workflow webhooks bind to a channel, not a group chat. If you want it to feel like a small group, create a private channel with just the helpdesk members.

Step 2 - Create the Workflow

  1. In Teams, click the "…" next to the channel nameWorkflows.
  2. Search for the template "Post to a channel when a webhook request is received".
  3. Click Next.
  4. Set the workflow name to something like TATER Ticket Alerts.
  5. Confirm the Team and Channel are correct → Add workflow.
  6. Teams shows the HTTP POST URL - looks like https://prod-NN.eastus.logic.azure.com/workflows/... or https://...environment.api.powerplatform.com/.../triggers/manual/paths/invoke?api-version=1&sp=...&sig=.... Click CopyDone.

Ownership note: only the workflow creator can manage it afterwards. If that account leaves the organization, the workflow must be recreated. For long-term ownership, create the workflow under a shared service account if you have one.

Step 3 - Resolve a Data Loss Prevention (DLP) block if it happens

Many tenants have a Power Platform DLP policy that classifies the Request (HTTP) trigger and the Microsoft Teams action into different connector groups. When that's the case, the workflow gets created and then immediately gets a red Suspended banner with the message:

⊗ Suspended: Workflow cannot run because it's blocked by your organization's data policy.

To unblock:

  1. Open admin.powerplatform.microsoft.com as a Power Platform admin.
  2. Go to Policies → Data policies.
  3. Find the policy covering the environment your workflow is in (often Default or a managed-environment policy).
  4. Choose either approach:
    • Connector groups: move the Request (HTTP trigger) connector into the same group as Microsoft Teams (typically the "Business" group). The workflow's connectors will then match the policy.
    • Environment exception: add the workflow's environment to the policy's exclusion list. Use this if you don't want to change the global connector grouping.
  5. Save the policy. Back in Teams (or make.powerautomate.com), open the suspended workflow and click Resubmit. It should switch from Suspended to On.

The fix is one-time per environment - once the connector classification is aligned, future workflow webhooks (for any other internal integration) work without further policy edits.

Step 4 - Paste the URL into TATER

  1. Open TATER Manage → Connections → Task Notifications.
  2. Tick Enable Teams.
  3. Paste the workflow URL into Teams Webhook URL.
  4. Save.
  5. Use the Send Test button (or fire a real task via the public intake / agent) to verify a card lands in the channel.

Adaptive Card format

TATER sends an Adaptive Card 1.4 payload with:

The card uses msTeams.width: 'Full' so it renders full-width inside the channel.

Example payload

The exact JSON envelope TATER POSTs to the configured webhook. Use this to verify your Workflow template handles the shape, to test your endpoint with a known-good body, or as a starting point for your own integrations that want to mirror the look.

POST <teamsWebhookUrl>
Content-Type: application/json

{
  "type": "message",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.adaptive",
      "content": {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.4",
        "msTeams": { "width": "Full" },
        "body": [
          {
            "type": "ColumnSet",
            "columns": [
              {
                "type": "Column", "width": "auto", "verticalContentAlignment": "Center",
                "items": [
                  { "type": "TextBlock", "text": "🔴", "size": "ExtraLarge", "spacing": "None" }
                ]
              },
              {
                "type": "Column", "width": "stretch", "verticalContentAlignment": "Center",
                "items": [
                  { "type": "TextBlock", "text": "New TATER Ops Task", "isSubtle": true, "size": "Small", "weight": "Bolder", "spacing": "None" },
                  { "type": "TextBlock", "text": "OneDrive sync stuck on X1-14-2024-09", "size": "Large", "weight": "Bolder", "wrap": true, "spacing": "None" }
                ]
              }
            ]
          },
          {
            "type": "ColumnSet", "spacing": "Small",
            "columns": [
              { "type": "Column", "width": "auto", "items": [
                { "type": "TextBlock", "text": "**HIGH**", "color": "attention", "weight": "Bolder", "size": "Small", "spacing": "None" }
              ]},
              { "type": "Column", "width": "auto", "items": [
                { "type": "TextBlock", "text": "· OneDrive", "isSubtle": true, "size": "Small", "spacing": "None" }
              ]},
              { "type": "Column", "width": "auto", "items": [
                { "type": "TextBlock", "text": "· via Endpoint Agent", "isSubtle": true, "size": "Small", "spacing": "None" }
              ]}
            ]
          },
          {
            "type": "Container", "style": "emphasis", "bleed": true, "spacing": "Medium",
            "items": [
              { "type": "TextBlock", "text": "Self-Service Fix \"Reset OneDrive Sync\" was triggered but the cldflt driver did not return to a healthy state after 3 retry cycles. Manual review by IT required.", "wrap": true }
            ]
          },
          {
            "type": "FactSet", "spacing": "Medium",
            "facts": [
              { "title": "Requester",   "value": "ckimura@caronbletzer.com" },
              { "title": "Assigned to", "value": "helpdesk@caronbletzer.com" },
              { "title": "Due",         "value": "2026-06-07" },
              { "title": "Status",      "value": "Open" },
              { "title": "Linked",      "value": "control: ONEDRIVE-HEALTH" }
            ]
          },
          {
            "type": "TextBlock",
            "text": "Task ID: task-9c3a17b2-...",
            "isSubtle": true, "size": "Small", "spacing": "Medium", "wrap": true
          }
        ],
        "actions": [
          {
            "type": "Action.OpenUrl",
            "title": "🔗 Open in TATER Ops",
            "url": "https://ops.tatersecurity.com/?page=tasks&id=task-9c3a17b2-...",
            "style": "positive"
          }
        ]
      }
    }
  ]
}

What it looks like rendered

The above payload renders in a channel as roughly:

┌────────────────────────────────────────────────────────────┐
│  🔴   New TATER Ops Task                                   │
│       OneDrive sync stuck on X1-14-2024-09                 │
│                                                            │
│  HIGH · OneDrive · via Endpoint Agent                      │
│  ┌──────────────────────────────────────────────────────┐  │
│  │ Self-Service Fix "Reset OneDrive Sync" was           │  │
│  │ triggered but the cldflt driver did not return to a  │  │
│  │ healthy state after 3 retry cycles. Manual review    │  │
│  │ by IT required.                                      │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                            │
│  Requester    ckimura@caronbletzer.com                     │
│  Assigned to  helpdesk@caronbletzer.com                    │
│  Due          2026-06-07                                   │
│  Status       Open                                         │
│  Linked       control: ONEDRIVE-HEALTH                     │
│                                                            │
│  Task ID: task-9c3a17b2-...                                │
│                                                            │
│  [ 🔗 Open in TATER Ops ]                                  │
└────────────────────────────────────────────────────────────┘

HIGH is rendered in red ("attention" color); MEDIUM in amber ("warning"); LOW in green ("good"). The button uses the host's positive accent color.

Testing your workflow with this payload

Paste the JSON above into the body of any HTTP test client (curl, Postman, Power Automate's run-test, etc.) and POST it to your workflow URL. If the card renders correctly in the channel, your workflow template handles the standard envelope; if Teams shows raw JSON or "Card couldn't be rendered," the template's body schema expects a different shape - adjust the workflow's "Post your own adaptive card" action's attachments mapping to forward triggerBody().attachments verbatim.

Quick curl:

curl -X POST \
  -H "Content-Type: application/json" \
  -d @example-card.json \
  "<your-workflow-url>"

A 202 response with no body means the workflow accepted the trigger (success). A 400 with a Power Automate error body usually means the JSON shape doesn't match the trigger schema - open the workflow's run history to see the parse error.

Security considerations

Troubleshooting

Alternative channels

If Power Automate isn't an option (DLP can't be loosened, no Power Automate license, or you don't want to maintain a workflow), TATER also supports:

Daily Technician Digest

Complementary to the per-event channels above: a once-a-day morning queue email for each technician (TATER Manage → Connections → Task Notifications → Daily Technician Digest). Solves the "unassigned email-intake tickets sit in the queue and nobody notices" problem.