saifbrand/zendesk — Zendesk support automation for RailCall

Free module. Adds 10 Zendesk Support commands to RailCall so workflows can triage, reply to, and route tickets — every write still goes through RailCall's preview → approve → execute → signed-receipt airlock.

Who this is for

Small support teams (2–15 agents) on Zendesk who want RailCall workflows to auto-triage inbound tickets, apply the right macro, tag and route by topic, and reply — the repetitive first-touch work that otherwise eats an agent's morning. One macro + one tag on 20 tickets/day saves ~30–45 min daily; an approved workflow does it instead.

Commands (10)

CommandEffect
zendesk.create_ticketNew ticket, optional requester email/name, priority, tags
zendesk.get_ticketFetch status/priority/requester/tags
zendesk.list_ticketsRecent tickets, optional status filter
zendesk.search_ticketsFull Zendesk search syntax (status:open priority:urgent)
zendesk.update_ticketChange status/priority/subject/assignee (by email)
zendesk.add_commentPublic reply or private internal note
zendesk.add_tagsAdd tags without disturbing existing ones
zendesk.list_macrosList active macros + ids
zendesk.apply_macroApply a macro and commit the resulting ticket changes
zendesk.find_or_create_userLook up a requester by email, create if new

Read-only commands (get, list, search, list_macros) execute immediately. Everything else writes to your Zendesk and requires airlock approval first.

Install (under 10 minutes)

curl -fsSL https://railcall.ai/install.sh | bash
railcall market install saifbrand/zendesk

Credentials — Zendesk OAuth client, not a password

Zendesk is retiring plain API tokens, so this module uses a Confidential OAuth client with the client_credentials grant — no browser redirect, no agent password.

  1. Zendesk Admin Center → Apps and integrations → APIs → OAuth clients → Add OAuth client
  2. Client kind: Confidential. Redirect URL can be any placeholder (http://localhost:8080/callback) — it's never used, since client_credentials has no redirect step.
  3. Save the Identifier and Secret (shown once).
  4. In RailCall Studio → Integrations, save a zendesk credential: {"subdomain": "yourcompany", "client_id": "<identifier>", "client_secret": "<secret>"}

The module exchanges these for a short-lived access token per call (cached in memory, ~30 min) — nothing beyond subdomain/client_id/secret is ever persisted, and no token appears in inputs, outputs, or receipts.

Working example

Run railcall studio, open saifbrand/zendesk → create_ticket, fill in subject, body, priority=normal, tags=["billing"]. Because this command is side_effects: external, the airlock shows a preview diff first — approve it, then execute. The signed receipt returns:

{"ok": true, "ticket_id": 481, "status": "open",
 "url": "https://yourcompany.zendesk.com/agent/tickets/481"}

Read-only commands (get_ticket, list_tickets, search_tickets, list_macros) skip the approval step and return immediately.

Known limitations