Here you will find a description of the variables that are available to you when scripting in Unifi.


Add note script

The Add Note Script is used to notify the end user about integration events. These notes are automatically added during processing and the script allows the target of the note to be customised. E.g., notes are usually added to work notes on Task-based tables, but a custom table might have a different field for this.

// An example add note script
function addNote(target, note, options) {
  var message = '[' + options.integration_name + ' Integration] ' + note;
  if (options.type == 'error' || options.type == 'warn') {
    message = '[code]<span style="color: red">' + message + '</span>[/code]';
  target.work_notes = message;

Identify message script

The Identify Message Script is executed when an inbound request is received. It returns the name of the message that should be used to process the request. Typically, message names are embedded within the request payload, but it's possible to use the other variables available for more complex identification.

// An example identify script
function identify() {
  return ( || '') + '';


Endpoint URL

The Endpoint URL will be prepended to Message Path values (providing they do not override). Inline scripts using curly braces {} can be used to construct more advanced endpoints.

See Message Path parameters for available variables.

We recommend dynamic endpoints only be considered for the same environment. New environments should have new connections so they can be managed more easily.


Advanced condition

The Advanced condition is used to script complex trigger logic into the message. Only use this if you cannot use the Outbound condition filters and the single line Outbound condition.

See Outbound condition parameters for available variables.

Extract attachments script

Attachments can be extracted from payloads and saved before the payload is saved. This is highly recommended as it saves from storing the attachment itself in the payload on the HTTP Request record.

Attachment data should be extracted, saved as an attachment, and replaced with the attachment sys_id in the format <x-attachment-data sys_id="...">. Unifi will automatically collect the attachment ids, create Bonded Attachments for each of them, and finally move the attachments to the target record.

Streaming is better. Attachments can be streamed into Unifi which bypasses the need for extraction, supports binary file sharing, and also allows for sizes up to 50MB (providing your instance and integration configuration supports this).

This is available for all new integrations from Unifi 3.0. Contact us for information on how to do this with previous versions.

// Example extract attachments script using a Script Include
// for extracting Base64 from an XML payload.
// We rewrite the payload to pass back to Unifi
payload = unifi_util.extractAttachmentsFromXml(payload, request);


The Path is used to modify the endpoint for the message. It can be used with inline script evaluation to construct more advanced endpoints. Inline scripts should be wrapped with dollar curly braces ${...}.


Outbound condition

The outbound condition is an inline script field useful for simple one-line conditions to be used in conjunction with the filter.

More advanced conditions can be made in the Advanced condition script field.

current.assignment_group && String(current.assignment_group.u_unifi_integrations).indexOf(message.integration) != -1

Reference lookup script

The Reference lookup script is used to extract the internal and external message ID's when an inbound request is received. These ID's are used to locate the bond (and therefore the target) the request applies to.

// An example reference lookup script
var answer = {};

answer.getExternalMessageID = function (payload, request) {
  return '' + (payload.message.source_id || '');

answer.getInternalMessageID = function (payload, request) {
  return '' + (payload.message.target_id || '');

XML Template

The XML Template is evaluated in a similar way to a UI Macro and is extremely useful in constructing advanced XML based payloads using Jelly. Other types of payload can be constructed here, however it's normally easier to do this with the Fields and Field Maps or directly in the Message Scripts.

The XML Template will only be evaluated if the payload has not already been set within the Stage to Request message script.

Install the Unifi Global Utility for full support of Jelly within XML Templates.

<!-- An example XML template -->
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<g:evaluate jelly="true">
		var transaction = jelly.jvar_transaction;
		var stage = jelly.jvar_stage;
		var message = jelly.jvar_message;
	<soapenv:Envelope xmlns:soapenv="">
		<soapenv:Header />

Message Script

Source to Stage (Outbound)

The Source to Stage script is used to capture data from the source record, e.g., an Incident, and save it to the stage record where it is ready to be used to generate a payload.

Source data values should be captured in full (including referenced values) in the Source to Stage script.

// Example source to stage script (using dynamic stage)
$stage.short_description = '' + source.short_description;

Stage to Request (Outbound)

The Stage to Request script is used to generate a payload using the data captured on the stage.

Payload generation and request configuration should be done in the Stage to Request script.

// Example stage to request script (using dynamic stage)
payload.short_description = $stage.short_description;

Payload to Stage (Inbound)

The Payload to Stage script is used to capture data from the inbound request payload and save it to the stage record where it is ready to be used to update the target record.

// Example payload to stage script (using dynamic stage)
$stage.short_description = payload.short_description;

Data should be extracted from the inbound payload and headers in the Payload to Stage script.

Stage to Target (Inbound)

The Stage to Target script is used to update the target record, e.g., an Incident, with the data and references given in the stage.

Reference lookups, data validation, and business logic should be done in the Stage to Target script.

// Example stage to target script (using dynamic stage)
target.short_description = $stage.short_description;


Default inbound

The default inbound script can be used so set the default value to be used by the Field Map when no value is found on the stage.

See Stage to Target (Inbound) for available variables.

Default outbound

The default outbound script can be used so set the default value to be used by the Field Map when no value is found on the source.

See Source to Stage (Outbound) for available variables.

Field Map

Fields maps are compiled during Build operations with the field as an input and the resulting code is added to the respective Message Scripts.

Only code contained within dollar-square brackets $[...] will be compiled. During inbound/outbound processing, standard Message Script variables will apply.

var is_mandatory = $[field.mandatory];

if (is_mandatory && $payload.$[] == undefined) {
  throw 'Mandatory field $[] was not provided';
} else {
  $stage.$[field.element] = $payload.$[];

Response Action

The Response Action script is executed when Run Script is checked. It can be used to do anything based on a response to an outbound request.

Event Action

Last updated