Plan requirement
| Subscription | Any plan |
| Access | Admin |
Every placeholder you are likely to need, with the exact text to copy, and the four pairs that are easy to confuse.
Placeholders are case sensitive. Copy them rather than retyping.
The ticket
{{ticket.id}} |
The ticket ID. Written as #{{ticket.id}} it becomes a clickable link. |
{{ticket.title}} |
The subject. |
{{ticket.description}} |
The first comment, with requester name and date. |
{{ticket.verbatim_description}} |
The first comment as plain text, without the header. |
{{ticket.status}} |
New, Open, Pending, On-hold, Solved or Closed. |
{{ticket.custom_status}} |
The custom status, where those are switched on. |
{{ticket.priority}} |
Low, Normal, High or Urgent. |
{{ticket.ticket_type}} |
Question, Incident, Problem or Task. |
{{ticket.group.name}} |
The assigned group. |
{{ticket.brand.name}} |
The ticket's brand. |
{{ticket.account}} |
Your Zendesk account name. |
{{ticket.tags}} |
Every tag on the ticket. |
{{ticket.via}} |
How it arrived: Web form, Mail and so on. |
{{ticket.due_date}} |
Due date on a task ticket, as May-18. |
{{ticket.created_at}} |
Creation date. Also _with_time and _with_timestamp. |
{{ticket.updated_at}} |
Last update. Same two variants. |
{{ticket.url}} |
The full path, without http://. |
{{ticket.link}} |
The full URL. |
{{ticket.cc_names}} |
Names of the CCs. |
{{ticket.follower_names}} |
Names of the followers. |
{{ticket.in_business_hours}} |
True or False, for the moment of the update. |
The people
{{ticket.requester.name}} |
Requester's full name. |
{{ticket.requester.first_name}} |
First name only. |
{{ticket.requester.last_name}} |
Last name only. |
{{ticket.requester.email}} |
Email address. |
{{ticket.requester.details}} |
The Details field on their profile. |
{{ticket.organization.name}} |
The requester's organisation. |
{{ticket.assignee.name}} |
Assignee's name or alias. |
{{current_user.name}} |
Whoever caused this update. Also first_name, last_name, email, phone, language, time_zone, role, id, locale. |
{{agent.name}} |
Only in signatures. Also first_name, last_name, email, phone, role, language, time_zone. |
The comments
This is the group that causes real damage, because two of them differ by one word and one of them sends internal notes to customers.
{{ticket.latest_comment}} |
The last comment, public or internal. Plain text. |
{{ticket.latest_public_comment}} |
The last public comment. Plain text. |
{{ticket.comments}} |
Every comment, newest first. Plain text. |
{{ticket.public_comments}} |
Every public comment, newest first. Plain text. |
{{ticket.latest_comment_formatted}} |
As above, with formatting and attachments. |
{{ticket.latest_public_comment_formatted}} |
The safe one for customer email. |
{{ticket.comments_formatted}} |
All comments, formatted. |
{{ticket.public_comments_formatted}} |
All public comments, formatted. |
{{ticket.latest_comment_html}} |
HTML variant, for email threading. |
{{ticket.latest_public_comment_html}} |
HTML variant of the public one. |
{{ticket.latest_comment_rich}} |
Rich text variant. |
{{ticket.latest_public_comment_rich}} |
Rich text, public only. |
Inside a comment loop
When you iterate over {{ticket.comments}}, {{ticket.public_comments}}, {{ticket.latest_comment}} or {{ticket.latest_public_comment}} with Liquid markup, each comment exposes its own properties.
comment.value |
The comment text, unformatted. |
comment.value_rich |
The comment text with rich formatting preserved. |
comment.author.name |
Who wrote it. |
comment.created_at |
The date it was posted. |
comment.created_at_with_time |
Date and time. |
comment.is_public |
True for public, false for internal. |
comment.id |
The comment's identifier. |
comment.attachments |
Its attachments, with filename and URL. |
One of these defeats an agent alias. comment.value_rich displays the full name of the agent who commented even when their profile has an alias, while comment.value does not. If anybody on your team uses an alias for their own safety, that difference is not cosmetic.
Satisfaction
{{satisfaction.survey_url}} |
The link a customer rates from. |
{{satisfaction.survey_section}} |
The whole block of text inviting them to rate. |
{{satisfaction.current_rating}} |
The rating as text. |
{{satisfaction.current_comment}} |
What they wrote with it. |
Custom fields
{{ticket.ticket_field_<field_ID>}} |
A custom ticket field, by numeric ID. |
{{ticket.ticket_field_option_title_<field_ID>}} |
The visible title of a drop-down value, rather than the stored value. |
{{ticket.requester.custom_fields.<field_key>}} |
A custom user field, by key. |
{{ticket.organization.custom_fields.<field_key>}} |
A custom organisation field, by key. |
See Placeholders for custom fields for how to find the ID or key, and why they differ between environments.
The four to check twice
-
{{ticket.latest_comment}}against{{ticket.latest_public_comment}}. The first one includes internal notes. In a customer-facing trigger this is how private remarks reach the customer. -
{{ticket.url}}against{{ticket.link}}, and both against the agent interface. Send a customer a link they cannot open and they will reply asking for one. - Plain against
_formatted. In an HTML email the plain variant loses your line breaks and arrives as one block. -
{{ticket.requester.name}}when there is no name. It renders empty, so write the sentence to survive that.
Comments
0 comments
Article is closed for comments.