Skip to content

Read the customer's turn on a Zendesk ticket

Module · Stable

What the customer is waiting on, whether to draft, and whom to greet — read off a Zendesk ticket’s thread.

The first step of a reply-drafting Job on Zendesk. It reads the ticket and its whole thread once and answers what every later step needs. action says what to do: draft (the customer is waiting and nothing has been drafted for this message), no_action (the desk already replied after the customer, or no customer wrote) or handled (a note this platform wrote is already newer than the customer’s message); why says it in a line. open_messages lists every customer message after the desk’s last public reply, not just the newest, so a first question sent before a second one is not dropped. The customer is told apart from the desk by who wrote a comment, not by whether it is public — customers do reply on private comments — and a customer mail forwarded through one of the desk’s own mailboxes is unwrapped and counted as the customer’s. turn_text is the customer’s own words with the quoted mail underneath cut away; timeline_md is the whole conversation as one dense line per message ([2026-10-01 14:02 · customer] …, [… · Jana (public)] …, [… · internal] …), for a prompt. customer.first_name is the name to greet by, taken down a careful ladder — their sign-off, then your own earlier mail they quoted back, then their profile name, then a first.last address — and left empty when none is certain, because “Hi,” is always safe and a wrong name never is. customer.email is the forwarded sender on a relayed mail, not your mailbox. form holds the ticket’s custom fields by name. A follow-up to a closed ticket gets the last messages of that ticket at the top of the timeline. Example: a parts shop’s Job starts with this step (staff_names [“Jana”, “Tomas”, “Acme Parts”]), switches on action, writes the reply from turn_text and timeline_md greeting customer.first_name, and posts it as an internal note with turn_key as the note’s source_ref. Read-only: it changes nothing in Zendesk.

At the top of any flow that drafts or triages replies to Zendesk tickets, before anything is classified or written: switch on action, and read every later fact (ticket_id, turn_key, the customer, the form) from this step by its name. Pass force from a Regenerate or Refresh caller so a requested redraft is always drafted. Fill staff_names with the names your desk signs with.

Not for the raw thread or for comparing a draft with the reply the desk actually sent — Read Zendesk ticket gives the comments as they are, plus the last public staff reply. Not for files: Get Zendesk ticket attachments fetches those. It reads one ticket by id; it is not a search.

Configured per use: ticket_id, force, refresh_reason, request_id, staff_names, follow_source.

  • found
  • ticket_id
  • subject
  • status
  • tags
  • created_at
  • updated_at
  • action
  • why
  • turn_at
  • turn_key
  • open_messages
  • open_count
  • turn_text
  • timeline_md
  • last_is_customer
  • already_drafted
  • relayed
  • followup_of
  • customer
  • form
  • force
  • refresh_reason
  • request_id
  • error

the zendesk integration


Auto-generated from the skill registry (load_skills()). Do not edit by hand.