Zendesk Macro Suggestion from Knowledge Base
When a ticket is created, the flow searches the Zendesk Help Center / knowledge base for relevant articles, suggests the best-matching macro or article links as an internal note, and tracks which suggestions agents use. Helps agents resolve faster with relevant self-service content.
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 gives Zendesk support agents an instant, governed "what to send" suggestion on every new ticket. When a ticket is created, it runs a semantic search over the knowledge base in Azure AI Search and a keyword search of the Zendesk Help Center, then posts the best-matching articles/macros as a private internal note on the ticket, logs the suggestion to Dataverse for adoption tracking, and notifies the support team in Microsoft Teams.
Why it matters: Agents repeatedly resolve the same known issues. Surfacing relevant KB content per ticket cuts handle time, improves answer consistency, and (via the Dataverse log) lets you measure which suggestions agents actually use.
As built: This is a complete, connector-first reference implementation. It ships Off — going live requires only authorizing the connections and setting the environment-variable values (index name, Teams IDs, Zendesk auth header).
Use Case
A support team with a maintained Help Center / KB wants relevant self-service content auto-suggested on each new ticket, without auto-replying to the customer. Agents review the suggestion in an internal note and choose whether to use it. Suggestion adoption is tracked so KB gaps and high-value articles can be reported on.
Flow Architecture
Get New Zendesk Tickets
Zendesk GetOnNewItemsV2 (table=tickets, Recurrence 5 min, splitOn body/value)Fires once per newly created ticket
Initialize Correlation Id
InitializeVariable (@guid())Trace id across note, log, Teams
Initialize Ticket Id
InitializeVariableTicket id as string for URL/log/card
Initialize Ticket Subject
InitializeVariableSubject (fallback placeholder)
Initialize Top Article Count
InitializeVariable (integer = 3)Max KB articles to request
Initialize Default Usage Status
InitializeVariable ("Pending")Default usage status on the log row
Initialize Search Query
InitializeVariable (subject + description)Query text for both searches
Initialize Note Lines
InitializeVariable ("")Accumulator for the bullet list
Search Knowledge Base
Azure AI Search IntegratedVectorSearchSemantic (vector) KB search
Search Help Center Articles
Zendesk SearchArticlesKeyword Help Center search
For Each Help Center Article
Foreach (concurrency 1) → AppendToStringVariableEnvironment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_ZendeskTable | String | tickets | Zendesk dataset table the trigger watches (reused) |
| flowlibs_ZendeskSubdomain | String | contoso | Zendesk subdomain for the REST note URL (reused) |
| flowlibs_ZendeskAuthHeader | String | Basic … | Authorization header for the private-note PUT — Basic base64(email/token:APITOKEN) (reused) |
| flowlibs_AzureSearchIndexName | String | zendesk-kb-index | Azure AI Search index of KB articles |
| flowlibs_AzureSearchVectorField | String | text_vector | Vectorized/searchable field for integrated vector search |
| flowlibs_AzureSearchSelectFields | String | title,url,content | Index fields to return on each match |
| flowlibs_SupportTeamsGroupId | String | (set on deploy) | Teams Group (Team) ID for the agent channel |
| flowlibs_SupportTeamsChannelId | String | (set on deploy) | Teams Channel ID for the agent channel |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Zendesk | shared_zendesk | GetOnNewItemsV2 SearchArticles |
| Azure AI Search | shared_azureaisearch | IntegratedVectorSearch |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord |
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.
- Tune the search
- Adjust flowlibs_AzureSearchVectorField / flowlibs_AzureSearchSelectFields to match your index schema, and raise/lower the Top Article Count variable.
- Macro mapping
- Extend the note (or add a Switch on ticket topic) to map a matched article to a specific Zendesk macro id.
- Deflection
- For simple intents, branch to a *public* reply with the top KB link instead of a private note.
- Adoption reporting
- Build a Power BI report over flowlibs_kbmacrosuggestion on flowlibs_usagestatus to show suggestion-usage rates and KB gaps (tickets where no match was found).
- Source switch
- The flow uses both AI Search and Help Center; disable either loop if you only maintain one KB.
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.01Search query
Combine subject and description into the search query
EXPR.02Suggestion count
Sum HC + AI Search match counts
EXPR.03Help Center bullet
Format one Help Center article as a bullet line
EXPR.04Private note URI
Build the Zendesk REST URL for the private note 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.