GETTING STARTED
Introduction to SmartAssist
Glossary
SmartAssist Lifecycle Management
SmartAssist Setup Guide
Sign Up for SmartAssist
Release Notes
Current Version
Recent Updates
Previous Versions
Frequently Asked Questions (FAQ)

EXPERIENCE DESIGNERS
Flow Designer
Introduction
Create Experience Flows
Navigate the Flow Designer
Experience Flow Nodes
Introduction
Node Types
IVR Menu
IVR Digit Input
Conversational Input
Split
Check Agent Availability
Check Business Hours
Message Prompt
Run Automation
Agent Transfer
Connect to API
Go to Flow
Deflect to Chat
Script Task
Set Queue
End Flow
Waiting Experience
Conversation Automation
Testing Widget
Use Cases
Overview
Questions & Answers
Conversations

ADMINISTRATORS
Account Management
Switch Account
Invite Developers to an Account
Routing
Skills
Skill Groups
Queues
Hours of Operation
Default Flows
User Management
Users
Agent Groups
Agent Settings
Role Management
Agent Status
System Setup
Channels
Voice
Chat
Email
Limitations With Accounts Using AudioCodes
Agent Transfer
Surveys
Agent Forms
Dispositions
Language & Speech
Overview
Language Management
Voice Preferences
Hold Audio
Standard Responses
Handling Sensitive Data
Widgets
Utils
AgentAssist Settings
SearchAssist
Advanced Settings
Co-Browse Settings
Community WFM (Beta)
Automatic Conversation Summary (Beta)
Intelligent Agent Tools
Sensitive Data Masking
API Reference
API Setup
API List
Integrations
Genesys Voice Bot
Voice Automation - Integration with Amazon Connect
Voice Automation NiceCX (CX One) - SIP Integration
Talkdesk Voice Automation
Audit Report

AGENTS
Agent Console
Introduction
Conversation Tray
Incoming Interactions
Interacting with Customers
Additional Tools
My Dashboard

SUPERVISORS
Dashboard
Automation
Queues and Agents
Interactions
Intelligence
Monitor Queues, Agents, Interactions, and Service Levels
Manage Layout

BUSINESS USERS
Reports
Introduction
Reports List

Script Nodes, Call Flows, Agent Utils, and userSessionUtils

This document explains the script nodes, call flows, and supported utils with examples.

Conversation Flows – Script Node

Context | Instance Bot

All the instance bot’s context.session variables will be moved under context.

Example

You can access the userId as {{context.UserContext._id}} in a message node.

OR

Place setCallFlowVariable("user_id", context.UserContext._id); in a script node to create a call flow variable and access the same in the message node as {{context.user_id}}.

Context | Child Bot

You can access the child bot’s context in the following two ways:

getChildBotContextById("st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc")

OR

context.childBotsContext["st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc"]

Example

To access the child bot’s userId, 

Get the complete child bot’s context and assign it to a variable:

var cbCtx = getChildBotContextById("st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc")

OR

var cbCtx  = context.childBotsContext["st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc"]

And access the properties from the variable

var userId = cbCtx.UserContext._id

Content Variables

You can access the content variables defined in the instance bot by giving the “content” keyword followed by the period operator and the variable name.

Example

content.DAI_CF_CHAT_AGENT

Environment variables

You can access the environment variables defined in the instance/parent bot by giving the “env” keyword followed by the period operator and the variable name.

Example

env.botId

Call Flow Variables

You can get and set variables in the call flow context for accessing it later in split or message nodes. Following are the syntax of set and get call flow variables.

setCallFlowVariable( {{keyName}} , {{value}} );
getCallFlowVariable( {{keyName}} );

Example

setCallFlowVariable("user_id", context.UserContext._id)

var userId =  getCallFlowVariable("user_id")

Set Voice Chat on SmartAssist Voice Gateway Account

Using the following Utils method/script inside the script node, you can set up voice chat in accounts configured with SmartAssist Voice Gateway (SAVG).

Syntax:

userSessionUtils.setConversationType('voiceChat');
userSessionUtils.setLanguageTranslationAPIKey("AIzaSyBnk4hBmHuLjeIzScNAxAdhy0RExxxx");
userSessionUtils.setVoiceChatAgentLang("en");
userSessionUtils.setVoiceChatUserLang("de");

Agent Utils

Agent Utils is a library available for any programmatic modifications or updates you (the developer) may want to make.

Change SIP URI and Phone Number

Using the following Agent Utils method/script, you can change the SIP URI and the phone number.

Syntax

agentUtils.setTransferSipURI( {{sip URI}} )
agentUtils.setTransferPhoneNumber( {{phoneNumber}} )

Example

agentUtils.setTransferSipURI("sip:+123344234232@2.3.4.5:5060")
agentUtils.setTransferPhoneNumber("+12345434567")

Set User Info

Using the following Agent Utils method/script, you can set or add additional information about the customer in the instance bot. You can add the script as part of the script node inside the connectToagent node in the instance bot.

Syntax

const userInfo = { "firstName": "<value>", "lastName": "<value>", "email": “<value>","phoneNumber": "value","country": "value","city": "value","Unit Address": "value"};
agentUtils.setUserInfo(userInfo);

Example 1

In the below example, static data is used to set the user info.

const userInfo = {
"firstName": "John",
"lastName": "Smith",
"email": "jsmith316@gmail.com",
"phoneNumber": "407-876-8654",
"country": "USA",
"city": "Philadelphia",
"Unit Address": "Unit 12 - Witherspoon Philadelphia"
};
agentUtils.setUserInfo(userInfo);

Example 2

In the below example, dynamic data based on context is used to set the user info.

const userInfo = {
"firstName": context.session.BotUserSession.memberData.firstName,
"lastName": context.session.BotUserSession.memberData.lastName,
"email": context.session.BotUserSession.memberData.email,
"phoneNumber": context.session.BotUserSession.memberData.phoneNumber,
"country": context.session.BotUserSession.memberData.country,
"city": context.session.BotUserSession.memberData.city,
"Unit Address": context.session.BotUserSession.memberData.Unit Address
};
agentUtils.setUserInfo(userInfo);

Set/Get Bot Languages

Using the following Agent Utils method/script, you can set/get the bot languages for the agent desktop.

Syntax

agentUtils.setBotLanguage( {{langCode }} )
agentUtils.getBotLanguage()

Example

agentUtils.setBotLanguage("en")
agentUtils.getBotLanguage()

Set Queue

Syntax

You can use the agentUtils.setQueue() method to set the conversations queue at any point leading up to the agent transfer. You can do this by using a Script Node within a bot action node in the XO Platform or a Script Task node within an experience flow in SmartAssist. 

agentUtils.setQueue()</code

Example

agentUtils.setQueue(queueId);

Set Live Chat Agent Transfer

SmartAssist supports dynamic (multiple) live chat agent transfer using the following Agent Utils method/script. On the user interface, you may have one agent system, but you can override the agent system using the method.

Syntax

agentUtils.setLiveChatAgentOutGoingSetup({“name”:”<<system name>>”, “config”: {““:””}})

Example (for Salesforce)

agentUtils.setLiveChatAgentOutGoingSetup({
"name": "salesforce",
"config": {
"liveAgentUrl": "https://d.la2-c1-ph2.salesforceliveagent.com/chat/rest",
"organizationId": "00D5g00000KClxx",
"deploymentId": "5725g000000QKxx",
"buttonId": "5735g000000QQxx"
}
});

Set Named Agents

This method takes an array of agentIds and only uses these agents for assigning a conversation.

Syntax:

agentUtils.setNamedAgents(['agentId1', 'agentId2'])

Example:

agentUtils.setNamedAgents(['a-e1427c4-8e7d-4728-8e6c-64281b235ad7', 'a-e1427c4-8e7d-4728-8e6c-64281b235ad8'])

Set Agent Matching Conditions

You can add Skills, Skill groups, and Agent groups to the script task, and based on that, a set of agent IDs is generated.

Syntax:

agentUtils.setAgentMatchingConditions({
skills : ["skillId"],
agentGroups: ['agentGroupId'],
skillGroups: ["skillGroupId"],
})

Example:

agentUtils.setAgentMatchingConditions({
skills : ["63b2c180ab43c287acab1014"],
agentGroups: ['ag-6b135b4-b03a-461d-b33d-dd5189cb4604'],
skillGroups: ["6390989f1d00e75d5df4db35"],
})

userSessionUtils

Get: Use this function to get the value associated within a key within the “userSession” object in the conversation context. You can get the value associated with the key using this script.

Syntax:- 

userSessionUtils.get(key)

Example:-

userSessionUtils.get(‘Caller’);

Put: Use this function to store a key-value pair within the “userSession” object in the conversation context.

Syntax:- 

userSessionUtils.put(key,value)

Example:-

var caller = getCallFlowVariable(‘caller’);

userSessionUtils.put(‘Caller’, caller);

The example above adds the key ‘Caller’ to userSession and stores the value of the caller variable against that key. 

Delete: Use this function to delete the key from the userSession object.

Syntax:- 

userSessionUtils.delete(key)

Example:-

userSessionUtils.delete(‘Caller’);

Pass Data from Experience Flow to Dialog in a Child Bot

This script accesses data from an experience flow to pass it to a dialog in a child bot. The script node of the experience flow sets a variable named ‘caller’ using information from the current user session. This variable is then stored in the user session with the key “Caller” using userSessionUtils. 

"Caller" using userSessionUtils.
setCallFlowVariable('caller',context.BotUserSession.<context variable>);
var caller = getCallFlowVariable('caller');
userSessionUtils.put("Caller", caller);

Access the Variable Inside a Dialog in the Child Bot

To access this variable in a dialog within the child bot, you must reference it using "context.session.UserSession.Caller". This retrieves the value of the ‘Caller’ variable from the user session in the context of the current conversation within the child bot’s dialog.

Store a Value Inside a Dialog in the Child Bot

The script stores a value inside a dialog in a child bot, you can retrieve it in the experience flow script node and print it in the end node of the experience flow. This process allows data to be transferred between a dialog in a child bot and the experience flow.

BotUserSession.put("key", "value")

  • Retrieve the context in the experience flow script node:
    const cb = getChildBotContextById(<childBotId>);
    setCallFlowVariable('testvar', CBContext.BotUserSession.key)
  • Store a value inside a dialog in the child bot:
    This is done using the line BotUserSession.put("key", "value"), where “key” is the identifier for the value being stored, and “value” is the actual data being stored.
  • Retrieve the context in the experience flow script node:
    In the experience flow script node, the code utilizes getChildBotContextById() to obtain the context of the child bot. Then, setCallFlowVariable() stores the value retrieved from the child bot’s BotUserSession, with the key “testvar”.

Print it in the End Node of the Experience Flow

{{context.key}}

  • Print it in the end node of the experience flow:
    The variable “testvar” is accessed within the context in the end node of the experience flow using {{context.key}}, which dynamically inserts the value of “testvar” into the output of the experience flow.

Script Nodes, Call Flows, Agent Utils, and userSessionUtils

This document explains the script nodes, call flows, and supported utils with examples.

Conversation Flows – Script Node

Context | Instance Bot

All the instance bot’s context.session variables will be moved under context.

Example

You can access the userId as {{context.UserContext._id}} in a message node.

OR

Place setCallFlowVariable("user_id", context.UserContext._id); in a script node to create a call flow variable and access the same in the message node as {{context.user_id}}.

Context | Child Bot

You can access the child bot’s context in the following two ways:

getChildBotContextById("st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc")

OR

context.childBotsContext["st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc"]

Example

To access the child bot’s userId, 

Get the complete child bot’s context and assign it to a variable:

var cbCtx = getChildBotContextById("st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc")

OR

var cbCtx  = context.childBotsContext["st-924bd71e-247e-58ec-bfe4-81e0f8b3e0fc"]

And access the properties from the variable

var userId = cbCtx.UserContext._id

Content Variables

You can access the content variables defined in the instance bot by giving the “content” keyword followed by the period operator and the variable name.

Example

content.DAI_CF_CHAT_AGENT

Environment variables

You can access the environment variables defined in the instance/parent bot by giving the “env” keyword followed by the period operator and the variable name.

Example

env.botId

Call Flow Variables

You can get and set variables in the call flow context for accessing it later in split or message nodes. Following are the syntax of set and get call flow variables.

setCallFlowVariable( {{keyName}} , {{value}} );
getCallFlowVariable( {{keyName}} );

Example

setCallFlowVariable("user_id", context.UserContext._id)

var userId =  getCallFlowVariable("user_id")

Set Voice Chat on SmartAssist Voice Gateway Account

Using the following Utils method/script inside the script node, you can set up voice chat in accounts configured with SmartAssist Voice Gateway (SAVG).

Syntax:

userSessionUtils.setConversationType('voiceChat');
userSessionUtils.setLanguageTranslationAPIKey("AIzaSyBnk4hBmHuLjeIzScNAxAdhy0RExxxx");
userSessionUtils.setVoiceChatAgentLang("en");
userSessionUtils.setVoiceChatUserLang("de");

Agent Utils

Agent Utils is a library available for any programmatic modifications or updates you (the developer) may want to make.

Change SIP URI and Phone Number

Using the following Agent Utils method/script, you can change the SIP URI and the phone number.

Syntax

agentUtils.setTransferSipURI( {{sip URI}} )
agentUtils.setTransferPhoneNumber( {{phoneNumber}} )

Example

agentUtils.setTransferSipURI("sip:+123344234232@2.3.4.5:5060")
agentUtils.setTransferPhoneNumber("+12345434567")

Set User Info

Using the following Agent Utils method/script, you can set or add additional information about the customer in the instance bot. You can add the script as part of the script node inside the connectToagent node in the instance bot.

Syntax

const userInfo = { "firstName": "<value>", "lastName": "<value>", "email": “<value>","phoneNumber": "value","country": "value","city": "value","Unit Address": "value"};
agentUtils.setUserInfo(userInfo);

Example 1

In the below example, static data is used to set the user info.

const userInfo = {
"firstName": "John",
"lastName": "Smith",
"email": "jsmith316@gmail.com",
"phoneNumber": "407-876-8654",
"country": "USA",
"city": "Philadelphia",
"Unit Address": "Unit 12 - Witherspoon Philadelphia"
};
agentUtils.setUserInfo(userInfo);

Example 2

In the below example, dynamic data based on context is used to set the user info.

const userInfo = {
"firstName": context.session.BotUserSession.memberData.firstName,
"lastName": context.session.BotUserSession.memberData.lastName,
"email": context.session.BotUserSession.memberData.email,
"phoneNumber": context.session.BotUserSession.memberData.phoneNumber,
"country": context.session.BotUserSession.memberData.country,
"city": context.session.BotUserSession.memberData.city,
"Unit Address": context.session.BotUserSession.memberData.Unit Address
};
agentUtils.setUserInfo(userInfo);

Set/Get Bot Languages

Using the following Agent Utils method/script, you can set/get the bot languages for the agent desktop.

Syntax

agentUtils.setBotLanguage( {{langCode }} )
agentUtils.getBotLanguage()

Example

agentUtils.setBotLanguage("en")
agentUtils.getBotLanguage()

Set Queue

Syntax

You can use the agentUtils.setQueue() method to set the conversations queue at any point leading up to the agent transfer. You can do this by using a Script Node within a bot action node in the XO Platform or a Script Task node within an experience flow in SmartAssist. 

agentUtils.setQueue()</code

Example

agentUtils.setQueue(queueId);

Set Live Chat Agent Transfer

SmartAssist supports dynamic (multiple) live chat agent transfer using the following Agent Utils method/script. On the user interface, you may have one agent system, but you can override the agent system using the method.

Syntax

agentUtils.setLiveChatAgentOutGoingSetup({“name”:”<<system name>>”, “config”: {““:””}})

Example (for Salesforce)

agentUtils.setLiveChatAgentOutGoingSetup({
"name": "salesforce",
"config": {
"liveAgentUrl": "https://d.la2-c1-ph2.salesforceliveagent.com/chat/rest",
"organizationId": "00D5g00000KClxx",
"deploymentId": "5725g000000QKxx",
"buttonId": "5735g000000QQxx"
}
});

Set Named Agents

This method takes an array of agentIds and only uses these agents for assigning a conversation.

Syntax:

agentUtils.setNamedAgents(['agentId1', 'agentId2'])

Example:

agentUtils.setNamedAgents(['a-e1427c4-8e7d-4728-8e6c-64281b235ad7', 'a-e1427c4-8e7d-4728-8e6c-64281b235ad8'])

Set Agent Matching Conditions

You can add Skills, Skill groups, and Agent groups to the script task, and based on that, a set of agent IDs is generated.

Syntax:

agentUtils.setAgentMatchingConditions({
skills : ["skillId"],
agentGroups: ['agentGroupId'],
skillGroups: ["skillGroupId"],
})

Example:

agentUtils.setAgentMatchingConditions({
skills : ["63b2c180ab43c287acab1014"],
agentGroups: ['ag-6b135b4-b03a-461d-b33d-dd5189cb4604'],
skillGroups: ["6390989f1d00e75d5df4db35"],
})

userSessionUtils

Get: Use this function to get the value associated within a key within the “userSession” object in the conversation context. You can get the value associated with the key using this script.

Syntax:- 

userSessionUtils.get(key)

Example:-

userSessionUtils.get(‘Caller’);

Put: Use this function to store a key-value pair within the “userSession” object in the conversation context.

Syntax:- 

userSessionUtils.put(key,value)

Example:-

var caller = getCallFlowVariable(‘caller’);

userSessionUtils.put(‘Caller’, caller);

The example above adds the key ‘Caller’ to userSession and stores the value of the caller variable against that key. 

Delete: Use this function to delete the key from the userSession object.

Syntax:- 

userSessionUtils.delete(key)

Example:-

userSessionUtils.delete(‘Caller’);

Pass Data from Experience Flow to Dialog in a Child Bot

This script accesses data from an experience flow to pass it to a dialog in a child bot. The script node of the experience flow sets a variable named ‘caller’ using information from the current user session. This variable is then stored in the user session with the key “Caller” using userSessionUtils. 

"Caller" using userSessionUtils.
setCallFlowVariable('caller',context.BotUserSession.<context variable>);
var caller = getCallFlowVariable('caller');
userSessionUtils.put("Caller", caller);

Access the Variable Inside a Dialog in the Child Bot

To access this variable in a dialog within the child bot, you must reference it using "context.session.UserSession.Caller". This retrieves the value of the ‘Caller’ variable from the user session in the context of the current conversation within the child bot’s dialog.

Store a Value Inside a Dialog in the Child Bot

The script stores a value inside a dialog in a child bot, you can retrieve it in the experience flow script node and print it in the end node of the experience flow. This process allows data to be transferred between a dialog in a child bot and the experience flow.

BotUserSession.put("key", "value")

  • Retrieve the context in the experience flow script node:
    const cb = getChildBotContextById(<childBotId>);
    setCallFlowVariable('testvar', CBContext.BotUserSession.key)
  • Store a value inside a dialog in the child bot:
    This is done using the line BotUserSession.put("key", "value"), where “key” is the identifier for the value being stored, and “value” is the actual data being stored.
  • Retrieve the context in the experience flow script node:
    In the experience flow script node, the code utilizes getChildBotContextById() to obtain the context of the child bot. Then, setCallFlowVariable() stores the value retrieved from the child bot’s BotUserSession, with the key “testvar”.

Print it in the End Node of the Experience Flow

{{context.key}}

  • Print it in the end node of the experience flow:
    The variable “testvar” is accessed within the context in the end node of the experience flow using {{context.key}}, which dynamically inserts the value of “testvar” into the output of the experience flow.