Intercom First-Response SLA Escalation
On a short schedule, the flow finds open Intercom conversations awaiting first response (or reply) past an SLA threshold, reassigns or escalates per priority, adds an internal note, alerts the team lead in Teams, and emails the manager on repeat breaches. Protects response-time commitments in a busy inbox.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow protects first-response time commitments on Intercom. On a short schedule it finds open conversations that have been waiting on a teammate longer than an SLA threshold, then runs a two-tier escalation: on the first detection it alerts the support lead in Teams, reassigns the conversation per priority, and adds an internal note; if the same conversation is still unanswered on a later poll, it emails the support manager (a repeat breach). A Dataverse ledger makes the escalation idempotent so a conversation is escalated to the lead once and to the manager once - never spammed every poll.
Why it matters: In a busy inbox, conversations slip past SLA unnoticed. Automated detection plus a de-duplicated, tiered escalation keeps response times honest and gives leadership early warning without an agent watching timers.
Use Case
A support team with first-response SLAs wants at-risk and breached conversations surfaced and escalated automatically. The first breach nudges the on-call lead and reassigns the work; a continued breach escalates to the manager. The ledger guarantees each conversation triggers each tier only once.
Flow Architecture
Recurrence Poll Intercom
Recurrence (15 min)SLA sweep cadence.
Initialize variables (x12)
Initialize VariableCorrelation id, now-as-Unix-seconds, SLA seconds, Intercom/Teams/manager config.
Search Open Conversations
HTTP POST /conversations/searchAll open conversations (waiting_since, priority, statistics).
Filter Breaching Conversations
Filter array (Query)Keep only conversations whose waiting_since age exceeds the SLA threshold.
Foreach Breaching Conversation
Apply to each (concurrency 1)Process each breach sequentially for consistent ledger reads/writes.
List Existing Ledger
Dataverse ListRecordsIdempotency / repeat detection by conversation id.
First breach branch
Teams + HTTP note + HTTP assignment + Dataverse CreateRecordAlert lead, add note, reassign per priority, write ledger row (status Escalated).
Repeat breach branch
Teams + HTTP note + Outlook SendEmailV2 (High) + Dataverse UpdateRecordRepeat alert, note, manager email, advance status to ManagerNotified.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_IntercomApiBase | String | https://api.intercom.io | Intercom REST base URL. |
| flowlibs_IntercomApiToken | String | REPLACE_WITH_INTERCOM_TOKEN | Intercom access token, sent as Bearer. |
| flowlibs_IntercomVersion | String | 2.11 | Intercom-Version header. |
| flowlibs_IntercomAdminId | String | (configure) | Admin id; author of notes / assignments. |
| flowlibs_IntercomSlaMinutes | String | 30 | First-response SLA threshold in minutes. |
| flowlibs_IntercomWorkspaceId | String | (configure) | Workspace/app id for conversation deep links. |
| flowlibs_IntercomPriorityAssigneeMap | String | {"priority":"<team-id>","not_priority":"<team-id>"} | JSON map of priority to Intercom team/admin id for reassignment. |
| flowlibs_SupportManagerEmail | String | support-manager@yourcompany.com | Repeat-breach escalation recipient. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams group/Team id for the lead channel. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Intercom | shared_intercom | POST /conversations/search POST /conversations/{id}/reply POST /conversations/{id}/parts |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Office 365 Outlook |
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- SLA threshold
- Change flowlibs_IntercomSlaMinutes. For priority-based SLAs, branch on priority before the breach filter and compare against per-segment thresholds.
- Poll cadence
- Adjust the Recurrence interval (tighter = faster detection, more API calls).
- Reassignment targets
- Edit flowlibs_IntercomPriorityAssigneeMap (priority to team/admin id). Assignment type is team; switch to admin to map individuals.
- Business hours
- Gate the breach filter so only time during support hours counts toward the SLA.
- Third tier
- Add a Twilio SMS or PagerDuty page when a conversation reaches a third poll while still breaching (extend the ledger status machine).
- Scope
- Narrow Search Open Conversations (e.g. by team or tag) by adding clauses to the search query value array.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Now as Unix seconds
Current time in Unix seconds.
EXPR.02SLA seconds
SLA threshold in seconds.
EXPR.03Breach filter (where)
Keep conversations past SLA.
EXPR.04Priority to assignee
Resolve the assignee per priority.
EXPR.05First vs repeat gate
No ledger row => first breach.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.