Incident field templates

Build the text Xyte writes into ServiceNow, Freshdesk and Jira tickets from your own wording plus placeholders for incident, device and space values — with date formatting, fallbacks and length limits, set separately for when the ticket is created, updated and closed.

A template is text with {key} placeholders. When Xyte creates, updates or closes a ticket, each placeholder is replaced with that incident's value:

{priority}: {device} offline in {space_name}

renders as High: Front Lobby Camera offline in Room 301.


Where templates are used

IntegrationWhereTabsTitle and descriptionExtra field rows
ServiceNowField Mapping stepCreate, Update, CloseShort description (Create, Update), Description (Create)Yes — Template on text columns
FreshdeskTicket Fields stepCreate, Update, CloseSubject (Create, Update), Description (Create)Yes — Template on single-line and multi-line text custom fields
JiraField mapping stepCreate, UpdateSummary (Create, Update), Description (Create)No
AutotaskTemplates step—Title template and Description template, saved with Save templatesNo

Leave a title or description template blank to keep Xyte's default: the incident title, or the full structured details for the description. Jira differs in two ways — see Jira wiki markup below and this note:

📘

Jira summary and blank results

In Jira the summary is sent as one line and cut to 255 characters. If a Jira summary or description template renders completely empty, Xyte sends the default instead (the incident title, or the full structured details).


Create, Update and Close tabs

In ServiceNow, Freshdesk and Jira, the step has one tab per ticket event:

TabSentPinned fields
CreateWhen Xyte opens the ticketTitle (short description, subject or summary) and description
UpdateOn every incident change while the ticket is openTitle only
CloseWhen the incident closes — ServiceNow and Freshdesk onlyNone
  • Pinned fields sit at the top of a tab. Each shows its current template — or No template — the incident title is used / No template — the full structured details are used — and an Edit button. The description is pinned on Create only: Xyte sets it when the ticket is opened and never rewrites it, so a two-way sync can't echo it back and forth.
  • Field rows (ServiceNow and Freshdesk) sit below. Click Add field to add one. A row is sent only on its own tab's event — to keep a field current on every change, add it on both Create and Update.
  • The close details — {closed_reason}, {closed_by}, {closed_method} and {duration} — only have a value once the incident closes, so only the Close tab offers them, as a Xyte field or inside a template.
  • One save button saves every tab: Save fields in ServiceNow and Jira, Save ticket settings in Freshdesk. Switching tabs saves nothing.
📘

Set up before the tabs existed?

Your existing templates and field rows were carried over: the title template onto Create and Update, the description template onto Create, and each field row onto every tab where it applies.


Field mapping rows

Each field row on a tab sends one of three things to the target field:

Row typeSendsExample
Static valueA fixed valueHardware
Xyte fieldOne incident, device or space value, as-isDevice serial
TemplateYour text with {key} placeholders filled in{vendor} {model} ({serial})

Template is offered only where the target field takes free text:

  • ServiceNow — text columns. Not offered on date, date/time, time, duration, number (integer, decimal, float, currency, price, percent), true/false, reference, choice, list, document ID, domain ID, class name or table name columns — map those with a static value or a Xyte field.
  • Freshdesk — only single-line text and multi-line text custom fields (cf_…). Dropdowns, checkboxes, numbers, dates and ticket_type take a static value or a Xyte field; group, agent, product and source take a static value only.
📘

If Xyte couldn't read the field list from your instance or account, the field type can't be checked, so Template stays available — make sure the target really is a text field.

Editing a template

A pinned field and a Template row (which shows No template yet until you write one) both have an Edit button. It opens the template window:

  • A text box for the template.
  • Validate — checks the template now and shows Template is valid or what's wrong.
  • Supported fields — click a key to insert it at the cursor; Search fields narrows the list. On the Create and Update tabs the close details aren't listed.
  • Template options — a short reminder of the filters and date codes below, plus a link back to this page (Full template reference).
  • Apply puts the text into the field or row; Cancel discards it.

Apply only updates the tab — click the step's save button (Save fields in ServiceNow and Jira, Save ticket settings in Freshdesk) to save. That's when every tab is validated.


Keys

KeyValueExample
{title}Incident titleCamera offline
{description}Incident descriptionDevice stopped responding
{incident_id}Short incident IDINC-A7K2Q9
{status}Incident status — active, fixed or closedactive
{priority}Priority — Critical, High, Moderate, Low or PlanningHigh
{assignee}Assigned user (empty when unassigned)Jane Doe
{created_at}When the incident was created2026-09-10T08:14:02Z
{closed_at}When the incident was closed (empty while open)2026-09-10T10:02:41Z
{fixed_at}When the incident was marked fixed2026-09-10T09:55:12Z
{updated_at}When the incident was last updated2026-09-10T09:20:00Z
{xyte_link}Link to the incident in Xytehttps://app.xyte.io/incident/…
{organization}Organization nameAcme Corp
{customer}Customer (top-level space) nameAcme Retail
{device}Device nameFront Lobby Camera
{device_link}Link to the device in Xytehttps://app.xyte.io/devices?deviceId=…
{device_status}Device status — offline, online, unavailable or erroroffline
{vendor}Device vendorAxis
{model}Device modelP3245
{submodel}Device sub-modelP3245-LVE
{serial}Device serial numberACCC8E1F2A3B
{mac}Device MAC addressAC:CC:8E:1F:2A:3B
{ip}Device IP address10.20.30.41
{firmware}Device firmware version11.9.62
{last_seen}When the device was last seen2026-09-10T08:12:55Z
{connection}How the device connects to Xyte (method / name)edge / HQ Edge
{parent}Parent device nameFloor 3 Switch
{device_url}The device's own web interface, when knownhttps://10.20.30.41
{space_name}Space name (the room itself)Room 301
{space_path}Full space path of the deviceHQ / Floor 3 / Room 301
{space_link}Link to the space in Xytehttps://app.xyte.io/overview/…
{affected_devices}Room incidents: names of the devices involved, comma-separatedDisplay 1, Codec, Touch Panel
{opened_by}What opened the incidentdevice
{closed_reason}Why the incident was closed — Close tab onlyDevice is back online
{closed_by}User who closed the incident (empty when no user did) — Close tab onlyJane Doe
{closed_method}How the incident was closed — Close tab onlymanually
{duration}How long the incident lasted, until it was fixed or closed — Close tab onlyabout 2 hours
  • A key with no value for the incident renders as nothing; the rest of the text is kept. In Jira, a summary or description that renders completely empty falls back to the default.
  • Dates (created_at, closed_at, fixed_at, updated_at, last_seen) render as ISO-8601 in UTC unless you add a date filter.
  • Keys are letters, digits and underscores only: {space_name} is a key, {space name} is plain text.
📘

An integration connected before a key was added may show a shorter key list. Every key in the table above still works if you type it by hand.

Room (space) incidents

A room incident covers several devices but is attached to the first one that dropped. For these incidents:

  • {device} is the room name and {model} is Multiple devices.
  • {title} is Room offline: <room name> and {description} is Multiple devices offline in <room name>. Affected so far: <devices>.
  • {affected_devices} lists the devices involved.
  • {last_seen} is empty. The other device keys ({serial}, {ip}, {vendor}, …) still come from the first device that dropped.

Filters

Add a filter after the key with |: {key|filter:argument}. Chain several and they apply left to right. The examples assume a space with no time zone set (UTC) unless they say otherwise.

FilterDoesExampleRenders
date:<format>Formats a date in the device space's time zone{created_at|date:%d/%m/%Y %H:%M}10/09/2026 08:14
default:<text>Uses <text> when the value is empty{assignee|default:Unassigned}Unassigned
truncate:<n>Cuts to at most n characters, ending with ...{title|truncate:20} on Projector lamp failure in Board RoomProjector lamp fa...

date

  • Works only on created_at, closed_at, fixed_at, updated_at and last_seen.
  • Needs a format — {created_at|date} is rejected.
  • Times are in the time zone of the device's space (or its customer's, if the space has none), and in UTC when neither has one. Add %Z to show which. Without a date filter, dates stay ISO-8601 in UTC.
  • date must be the first filter on a key: {closed_at|date:%Y-%m-%d|default:still open} works, {closed_at|default:still open|date:%Y-%m-%d} is rejected.
  • Use the codes below and any literal text. Widths and flags (%-d, %_m, %4Y, %^a) aren't supported.
  • On an empty date (e.g. closed_at while the incident is open) the filter does nothing — pair it with default.
CodeMeaningCodeMeaning
%aWeekday, short (Mon)%AWeekday (Monday)
%bMonth, short (Jan)%BMonth (January)
%dDay, 01–31%eDay, 1–31, space-padded
%HHour, 00–23%IHour, 01–12
%jDay of year, 001–366%mMonth, 01–12
%MMinute, 00–59%pAM / PM
%SSecond, 00–60%yYear, 2 digits
%YYear, 4 digits%ZTime zone name (UTC)
%zUTC offset (+0000)%%A literal %

default

  • Needs a text — {assignee|default} is rejected.
  • Applies when the value is empty or only spaces.

truncate

  • Needs a whole number of at least 4 — truncate:3 and truncate:ten are rejected.
  • The result, including the ..., is at most n characters. Shorter values are left alone.

Examples

TemplateRenders
{created_at|date:%b %e, %Y}Sep 10, 2026
{created_at|date:%A %I:%M %p %Z}Thursday 10:14 AM CEST, for a space in Berlin
{closed_at|date:%Y-%m-%d|default:still open}2026-09-10, or still open while the incident is open
{assignee|default:Unassigned|truncate:12}Unassigned, or the assignee's name cut to 12 characters
[{priority}] {title|truncate:80} — {space_path}[High] Camera offline — HQ / Floor 3 / Room 301

Validation

Templates are checked when you save the step — every pinned field and Template row, on every tab. The save is rejected, with the offending placeholder named, when a template has:

  • An unknown key — e.g. {devise}.
  • An unknown filter — only date, default and truncate exist.
  • A malformed filter chain, or a filter argument containing |, { or }.
  • A filter that doesn't fit — date on a non-date key, date after another filter, a missing argument, an unsupported date code, or truncate below 4.
  • A close detail on the wrong tab — {closed_reason}, {closed_by}, {closed_method} or {duration} on Create or Update, in a template or as a Xyte field.
  • On a field row: a Template on a field that isn't a text field (see Field mapping rows).
  • Freshdesk: ticket_type, group, agent, product, source or tags on the Update tab. Those are set on Create only, so an update never undoes a reassignment made in Freshdesk.
📘

Jira wiki markup

Jira descriptions often use wiki macros such as {code}, {quote} or {noformat}. In Jira templates, a bare {word} that isn't a key is left as written instead of rejected. A placeholder with filters ({word|…}) must still use a real key.

Autotask's Templates step doesn't check templates when you save. There, and in a template saved before validation existed, a mistake can still slip through. At send time, any placeholder Xyte can't resolve is written out as typed, so the mistake shows in the ticket rather than being dropped.


Did this page help you?