Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.
The Freshdesk integration uses the of a dedicated OpenCX agent to read and write tickets, plus two Freshdesk automation rules that push ticket events back to OpenCX.
Setup takes about 15 minutes. You need admin access in both Freshdesk and your
OpenCX organization, and a Freshdesk Growth, Pro, or Enterprise plan — the
webhook automation action isn’t available on the free plan.
Create a dedicated agent in Freshdesk (for example OpenCX AI) and give it admin privileges. The AI posts replies as this agent, so customers see its name on every AI message — don’t reuse a person’s account. Admin is a hard requirement: OpenCX needs it to tell agents and contacts apart at runtime, and verification rejects non-admin API keys.
Ticket scope: Global Access (all tickets)
Set the agent’s Scope to Global Access (all tickets) under Admin → Agents → [the OpenCX agent] → Scope. This is separate from the admin role and is not checked at connect time — a restricted-scope admin key verifies fine, then silently fails: OpenCX reads each ticket back from the API, and Freshdesk returns 403 “You are not authorized to perform this action” for any ticket outside the agent’s scope, so those tickets never appear in your inbox.
Auto-handle-all intake → Global Access is required (the AI must read every new ticket).
Assigned-only intake → Global Access is still strongly recommended. “Group Access” works only if the AI agent belongs to every group whose tickets it receives; “Restricted (assigned tickets only)” reads only tickets already assigned to the agent and 403s on anything routed by group or default-group rules.
Permission to create automation rules
Webhook delivery runs through two automation rules you create under Admin →
Workflows → Automations. Only Freshdesk admins can create them.
The API key inherits the OpenCX agent’s role and scope. The agent must be able to do everything below — granting admin + Global Access scope covers all of it in one step.
Capability
Why OpenCX needs it
Enforced at connect?
Admin role
Read agents (/agents) to tell agents from contacts and attribute replies/notes correctly
✅ Yes — non-admin keys are rejected
Global Access ticket scope
Read every ticket the AI must handle (GET /tickets/{id}); a narrower scope 403s on out-of-scope tickets
❌ No — verify silently passes, then tickets vanish at runtime
Reply to tickets & add notes
Post AI replies (autopilot) and private drafts (assist mode)
❌ No
Edit ticket properties & assign tickets
Sync tags/status, set the handoff marker field, and route handoffs to an agent or group
❌ No
Read contacts
Resolve the requester’s name/email for the session
❌ No
Create automation rules
Build the two Trigger Webhook rules that push events to OpenCX
❌ No (Freshdesk-side)
Only the admin check runs at connect — ticket scope is not verified. A Global-Access admin is the safe default; anything narrower connects successfully and then silently drops tickets with a 403. If tickets stop appearing, check the agent’s Scope first.
Your Freshdesk domain — for example yourcompany.freshdesk.com. Include the full domain, do not prefix with https://.
API Key
The OpenCX agent’s API key you just copied.
Click Verify. OpenCX calls the Freshdesk API, confirms the key belongs to an admin agent, and shows the connected agent’s name and email so you can confirm it’s the right account. A wrong domain, bad key, or non-admin agent returns an error and nothing persists.
4
Pick an intake mode
The Auto Handle All Incoming Tickets toggle controls which new tickets the AI picks up.
Auto-handle all incoming tickets (toggle on)
The AI answers every new ticket regardless of assignment. Use this when the AI is the front door to your helpdesk.
Assigned-only (toggle off)
The AI only answers new tickets that Freshdesk has assigned to the OpenCX agent, or that land in the Default Group you select. Use this when your existing Freshdesk routing rules decide which tickets go to the AI.
The gate applies to new tickets only — once OpenCX is tracking a ticket, status and replies keep syncing even after handoff.
5
Choose the handoff routing
Choose what OpenCX should do in Freshdesk after the AI hands off to a human.
Routing
What happens
When to use it
Unassign ticket(default)
OpenCX removes the OpenCX agent from the ticket and reopens it.
Use this when your team works from the unassigned queue or manually triages handoffs.
Let Freshdesk automation route
OpenCX unassigns the ticket and sets the handoff marker field — routing only happens if you have an automation rule keyed on the marker.
Use this when routing should stay inside Freshdesk rules and queues.
Assign to a specific agent
OpenCX assigns the ticket to the Handoff Agent ID you enter and sets the marker.
Use this for a fixed fallback agent or small teams without routing automation.
Assign to a group
OpenCX assigns the ticket to the Handoff Group you select and sets the marker.
Use this when a team queue should receive handoffs.
For the marker-based routings, OpenCX sets a custom checkbox ticket field on handoff. Create it in Freshdesk under Admin → Workflows → Ticket fields:
Field
Value
Label
OpenCX handed off
Internal/API name
cf_opencx_handed_off
Type
Checkbox
Then select it as the Handoff Marker Field in OpenCX. If you point your automation at the marker, make sure those rules never route marked tickets back to the OpenCX agent.
If a configured handoff target becomes invalid later (agent deleted, group removed), OpenCX never leaves a handed-off ticket assigned to the AI — it falls back to unassigning and setting the marker so your rules can still catch it.
6
Optional: additional AI agents
By default the AI answers as the one connected agent. If different customers should see different names — one support persona per region or brand, say — create a Freshdesk agent for each persona, then tick them under Additional AI agents. The connected agent is always included.A ticket assigned to any ticked agent is handled by the AI and answered as that agent: its name on the reply, its own Freshdesk signature. Your Freshdesk assignment rules decide which persona a customer sees, so route each mailbox, group, or product to the matching agent. Reassigning a ticket from one AI agent to another switches the persona on the next reply; assigning it to a person still hands it off.
Only agents in your Freshdesk account can be ticked. Give each persona agent its own name and signature in Freshdesk — OpenCX reads both from there.
7
Optional: assist-mode footer
If you run on any channel, the AI posts drafts as private notes. The Assist Mode
Footer text is appended to each draft so reps can tell AI drafts from human
notes at a glance.
8
Save and copy your webhook URL
Click Save. OpenCX validates the credentials again, stores the settings, and displays a Webhook URL unique to your organization, plus the two JSON payloads for the next step.On first connect, OpenCX also runs a one-time backfill: open and pending tickets from the last ~180 days are imported into your inbox as history. The backfill never triggers AI replies on old tickets.
The webhook URL contains a signed token tied to your organization. Anyone with it can post events into your OpenCX pipeline. Treat it like a password.
9
Create the two automation rules in Freshdesk
In Freshdesk, open Admin → Workflows → Automations and create two rules. Both use the action Trigger Webhook with request type POST, encoding JSON, content Advanced, pointing at your OpenCX webhook URL.Rule 1 — Ticket Creation tab. Trigger on ticket creation and paste Payload 1 from the OpenCX dialog:
Rule 2 — Ticket Updates tab. Set Action performed by to Agent or requester (the default, Agent, silently drops customer replies), trigger on Agent is changed, Reply is sent, Note is added, and Ticket property changed (Status), add at least one condition (Freshdesk requires one; Source is any of Email works, but never a group or agent condition, since a new ticket is not assigned yet), and paste Payload 2:
These optional fields are performance hints, not requirements:
assigneeId / groupId let OpenCX skip tickets that aren’t for the AI agent without an extra API call.
requesterEmail / requesterName / requesterPhone let OpenCX identify the customer without a separate contact lookup.
They’re safe to include even if your Freshdesk plan doesn’t expose a placeholder — unresolved or empty values are ignored, and OpenCX always re-reads the ticket from the API before acting.
Without Rule 1, the AI never sees new tickets. Without Rule 2, customer replies don’t reach the AI and status changes in Freshdesk don’t sync back to OpenCX.
Assigned-only intake with a shared queue? If the AI agent receives tickets through Freshdesk’s automatic assignment (round-robin / load-balanced queue) rather than being assigned at creation, the Agent is changed trigger on Rule 2 is what tells OpenCX the ticket is now the AI’s. Without it, newly assigned tickets only surface when a later reply or status change happens. Note that Freshdesk may not fire automation rules for assignments performed by automatic assignment — if auto-assigned tickets still don’t appear, assign the AI agent from a rule that also triggers the webhook, or have that rule fire on creation. Verify with a manual reassignment first: it should produce a ticket in your OpenCX inbox within seconds.
10
Create a test ticket
Open a ticket as an end user (or use the Freshdesk portal). Within a few seconds:
A new session appears in your OpenCX Inbox — email tickets land on the Email channel, portal/chat tickets on Web, phone tickets on Phone.
The AI’s answer appears on the Freshdesk ticket as the OpenCX agent — a public reply in autopilot, a private note in assist mode.
Once ticketing is connected, the Freshdesk dialog offers Import from Freshdesk. It brings your existing Freshdesk tickets into OpenCX as sessions, each with the customer’s first message and the full thread of replies and notes, attributed to the agents who wrote them. Closed tickets arrive closed, with their original dates.Before anything starts, OpenCX checks the saved credentials against your account and shows what it found: how many tickets and contacts there are, whether the OpenCX agent can see every ticket and read your Freshdesk mailboxes, and whether your account archives old tickets. Fix anything that fails in Freshdesk, save the credentials again, and retry.A few things to know:
The import runs in the background and can take days for large accounts, because Freshdesk limits how quickly history can be read. You can close the dialog and check back.
To try it on a few sessions first, pick a date under Import tickets updated since: only tickets updated on or after it are imported, and the sync finishes much sooner. Leave it on All history to import everything. A later import with an earlier date brings in the rest.
Unresolved tickets are imported before resolved and closed ones, so your team can pick up open work while the rest of the history is still arriving.
It never replies to anyone. Imported sessions are history, not new conversations, and nothing is sent to your customers or to Freshdesk.
Each imported email ticket keeps the support address the customer wrote to, its subject, and everyone copied on it. Once that address is connected as an email inbox in OpenCX, agents can reply on the imported session and the customer gets the reply by email. A customer who answers an email Freshdesk sent them before the switch lands on the same imported session, as long as their reply keeps the quoted Freshdesk email.
Every session the import creates is tagged FRESHDESK, so imported history is one filter away in the inbox.
Running it again later only adds tickets that are new or changed since the previous run.
If your Freshdesk plan archives tickets, closed tickets inactive for more than 120 days are not reachable and are not imported. The check tells you when this applies.
File attachments are listed by name on each message but the files themselves are not copied.
If you regenerate the OpenCX agent’s API key in Freshdesk, paste the new key into Settings → Integrations → Freshdesk and save. The saved key is never displayed back — the field is blank on edit and you re-enter it to change credentials. The webhook URL does not change when you rotate the key.
In OpenCX, open the Freshdesk integration and click Disconnect. Then in Freshdesk, delete the two automation rules. Tickets already imported stay in your OpenCX inbox; no new Freshdesk events flow in, and the AI stops posting on tickets.
How tickets match to sessions, how handoff routes them, how resolutions
sync.
Troubleshooting
Verification failing, webhook silent, handoff not routing.
Overview
What the Freshdesk integration does and how it fits with your team.
Human handoff
Global handoff rules and office hours.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Open.cx Docs","description":"Documentation for OpenCX, an AI-powered omnichannel customer support platform. Build AI agents for chat, phone, email, WhatsApp, and SMS with knowledge bases, actions, and human handoff.","colors":{"primary":"#0A0A0A","light":"#FAFAFA","dark":"#0A0A0A"},"logo":{"light":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo-light.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=f6a5e94f4909a4d8df45757989c11afe","dark":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=84cc8ee0de542d166e76b53651f4f4e8"},"favicon":"https://mintcdn.com/openchat/ivWwffb57vEmukK4/favicon.png?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=68fa269328f9c95d4404b9073ac8aa37","api":{"openapi":"https://api.open.cx/api-json","playground":{"display":"interactive"},"mdx":{"server":"https://api.open.cx"}},"appearance":{"default":"dark","strict":false},"background":{"decoration":"gradient","color":{"light":"#FFFFFF","dark":"#0A0A0A"}},"navbar":{"links":[{"href":"https://platform.open.cx","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"https://open.cx"}},"seo":{"metatags":{"og:type":"website","og:site_name":"OpenCX Docs"},"indexing":"all"},"fonts":{"heading":{"family":"Inter Tight"},"body":{"family":"Inter"}},"styling":{"eyebrows":"section","codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"openchat","hasAudioNarration":false,"actualSubdomain":"openchat","customDomains":["docs.open.cx"],"gitSource":{"type":"github","owner":"opencx-labs","repo":"opencx","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad6401bfe9852ea8b37afe0","collectionId":"ddef317f-acd4-4ece-a855-2a6898357854","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad6401bfe9852ea8b37afe0"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{},"buildId":"6ad640d38c94eda9510ee4db","clientVersion":"0.0.3883","searchFilterCounts":[{"language":"default","tag":"API Reference","count":320},{"language":"default","tag":"Integrations","count":113},{"language":"default","tag":"Ticketing Systems","count":100},{"language":"default","tag":"Build Agents","count":63},{"language":"default","tag":"Agent Training","count":53},{"language":"default","tag":"Help Center","count":45},{"language":"default","tag":"Sequences","count":39},{"language":"default","tag":"Channels","count":37},{"language":"default","tag":"Setup Integration","count":32},{"language":"default","tag":"Main Knowledge Sources","count":30}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"@keyframes orbit{0%{transform:rotate(calc(var(--angle)*1deg)) translateY(calc(var(--orbit-radius)*-1px)) rotate(calc(var(--angle)*-1deg))}to{transform:rotate(calc(var(--angle)*1deg + 360deg)) translateY(calc(var(--orbit-radius)*-1px)) rotate(calc(var(--angle)*-1deg - 360deg))}}@keyframes docs-footer-status-pulse{0%,to{box-shadow:0 0 0 0 rgba(16,185,129,.55)}50%{box-shadow:0 0 0 5px transparent}}:root{--radius:0.375rem;--radius-sm:0.125rem;--radius-md:0.25rem;--radius-lg:0.375rem;--radius-xl:0.75rem;--radius-2xl:1.125rem;--radius-3xl:1.5rem;--radius-full:9999px}.card,.card-group .card,.card-group card,card,card-group card{border-radius:var(--radius-3xl)}#search-bar-entry,#topbar-cta-button>a,#topbar-cta-button>a>span.absolute,.accordion,.accordion-group .accordion,.callout,.zendesk-flow .zendesk-flow-frame,[data-accordion-item],[data-accordion],accordion,accordion-group accordion,callout,div[class*=language-],div[class*=language-] pre,figure.shiki,pre,pre.shiki,pre>code{border-radius:var(--radius-xl)}.integration-orbit a[href]{touch-action:manipulation}.integration-orbit a[href] img{pointer-events:none}:root{--docs-context-bg:#ffffff;--docs-context-bg-hover:#f5f5f5;--docs-context-border:rgba(10, 10, 10, 0.16);--docs-context-border-strong:rgba(10, 10, 10, 0.32);--docs-context-text:#0a0a0a;--docs-context-muted:rgba(10, 10, 10, 0.6);--docs-context-accent:#0a0a0a;--docs-context-trigger-bg:linear-gradient(180deg, rgba(10, 10, 10, 0.04), transparent 48%),\n var(--docs-context-bg);--docs-context-trigger-bg-hover:linear-gradient(180deg, rgba(10, 10, 10, 0.07), transparent 52%),\n var(--docs-context-bg-hover);--docs-context-trigger-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.9),\n 0 1px 2px rgba(15, 23, 42, 0.04);--docs-context-menu-bg:radial-gradient(circle at top right, rgba(10, 10, 10, 0.05), transparent 38%),\n linear-gradient(180deg, #ffffff, #fafafa);--docs-context-menu-border:rgba(10, 10, 10, 0.14);--docs-context-menu-shadow:0 24px 60px rgba(15, 23, 42, 0.16),\n 0 0 0 1px rgba(10, 10, 10, 0.06);--docs-context-hover-text:#0a0a0a;--docs-context-item-hover:rgba(10, 10, 10, 0.06);--docs-context-divider:rgba(10, 10, 10, 0.1)}html.dark{--docs-context-bg:#0a0a0a;--docs-context-bg-hover:#161616;--docs-context-border:rgba(255, 255, 255, 0.2);--docs-context-border-strong:rgba(255, 255, 255, 0.36);--docs-context-text:#fafafa;--docs-context-muted:rgba(250, 250, 250, 0.72);--docs-context-accent:#fafafa;--docs-context-trigger-bg:linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 42%),\n var(--docs-context-bg);--docs-context-trigger-bg-hover:linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 48%),\n var(--docs-context-bg-hover);--docs-context-trigger-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.05),\n 0 0 0 1px rgba(255, 255, 255, 0.08);--docs-context-menu-bg:radial-gradient(circle at top right, rgba(255, 255, 255, 0.08), transparent 34%),\n linear-gradient(180deg, #121212, #050505);--docs-context-menu-border:rgba(255, 255, 255, 0.14);--docs-context-menu-shadow:0 24px 60px rgba(0, 0, 0, 0.42),\n 0 0 0 1px rgba(255, 255, 255, 0.08);--docs-context-hover-text:#ffffff;--docs-context-item-hover:rgba(255, 255, 255, 0.1);--docs-context-divider:rgba(255, 255, 255, 0.12);--primary:250 250 250;--primary-light:245 245 245;--primary-dark:10 10 10}#page-context-menu button[aria-label='More actions'],#page-context-menu-button{color:var(--docs-context-text)!important;background:var(--docs-context-trigger-bg)!important;border-color:var(--docs-context-border)!important;box-shadow:var(--docs-context-trigger-shadow)}#page-context-menu-button{border-right-color:var(--docs-context-divider)!important}#page-context-menu button[aria-label='More actions'] svg,#page-context-menu-button svg,body [data-radix-popper-content-wrapper] [role=menuitem] svg{color:var(--docs-context-accent)!important}#page-context-menu button[aria-label='More actions']:hover,#page-context-menu button[aria-label='More actions'][data-state=open],#page-context-menu-button:hover{color:var(--docs-context-hover-text)!important;background:var(--docs-context-trigger-bg-hover)!important;border-color:var(--docs-context-border-strong)!important}body [data-radix-popper-content-wrapper] [role=menu]{color:var(--docs-context-text)!important;background:var(--docs-context-menu-bg)!important;border:1px solid var(--docs-context-menu-border)!important;border-radius:var(--radius-xl)!important;box-shadow:var(--docs-context-menu-shadow)!important}body [data-radix-popper-content-wrapper] [role=menuitem]{color:var(--docs-context-text)!important;border-radius:var(--radius-lg)!important}body [data-radix-popper-content-wrapper] [role=menuitem] *{color:var(--docs-context-text)!important}body [data-radix-popper-content-wrapper] [role=menuitem] [class*=text-gray],body [data-radix-popper-content-wrapper] [role=menuitem] [class*=text-slate],body [data-radix-popper-content-wrapper] [role=menuitem] [class*=text-white],body [data-radix-popper-content-wrapper] [role=menuitem] [class*=text-zinc],body [data-radix-popper-content-wrapper] [role=menuitem] p{color:var(--docs-context-muted)!important}body [data-radix-popper-content-wrapper] [role=menuitem]:hover,body [data-radix-popper-content-wrapper] [role=menuitem][data-highlighted]{color:var(--docs-context-hover-text)!important;background:var(--docs-context-item-hover)!important}html:not(.dark) #sidebar{border-right:1px solid #e5e5e5!important}html.dark #sidebar{border-right:1px solid #262626!important}#sidebar,#sidebar *,#sidebar-content,#sidebar-content *{scrollbar-color:rgba(113,113,122,.4) transparent}#sidebar ::-webkit-scrollbar,#sidebar-content ::-webkit-scrollbar{width:8px;background:0 0}#sidebar ::-webkit-scrollbar-corner,#sidebar ::-webkit-scrollbar-track,#sidebar-content ::-webkit-scrollbar-corner,#sidebar-content ::-webkit-scrollbar-track{background:0 0}#sidebar ::-webkit-scrollbar-thumb,#sidebar-content ::-webkit-scrollbar-thumb{background-color:rgba(113,113,122,.4);border-radius:9999px!important;border:2px solid transparent;background-clip:content-box}#sidebar ::-webkit-scrollbar-thumb:hover,#sidebar-content ::-webkit-scrollbar-thumb:hover{background-color:rgba(113,113,122,.7)}html.dark #sidebar,html.dark #sidebar *,html.dark #sidebar-content,html.dark #sidebar-content *{scrollbar-color:rgba(161,161,170,.35) transparent}html.dark #sidebar ::-webkit-scrollbar-thumb,html.dark #sidebar-content ::-webkit-scrollbar-thumb{background-color:rgba(161,161,170,.35)}html.dark #sidebar ::-webkit-scrollbar-thumb:hover,html.dark #sidebar-content ::-webkit-scrollbar-thumb:hover{background-color:rgba(161,161,170,.6)}#sidebar-content>div>div.sticky.top-0.pointer-events-none.bg-gradient-to-b{background-image:none!important}html.dark #sidebar img[src*='/images/mcp/claude.svg'],html.dark #sidebar img[src*='/images/mcp/cursor.svg'],html.dark #sidebar img[src*='/images/mcp/windsurf.svg'],html.dark #sidebar img[src*='/images/mcp/zed.svg']{filter:invert(1) brightness(.92)}#navbar{box-shadow:none!important;row-gap:.25rem!important}html:not(.dark) #navbar{border-bottom:1px solid #e2e8f0!important}html.dark #navbar{border-bottom:1px solid #3f463f!important}#navbar #header,#navbar #navigation-items,#navbar navigation-items{border-bottom:none!important;box-shadow:none!important}#navbar .nav-tabs,#navbar nav-tabs{border-top:none!important;border-top-width:0!important;box-shadow:none!important}#navbar .h-16 .h-full.relative.flex-1.flex.items-center.gap-x-4.min-w-0{border-bottom:none!important;border-bottom-width:0!important;box-shadow:none!important}:not(pre)>code:is(.dark *){color:rgb(var(--primary-light))}:not(pre)>code{color:rgb(var(--primary))}html:not(.dark) #search-bar-entry{background-color:#fff!important;color:#404040}html:not(.dark) #navbar div.backdrop-blur{backdrop-filter:blur(14px) saturate(180%)!important;-webkit-backdrop-filter:blur(14px) saturate(180%)!important;background-color:rgba(255,255,255,.72)!important}html.dark #navbar div.backdrop-blur{backdrop-filter:blur(6px) saturate(125%)!important;-webkit-backdrop-filter:blur(6px) saturate(125%)!important;background-color:rgba(10,10,10,.6)!important}html:not(.dark) #topbar-cta-button>a>span.absolute{background-color:#0a0a0a!important}html:not(.dark) #topbar-cta-button>a .text-white{color:#fafafa!important}html.dark #topbar-cta-button>a>span.absolute{background-color:#fafafa!important}html.dark #topbar-cta-button>a .text-white,html.dark #topbar-cta-button>a svg{color:#0a0a0a!important}.nav-tabs-item>span>svg:first-child,.nav-tabs-item>svg{display:none!important}.toc-item{padding-left:12px!important;border-left:2px solid rgba(148,163,184,.22)!important;transition:border-color .18s ease,color .18s ease}html.dark .toc-item{border-left-color:rgba(148,163,184,.2)!important}.toc-item:hover{border-left-color:rgba(10,10,10,.45)!important}html.dark .toc-item:hover{border-left-color:rgba(250,250,250,.55)!important}.toc-item:has(>a[class*=text-primary]),.toc-item:has(>a[style*=color]){border-left-color:rgb(var(--primary))!important}html.dark .toc-item:has(>a[class*=text-primary]),html.dark .toc-item:has(>a[style*=color]){border-left-color:rgb(var(--primary-light))!important}button[data-state][aria-label],button[data-state][aria-label]>*,span.tooltip{cursor:help!important}#navbar .h-16 img[src*='logo.svg'],#navbar .h-16 img[src*=logo-light]{transform:scale(1.1);transform-origin:left center}#navbar .h-16>div>div:has(#search-bar-entry){justify-content:flex-end!important}#navbar .h-16>div>div.ml-auto.justify-end{flex:0 0 auto!important}.integration-orbit-grid-fade{background-image:linear-gradient(to right,rgb(0 0 0/.07) 1px,transparent 1px),linear-gradient(to bottom,rgb(0 0 0/.07) 1px,transparent 1px);background-size:16px 16px;background-position:center center;-webkit-mask-image:radial-gradient(72% 72% at 50% 50%,#000 0,#000 38%,transparent 82%);mask-image:radial-gradient(72% 72% at 50% 50%,#000 0,#000 38%,transparent 82%)}html.dark .integration-orbit-grid-fade{background-image:linear-gradient(to right,rgb(255 255 255/.08) 1px,transparent 1px),linear-gradient(to bottom,rgb(255 255 255/.08) 1px,transparent 1px)}.animate-orbit{animation:orbit var(--duration) linear infinite}.zendesk-flow-frame{background-image:radial-gradient(ellipse 80% 50% at 50% 50%,rgb(34 197 94/.04),transparent 70%)}html.dark .zendesk-flow-frame{background-image:radial-gradient(ellipse 80% 50% at 50% 50%,rgb(34 197 94/.06),transparent 70%)}.zendesk-flow-grid{background-image:linear-gradient(to right,rgb(0 0 0/.05) 1px,transparent 1px),linear-gradient(to bottom,rgb(0 0 0/.05) 1px,transparent 1px);background-size:24px 24px;background-position:center center;-webkit-mask-image:radial-gradient(80% 70% at 50% 50%,#000 0,#000 45%,transparent 90%);mask-image:radial-gradient(80% 70% at 50% 50%,#000 0,#000 45%,transparent 90%)}html.dark .zendesk-flow-grid{background-image:linear-gradient(to right,rgb(255 255 255/.05) 1px,transparent 1px),linear-gradient(to bottom,rgb(255 255 255/.05) 1px,transparent 1px)}#footer,.chat-assistant-floating-input,[class*=chat-assistant-floating]{display:none!important}.docs-footer{margin-top:5rem;padding-top:3rem;padding-bottom:1.5rem;border-top:1px solid rgba(228,228,231,.7);font-size:.875rem;color:rgb(82 82 91);line-height:1.5}html.dark .docs-footer{border-top-color:rgba(63,63,70,.35);color:rgb(161 161 170)}.docs-footer__top{display:flex;flex-direction:column;gap:2.5rem;padding-bottom:2.5rem;border-bottom:1px solid rgba(228,228,231,.55)}html.dark .docs-footer__top{border-bottom-color:rgba(63,63,70,.25)}@media (min-width:768px){.docs-footer__top{flex-direction:row;gap:3rem}}.docs-footer__brand{display:flex;flex-direction:column;gap:.75rem;max-width:16rem;flex-shrink:0}@media (min-width:768px){.docs-footer__brand{width:16rem}}.docs-footer__logo-link{display:inline-flex;width:fit-content}.docs-footer__logo{height:1.75rem;width:auto}.docs-footer__logo--dark,html.dark .docs-footer__logo--light{display:none}html.dark .docs-footer__logo--dark{display:inline-block}.docs-footer__desc{margin:.25rem 0 0;font-size:.8125rem;line-height:1.55;color:rgb(63 63 70)}html.dark .docs-footer__desc{color:rgb(212 212 216)}.docs-footer__label{margin:.75rem 0 .25rem;font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:rgb(82 82 91)}html.dark .docs-footer__label{color:rgb(161 161 170)}.docs-footer__socials{display:inline-flex;gap:.875rem;align-items:center}.docs-footer__socials a{display:inline-flex;align-items:center;justify-content:center;color:rgb(24 24 27);transition:opacity .15s ease}.docs-footer__socials a:hover{opacity:.65}html.dark .docs-footer__col-header,html.dark .docs-footer__socials a{color:rgb(244 244 245)}html.dark .docs-footer__socials a:hover{opacity:.7}.docs-footer__columns{flex:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem}@media (min-width:640px){.docs-footer__columns{grid-template-columns:repeat(3,minmax(0,1fr))}}.docs-footer__col{display:flex;flex-direction:column;gap:.5rem}.docs-footer__col-header{margin:0 0 .5rem;font-size:.8125rem;font-weight:700!important;color:rgb(24 24 27)}.docs-footer__col a{font-size:.8125rem;color:rgb(63 63 70);text-decoration:none;transition:color .15s ease}.docs-footer__col a:hover,.docs-footer__status:hover{color:rgb(24 24 27)}html.dark .docs-footer__col a{color:rgb(212 212 216)}html.dark .docs-footer__col a:hover,html.dark .docs-footer__status:hover{color:rgb(244 244 245)}.docs-footer__bottom{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem;padding-top:1.25rem}@media (min-width:640px){.docs-footer__bottom{flex-direction:row;align-items:center;justify-content:space-between}}.docs-footer__copy{font-size:.75rem;color:rgb(82 82 91)}html.dark .docs-footer__copy,html.dark .docs-footer__status{color:rgb(161 161 170)}.docs-footer__status{display:inline-flex;align-items:center;gap:.5rem;font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:rgb(82 82 91);text-decoration:none;transition:color .15s ease}.docs-footer__status-dot{display:inline-block;flex-shrink:0;width:.5rem;height:.5rem;background-color:#10b981;border-radius:var(--radius-full);box-shadow:0 0 0 0 rgba(16,185,129,.55);animation:docs-footer-status-pulse 2.4s ease-in-out infinite}@media (prefers-reduced-motion:reduce){.docs-footer__status-dot{animation:none;box-shadow:0 0 0 3px rgba(16,185,129,.25)}}#pagination{margin-top:3rem;padding-top:2rem;border-top:1px solid rgba(228,228,231,.8)}html.dark #pagination,html.dark #table-of-contents-layout .feedback-toolbar{border-top-color:rgba(63,63,70,.6)}#table-of-contents-layout{flex-direction:column}#table-of-contents-layout .feedback-toolbar{width:100%;margin-top:1.5rem;padding-top:1.5rem;padding-bottom:0;border-top:1px solid rgba(228,228,231,.8)}#table-of-contents-layout .feedback-toolbar>div{flex-direction:column;align-items:flex-start;gap:.75rem}#table-of-contents-layout .feedback-toolbar p{white-space:normal}"}],"page":{"pagePath":"integrations/freshdesk/connect","slug":"/integrations/freshdesk/connect","pageMetadata":{"title":"Connect Freshdesk ticketing","sidebarTitle":"Connect","description":"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.","icon":"plug","keywords":["freshdesk api key","freshdesk admin agent","freshdesk webhook setup","freshdesk automation rule","connect freshdesk ticketing","freshdesk intake","freshdesk handoff routing","freshdesk marker field","verification rejects non-admin"],"href":"/integrations/freshdesk/connect"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const FreshdeskFlow=()=>{const BEAM_COLOR=`#22c55e`;const renderBeam=({id,d,duration=2.8,delay=0,reverse=false,opacityMult=1})=>{const values=reverse?{x1:`110%;-10%`,x2:`120%;0%`}:{x1:`-10%;110%`,x2:`0%;120%`};return _jsxs(`g`,{children:[_jsx(`path`,{d,stroke:`currentColor`,strokeOpacity:.18*opacityMult,strokeWidth:`1.5`,fill:`none`,strokeLinecap:`round`}),_jsx(`path`,{d,stroke:`url(#${id})`,strokeWidth:`2`,fill:`none`,strokeLinecap:`round`,strokeOpacity:opacityMult}),_jsx(`defs`,{children:_jsxs(`linearGradient`,{id,gradientUnits:`userSpaceOnUse`,x1:`0`,y1:`0`,x2:`0`,y2:`0`,children:[_jsx(`stop`,{offset:`0%`,stopColor:BEAM_COLOR,stopOpacity:`0`}),_jsx(`stop`,{offset:`45%`,stopColor:BEAM_COLOR,stopOpacity:`1`}),_jsx(`stop`,{offset:`55%`,stopColor:BEAM_COLOR,stopOpacity:`1`}),_jsx(`stop`,{offset:`100%`,stopColor:BEAM_COLOR,stopOpacity:`0`}),_jsx(`animate`,{attributeName:`x1`,values:values.x1,dur:`${duration}s`,begin:`${delay}s`,repeatCount:`indefinite`}),_jsx(`animate`,{attributeName:`x2`,values:values.x2,dur:`${duration}s`,begin:`${delay}s`,repeatCount:`indefinite`})]})})]},id)};const CUST_X=70,FD_X=290,FORK_X=500,OCX_X=760,AGENT_X=760;const MID=180,R=40;const AI_Y=110,AGENT_Y=250;const b1=`M ${CUST_X+R},${MID} L ${FD_X-R},${MID}`;const b2=`M ${FD_X+R},${MID} L ${FORK_X-22},${MID}`;const bAI=`M ${FORK_X+22},${MID} C ${FORK_X+80},${MID} ${OCX_X-R-80},${AI_Y} ${OCX_X-R},${AI_Y}`;const bAIr=`M ${OCX_X-R},${AI_Y} C ${OCX_X-R-80},${AI_Y+30} ${FORK_X+80},${MID+30} ${FORK_X+22},${MID}`;const bAgent=`M ${FORK_X+22},${MID} C ${FORK_X+80},${MID} ${AGENT_X-50-60},${AGENT_Y} ${AGENT_X-50},${AGENT_Y}`;return _jsx(`div`,{className:`zendesk-flow not-prose mint-my-8 mint-w-full`,children:_jsxs(`div`,{className:`zendesk-flow-frame mint-relative mint-w-full mint-overflow-hidden mint-rounded-md mint-border mint-border-black/10 mint-bg-white mint-px-4 mint-py-6 dark:mint-border-white/10 dark:mint-bg-zinc-950`,children:[_jsx(`div`,{className:`zendesk-flow-grid mint-pointer-events-none mint-absolute mint-inset-0`,\"aria-hidden\":true}),_jsxs(`svg`,{viewBox:`0 0 860 340`,preserveAspectRatio:`xMidYMid meet`,xmlns:`http://www.w3.org/2000/svg`,className:`mint-relative mint-z-[1] mint-block mint-w-full mint-text-zinc-500 dark:mint-text-zinc-400`,role:`img`,\"aria-label\":`Freshdesk flow: Customer tickets land in Freshdesk, then an intake fork sends each ticket to either OpenCX or a human agent`,children:[renderBeam({id:`fd-1`,d:b1,duration:2.4,delay:0}),renderBeam({id:`fd-2`,d:b2,duration:2.4,delay:.4}),renderBeam({id:`fd-ai`,d:bAI,duration:2.6,delay:.8}),renderBeam({id:`fd-air`,d:bAIr,duration:2.6,delay:2.1,reverse:true}),renderBeam({id:`fd-ag`,d:bAgent,duration:2.6,delay:1.4}),_jsxs(`g`,{className:`mint-fill-zinc-500 dark:mint-fill-zinc-400`,style:{font:`500 10.5px ui-sans-serif, system-ui, sans-serif`},children:[_jsx(`text`,{x:(FORK_X+OCX_X)/2,y:AI_Y-12,textAnchor:`middle`,children:`Auto-handle all`}),_jsx(`text`,{x:(FORK_X+AGENT_X)/2,y:AGENT_Y+28,textAnchor:`middle`,children:`Assigned only`})]}),_jsxs(`g`,{children:[_jsx(`circle`,{cx:CUST_X,cy:MID,r:R,className:`mint-fill-white mint-stroke-black/10 dark:mint-fill-zinc-900 dark:mint-stroke-white/10`,strokeWidth:`1`}),_jsx(`g`,{transform:`translate(${CUST_X-10} ${MID-10})`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,children:_jsx(`path`,{d:`M 10 1 C 4.5 1 0 5 0 10 c 0 2 1 4 2.6 5.5 L 2 19 l 3.8 -1.4 c 1.3 0.5 2.7 0.7 4.2 0.7 c 5.5 0 10 -4 10 -9 S 15.5 1 10 1 Z`,fill:`currentColor`})}),_jsx(`text`,{x:CUST_X,y:MID+R+22,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`600 12px ui-sans-serif, system-ui, sans-serif`},children:`Customer`})]}),_jsxs(`g`,{children:[_jsx(`circle`,{cx:FD_X,cy:MID,r:R,className:`mint-fill-white mint-stroke-black/10 dark:mint-fill-zinc-900 dark:mint-stroke-white/10`,strokeWidth:`1`}),_jsx(`foreignObject`,{x:FD_X-20,y:MID-20,width:`40`,height:`40`,children:_jsx(`div`,{className:`mint-flex mint-h-full mint-w-full mint-items-center mint-justify-center`,children:_jsx(`img`,{src:`/images/integrations/freshdesk.svg`,alt:``,className:`mint-h-7 mint-w-7 mint-object-contain`})})}),_jsx(`text`,{x:FD_X,y:MID+R+22,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`600 12px ui-sans-serif, system-ui, sans-serif`},children:`Freshdesk`}),_jsx(`text`,{x:FD_X,y:MID+R+36,textAnchor:`middle`,className:`mint-fill-zinc-500 dark:mint-fill-zinc-400`,style:{font:`400 10.5px ui-sans-serif, system-ui, sans-serif`},children:`tickets`})]}),_jsxs(`g`,{children:[_jsx(`polygon`,{points:`${FORK_X-22},${MID} ${FORK_X},${MID-26} ${FORK_X+22},${MID} ${FORK_X},${MID+26}`,className:`mint-fill-white mint-stroke-black/10 dark:mint-fill-zinc-900 dark:mint-stroke-white/10`,strokeWidth:`1`}),_jsx(`text`,{x:FORK_X,y:MID-2,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`700 10px ui-sans-serif, system-ui, sans-serif`},children:`intake`}),_jsx(`text`,{x:FORK_X,y:MID+10,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`700 10px ui-sans-serif, system-ui, sans-serif`},children:`gate`})]}),_jsxs(`g`,{children:[_jsxs(`circle`,{cx:OCX_X,cy:AI_Y,r:`44`,className:`mint-fill-none`,stroke:BEAM_COLOR,strokeOpacity:`0.25`,strokeWidth:`1.5`,children:[_jsx(`animate`,{attributeName:`r`,values:`42;52;42`,dur:`3.6s`,repeatCount:`indefinite`}),_jsx(`animate`,{attributeName:`stroke-opacity`,values:`0.35;0;0.35`,dur:`3.6s`,repeatCount:`indefinite`})]}),_jsx(`circle`,{cx:OCX_X,cy:AI_Y,r:`40`,className:`mint-fill-white mint-stroke-black/10 dark:mint-fill-zinc-900 dark:mint-stroke-white/10`,strokeWidth:`1`}),_jsx(`foreignObject`,{x:OCX_X-30,y:AI_Y-16,width:`60`,height:`32`,children:_jsxs(`div`,{className:`mint-flex mint-h-full mint-w-full mint-items-center mint-justify-center`,children:[_jsx(`img`,{src:`/logo-light.svg`,alt:``,className:`mint-block mint-h-full mint-w-full mint-object-contain dark:mint-hidden`}),_jsx(`img`,{src:`/logo.svg`,alt:``,className:`mint-hidden mint-h-full mint-w-full mint-object-contain dark:mint-block`})]})}),_jsx(`text`,{x:OCX_X,y:AI_Y+56,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`600 12px ui-sans-serif, system-ui, sans-serif`},children:`OpenCX`}),_jsx(`text`,{x:OCX_X,y:AI_Y+70,textAnchor:`middle`,className:`mint-fill-zinc-500 dark:mint-fill-zinc-400`,style:{font:`400 10.5px ui-sans-serif, system-ui, sans-serif`},children:`AI picks up every ticket`})]}),_jsxs(`g`,{children:[_jsx(`rect`,{x:AGENT_X-50,y:AGENT_Y-24,width:`100`,height:`48`,rx:`10`,className:`mint-fill-white mint-stroke-black/10 dark:mint-fill-zinc-900 dark:mint-stroke-white/10`,strokeWidth:`1`,strokeDasharray:`3 3`}),_jsxs(`g`,{transform:`translate(${AGENT_X-12} ${AGENT_Y-12})`,className:`mint-fill-none mint-stroke-zinc-700 dark:mint-stroke-zinc-200`,strokeWidth:`1.4`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[_jsx(`circle`,{cx:`12`,cy:`8`,r:`5`}),_jsx(`path`,{d:`M 2 24 C 2 16 22 16 22 24`})]}),_jsx(`text`,{x:AGENT_X,y:AGENT_Y+40,textAnchor:`middle`,className:`mint-fill-zinc-700 dark:mint-fill-zinc-200`,style:{font:`600 12px ui-sans-serif, system-ui, sans-serif`},children:`Human team`}),_jsx(`text`,{x:AGENT_X,y:AGENT_Y+54,textAnchor:`middle`,className:`mint-fill-zinc-500 dark:mint-fill-zinc-400`,style:{font:`400 10.5px ui-sans-serif, system-ui, sans-serif`},children:`Freshdesk routes first`})]})]})]})})};function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Heading,Info,Note,Step,Steps,Table,Tooltip,Warning,_MdxComponentBoundary}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The Freshdesk integration uses the `,_jsx(Tooltip,{tip:`The API key from the agent's profile in Freshdesk (Profile settings → Your API Key). Bound to that agent's permissions.`,children:`API key`}),` of a dedicated OpenCX agent to read and write tickets, plus two Freshdesk automation rules that push ticket events back to OpenCX.`]}),`\n`,_jsx(_MdxComponentBoundary,{name:`FreshdeskFlow`,children:_jsx(FreshdeskFlow,{})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Setup takes about 15 minutes. You need admin access in both Freshdesk and your\nOpenCX organization, and a Freshdesk `,_jsx(_components.strong,{children:`Growth, Pro, or Enterprise`}),` plan — the\nwebhook automation action isn’t available on the free plan.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`A dedicated OpenCX agent with admin privileges`,icon:`user-shield`,id:`a-dedicated-opencx-agent-with-admin-privileges`,children:_jsxs(_components.p,{children:[`Create a dedicated agent in Freshdesk (for example `,_jsx(_components.em,{children:`OpenCX AI`}),`) and give it `,_jsx(_components.strong,{children:`admin`}),` privileges. The AI posts replies as this agent, so customers see its name on every AI message — don’t reuse a person’s account. Admin is a hard requirement: OpenCX needs it to tell agents and contacts apart at runtime, and `,_jsx(_components.strong,{children:`verification rejects non-admin API keys`}),`.`]})}),_jsxs(Accordion,{title:`Ticket scope: Global Access (all tickets)`,icon:`lock-open`,id:`ticket-scope-global-access-all-tickets`,children:[_jsxs(_components.p,{children:[`Set the agent’s `,_jsx(_components.strong,{children:`Scope`}),` to `,_jsx(_components.strong,{children:`Global Access`}),` (all tickets) under `,_jsx(_components.strong,{children:`Admin → Agents → [the OpenCX agent] → Scope`}),`. This is `,_jsx(_components.em,{children:`separate`}),` from the admin role and is `,_jsx(_components.strong,{children:`not`}),` checked at connect time — a restricted-scope admin key verifies fine, then silently fails: OpenCX reads each ticket back from the API, and Freshdesk returns `,_jsx(_components.strong,{children:`403 “You are not authorized to perform this action”`}),` for any ticket outside the agent’s scope, so those tickets never appear in your inbox.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Auto-handle-all intake`}),` → Global Access is `,_jsx(_components.strong,{children:`required`}),` (the AI must read every new ticket).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Assigned-only intake`}),` → Global Access is still strongly recommended. “Group Access” works only if the AI agent belongs to every group whose tickets it receives; “Restricted (assigned tickets only)” reads only tickets already assigned to the agent and 403s on anything routed by group or default-group rules.`]}),`\n`]})]}),_jsx(Accordion,{title:`Permission to create automation rules`,icon:`gears`,id:`permission-to-create-automation-rules`,children:_jsxs(_components.p,{children:[`Webhook delivery runs through two automation rules you create under `,_jsx(_components.strong,{children:`Admin →\nWorkflows → Automations`}),`. Only Freshdesk admins can create them.`]})}),_jsx(Accordion,{title:`Owner or admin in OpenCX`,icon:`key`,id:`owner-or-admin-in-opencx`,children:_jsxs(_components.p,{children:[`Required to save integration settings in `,_jsx(_components.a,{href:`https://platform.open.cx/settings/integrations`,children:`Settings → Integrations`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`required-permissions`,children:`Required permissions`}),`\n`,_jsxs(_components.p,{children:[`The API key inherits the OpenCX agent’s role and scope. The agent must be able to do everything below — granting `,_jsx(_components.strong,{children:`admin`}),` + `,_jsx(_components.strong,{children:`Global Access`}),` scope covers all of it in one step.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`Why OpenCX needs it`}),_jsx(_components.th,{children:`Enforced at connect?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Admin role`})}),_jsxs(_components.td,{children:[`Read agents (`,_jsx(_components.code,{children:`/agents`}),`) to tell agents from contacts and attribute replies/notes correctly`]}),_jsx(_components.td,{children:`✅ Yes — non-admin keys are rejected`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Global Access`}),` ticket scope`]}),_jsxs(_components.td,{children:[`Read every ticket the AI must handle (`,_jsx(_components.code,{children:`GET /tickets/{id}`}),`); a narrower scope 403s on out-of-scope tickets`]}),_jsx(_components.td,{children:`❌ No — verify silently passes, then tickets vanish at runtime`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Reply to tickets \u0026 add notes`}),_jsx(_components.td,{children:`Post AI replies (autopilot) and private drafts (assist mode)`}),_jsx(_components.td,{children:`❌ No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Edit ticket properties \u0026 assign tickets`}),_jsx(_components.td,{children:`Sync tags/status, set the handoff marker field, and route handoffs to an agent or group`}),_jsx(_components.td,{children:`❌ No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Read contacts`}),_jsx(_components.td,{children:`Resolve the requester’s name/email for the session`}),_jsx(_components.td,{children:`❌ No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Create automation rules`}),_jsxs(_components.td,{children:[`Build the two `,_jsx(_components.strong,{children:`Trigger Webhook`}),` rules that push events to OpenCX`]}),_jsx(_components.td,{children:`❌ No (Freshdesk-side)`})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Only the `,_jsx(_components.strong,{children:`admin`}),` check runs at connect — `,_jsx(_components.strong,{children:`ticket scope is not verified`}),`. A Global-Access admin is the safe default; anything narrower connects successfully and then silently drops tickets with a 403. If tickets stop appearing, check the agent’s Scope first.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Copy the OpenCX agent's API key`,children:[_jsxs(_components.p,{children:[`Log in to Freshdesk `,_jsx(_components.strong,{children:`as the dedicated OpenCX agent`}),`, open `,_jsx(_components.strong,{children:`Profile settings`}),`, and copy `,_jsx(_components.strong,{children:`Your API Key`}),`.`]}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`https://support.freshdesk.com/en/support/solutions/articles/215517`,children:`Freshdesk’s API key guide`}),` if the page has moved.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`The key is bound to that agent. If the agent is deactivated or loses admin privileges, the integration stops working.`})})]}),_jsx(Step,{title:`Open Freshdesk in OpenCX`,children:_jsxs(_components.p,{children:[`In your OpenCX dashboard, go to `,_jsx(_components.a,{href:`https://platform.open.cx/settings/integrations`,children:_jsx(_components.strong,{children:`Settings →\nIntegrations`})}),` and select\n`,_jsx(_components.strong,{children:`Freshdesk`}),`.`]})}),_jsxs(Step,{title:`Enter and verify your credentials`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Domain`})}),_jsxs(_components.td,{children:[`Your Freshdesk domain — for example `,_jsx(_components.code,{children:`yourcompany.freshdesk.com`}),`. Include the full domain, do not prefix with `,_jsx(_components.code,{children:`https://`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`API Key`})}),_jsx(_components.td,{children:`The OpenCX agent’s API key you just copied.`})]})]})]}),_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Verify`}),`. OpenCX calls the Freshdesk API, confirms the key belongs to an `,_jsx(_components.strong,{children:`admin`}),` agent, and shows the connected agent’s name and email so you can confirm it’s the right account. A wrong domain, bad key, or non-admin agent returns an error and nothing persists.`]})]}),_jsxs(Step,{title:`Pick an intake mode`,children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Auto Handle All Incoming Tickets`}),` toggle controls which new tickets the AI picks up.`]}),_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Auto-handle all incoming tickets (toggle on)`,icon:`bolt`,id:`auto-handle-all-incoming-tickets-toggle-on`,children:_jsx(_components.p,{children:`The AI answers every new ticket regardless of assignment. Use this when the AI is the front door to your helpdesk.`})}),_jsx(Accordion,{title:`Assigned-only (toggle off)`,icon:`filter`,id:`assigned-only-toggle-off`,children:_jsxs(_components.p,{children:[`The AI only answers new tickets that Freshdesk has assigned to the OpenCX agent, or that land in the `,_jsx(_components.strong,{children:`Default Group`}),` you select. Use this when your existing Freshdesk routing rules decide which tickets go to the AI.`]})})]}),_jsxs(_components.p,{children:[`The gate applies to `,_jsx(_components.strong,{children:`new`}),` tickets only — once OpenCX is tracking a ticket, status and replies keep syncing even after handoff.`]})]}),_jsxs(Step,{title:`Choose the handoff routing`,children:[_jsx(_components.p,{children:`Choose what OpenCX should do in Freshdesk after the AI hands off to a human.`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Routing`}),_jsx(_components.th,{children:`What happens`}),_jsx(_components.th,{children:`When to use it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Unassign ticket`}),` `,_jsx(_components.em,{children:`(default)`})]}),_jsx(_components.td,{children:`OpenCX removes the OpenCX agent from the ticket and reopens it.`}),_jsx(_components.td,{children:`Use this when your team works from the unassigned queue or manually triages handoffs.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Let Freshdesk automation route`})}),_jsx(_components.td,{children:`OpenCX unassigns the ticket and sets the handoff marker field — routing only happens if you have an automation rule keyed on the marker.`}),_jsx(_components.td,{children:`Use this when routing should stay inside Freshdesk rules and queues.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Assign to a specific agent`})}),_jsxs(_components.td,{children:[`OpenCX assigns the ticket to the `,_jsx(_components.strong,{children:`Handoff Agent ID`}),` you enter and sets the marker.`]}),_jsx(_components.td,{children:`Use this for a fixed fallback agent or small teams without routing automation.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Assign to a group`})}),_jsxs(_components.td,{children:[`OpenCX assigns the ticket to the `,_jsx(_components.strong,{children:`Handoff Group`}),` you select and sets the marker.`]}),_jsx(_components.td,{children:`Use this when a team queue should receive handoffs.`})]})]})]}),_jsxs(_components.p,{children:[`For the marker-based routings, OpenCX sets a custom checkbox ticket field on handoff. Create it in Freshdesk under `,_jsx(_components.strong,{children:`Admin → Workflows → Ticket fields`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Label`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`OpenCX handed off`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Internal/API name`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`cf_opencx_handed_off`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Type`})}),_jsx(_components.td,{children:`Checkbox`})]})]})]}),_jsxs(_components.p,{children:[`Then select it as the `,_jsx(_components.strong,{children:`Handoff Marker Field`}),` in OpenCX. If you point your automation at the marker, make sure those rules never route marked tickets back to the OpenCX agent.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`If a configured handoff target becomes invalid later (agent deleted, group removed), OpenCX never leaves a handed-off ticket assigned to the AI — it falls back to unassigning and setting the marker so your rules can still catch it.`})})]}),_jsxs(Step,{title:`Optional: additional AI agents`,children:[_jsxs(_components.p,{children:[`By default the AI answers as the one connected agent. If different customers should see different names — one support persona per region or brand, say — create a Freshdesk agent for each persona, then tick them under `,_jsx(_components.strong,{children:`Additional AI agents`}),`. The connected agent is always included.`]}),_jsxs(_components.p,{children:[`A ticket assigned to any ticked agent is handled by the AI and answered `,_jsx(_components.strong,{children:`as that agent`}),`: its name on the reply, its own Freshdesk signature. Your Freshdesk assignment rules decide which persona a customer sees, so route each mailbox, group, or product to the matching agent. Reassigning a ticket from one AI agent to another switches the persona on the next reply; assigning it to a person still hands it off.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`Only agents in your Freshdesk account can be ticked. Give each persona agent its own name and signature in Freshdesk — OpenCX reads both from there.`})})]}),_jsxs(Step,{title:`Optional: assist-mode footer`,children:[_jsxs(_components.p,{children:[`If you run`,` `]}),_jsx(Tooltip,{tip:`A per-channel mode where the AI drafts answers as private notes instead of replying to the customer directly.`,children:`assist mode`}),` `,_jsxs(_components.p,{children:[`on any channel, the AI posts drafts as private notes. The `,_jsx(_components.strong,{children:`Assist Mode\nFooter`}),` text is appended to each draft so reps can tell AI drafts from human\nnotes at a glance.`]})]}),_jsxs(Step,{title:`Save and copy your webhook URL`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),`. OpenCX validates the credentials again, stores the settings, and displays a `,_jsx(_components.strong,{children:`Webhook URL`}),` unique to your organization, plus the two JSON payloads for the next step.`]}),_jsxs(_components.p,{children:[`On first connect, OpenCX also runs a one-time `,_jsx(_components.strong,{children:`backfill`}),`: open and pending tickets from the last ~180 days are imported into your inbox as history. The backfill never triggers AI replies on old tickets.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`The webhook URL contains a signed token tied to your organization. Anyone with it can post events into your OpenCX pipeline. Treat it like a password.`})})]}),_jsxs(Step,{title:`Create the two automation rules in Freshdesk`,children:[_jsxs(_components.p,{children:[`In Freshdesk, open `,_jsx(_components.strong,{children:`Admin → Workflows → Automations`}),` and create two rules. Both use the action `,_jsx(_components.strong,{children:`Trigger Webhook`}),` with request type `,_jsx(_components.strong,{children:`POST`}),`, encoding `,_jsx(_components.strong,{children:`JSON`}),`, content `,_jsx(_components.strong,{children:`Advanced`}),`, pointing at your OpenCX webhook URL.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rule 1 — Ticket Creation tab.`}),` Trigger on ticket creation and paste Payload 1 from the OpenCX dialog:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"ticketId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"triggered_event\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"ticket_created\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"assigneeId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.agent.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"groupId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.group.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterEmail\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.email}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterName\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.name}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterPhone\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.phone}}\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rule 2 — Ticket Updates tab.`}),` Set `,_jsx(_components.strong,{children:`Action performed by`}),` to `,_jsx(_components.strong,{children:`Agent or requester`}),` (the default, `,_jsx(_components.em,{children:`Agent`}),`, silently drops customer replies), trigger on `,_jsx(_components.strong,{children:`Agent is changed`}),`, `,_jsx(_components.strong,{children:`Reply is sent`}),`, `,_jsx(_components.strong,{children:`Note is added`}),`, and `,_jsx(_components.strong,{children:`Ticket property changed (Status)`}),`, add at least one condition (Freshdesk requires one; `,_jsx(_components.strong,{children:`Source is any of Email`}),` works, but never a group or agent condition, since a new ticket is not assigned yet), and paste Payload 2:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"ticketId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"triggered_event\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{Triggered event}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"assigneeId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.agent.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"groupId\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.group.id}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterEmail\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.email}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterName\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.name}}\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"requesterPhone\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"{{ticket.contact.phone}}\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`These optional fields are performance hints, not requirements:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`assigneeId`}),` / `,_jsx(_components.code,{children:`groupId`}),` let OpenCX skip tickets that aren’t for the AI agent without an extra API call.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`requesterEmail`}),` / `,_jsx(_components.code,{children:`requesterName`}),` / `,_jsx(_components.code,{children:`requesterPhone`}),` let OpenCX identify the customer without a separate contact lookup.`]}),`\n`]}),_jsx(_components.p,{children:`They’re safe to include even if your Freshdesk plan doesn’t expose a placeholder — unresolved or empty values are ignored, and OpenCX always re-reads the ticket from the API before acting.`}),_jsx(Warning,{children:_jsx(_components.p,{children:`Without Rule 1, the AI never sees new tickets. Without Rule 2, customer replies don’t reach the AI and status changes in Freshdesk don’t sync back to OpenCX.`})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Assigned-only intake with a shared queue?`}),` If the AI agent receives tickets through Freshdesk’s automatic assignment (round-robin / load-balanced queue) rather than being assigned at creation, the `,_jsx(_components.strong,{children:`Agent is changed`}),` trigger on Rule 2 is what tells OpenCX the ticket is now the AI’s. Without it, newly assigned tickets only surface when a later reply or status change happens. Note that Freshdesk may not fire automation rules for assignments performed by `,_jsx(_components.em,{children:`automatic`}),` assignment — if auto-assigned tickets still don’t appear, assign the AI agent from a rule that also triggers the webhook, or have that rule fire on creation. Verify with a manual reassignment first: it should produce a ticket in your OpenCX inbox within seconds.`]})})]}),_jsxs(Step,{title:`Create a test ticket`,children:[_jsx(_components.p,{children:`Open a ticket as an end user (or use the Freshdesk portal). Within a few seconds:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`A new session appears in your `,_jsx(_components.a,{href:`https://platform.open.cx/inbox`,children:`OpenCX Inbox`}),` — email tickets land on the `,_jsx(_components.strong,{children:`Email`}),` channel, portal/chat tickets on `,_jsx(_components.strong,{children:`Web`}),`, phone tickets on `,_jsx(_components.strong,{children:`Phone`}),`.`]}),`\n`,_jsx(_components.li,{children:`The AI’s answer appears on the Freshdesk ticket as the OpenCX agent — a public reply in autopilot, a private note in assist mode.`}),`\n`]}),_jsxs(_components.p,{children:[`If nothing appears, jump to `,_jsx(_components.a,{href:`/integrations/freshdesk/troubleshooting`,children:`Troubleshooting`}),`.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`importing-your-ticket-history`,children:`Importing your ticket history`}),`\n`,_jsxs(_components.p,{children:[`Once ticketing is connected, the Freshdesk dialog offers `,_jsx(_components.strong,{children:`Import from Freshdesk`}),`. It brings your existing Freshdesk tickets into OpenCX as sessions, each with the customer’s first message and the full thread of replies and notes, attributed to the agents who wrote them. Closed tickets arrive closed, with their original dates.`]}),`\n`,_jsx(_components.p,{children:`Before anything starts, OpenCX checks the saved credentials against your account and shows what it found: how many tickets and contacts there are, whether the OpenCX agent can see every ticket and read your Freshdesk mailboxes, and whether your account archives old tickets. Fix anything that fails in Freshdesk, save the credentials again, and retry.`}),`\n`,_jsx(_components.p,{children:`A few things to know:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The import runs in the background and can take days for large accounts, because Freshdesk limits how quickly history can be read. You can close the dialog and check back.`}),`\n`,_jsxs(_components.li,{children:[`To try it on a few sessions first, pick a date under `,_jsx(_components.strong,{children:`Import tickets updated since`}),`: only tickets updated on or after it are imported, and the sync finishes much sooner. Leave it on `,_jsx(_components.strong,{children:`All history`}),` to import everything. A later import with an earlier date brings in the rest.`]}),`\n`,_jsx(_components.li,{children:`Unresolved tickets are imported before resolved and closed ones, so your team can pick up open work while the rest of the history is still arriving.`}),`\n`,_jsx(_components.li,{children:`It never replies to anyone. Imported sessions are history, not new conversations, and nothing is sent to your customers or to Freshdesk.`}),`\n`,_jsxs(_components.li,{children:[`Each imported email ticket keeps the support address the customer wrote to, its subject, and everyone copied on it. Once that address is `,_jsx(_components.a,{href:`/email/forwarding`,children:`connected as an email inbox`}),` in OpenCX, agents can reply on the imported session and the customer gets the reply by email. A customer who answers an email Freshdesk sent them before the switch lands on the same imported session, as long as their reply keeps the quoted Freshdesk email.`]}),`\n`,_jsxs(_components.li,{children:[`Every session the import creates is tagged `,_jsx(_components.strong,{children:`FRESHDESK`}),`, so imported history is one filter away in the inbox.`]}),`\n`,_jsx(_components.li,{children:`Running it again later only adds tickets that are new or changed since the previous run.`}),`\n`,_jsx(_components.li,{children:`If your Freshdesk plan archives tickets, closed tickets inactive for more than 120 days are not reachable and are not imported. The check tells you when this applies.`}),`\n`,_jsx(_components.li,{children:`File attachments are listed by name on each message but the files themselves are not copied.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`rotating-the-api-key`,children:`Rotating the API key`}),`\n`,_jsxs(_components.p,{children:[`If you regenerate the OpenCX agent’s API key in Freshdesk, paste the new key into `,_jsx(_components.a,{href:`https://platform.open.cx/settings/integrations`,children:`Settings → Integrations → Freshdesk`}),` and save. The saved key is never displayed back — the field is blank on edit and you re-enter it to change credentials. The webhook URL does not change when you rotate the key.`]}),`\n`,_jsx(Heading,{level:`2`,id:`disconnecting`,children:`Disconnecting`}),`\n`,_jsxs(_components.p,{children:[`In OpenCX, open the Freshdesk integration and click `,_jsx(_components.strong,{children:`Disconnect`}),`. Then in Freshdesk, delete the two automation rules. Tickets already imported stay in your OpenCX inbox; no new Freshdesk events flow in, and the AI stops posting on tickets.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`related-documentation`,children:`Related Documentation`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Ticket flow`,icon:`diagram-project`,href:`/integrations/freshdesk/tickets`,children:_jsx(_components.p,{children:`How tickets match to sessions, how handoff routes them, how resolutions\nsync.`})}),_jsx(Card,{title:`Troubleshooting`,icon:`wrench`,href:`/integrations/freshdesk/troubleshooting`,children:_jsx(_components.p,{children:`Verification failing, webhook silent, handoff not routing.`})}),_jsx(Card,{title:`Overview`,icon:`ticket`,href:`/integrations/freshdesk/overview`,children:_jsx(_components.p,{children:`What the Freshdesk integration does and how it fits with your team.`})}),_jsx(Card,{title:`Human handoff`,icon:`user-group`,href:`/handoff/introduction`,children:_jsx(_components.p,{children:`Global handoff rules and office hours.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{FreshdeskFlow,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Connect Freshdesk ticketing","sidebarTitle":"Connect","description":"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.","icon":"plug","keywords":["freshdesk api key","freshdesk admin agent","freshdesk webhook setup","freshdesk automation rule","connect freshdesk ticketing","freshdesk intake","freshdesk handoff routing","freshdesk marker field","verification rejects non-admin"],"href":"/integrations/freshdesk/connect"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[152,7569,"null;function _creat"]]},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Required permissions","slug":"required-permissions","depth":2,"children":[]},{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"Importing your ticket history","slug":"importing-your-ticket-history","depth":2,"children":[]},{"title":"Rotating the API key","slug":"rotating-the-api-key","depth":2,"children":[]},{"title":"Disconnecting","slug":"disconnecting","depth":2,"children":[]},{"title":"Related Documentation","slug":"related-documentation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/openchat/671ce9e295bc0bed/docs-footer.js","/_mintlify/custom/openchat/5e08dc26b4af039b/opencx-widget.js","/_mintlify/custom/openchat/b138b1492ac22a58/docs-feedback.js"],"dynamicCss":".mint-pointer-events-none {\n pointer-events: none\n}\n.mint-absolute {\n position: absolute\n}\n.mint-relative {\n position: relative\n}\n.mint-inset-0 {\n inset: 0px\n}\n.mint-z-\\[1\\] {\n z-index: 1\n}\n.mint-my-8 {\n margin-top: 2rem;\n margin-bottom: 2rem\n}\n.mint-block {\n display: block\n}\n.mint-flex {\n display: flex\n}\n.mint-hidden {\n display: none\n}\n.mint-h-7 {\n height: 1.75rem\n}\n.mint-h-full {\n height: 100%\n}\n.mint-w-7 {\n width: 1.75rem\n}\n.mint-w-full {\n width: 100%\n}\n.mint-items-center {\n align-items: center\n}\n.mint-justify-center {\n justify-content: center\n}\n.mint-overflow-hidden {\n overflow: hidden\n}\n.mint-rounded-md {\n border-radius: 0.375rem\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-black\\/10 {\n border-color: rgb(0 0 0 / 0.1)\n}\n.mint-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))\n}\n.mint-fill-none {\n fill: none\n}\n.mint-fill-white {\n fill: #fff\n}\n.mint-fill-zinc-500 {\n fill: #71717a\n}\n.mint-fill-zinc-700 {\n fill: #3f3f46\n}\n.mint-stroke-black\\/10 {\n stroke: rgb(0 0 0 / 0.1)\n}\n.mint-stroke-zinc-700 {\n stroke: #3f3f46\n}\n.mint-object-contain {\n object-fit: contain\n}\n.mint-px-4 {\n padding-left: 1rem;\n padding-right: 1rem\n}\n.mint-py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem\n}\n.mint-text-zinc-500 {\n --tw-text-opacity: 1;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-block:is(.dark *) {\n display: block\n}\n.dark\\:mint-hidden:is(.dark *) {\n display: none\n}\n.dark\\:mint-border-white\\/10:is(.dark *) {\n border-color: rgb(255 255 255 / 0.1)\n}\n.dark\\:mint-bg-zinc-950:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(9 9 11 / var(--tw-bg-opacity, 1))\n}\n.dark\\:mint-fill-zinc-200:is(.dark *) {\n fill: #e4e4e7\n}\n.dark\\:mint-fill-zinc-400:is(.dark *) {\n fill: #a1a1aa\n}\n.dark\\:mint-fill-zinc-900:is(.dark *) {\n fill: #18181b\n}\n.dark\\:mint-stroke-white\\/10:is(.dark *) {\n stroke: rgb(255 255 255 / 0.1)\n}\n.dark\\:mint-stroke-zinc-200:is(.dark *) {\n stroke: #e4e4e7\n}\n.dark\\:mint-text-zinc-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(161 161 170 / var(--tw-text-opacity, 1))\n}","subdomain":"openchat","siteName":"Open.cx Docs","title":"Connect Freshdesk ticketing - Open.cx Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-18T17:18:42.952Z","originalFileLocation":"integrations/freshdesk/connect.mdx"},"headHtml":"\u003cmeta data-mint-head name=\"description\" content=\"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Open.cx Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Connect Freshdesk ticketing - Open.cx Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenCX Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.open.cx/integrations/freshdesk/connect\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Connect Freshdesk ticketing - Open.cx Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/openchat/RMvbDkK3gsg3p3OQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Open.cx Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A0A0A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.open.cx/integrations/freshdesk/connect\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/freshdesk/connect.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.open.cx/#organization\",\"name\":\"Open.cx Docs\",\"url\":\"https://docs.open.cx\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/openchat/ivWwffb57vEmukK4/logo-light.svg?fit=max\u0026auto=format\u0026n=ivWwffb57vEmukK4\u0026q=85\u0026s=f6a5e94f4909a4d8df45757989c11afe\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.open.cx#website\",\"name\":\"Open.cx Docs\",\"url\":\"https://docs.open.cx\",\"publisher\":{\"@id\":\"https://docs.open.cx/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.open.cx/integrations/freshdesk/connect#webpage\",\"url\":\"https://docs.open.cx/integrations/freshdesk/connect\",\"name\":\"Connect Freshdesk ticketing\",\"description\":\"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\",\"dateModified\":\"2026-10-18T17:18:42.952Z\",\"isPartOf\":{\"@id\":\"https://docs.open.cx#website\"},\"breadcrumb\":{\"@id\":\"https://docs.open.cx/integrations/freshdesk/connect#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.open.cx/integrations/freshdesk/connect#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ticketing Systems\",\"item\":\"https://docs.open.cx/integrations/zendesk/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Freshdesk\",\"item\":\"https://docs.open.cx/integrations/freshdesk/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Connect Freshdesk ticketing\",\"item\":\"https://docs.open.cx/integrations/freshdesk/connect\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.open.cx/integrations/freshdesk/connect#article\",\"headline\":\"Connect Freshdesk ticketing\",\"name\":\"Connect Freshdesk ticketing\",\"description\":\"Create a dedicated OpenCX admin agent in Freshdesk, verify its API key, choose intake and handoff routing, and add two automation rules.\",\"url\":\"https://docs.open.cx/integrations/freshdesk/connect\",\"mainEntityOfPage\":{\"@id\":\"https://docs.open.cx/integrations/freshdesk/connect#webpage\"},\"dateModified\":\"2026-10-18T17:18:42.952Z\",\"keywords\":\"freshdesk api key, freshdesk admin agent, freshdesk webhook setup, freshdesk automation rule, connect freshdesk ticketing, freshdesk intake, freshdesk handoff routing, freshdesk marker field, verification rejects non-admin\",\"publisher\":{\"@id\":\"https://docs.open.cx/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.open.cx#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Open.cx Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Open.cx Docs","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"book-open","pages":[{"title":"Get Started","href":"/welcome"}]},{"tab":"Build Agents","icon":"robot","pages":[{"title":"Build Agents","href":"/build-agents/get-started"}]},{"tab":"Ticketing","icon":"ticket","pages":[{"title":"Ticketing","href":"/ticketing/structured-fields"}]},{"tab":"Connect","icon":"arrows-left-right","pages":[{"title":"Connect","href":"/connect/introduction"}]},{"tab":"Integrations","icon":"plug","groups":[{"group":"Overview","pages":[{"title":"Integrations","icon":"plug","href":"/dashboard/introduction"}]},{"group":"Ticketing Systems","pages":[{"group":"Zendesk","icon":"headset","pages":[{"title":"Zendesk overview","sidebarTitle":"Overview","icon":"ticket","href":"/integrations/zendesk/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Ticketing API","icon":"envelope","href":"/integrations/zendesk/ticketing-api"},{"title":"Sunshine Conversations","icon":"messages","href":"/integrations/zendesk/sunshine-conversations"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"AI Chat Widget","icon":"comments","href":"/integrations/zendesk/channels/widget"},{"title":"AI WhatsApp Support","icon":"whatsapp","href":"/integrations/zendesk/channels/whatsapp"},{"title":"AI SMS Support","icon":"comment-sms","href":"/integrations/zendesk/channels/sms"},{"title":"AI Phone Support","icon":"phone","href":"/integrations/zendesk/channels/phone"},{"title":"AI Email Support","icon":"envelope","href":"/integrations/zendesk/channels/email"}]},{"group":"Telephony","icon":"phone-arrow-down-left","pages":[{"title":"Zendesk Telephony","icon":"phone-arrow-up-right","href":"/integrations/zendesk/telephony"}]},{"title":"Zendesk troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/zendesk/troubleshooting"}]},{"group":"HubSpot","icon":"hubspot","pages":[{"title":"HubSpot overview","sidebarTitle":"Overview","icon":"bullseye","href":"/integrations/hubspot/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect HubSpot","sidebarTitle":"Connect","icon":"plug","href":"/integrations/hubspot/connect"},{"title":"Migrate to OAuth","icon":"arrow-right-arrow-left","href":"/integrations/hubspot/oauth-migration"},{"title":"Handoff \u0026 Sync","icon":"arrow-right-arrow-left","href":"/integrations/hubspot/handoff"},{"title":"Webhook Reference","sidebarTitle":"Webhooks","icon":"webhook","href":"/integrations/hubspot/webhooks"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"AI Chat Widget","sidebarTitle":"Chat Widget","icon":"comments","href":"/integrations/hubspot/channels/widget"},{"title":"AI Email Support","sidebarTitle":"Email","icon":"envelope","href":"/integrations/hubspot/channels/email"},{"title":"AI WhatsApp Support","sidebarTitle":"WhatsApp","icon":"whatsapp","href":"/integrations/hubspot/channels/whatsapp"},{"title":"AI SMS Support","sidebarTitle":"SMS","icon":"comment-sms","href":"/integrations/hubspot/channels/sms"},{"title":"HubSpot phone support and call follow-ups","sidebarTitle":"Phone","icon":"phone","href":"/integrations/hubspot/channels/phone"}]},{"title":"HubSpot troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/hubspot/troubleshooting"}]},{"group":"Intercom","icon":"intercom","pages":[{"title":"Intercom overview","sidebarTitle":"Overview","icon":"messages","href":"/integrations/intercom/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Intercom","sidebarTitle":"Connect","icon":"plug","href":"/integrations/intercom/connect"},{"title":"Conversations","sidebarTitle":"Conversations","icon":"messages","href":"/integrations/intercom/conversations"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"Web (Messenger)","sidebarTitle":"Web","icon":"comments","href":"/integrations/intercom/channels/web"},{"title":"Email","sidebarTitle":"Email","icon":"envelope","href":"/integrations/intercom/channels/email"}]},{"title":"Intercom troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/intercom/troubleshooting"}]},{"group":"Front","icon":"inbox","pages":[{"title":"Front overview","sidebarTitle":"Overview","icon":"envelopes-bulk","href":"/integrations/front/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Front","sidebarTitle":"Connect","icon":"plug","href":"/integrations/front/connect"},{"title":"Conversations","sidebarTitle":"Conversations","icon":"messages","href":"/integrations/front/conversations"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"Email in Front","sidebarTitle":"Email","icon":"envelope","href":"/integrations/front/channels/email"},{"title":"Chat in Front","sidebarTitle":"Chat","icon":"comments","href":"/integrations/front/channels/web"},{"title":"SMS in Front","sidebarTitle":"SMS","icon":"comment-sms","href":"/integrations/front/channels/sms"},{"title":"Phone in Front","sidebarTitle":"Phone","icon":"phone","href":"/integrations/front/channels/phone"}]},{"title":"Front troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/front/troubleshooting"}]},{"group":"Gorgias","icon":"cart-shopping","pages":[{"title":"Gorgias overview","sidebarTitle":"Overview","icon":"life-ring","href":"/integrations/gorgias/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Gorgias","sidebarTitle":"Connect","icon":"plug","href":"/integrations/gorgias/connect"},{"title":"Ticket Flow","sidebarTitle":"Ticket Flow","icon":"diagram-project","href":"/integrations/gorgias/ticket-flow"}]},{"title":"Gorgias troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/gorgias/troubleshooting"}]},{"group":"Salesforce","icon":"cloud","pages":[{"title":"Salesforce overview","sidebarTitle":"Overview","icon":"handshake","href":"/integrations/salesforce/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Email Cases","icon":"envelope","href":"/integrations/salesforce/email-cases"},{"title":"Live Messaging","icon":"messages","href":"/integrations/salesforce/live-messaging"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"AI Chat Widget in Salesforce","sidebarTitle":"Chat Widget","icon":"comments","href":"/integrations/salesforce/channels/widget"},{"title":"AI WhatsApp Support in Salesforce","sidebarTitle":"WhatsApp","icon":"whatsapp","href":"/integrations/salesforce/channels/whatsapp"},{"title":"AI SMS Support in Salesforce","sidebarTitle":"SMS","icon":"comment-sms","href":"/integrations/salesforce/channels/sms"},{"title":"AI Phone Support in Salesforce","sidebarTitle":"Phone","icon":"phone","href":"/integrations/salesforce/channels/phone"},{"title":"AI Email in Salesforce","sidebarTitle":"Email","icon":"envelope","href":"/integrations/salesforce/channels/email"}]},{"title":"Salesforce troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/salesforce/troubleshooting"}]},{"group":"Dynamics 365","icon":"building","pages":[{"title":"Dynamics 365 overview","sidebarTitle":"Overview","icon":"briefcase","href":"/integrations/dynamics-365/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Azure \u0026 Dynamics Setup","sidebarTitle":"Azure \u0026 Dynamics Setup","icon":"microsoft","href":"/integrations/dynamics-365/azure-setup"},{"title":"Connect to OpenCX","sidebarTitle":"Connect","icon":"plug","href":"/integrations/dynamics-365/connect"},{"title":"Conversations in Dynamics 365","sidebarTitle":"Conversations","icon":"diagram-project","href":"/integrations/dynamics-365/conversations"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"AI Chat Widget in Dynamics 365","sidebarTitle":"AI Chat Widget","icon":"comments","href":"/integrations/dynamics-365/channels/widget"},{"title":"AI WhatsApp Support in Dynamics 365","sidebarTitle":"AI WhatsApp Support","icon":"whatsapp","href":"/integrations/dynamics-365/channels/whatsapp"},{"title":"AI SMS Support in Dynamics 365","sidebarTitle":"AI SMS Support","icon":"comment-sms","href":"/integrations/dynamics-365/channels/sms"},{"title":"AI Phone Support in Dynamics 365","sidebarTitle":"AI Phone Support","icon":"phone","href":"/integrations/dynamics-365/channels/phone"},{"title":"AI Email Support in Dynamics 365","sidebarTitle":"AI Email Support","icon":"envelope","href":"/integrations/dynamics-365/channels/email"}]},{"title":"Dynamics 365 troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/dynamics-365/troubleshooting"}]},{"group":"Twilio Flex","icon":"phone","pages":[{"title":"Twilio Flex overview","sidebarTitle":"Overview","icon":"headset","href":"/integrations/twilio-flex/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Twilio Flex","sidebarTitle":"Connect","icon":"plug","href":"/integrations/twilio-flex/connect"},{"title":"Handoff and task attributes","sidebarTitle":"Handoff","icon":"user-group","href":"/integrations/twilio-flex/handoff"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"Web Chat in Twilio Flex","sidebarTitle":"Web Chat","icon":"comments","href":"/integrations/twilio-flex/channels/web-chat"},{"title":"Voice in Twilio Flex","sidebarTitle":"Voice","icon":"phone","href":"/integrations/twilio-flex/channels/voice"},{"title":"SMS in Twilio Flex","sidebarTitle":"SMS","icon":"comment-sms","href":"/integrations/twilio-flex/channels/sms"},{"title":"WhatsApp in Twilio Flex","sidebarTitle":"WhatsApp","icon":"whatsapp","href":"/integrations/twilio-flex/channels/whatsapp"}]},{"title":"Twilio Flex troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/twilio-flex/troubleshooting"}]},{"group":"Freshchat","icon":"comment","pages":[{"title":"Freshchat overview","sidebarTitle":"Overview","icon":"messages","href":"/integrations/freshchat/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Freshchat","sidebarTitle":"Connect","icon":"plug","href":"/integrations/freshchat/connect"},{"title":"Conversation flow","sidebarTitle":"Conversation flow","icon":"diagram-project","href":"/integrations/freshchat/conversations"}]},{"title":"Freshchat troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/freshchat/troubleshooting"}]},{"group":"Freshdesk","icon":"ticket","pages":[{"title":"Freshdesk ticketing overview","sidebarTitle":"Overview","description":"Run Freshdesk as the surface your agents work in while OpenCX answers tickets, escalates with context, and keeps ticket status in sync.","icon":"ticket","href":"/integrations/freshdesk/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Freshdesk ticketing","sidebarTitle":"Connect","icon":"plug","href":"/integrations/freshdesk/connect"},{"title":"Freshdesk ticket flow","sidebarTitle":"Ticket flow","description":"How Freshdesk tickets reach the AI, how autopilot and assist mode reply, how handoff routes the ticket, and how resolutions sync both ways.","icon":"diagram-project","href":"/integrations/freshdesk/tickets"}]},{"title":"Freshdesk ticketing troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/freshdesk/troubleshooting"}]},{"group":"Infobip","icon":"comments","pages":[{"title":"Infobip overview","sidebarTitle":"Overview","icon":"comments","href":"/integrations/infobip/overview"},{"title":"Connect Infobip","sidebarTitle":"Connect","icon":"plug","href":"/integrations/infobip/connect"},{"title":"Infobip troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/infobip/troubleshooting"}]},{"group":"Jira","icon":"list-check","pages":[{"title":"Jira overview","sidebarTitle":"Overview","icon":"bug","href":"/integrations/jira/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Jira","icon":"plug","href":"/integrations/jira/connect"},{"title":"Issue Flow","icon":"diagram-project","href":"/integrations/jira/issue-flow"}]},{"title":"Jira troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/jira/troubleshooting"}]},{"group":"Creatio","icon":"grid-2","pages":[{"title":"Creatio overview","sidebarTitle":"Overview","icon":"shapes","href":"/integrations/creatio/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Creatio","sidebarTitle":"Connect","icon":"plug","href":"/integrations/creatio/connect"},{"title":"Case Sync","sidebarTitle":"Case Sync","icon":"arrows-rotate","href":"/integrations/creatio/case-sync"},{"title":"AI Fields","sidebarTitle":"AI Fields","icon":"wand-magic-sparkles","href":"/integrations/creatio/ai-fields"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"AI Chat Widget in Creatio","sidebarTitle":"Widget","icon":"comments","href":"/integrations/creatio/channels/widget"},{"title":"AI WhatsApp Support in Creatio","sidebarTitle":"WhatsApp","icon":"whatsapp","href":"/integrations/creatio/channels/whatsapp"},{"title":"AI SMS Support in Creatio","sidebarTitle":"SMS","icon":"comment-sms","href":"/integrations/creatio/channels/sms"},{"title":"AI Phone Support in Creatio","sidebarTitle":"Phone","icon":"phone","href":"/integrations/creatio/channels/phone"},{"title":"AI Email Support in Creatio","sidebarTitle":"Email","icon":"envelope","href":"/integrations/creatio/channels/email"}]},{"title":"Creatio troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/creatio/troubleshooting"}]},{"group":"Pipedrive","icon":"users-viewfinder","pages":[{"title":"Pipedrive overview","sidebarTitle":"Overview","icon":"chart-line","href":"/integrations/pipedrive/overview"},{"title":"Pipedrive connect","sidebarTitle":"Connect","icon":"plug","href":"/integrations/pipedrive/connect"},{"title":"Update Lead Action","icon":"user-round-pen","href":"/integrations/pipedrive/update-lead-action"},{"title":"Trigger workflows from Pipedrive","icon":"bolt","href":"/integrations/pipedrive/webhook-trigger"},{"title":"Pipedrive troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/pipedrive/troubleshooting"}]},{"group":"Aircall","icon":"phone","pages":[{"title":"Aircall overview","sidebarTitle":"Overview","icon":"phone","href":"/integrations/aircall/overview"},{"title":"Aircall connect","sidebarTitle":"Connect","icon":"plug","href":"/integrations/aircall/connect"},{"title":"Post Call Context Action","icon":"phone-forwarded","href":"/integrations/aircall/post-call-context-action"},{"title":"Aircall troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/aircall/troubleshooting"}]}]},{"group":"E-commerce","pages":[{"group":"Shopify","icon":"shopify","pages":[{"title":"Shopify overview","sidebarTitle":"Overview","icon":"store","href":"/integrations/shopify/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect Shopify","sidebarTitle":"Connect Store","icon":"plug","href":"/integrations/shopify/connect"},{"title":"AI Actions","sidebarTitle":"AI Actions","icon":"robot","href":"/integrations/shopify/ai-actions"}]},{"title":"Contact Metadata","sidebarTitle":"Contact Metadata","icon":"address-card","href":"/integrations/shopify/contact-metadata"},{"title":"Shopify troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/shopify/troubleshooting"}]},{"group":"FareHarbor","icon":"anchor","pages":[{"title":"Fareharbor overview","sidebarTitle":"Overview","icon":"calendar-check","href":"/integrations/fareharbor/overview"},{"group":"Setup Integration","icon":"gear","pages":[{"title":"Connect FareHarbor","icon":"plug","href":"/integrations/fareharbor/connect"},{"title":"Booking Flow","icon":"route","href":"/integrations/fareharbor/booking-flow"}]},{"group":"Channels","icon":"grid-2","pages":[{"title":"Chat in FareHarbor","sidebarTitle":"Chat","icon":"comments","href":"/integrations/fareharbor/channels/chat"},{"title":"Voice in FareHarbor","sidebarTitle":"Voice","icon":"phone","href":"/integrations/fareharbor/channels/voice"}]},{"title":"Fareharbor troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","href":"/integrations/fareharbor/troubleshooting"}]}]},{"group":"Other Integrations","pages":[{"title":"Zapier","icon":"asterisk","href":"/dashboard/zapier"}]}]},{"tab":"MCP","icon":"network-wired","pages":[{"title":"MCP","href":"/mcp/introduction"}]},{"tab":"Agent Training","icon":"book","pages":[{"title":"Agent Training","href":"/knowledge/introduction"}]},{"tab":"AI Safety","icon":"shield","pages":[{"title":"AI Safety","href":"/safety/introduction"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/authentication"}]},{"tab":"Partners","icon":"handshake","pages":[{"title":"Partners","href":"/partners/introduction"}]}]},"title":"Connect Freshdesk ticketing - Open.cx Docs","buildId":"dpl_37ZDLJcyt8yhrTVF6LiYvX7LvmXB","deploymentId":"dpl_37ZDLJcyt8yhrTVF6LiYvX7LvmXB","dynamics":[],"chunks":[]}