Zendesk Side-Conversation to Vendor Email
When an agent starts a side conversation on a Zendesk ticket addressed to a vendor, the flow sends a templated, tracked email to the vendor, captures replies back into the ticket, and reminds the agent if the vendor hasn't responded within an SLA. Manages third-party follow-ups inside the ticket.
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
Solution: FlowLibs - Zendesk Side-Conversation to Vendor Email · CF-721 · Status: Built (ships Off)
This solution manages third-party (vendor) follow-ups that live inside a Zendesk ticket as *side conversations*. It is built as two coordinated cloud flows sharing one Dataverse tracking table:
- Flow A — Vendor Side-Conversation Email Sender: detects new vendor side conversations on open tickets, sends a templated tracked vendor email (Outlook), posts a private internal note on the ticket, logs a Dataverse tracking row, and notifies the support Teams channel. - Flow B — Vendor Reply SLA Reminder: hourly, checks each awaiting side conversation for a vendor reply (marks it Replied + notes + Teams) or, if the SLA window has elapsed with no reply, reminds the agent via Teams + email and stamps the row so it reminds only once.
Why it matters: vendor follow-ups fall through the cracks. Tracking each one against its ticket, with reply detection and a single SLA reminder, keeps external dependencies moving without leaving Zendesk.
> Connector-first note: Zendesk's Power Automate connector is tabular (GetItems/PatchItem on object tables) — it has no side-conversation operation and cannot set a comment's public/private visibility. Side conversations and private notes are therefore handled with built-in HTTP calls to the Zendesk REST API (a legitimate §4b case-1 fallback, since no connector op exists). Every other interaction uses the premium/standard connector action.
Use Case
Support agents coordinate with vendors/suppliers on tickets via Zendesk side conversations and need those exchanges tracked, chased on an SLA, and surfaced to the team — all without manual babysitting.
Flow Architecture
Recurrence (Flow A)
Recurrence (15 min)Polls for new vendor side conversations
Initialize Awaiting Status (Flow A)
InitializeVariableStatus label Awaiting Reply (configurable)
Get Open Zendesk Tickets (Flow A)
Zendesk GetItems (table tickets)Reads open tickets (status ne 'solved' and status ne 'closed')
For Each Ticket (Flow A)
Foreach (sequential)Iterates open tickets
Get Side Conversations (Flow A)
HTTP GET /api/v2/tickets/{id}/side_conversations.jsonLists the ticket's side conversations (no connector op)
For Each Side Conversation (Flow A)
Foreach (sequential)Iterates side conversations
Check Already Logged (Flow A)
Dataverse ListRecordsDedup by flowlibs_sideconvid
If New Side Conversation (Flow A)
Condition (length(...)=0)Acts only on unlogged side conversations
Send Vendor Email (Flow A)
Outlook SendEmailV2Templated, tracked vendor email
Add Private Note To Ticket (Flow A)
HTTP PUT /api/v2/tickets/{id}.json (comment.public=false)Private internal note recording the outreach
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_ZendeskSubdomain | String | your-org (placeholder) | Zendesk subdomain → REST base URL (reused) |
| flowlibs_ZendeskAuthBase64 | String | REPLACE_WITH_BASE64 | Base64 of {email}/token:{apitoken} for Zendesk REST Basic auth (new this build) |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team id for notifications (reused) |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for notifications (reused) |
| flowlibs_NotifyEmail | String | (inbox) | Agent inbox for SLA reminder emails (reused, Flow B only) |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Zendesk | shared_zendesk | GetItems |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
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.
- Vendor recipient logic
- Flow A picks the first side-conversation participant email; refine to target the specific vendor participant (exclude internal/agent addresses) if your side conversations include multiple recipients.
- SLA window
- Change Initialize SLA Hours (Flow B) to adjust the reminder threshold; change the Recurrence interval to poll more/less often.
- Templates
- The vendor email subject/body and the Teams/notification text are inline; lift them into env vars for per-vendor or per-category templates.
- Reply detection
- Flow B approximates "replied" as side-conversation updated_at after send time; for stricter detection, call the side-conversation events endpoint and match on inbound vendor messages.
- Escalation
- Add a second reminder tier (e.g. manager email) gated on a longer elapsed window and a second stamp column.
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.01Dedup filter (Flow A)
Build the Dataverse dedup filter by side-conversation id
EXPR.02Zendesk REST base URL
Build the Zendesk REST base URL
EXPR.03Basic auth header
Construct the Basic auth header from the env var
EXPR.04Vendor email pick
Pick the first side-conversation participant email
EXPR.05Reply detection (Flow B)
Detect a reply when updated_at is after send time
EXPR.06SLA-breach gate (Flow B)
Past-SLA and not-yet-reminded gate (36000000000 ticks = 1 hour)
EXPR.07Private note body
Private comment body for the Zendesk REST PUT
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.