Skip to main content

Zendesk Case Management Integration

Overview

This integration enables Agents to create and retrieve Zendesk tickets (cases) directly from a Bot. It streamlines ticket workflows by allowing the Agent to interact with Zendesk via a small set of well-defined tools.

Primary workflows supported:

  1. Create a new Zendesk ticket
  2. Check the status and comments for an existing ticket

The recommended approach mirrors our Salesforce pattern:

  • Collect structured data through forms (do not ask for open-text case details in chat)
  • Create a ticket when required using collected form data
  • Use ticketId plus email to verify and fetch an existing ticket
  • Add explicit workflow rules to the ReAct system prompt so the model chooses the correct form and Zendesk tool

Current Tool Map

Use these tool keys and function calls as configured in your Agent:

Tool keyFunction callPurpose
zendeskCaseManagementzendesk_ticket_infoRetrieve ticket details and comments using ticketId and email
zendeskCaseCreationzendesk_ticket_creationCreate a new Zendesk ticket using a context object

What the Integration Should Do

Ticket Creation

Call a form to collect the required fields (subject, description, priority) and then call zendesk_ticket_creation. The Create_zendesk_ticket form defined below is the canonical source of these fields; map its fields to the tool context as shown in the ReAct payload example.

Ticket Status Lookup

Call a form to collect ticketId and email, then call zendesk_ticket_info to return status and recent comments.

Zendesk Configuration

Prerequisites

  • A Zendesk account with API access
  • An API token (required) — OAuth is not supported for this integration
  • A Zendesk user with permission to read and create tickets

Configure the Integration

  1. Open your Agent or project configuration.
  2. Go to the Zendesk Case Management integration settings.
  3. Enter the following values:
  • subdomain (required) — your Zendesk subdomain (for example, if your Zendesk URL is https://acme.zendesk.com, the subdomain is acme).
  • email (required) — the service account email used to authenticate API requests.
  • apiToken (required) — a Zendesk API token generated for the service account.
  1. Save the settings and run a test ticket creation and lookup.

Note: To create an API token in Zendesk, go to Apps and integrations → APIs → API configuration, enable API Token Access, then create and copy a new token from API tokens section. Treat API tokens like passwords — store them securely.

Required Forms

For the ticket workflow documented here, create forms with these keyName values:

  • Create_zendesk_ticket
  • Fetch_status_of_a_zendesk_ticket

These names should match values referenced by the ReAct system prompt and tool wiring.

Why Forms Are Required

Forms collect structured data and avoid feeding unstructured user text into the model when performing ticket operations. Always call the correct form to collect required fields.

SurveyJS JSON: Fetch_status_of_a_zendesk_ticket

{
"title": "Zendesk Ticket Information Lookup",
"description": "Retrieve details about your Zendesk ticket. Identity verification is required before case details can be shared.",
"logoPosition": "right",
"completedHtml": "<h3>Thank you!</h3><p>Your identity is being verified. If your ticket ID and email match our records, the requested ticket information will be returned shortly.</p>",
"pages": [
{
"name": "ticketInfoPage",
"title": "Ticket Info Page",
"description": "Please provide your ticket ID and the email address associated with the ticket to verify your identity.",
"elements": [
{
"type": "text",
"name": "ticketId",
"title": "Zendesk Ticket ID",
"description": "Enter the numeric ID of your ticket (e.g., 123456).",
"isRequired": true,
"requiredErrorText": "Ticket ID is required to look up your case.",
"validators": [
{
"type": "regex",
"text": "Ticket ID must contain only numbers.",
"regex": "^[0-9]+$"
}
],
"placeholder": "e.g., 123456"
},
{
"type": "text",
"name": "email",
"title": "Email Address",
"description": "Enter the email address you used when submitting the ticket. This will be used to verify your identity.",
"isRequired": true,
"requiredErrorText": "Email address is required for identity verification.",
"validators": [
{
"type": "email",
"text": "Please enter a valid email address."
}
],
"inputType": "email",
"autocomplete": "email",
"placeholder": "name@example.com"
}
]
}
],
"showProgressBar": true,
"completeText": "Retrieve Ticket Info"
}

SurveyJS JSON: Create_zendesk_ticket

{
"title": "Create Zendesk Ticket",
"description": "Fill out the details below to create a new Zendesk ticket.",
"pages": [
{
"name": "ticketPage",
"title": "Ticket Details",
"elements": [
{
"type": "text",
"name": "subject",
"title": "Subject",
"description": "A short summary of the ticket.",
"valueName": "ticket.subject",
"isRequired": true,
"placeholder": "Enter ticket subject"
},
{
"type": "comment",
"name": "commentBody",
"title": "Description",
"description": "Provide a detailed description of the issue or request.",
"valueName": "ticket.comment.body",
"isRequired": true,
"rows": 5,
"placeholder": "Describe your issue here..."
},
{
"type": "radiogroup",
"name": "priority",
"title": "Priority",
"description": "Select the urgency level for this ticket.",
"valueName": "ticket.priority",
"defaultValue": "normal",
"isRequired": true,
"choices": [
{ "value": "low", "text": "Low" },
{ "value": "normal", "text": "Normal" },
{ "value": "high", "text": "High" },
{ "value": "urgent", "text": "Urgent" }
]
}
]
}
],
"completeText": "Create Ticket"
}

Notes

  • Use the ticketId plus email to verify identity before returning case details to users.

ReAct System Prompt Requirements

Append the following section to your ReAct system prompt when using this Zendesk workflow.

This block tells the model:

  • which forms to call
  • when to call each form
  • when to call Zendesk tools
  • when not to ask users for ticket details in chat

Available Forms

Use these forms to collect required user data:

Form keyNameWhen to Use
Create_zendesk_ticketUser wants to open a new ticket
Fetch_status_of_a_zendesk_ticketUser wants to check the status of an existing ticket

Zendesk Tools

These tools communicate with Zendesk:

  • zendeskCaseCreation = create a new ticket
  • zendeskCaseManagement = retrieve or check status of an existing ticket

Definition of History

"History" means the current conversation history only.

Do not assume ticket details from a prior session unless the user provides them again in the current conversation.


General Rules

  • Use only actual user-provided values, form-provided values, or tool-returned values
  • Never guess, invent, or hardcode an email, ticket ID, or any ticket field
  • Validate that the email appears valid before calling a Zendesk tool
  • If required information is missing, ask only for the missing field(s) or call the correct form
  • Wait for the tool response before confirming success or giving a final answer
  • Only confirm ticket creation or ticket status after the tool confirms it
  • If a tool fails, explain that the request could not be completed and ask the user to retry or verify their information

Ticket Status Requests

When the user says things like:

  • "Check my ticket status"
  • "What is the update on my ticket?"
  • "Get the status of my support ticket"
  • "Where does my ticket stand?"
  • "Show me the latest comments on my ticket"

Follow this process:

  1. Call the Fetch_status_of_a_zendesk_ticket form to collect:

    • ticketId
    • email
  2. Then call zendeskCaseManagement with:

    • ticketId
    • email
  3. Return the status or latest ticket details from Zendesk

Rules:

  • Never answer ticket status from memory
  • Never skip the form if ticketId and email are not already available in the current conversation
  • If the ticket is not found, tell the user and ask them to verify their information

Ticket Creation Requests

When the user says things like:

  • "Open a support ticket"
  • "I need help with an issue"
  • "Report a problem"
  • "Submit a ticket for assistance"
  • "Create a ticket for my issue"

Follow this process:

  1. Call the Create_zendesk_ticket form to collect all required fields

  2. On form submission, call zendeskCaseCreation using this exact structure:

{
"context": {
"subject": "<subject>",
"description": "<commentBody>",
"priority": "<priority>"
}
}

Required values from the form:

  • subject
  • commentBody (maps to description in the tool payload)
  • priority

Rules:

  • Use only actual form-submitted values
  • Never use placeholder values
  • Wait for the tool response
  • Only confirm success after the tool confirms success
  • If the tool fails, tell the user the ticket could not be submitted and ask them to retry or verify their information