Zoho Desk
Creates a support ticket from a call, using a client-configurable template, with optional recording/transcript attachment and post-creation status tracking.
- Direction: Outbound (Sprio → Zoho Desk)
- Trigger:
post_call, forcompletedortransferredcalls, gated by a configurable run condition (by default: only when the call's extractedlead_intentis one ofcomplaint,support_request,callback)
Connecting
Zoho Desk uses the same OAuth machinery as Zoho CRM (zoho_oauth
credential type, same data-center handling), but as a separate
connection with Desk-specific scopes: Desk.basic.READ,
Desk.contacts.READ, Desk.tickets.ALL, Desk.settings.READ,
Desk.search.READ. Connecting Zoho CRM does not automatically grant Desk
access — connect each product independently from Integrations → Zoho Desk.
Ticket content
| Field | Source |
|---|---|
departmentId | Configured per connection (required) |
subject | Template, default {lead_intent} — {caller_mobile} |
description | Template, default {issue_summary} |
status | Open |
channel | Phone |
phone | Caller's number |
priority | Mapped from extracted lead_intent — default: complaint→High, support_request→High, callback→Low |
Priority (and classification/assignee, if configured) use the same value-mapping mechanism: an extracted field's value is looked up in a mapping table you define, with a literal fallback if nothing matches.
Contact matching
Before creating a ticket, Sprio searches for an existing Zoho Desk contact
by phone number (GET /api/v1/search/contacts?searchStr={mobile}) and
reuses it if found, rather than creating a duplicate contact per call.
Tags
Tags are not sent as part of ticket creation — Zoho Desk rejects a
tags field on create/update with a 422 ("extra parameter 'tags'") on
some accounts. If you configure tags, Sprio applies them in a separate
follow-up call (POST /api/v1/tickets/{id}/associateTag) after the ticket
exists.
Templates
Subject and description templates use {key} placeholders, resolved
against call fields, metadata, extracted fields, and the transcript —
configurable per org from Integrations → Zoho Desk → Template, with
sensible defaults if you don't customize them.
Attachments
Both are opt-in settings:
- Call recording (
attach_call_recording) — uploaded as a.wavfile attachment on the ticket. - Full transcript (
attach_full_transcript) — posted as an internal (non-public) comment on the ticket, not a file attachment.
Status tracking
Zoho Desk doesn't push ticket status changes to Sprio — there's no
outbound webhook for this. Instead, Sprio schedules a one-time status
poll roughly 15 minutes after ticket creation (GET /api/v1/tickets/{id}),
merging the ticket's status, priority, assignee, and modified/closed
timestamps back into the call's metadata. This is a single check, not
ongoing polling — it won't reflect status changes made after that window.
Failure behavior
Follow-up actions (attachments, tagging, status refresh) fail soft by design — a failure in any of them never retroactively fails or removes the ticket that was already created.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Ticket created but tags missing | Expected if tagging failed after creation — check integration activity for the follow-up call's result |
| No ticket for a call you expected | Check the run condition — by default only complaint/support_request/callback intents create a ticket |
| Duplicate contacts appearing | Confirm the caller's number matches exactly what's on the existing Desk contact — phone-based matching requires an exact match |
| Status shown on the call doesn't reflect a later change | The status poll only runs once, ~15 minutes after creation — it does not track ongoing changes |