Intercom Conversation to Case Bridge
When an Intercom conversation is tagged for escalation, the flow creates a case in Dataverse, posts it to a Teams support channel, and writes the case link back into the Intercom conversation as a note. Conversation resolution updates the case status. Bridges live chat support into the system of record without losing context.
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 solution bridges Intercom live-chat support into Dataverse as the system of record. When a conversation is tagged for escalation, Flow A creates a tracked Dataverse case, posts it to a Microsoft Teams support channel, and writes an internal note back into the Intercom conversation with the case reference. When that conversation is later closed, Flow B flips the linked case to Resolved and notifies Teams. The Dataverse case table doubles as the dedup ledger, keyed on the Intercom conversation id, so nothing is processed twice and nothing is orphaned.
Why it matters: Chat conversations that need formal tracking get lost when copied by hand. Auto-creating a linked, two-way-synced case keeps the audit trail and surfaces escalations to the wider team while agents stay in Intercom.
Use Case
A support team uses Intercom for live chat but needs escalated conversations tracked as cases in Dataverse (the system of record), surfaced to the wider team in Teams, and kept in two-way status sync so closing the chat resolves the case automatically.
Flow Architecture
Flow A: Recurrence
Recurrence (15 min)Poll Intercom on a schedule (no tag trigger exists).
Search Escalated Conversations
HTTP POST /conversations/searchstate=open, tag_ids IN [escalation tag], updated_at > since.
Check Existing Case
Dataverse ListRecordsDedup guard by conversation id.
Get Contact
Intercom GetLeadRead contact name + email (connector-first).
Create Case
Dataverse CreateRecordCreate the tracked case (system of record + ledger).
Post To Teams
Teams PostMessageToConversationSurface the case to the support channel.
Write Note Back
HTTP POST /conversations/{id}/replyInternal note with the case reference.
Flow B: Recurrence
Recurrence (15 min)Poll for recently closed conversations.
Search Closed Conversations
HTTP POST /conversations/searchstate=closed, updated_at > since.
Find Open Case + Update Case
Dataverse ListRecords + UpdateRecordFlip the matched case to Resolved (two-way status sync).
Post Resolution To Teams + Write Resolution Note
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 | Bearer token for Intercom REST. |
| flowlibs_IntercomVersion | String | 2.11 | Intercom-Version header. |
| flowlibs_IntercomAdminId | String | (configure) | Admin id that authors the note. |
| flowlibs_IntercomWorkspaceId | String | (configure) | For building conversation deep links. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Support team (group) id. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Support channel id. |
| flowlibs_EscalationTag | String | escalate | Escalation tag name (display). |
| flowlibs_EscalationTagId | String | __SET_ESCALATION_TAG_ID__ | Intercom tag id used in the search filter. |
| flowlibs_IntercomCaseTableName | String |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Intercom | shared_intercom | GetLead POST /conversations/search POST /conversations/{id}/reply |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
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.
- Escalation tag
- Set flowlibs_EscalationTagId to your Intercom tag's id (and the display name). Find the id via GET /tags on the Intercom REST API.
- AI summary
- Summarize the transcript with Azure OpenAI before Create Case and store it in flowlibs_summary.
- Priority mapping
- Map Intercom priority (or specific tags) to a case-priority choice column.
- Contact match
- Link the case to an existing Dataverse contact/account by email instead of storing only the email string.
- Poll cadence
- Adjust the Recurrence interval and lookback minutes together (lookback >= poll interval to avoid gaps).
- Real-time
- If Intercom webhooks are available, replace Recurrence + search with a Request-triggered flow fed by an Intercom webhook.
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 in Unix seconds
Current time in Unix seconds.
EXPR.02Search lower bound
Lower bound = now - lookback minutes.
EXPR.03Dedup filter (Flow A)
Find an existing case for this conversation.
EXPR.04Match-open filter (Flow B)
Match the open case to resolve.
EXPR.05Conversation deep link
Build the Intercom deep link.
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.