Virtual Agent action scripts
Summarize
Summary of Virtual Agent Action Scripts
The Virtual Agent action scripts are essential for integrating ServiceNow's AI capabilities with various chat platforms. These scripts facilitate the transformation and handling of user data, enabling seamless communication between the Virtual Agent and chat interfaces. Utilizing Flow Designer, customers can create mandatory action and subflow scripts that manage user interactions effectively.
Show less
Key Features
- Provider and Action Scripts: These scripts interact with chat providers like Twilio to manage both inbound and outbound messages. Key scripts include:
- Provider Attribute: Extracts user data like authentication tokens and message content.
- Sender Action: Sends responses asynchronously to chat providers.
- Response Processor: Updates message status based on responses from external providers.
- Transformers: Both outbound and inbound transformers convert messages between Virtual Agent and chat provider formats.
- Contextual Actions: These allow for dynamic conversations, such as switching to live agents or ending conversations based on user input.
Key Outcomes
By implementing these scripts, ServiceNow customers can:
- Enhance user engagement through customized conversational experiences.
- Streamline interactions by managing message flows and responses effectively.
- Ensure compatibility with various chat providers while maintaining the integrity of user data.
- Quickly adapt to user requests and contextual commands, improving service efficiency.
You need to write a set of mandatory Flow Designer action and subflow scripts to pass the user data to VACS, apply transformations and send the response back to your chat interface endpoint.
Provider and inbound/outbound scripts
A provider, such as Twilio, provides the chat capability. User action scripts perform provider actions, as well as conversational custom chat integration configuration for inbound and outbound transformer actions for your chatbot or custom conversations. Examples of each script are provided. They include a description of what each script does, as well as the action input and action output. You also see examples of the script JSON.
You use Flow Designer to build these scripts to transform server and client messages. The provider, sender, and inbound/outbound transformer scripts are required. You can use the additional scripts to add more functionality to your chat.
| Script name | Purpose | Required (Y/N) |
|---|---|---|
| Provider attribute | Contains a Provider Auth token, a user identifier, user input, and context variables. | Y |
| Sender action | Bundles the request, and sends a response asynchronously via Flow Designer or Integration Hub. |
Y |
| Response processor | Performs platform actions, such as an update message status, that's based on a response received for an outbound message. | N |
| Contextual action | Supports contextual actions. | N |
| Link account action | Provides a callback about whether account linking was successful or not. | N |
| Outbound transformer | Transforms a chat server's supported control to chat interface-specific rendering. | Y |
| Inbound transformer | Optional. You can use the default rich controls if they apply to your chat provider. You do not need to provide a separate inbound transform for each input control. If a default behavior does not work, you can override the default with your own inbound transform for a specific Virtual Agent server control. | Y |
Provider attributes action script
| Input | Output |
|---|---|
|
|
Example: Provider attributes action script.
(function execute(inputs, outputs) {
var headers = (inputs.headers);
var payload = (inputs.payload);
// check if an authentication token was included. this is optional.
var smsUtil = new VASMSTwilioUtil();
outputs.token = JSON.stringify(smsUtil.getToken(headers, payload));
var data = payload.data;
var request_context = {};
// inspect the actual message. it could be an MMS (attachment) or raw text
if (data['MediaUrl0']) {
var attachment_value = {};
attachment_value.url = data['MediaUrl0'];
attachment_value.content_type = data['MediaContentType0'];
attachment_value.name = smsUtil.getFileName(attachment_value.url , attachment_value.content_type);
request_context.attachment_value = attachment_value;
} else {
request_context.typed_value = data['Body'];
}
// set the mandatory outputs
outputs.request_context = request_context;
outputs.provider_user_id = data.From;
})(inputs, outputs);
Sender subflow script
The sender subflow script knows how to send a message to the provider. The script should asynchronously invoke a Flow Designer or Integration Hub subflow. The Virtual Agent is freed to continue processing messages rather than trying to send external requests. When creating a subflow do not have an action call an action within the subflow.
}else{
outputs.sendmessage = true;
messages = inputs.results.results;
outputs.from = from;
outputs.to = to;
outputs.messages = getMessages(messages);
}
Contextual action script
The contextual action script performs special keyword actions such as typing agent while inside a Virtual Agent topic to get immediately handed off to a live agent.
| Input | Output |
|---|---|
|
None |
Example: Contextual action script.
(function execute(inputs, outputs) {
var contextual_action = inputs.request_context.contextual_action;
if (contextual_action === "END_CONVERSATION") {
sn_cs.VASystemObject.endConversation(inputs.conversation_id);
} else if (contextual_action === "AGENT") {
sn_cs.VASystemObject.switchToLiveAgent(inputs.conversation_id);
} else if (contextual_action === "START_CONVERSATION") {
sn_cs.VASystemObject.startConversation(inputs.conversation_id);
}
})(inputs, outputs);
Link account action script
The link account action script contains identifiers for the user who is linking. The script also contains the account that it is linked to.
| Input | Output |
|---|---|
|
None |
Example: Link account action script.
(function execute(inputs, outputs) {
var richControl = (inputs.rich_control);
var value = richControl.value;
outputs.result = richControl.header + ': ' + value.action;
})(inputs, outputs);
Response processor action script
The response processor action script performs specialty actions that are based on the response to a send message request. The framework already does basic message status tracking.
| Input | Output |
|---|---|
|
None |
Example: Response processor action script.
(function execute(inputs, outputs) {
gs.debug("Response from provider: message_id = " + inputs.message_id + ", status_code = " +
inputs.status_code + ", headers = " + JSON.stringify(inputs.headers) + ", body = " + inputs.body);
})(inputs, outputs);
Outbound transformer scripts
The outbound transformer scripts convert outgoing Virtual Agent messages to a protocol that is related to the conversational custom chat integration.
Input.
- rich_control (JSON) - Virtual Agent server rich control component that must be transformed.
- payload (JSON) - Last response that was received from a requester.
Output.
result (String) - Provider-appropriate component message to send.
| Outbound transformer name | Script example |
|---|---|
| Virtual Agent - SMS Twilio Adapter Default Text Outbound Transformer | |
| Virtual Agent - SMS Twilio Adapter Default Link Outbound Transformer | |
| Virtual Agent - SMS Twilio Adapter Default Picker Outbound Transformer | |
| Virtual Agent - SMS Twilio Adapter Default Multi Link Outbound Transformer | |
| Virtual Agent - SMS Twilio Adapter Default Card Outbound Transformer | |
Inbound transformer scripts
The inbound transformer scripts convert incoming conversational custom chat integration messages to a protocol that the Virtual Agent recognizes. It determines the required value to be injected into the rich control that is presented to the user.
Input.
- request_context (JSON) - The request passed from the Provider Attribute script.
- rich_control (JSON) - The last rich control sent to the requester that contains the original "question".
Output.
- value - sys_id or text value.
- search_text - Text that is used if the requester selected something that was unexpected. For example, a user typed something that the NLU could assist with, such as, "None of these options match what I want" in response to a topic picker component.
| Inbound transformer name | Script example |
|---|---|
| Virtual Agent - SMS Twilio
Adapter
Default Text Inbound Transformer Purpose: Find the text response to the InputText question posed |
|
| Virtual Agent - SMS Twilio
Adapter
Default Picker Inbound Transformer Purpose: Find the sys_id of the option that the user selected for this picker question. This script uses the same algorithm of the outbound transformer. If no options are selected, and the user typed something instead, then the "search_text" is set and fed into NLU if it is enabled on this instance. |
|