How to Let a Chatbot Create Tickets in Zendesk, Freshdesk or Zoho Desk
Set up a chatbot that answers first and files a Zendesk, Freshdesk or Zoho Desk ticket when a person is needed: the fields to send, setup steps and pitfalls.

Short answer
A website chatbot should answer from your knowledge base first and open a helpdesk ticket only when a person has to act. The ticket needs the visitor's name and email, a one-line subject, a summary of the problem and what the bot tried, and any order number; the bot then gives the visitor the ticket number. As of October 2026, Zendesk, Freshdesk and Zoho Desk all accept such tickets by API, and OAuth is replacing Zendesk's API tokens.
If you already run Zendesk, Freshdesk or Zoho Desk and want an AI chatbot on your website that answers routine questions itself and sends the rest to the helpdesk as proper tickets, this guide is for you. The goal is one queue: agents keep working where they already work, and the website chat never becomes a second inbox that nobody watches.
The sections below cover the pattern, the fields a ticket needs, setup for each helpdesk, escalation triggers, status checks that leak nothing, duplicates and measurement.
Every API detail was read in the vendors' developer documentation and help centers on 19 October 2026, and every price on their pricing pages the same day. The examples use PepoChat, which is our product and has prebuilt create-ticket and status-check actions for all three helpdesks; its specifics come from its documentation and code, including what it does not do.
How does a website chatbot create tickets in your helpdesk?
A chatbot creates a ticket by calling the helpdesk's ticket API with details it collected in the conversation, then reading back the new ticket's number. The version that works does three things in order: it tries to answer from your knowledge base, it hands over only when a person is needed, and it tells the visitor what happens next.
Deflection in front of the helpdesk is the setup where an AI support agent on your website answers what your help content already covers, so only conversations that need a person become tickets, each arriving with the context an agent needs to act.
Visitor asks a question in the website chat
|
+-- answer is in the knowledge base --> bot answers, no ticket
|
+-- a person is needed (one of the five triggers)
|
+-- bot collects name, email and a short description
+-- bot calls the helpdesk API: create ticket
+-- helpdesk returns the ticket number
+-- bot: "Ticket 5821 is open. The team will reply by email."
Later: "Any update on 5821?" --> bot calls: get ticket --> status and last update
The helpdesk sees each ticket as an API request from one of its own users: the agent who approved the OAuth connection in Zendesk, the agent whose API key you pasted in Freshdesk, or the Zoho user who granted access. Give that account ticket permissions and nothing more.
The three APIs differ in the details.
| Zendesk | Freshdesk | Zoho Desk | |
|---|---|---|---|
| Create endpoint | POST /api/v2/tickets | POST /api/v2/tickets | POST /api/v1/tickets |
| Authentication for a new connection | OAuth; no new API tokens from 27 Oct 2026 | Agent API key over basic auth | OAuth 2.0, plus an orgId header |
| Required on create | The first comment, which becomes the description | A requester identifier such as an email | Subject, department ID and a contact |
| Visitor email not yet known | A new user is created | A new contact is created | A new contact is created |
| Status values | new, open, pending, hold, solved, closed | 2 Open, 3 Pending, 4 Resolved, 5 Closed | System or custom statuses under Open, On Hold and Closed |
| How PepoChat connects | OAuth card; legacy API token form | API key | One-click OAuth, or a Self Client |
| What the AI reads after creating | ID, status, subject | ID, subject, status | ID, ticket number, status, subject |
| What the AI reads on a status check | ID, status, subject, last update | ID, subject, status, last update | Ticket number, status, subject, last modified time |
API rows read in each vendor's developer documentation on 19 October 2026; PepoChat rows from its integration templates.
In PepoChat, handing over takes two separate tools. Escalation moves the chat to the team inbox and emails your team; the create-ticket action files a ticket in your helpdesk when a conversation matches the action's "when to use" text. Actions run only while the agent is still answering, so the ticket must be filed before the chat is escalated.
Whatever product you use, ask how it holds the helpdesk credential. PepoChat encrypts keys and tokens with AES-256-GCM and never shows them again, calls out over HTTPS only with a 10-second timeout and no redirects, and lets the AI read only each action's allowed response fields. One limit: any workspace member can connect and edit integrations. The integrations overview has the rest.
What should a chatbot put in a helpdesk ticket?
A good bot-created ticket lets an agent act without opening the chat. The table lists the fields worth sending, why each one matters, an example, and what PepoChat's prebuilt actions send today.
| Field | Why it matters | Example | PepoChat's prebuilt action |
|---|---|---|---|
| Requester email | The reply goes there, and the helpdesk links the ticket to an existing customer | [email protected] | Sent to all three helpdesks |
| Requester name | Agents greet people by name, and duplicates are easier to spot | Priya Shah | Sent to Zendesk and to Zoho Desk (as the contact's last name); not sent to Freshdesk |
| Subject | One line an agent can triage and search | Left earbud silent after three weeks | Sent, written by the AI from the visitor's words |
| Problem summary | One paragraph instead of a transcript | Left side of the X2 headphones stopped working; bought in September | Sent as the description, written by the AI |
| What the bot already tried | Stops the agent repeating an answer that failed | Sent the reset steps from the troubleshooting page; no change | Not asked for by default; add it to the details input's description |
| Order, account or plan ID | The agent can look it up without asking again | Order 10482 | Asked for by default when the visitor shared one |
| Source tag | Lets you count and route bot-created tickets | website-chat | Not sent; add a fixed tag to the body in Zendesk or Freshdesk |
| Priority and queue | Puts the ticket in front of the right group | Billing group, Returns department | Freshdesk: open and low priority; Zoho Desk: the department you set; Zendesk: your triggers decide |
| What the visitor was told | The team keeps the bot's promise | Reply by email within one business day | Not asked for by default; add it to the details description |
| Transcript and page URL | Exact wording and context | The full chat | Not sent; the transcript stays in PepoChat's team inbox |
PepoChat's create actions send what the AI collects in the chat: a subject, the details, the visitor's email and, for Zendesk and Zoho Desk, the name. The details are a summary the AI writes from the input's description, which by default asks for what the customer reported plus any relevant IDs. No transcript, page address or verification status is attached, and the email is whatever the visitor typed, so a typo sends the ticket to the wrong address.
The details description is editable, up to 200 characters, and it is the cheapest way to fill the missing rows, for example: "Summary of the problem, steps the visitor already tried, the answer you gave, any order or account number, and what you said happens next." To label tickets, add a fixed field to the action's JSON body. Zendesk and Freshdesk both accept a tags array on create, so the Zendesk body becomes:
{ "ticket": { "subject": "{{subject}}", "comment": { "body": "{{details}}" }, "requester": { "name": "{{customer_name}}", "email": "{{customer_email}}" }, "tags": ["website-chat"] } }
Keep a copy of your edits, because reconnecting the Zendesk integration resets them.

How do you connect a chatbot to Zendesk?
Connect through Zendesk's Tickets API with OAuth. Zendesk's announcement of 1 June 2026, read on 19 October 2026, removes API tokens in stages: accounts created from 28 July 2026 cannot use them, tokens unused for 30 days are deactivated, nobody can create a new one from 27 October 2026, and every remaining token stops working by 30 April 2027.
The ticket is one request. Zendesk's Tickets API reference documents POST /api/v2/tickets, whose only required property is the comment, which becomes the description. A requester object with a name and an email makes the visitor the requester; Zendesk creates a user for an unknown email and reuses an existing one unchanged.
Steps in PepoChat
- Open Integrations → Zendesk and enter your subdomain, the part before
.zendesk.com, in the Connect with OAuth card. - If the card asks for a client identifier and secret, open Admin Center → Apps and integrations → APIs → OAuth clients → Add OAuth client in Zendesk.
- Name the client PepoChat, set Client kind to Confidential, paste the redirect URL
https://app.pepochat.com/api/integrations/oauth/callback, leave the scopes empty and save. - Copy the Identifier and the Secret, which Zendesk shows only once, into the card.
- Click Connect Zendesk and approve
tickets:readandtickets:write. Both actions are created and switched on, and tickets are created as the approving agent. - Click Test on the status check with a real ticket number. Testing the create action files a real ticket, so use your own address.
An existing API token still works in the Set up manually instead card until the cutoff. If the approving agent leaves Zendesk, Test shows a token error; click Reconnect.
Do Zendesk triggers and macros still work?
Yes. Zendesk's article on how triggers work says ticket triggers run any time a ticket is created or updated and groups API submissions with email and web form tickets, so routing, tagging and notification triggers fire on bot tickets as usual. Macros are untouched, since Zendesk describes a macro as a prepared response or action an agent applies by hand. Check any trigger that emails new requesters, because the visitor would receive that email too.
How do you connect a chatbot to Freshdesk?
Freshdesk authenticates API calls with an agent's API key, so the bot acts as that agent. The Freshdesk API v2 reference documents POST /api/v2/tickets, which needs a requester identifier such as an email and creates a contact for an unknown one; status defaults to 2 (Open), priority to 1 (Low) and source to 2 (Portal).
Steps in PepoChat
- In Freshdesk, an admin opens Admin (gear) → Team → Agents, opens the agent the bot will act as, and turns on API access. A dedicated agent with ticket permissions only is the safest choice.
- Signed in as that agent, click the profile picture, open Profile settings → View API Key and copy the key.
- In PepoChat, open Integrations → Freshdesk, enter the subdomain and the key, tick both actions and click Add actions.
- Test Check Freshdesk ticket status with a real ticket number, then switch the actions on, because actions added with a key start switched off.
PepoChat's action sends the email, subject and description with status 2 and priority 1, so bot tickets land open and at low priority. The create endpoint also takes a group_id for routing, a tags array, and a source, where 7 means Chat, so fixed fields in the body route and label bot tickets without asking the visitor anything more:
{ "email": "{{customer_email}}", "subject": "{{subject}}", "description": "{{details}}", "status": 2, "priority": 1, "source": 7, "tags": ["website-chat"] }
The status check reads the ticket number, subject, status and last update. PepoChat tells the AI what Freshdesk's status numbers mean (2 open, 3 pending, 4 resolved, 5 closed), so the visitor hears "pending", not "3".
How do you connect a chatbot to Zoho Desk?
Zoho Desk authenticates API calls with OAuth 2.0 tokens and expects your organization ID in an orgId header on ticket requests. Its create endpoint, in the Zoho Desk API documentation, requires a subject, a department ID, and a contact ID or a contact object with an email or a last name; an email Zoho Desk has not seen creates a new contact.
Steps in PepoChat
- Open Integrations → Zoho Desk and click Connect Zoho Desk if it is shown.
- Approve access on Zoho's consent screen. PepoChat asks only to read and create tickets, to search, and to read contacts and basic data such as departments.
- Back in PepoChat, confirm both actions are on. Your data center is detected automatically, and tickets go to your default organization's first enabled department.
- To file into another department, edit Create Zoho Desk ticket and change
departmentIdin its body. - Test Check Zoho Desk ticket status with a real ticket number.
Without one-click, the manual card takes a Self Client from the Zoho API Console with the scopes Desk.tickets.ALL, Desk.contacts.READ and Desk.search.READ. Leave out the search scope and status lookups fail, because PepoChat finds a Zoho ticket by searching for its number. The visitor's full name goes into the contact's last-name field.
A Zoho Desk department is a separate ticket queue with its own agents. Every ticket belongs to one, and only tickets in the same department can be merged, so a business with separate billing and technical departments can run two create actions with different departmentId values and "when to use" texts.
When should the chatbot hand over or open a ticket? Five triggers
Use the five triggers from any good human handoff: the visitor asks for a person, the knowledge base has nothing relevant, the request involves money, an account change or a judgement call, the visitor is frustrated or the bot has failed twice, or a policy rule applies. The human handoff guide explains each one; the table shows where each should land.
| Trigger | Example | Best destination | What PepoChat does |
|---|---|---|---|
| 1. The visitor asks for a person | "Can I talk to someone?" | Live chat if someone is on shift, otherwise email follow-up | Escalates to the team inbox at once and emails every member |
| 2. Nothing relevant in the knowledge base | A question your help content never covers | Offer a person; a ticket when the issue needs follow-up | Says it has no information and offers a person; a yes escalates |
| 3. Money, an account change or a judgement call | Refund, chargeback, deleting an account | A ticket for a person, never an automated action | No built-in rule: list these requests in the ticket action's "when to use" text |
| 4. Frustration or repeated failure | The third rephrasing of one question | A person, offered without waiting to be asked | Offers a person; a failed tool or reply escalates automatically |
| 5. A policy rule | Outside business hours, a plan's reply cap | A ticket or an email follow-up with an honest wait | Asks once for an email when nobody can reply live, then escalates; a Free workspace over its 200-reply cap escalates new chats |
The create action follows its "when to use" text, and PepoChat's default tells the AI to use it when an issue needs a person's follow-up and should be tracked in the helpdesk. Edit it, up to 500 characters, to name your trigger 3 topics, such as refunds, billing disputes or account deletion, and to set the order: collect the details, file the ticket, give the number, then hand over. The human handoff docs show what the agent says at each escalation.
Keep money with people. PepoChat's documentation advises against wiring refunds or payments as actions, because an action that writes to another system can, rarely, run twice.

Can visitors check a ticket's status from the chat without leaking data?
Yes, if the bot looks a ticket up only by its number, returns only impersonal fields, and keeps anything personal behind a verified email. A verified visitor is one who has proved control of an email address, for example by typing a one-time code sent to that inbox.
PepoChat's three status checks follow the first two rules. The ticket number must be digits only, up to 12, and is checked before any request goes out. The AI then reads only the number, status, subject and last update, because every action has an allow-list of response fields, so the requester's email and the comments never reach the model.
The checks are not gated by verification, and ticket numbers are easy to guess: Zendesk's developer guide notes that some numbers are skipped when a creation fails, a sign they are issued in sequence. A stranger who types 5822 instead of 5821 hears that ticket's status and subject. Three settings close the gap:
- Trim the allow-list. Remove the subject (
ticket.subjectin Zendesk,subjectin Freshdesk,data.0.subjectin Zoho Desk) and a guessed number reveals only a status and a date. - Ask for verification in the "when to use" text, for example "Only use this after the visitor has verified their email." That makes the agent ask, but the agent is not told whether the visitor completed the check, so it is a speed bump rather than a lock, and the trimmed allow-list above is the real limit.
- Leave the check switched off if you do not need it. The create action works without it.
PepoChat's verification sends a six-digit code that expires after 10 minutes and allows 5 attempts, as the verification docs describe. Verification unlocks meeting memory, bookings with the visitor's verified details and the emailed transcript; integration lookups, ticket checks included, are not gated by it. The chatbot verification guide explains which lookups deserve a code.
How do you stop a chatbot from creating duplicate tickets?
Reduce duplicates where you can and make the rest cheap to clean up, because a bot's create call can occasionally run twice. PepoChat's actions use at-least-once execution: if a step is retried after a transient failure that happened after the helpdesk accepted the request, the ticket is created again. That is rare, and a duplicate ticket is a nuisance rather than a loss.
Bot duplicates look alike: same requester, near-identical subject, created minutes apart. A view filtered on your bot tag and sorted by requester shows them, and each helpdesk can merge them.
| Helpdesk | How to merge | What happens | Can it be undone? |
|---|---|---|---|
| Zendesk | Ticket options menu → Merge into another ticket, or POST /api/v2/tickets/{ticket_id}/merge | The merged ticket is closed and tagged closed_by_merge; it must be below Solved | No, merges are permanent |
| Freshdesk | PUT /api/v2/tickets/merge with a primary ticket and the tickets to merge | Conversations from the secondary tickets move into the primary, with a note added to each | No unmerge is documented in the API reference; treat it as permanent |
| Zoho Desk | Tickets → select the tickets → Mass Actions → Merge, or POST /api/v1/tickets/{ticket_id}/merge | Up to 5 tickets at a time, same department only; merged tickets go to the Recycle Bin | No, merged tickets cannot be unmerged |
Read on 19 October 2026 in Zendesk's merging article and Tickets API reference, the Freshdesk API v2 reference, and Zoho Desk's merging tickets article, which also requires the Find and Merge permission.
A de-duplication key is a value that identifies one real-world request, so a second create carrying the same key can be recognised and skipped. Zendesk's external_id field links tickets to your own records, and the API can list tickets by external ID, but Zendesk says external IDs need not be unique, so your code must look the key up before creating a ticket.
Freshdesk's unique_external_id identifies the requester, not the ticket, and Zoho Desk's create attributes list no external ID for tickets, so a search before the create is the defence in both.
PepoChat's prebuilt actions send no de-duplication key, and the conversation ID is not an input an action can use. If duplicates ever matter enough to automate, point a custom action at an endpoint of your own that returns an open ticket with the same email and subject from the last few minutes, or creates one. For most teams the merge button is the cheaper answer.
Do you still need the helpdesk's own AI agent?
Not for website chat, if a standalone AI support agent answers there and files tickets; yes, if you also want AI answering email, messaging or voice inside the helpdesk. Each helpdesk meters its own AI differently.
| Helpdesk | Its AI for customers | How the AI is billed | Seat prices, annual billing |
|---|---|---|---|
| Zendesk | AI agents | 5 automated resolutions per agent a month on Support Team and Suite Team, 10 on Suite Professional; then $1.50 each committed or $2.00 pay-as-you-go | $19 Support Team, $55 Suite Team, $115 Suite Professional per agent a month |
| Freshdesk | Freddy AI Agent | 500 free sessions, once per account; then $49 per 100 sessions | $19 Growth, $55 Pro, $89 Enterprise per agent a month |
| Zoho Desk | AI Agents (Zoho's model or your own key), Answer Bot, Zia | AI Agents on every paid edition with up to 30 million free tokens a month; Answer Bot from Standard; Zia from Professional | $7 Express, $14 Standard, $23 Professional, $40 Enterprise per user a month |
| PepoChat (website only) | AI support agent | AI replies: 200 a month free, 2,000 for $49, 10,000 for $149, then $10 per 1,000 on paid plans | Flat plans with 1, 3 or 10 members; extra members $15 a month on paid plans |
Last verified 19 October 2026 on the Zendesk, Freshworks and Zoho Desk pricing pages and PepoChat's pricing page; the Zoho Desk US dollar prices come from the price data its pricing page loads.
Zendesk bills automated resolutions, Freshdesk bills sessions, which its pricing FAQ defines as a unique interaction between an end user and the AI Agent, and Zoho Desk counts tokens. A conversation the website agent answers never reaches the helpdesk, so it is never billed there; only the tickets the bot files arrive.
The Freshdesk vs Zendesk comparison works a monthly bill on both, and the Zendesk AI agent decision guide covers when Zendesk's own AI is the better path. Avoid running two AI agents on one page: visitors see two chat bubbles and two sets of answers.
How do you measure whether the chatbot reduces tickets?
Compare two things over the same weeks before and after launch: the share of website conversations that never became a ticket, and the first response time on the tickets that did. Tag bot tickets from day one so you can separate them.
| Metric | How to calculate it | Where the numbers come from |
|---|---|---|
| Website conversations | All chats in the period | PepoChat inbox, Export CSV: one row per conversation, with its status |
| Conversations that needed a person | Escalated chats plus tickets the bot filed | The CSV status column, and a helpdesk view on the bot tag |
| Bot share of new tickets | Bot-tagged tickets divided by all new tickets | Helpdesk report filtered on the tag (in Zoho Desk, a custom field set in the action body) |
| First response time on bot tickets | Ticket creation to the first human reply | The helpdesk's own first response time report, filtered on the tag |
| Visitor satisfaction | Thumbs up versus thumbs down after resolved chats | PepoChat Analytics, Sentiments card, last 90 days |
PepoChat's Analytics shows sentiment votes and topics, not conversation volume or resolution rates, so the ratios come from the CSV export and your helpdesk. We publish no deflection figures for PepoChat, and any vendor number not measured on your own traffic deserves suspicion.
First response time on tickets may look worse at first. Once the bot answers the easy questions, the tickets left are the harder ones, so the average time to a first reply can rise while customers wait less overall. Compare the same topics, measured the same way. The first response time benchmarks explain the measurement traps, and the ticket reduction tactics cover what to fix when one topic keeps producing tickets.
What to do next
- Write your five triggers into the create action's "when to use" text before launch; the human handoff guide has wording for each one.
- Connect your helpdesk with the step list in the Zendesk, Freshdesk or Zoho Desk docs, and file one test ticket to your own address.
- Start a free PepoChat workspace: every feature is on the free plan, including the helpdesk actions, with 200 AI replies a month.
Frequently asked questions
- Can a chatbot create a Zendesk ticket automatically?
- Yes. Zendesk's Tickets API creates a ticket with one POST request whose only required property is the first comment. The chatbot collects the visitor's name, email and a short description, sends them and reads back the ticket number. Connect with OAuth: as of October 2026, Zendesk stops issuing new API tokens on 27 October 2026, and every remaining token stops working by 30 April 2027.
- What should a chatbot put in a support ticket?
- Enough for an agent to act without opening the chat: the requester's name and email, a one-line subject, a short summary of the problem, what the bot already tried or answered, any order or account number, and what the visitor was told would happen next. A fixed tag such as website-chat lets you count and route the tickets the bot files.
- Will a chatbot break my Zendesk triggers and macros?
- No. A ticket created through the API is an ordinary ticket, and Zendesk runs ticket triggers whenever a ticket is created or updated, so routing, tagging and notification rules apply as usual. Macros are applied by agents by hand, so they are unaffected. Test once with your own address, because a trigger that emails new requesters will email the visitor too.
- Can a chatbot check the status of a support ticket?
- Yes, with a lookup by ticket number that returns only impersonal fields. PepoChat's status checks for Zendesk, Freshdesk and Zoho Desk accept digits only and let the AI read just the number, status, subject and last update. Ticket numbers are guessable and the checks are not gated by email verification, so trim the subject from the allowed fields; a request to verify first only makes the agent ask.
- Do I still need Zendesk's own AI agent if I use a website chatbot?
- Not for website chat. As of 19 October 2026, Zendesk includes 5 automated resolutions per agent a month on its Team plans and 10 on Suite Professional, then charges $1.50 each on a commitment or $2.00 pay-as-you-go. A standalone agent can answer the website and file tickets; keep Zendesk's AI if you want it on email, messaging or voice as well.
- How do I stop a chatbot from creating duplicate tickets?
- Expect the occasional duplicate, because a bot's create call can run twice after a retry, and make cleanup cheap. Tag bot tickets, check a view sorted by requester, and merge: Zendesk and Zoho Desk merges are permanent, and Zoho Desk merges up to five tickets from one department at a time. Where you control the code, search for an existing ticket before creating one.
Try this on your own site in ten minutes
PepoChat includes every feature on the free plan — 200 AI replies and 5 knowledge sources a month, no credit card.
Keep reading
Chatbase vs PepoChat: Which AI Support Agent Fits Your Team in 2026?
An honest side-by-side of Chatbase and PepoChat on pricing, free plan or trial, sources, handoff, booking, actions, channels and voice, and a pick by team type.
Intercom Fin Pricing Explained, and What a Flat-Plan Alternative Costs
What Intercom Fin's $0.99 per outcome adds up to once you count resolutions and seats, with a worked 2,000-conversation example and when a flat plan wins.
