Supported features in Virtual Agent API

  • Versão de lançamento: Australia
  • Atualizado 12 de mar. de 2026
  • 25 min. de leitura
  • You can use the Virtual Agent API to integrate many of the same features that are available in Virtual Agent and Agent Chat into your chat environment. Feature support varies depending on your ServiceNow release and the store app version number of the Virtual Agent API.

    For information about the request and response templates for Virtual Agent API, as well as examples of common use cases, see Virtual Agent Bot Integration API.

    Version 4.1.1

    Support for synthesized response in Virtual Agent API
    • With synthesized response enabled through Now Assist experience, Virtual Agent API sends the response with citations to the primary bot. Citations are included in citations parameter along with separate citation links.
    • Here's an example JSON for synthesized response with citations and citation links:
      {
        "clientSessionId": "va_api_conv_16875",
        "score": 1,
        "interactionId": "0dce3e37ffe1f610f71affffffffff8a",
        "requestId": "1765195564288",
        "streamActive": false,
        "streamState": "END",
        "message": {
          "typed": true,
          "text": "what is spam?"
        },
        "body": [
          {
            "feedback": {
              "messageId": "dcde7a7739e1f610beed69f9e5960355",
              "feedbackEnabled": true
            },
            "maskType": "NONE",
            "citations": [
              {
                "citationHref": "http://10.160.66.170:8080/sp?id=kb_article&sys_id=24d9243187032100deddb882a2e3ec33",
                "sysId": "24d9243187032100deddb882a2e3ec33",
                "icon": "sn_nowassist_va.source-kb-article.png",
                "header": "KB article",
                "description": "What is Spam?",
                "index": 0,
                "source": "internal",
                "category": "kb",
                "citationLabel": "What is Spam?",
                "table": "kb_knowledge",
                "citationRef": "[1]"
              },
              {
                "citationHref": "http://10.160.66.170:8080/sp?id=kb_article&sys_id=0b48fd75474321009db4b5b08b9a71c2",
                "sysId": "0b48fd75474321009db4b5b08b9a71c2",
                "icon": "sn_nowassist_va.source-kb-article.png",
                "header": "KB article",
                "description": "How to Deal with Spam",
                "index": 1,
                "source": "internal",
                "category": "kb",
                "citationLabel": "How to Deal with Spam",
                "table": "kb_knowledge",
                "citationRef": "[2]"
              },
              {
                "citationHref": "http://10.160.66.170:8080/sp?id=kb_article&sys_id=3020c9b1474321009db4b5b08b9a712d",
                "sysId": "3020c9b1474321009db4b5b08b9a712d",
                "icon": "sn_nowassist_va.source-kb-article.png",
                "header": "KB article",
                "description": "What are phishing scams and how can I avoid them?\n\t\t",
                "index": 2,
                "source": "internal",
                "category": "kb",
                "citationLabel": "What are phishing scams and how can I avoid them?\n\t\t",
                "table": "kb_knowledge",
                "citationRef": "[3]"
              }
            ],
            "streamId": "4fcef677ffe1f610f71affffffffffee",
            "uiType": "OutputText",
            "messageId": "dcde7a7739e1f610beed69f9e5960355",
            "relatedList": [],
            "value": "Spam refers to unsolicited commercial email (UCE) or unsolicited bulk email (UBE), commonly known as junk email. It often includes phishing scams, foreign bank scams, pyramid schemes, quack health products, pornographic site ads, offers for bulk emailing services, chain letters, and pirated software. Most reputable marketers do not use spam for advertising. To reduce spam:\n\n- Do not reply to spam, as it confirms your address to spammers.\n- Be cautious when sharing your email address online.\n- Adjust browser security settings to limit personal information exposure.\n- Avoid forwarding chain mail, as most are hoaxes.\n- Use judgment when unsubscribing or responding to unfamiliar sources \u200b[1]\u200b\u200b[2]\u200b.\n\nPhishing scams, a dangerous form of spam, attempt to trick you into revealing personal information by pretending to be legitimate organizations. Always verify requests for sensitive information and avoid clicking suspicious links \u200b[3]\u200b.\n\n[1] [What is Spam?](http://10.160.66.170:8080/sp?id=kb_article&sys_id=24d9243187032100deddb882a2e3ec33)\n[2] [How to Deal with Spam](http://10.160.66.170:8080/sp?id=kb_article&sys_id=0b48fd75474321009db4b5b08b9a71c2)\n[3] [What are phishing scams and how can I avoid them?\n\t\t](http://10.160.66.170:8080/sp?id=kb_article&sys_id=3020c9b1474321009db4b5b08b9a712d)",
            "group": "DefaultText"
          }
        ],
        "userId": "admin",
        "clientVariables": {
          "bot": {
            "id": "va-bot-12345"
          },
          "channelId": "postman"
        }
      }
    • For more information, see Enable synthesized response in Virtual Agent API.
    Support for agentic response in Virtual Agent API
    • Virtual Agent API supports agentic response through Now Assist experience. With agentic response enabled in Virtual Agent API, the output messages are shown to the user as loading or processing.
    • Virtual Agent API sends message to the primary bot through a new DynamicLoader parameter.
    • Here's an example JSON for agentic response:
      {
        "clientSessionId": "va_api_conv_16875",
        "score": 1,
        "interactionId": "0dce3e37ffe1f610f71affffffffff8a",
        "requestId": "1765195564288",
        "message": {
          "typed": true,
          "text": "what is spam?"
        },
        "body": [
          {
            "progressMessages": [
              {
                "message": "Searched for relevant documents and actions",
                "status": "COMPLETED"
              },
              {
                "message": "Generated the response",
                "status": "COMPLETED"
              }
            ],
            "actionType": "DynamicLoader",
            "defaultHeader": "View AI Steps",
            "uiType": "ActionMsg",
            "parentMessageId": "87cef677ffe1f610f71affffffffff4d",
            "header": "View AI Steps",
            "messageId": "87cef677ffe1f610f71affffffffff4d",
            "shouldUpdateParentMessage": true
          }
        ],
        "userId": "admin",
        "clientVariables": {
          "bot": {
            "id": "va-bot-12345"
          },
          "channelId": "postman"
        }
      }
    Support for response streaming in Virtual Agent API
    • Virtual Agent API supports response streaming through Now Assist experience. To learn more, see Enable Now Assist experience in Virtual Agent API.
      Nota:
      The primary bot must pass the streaming responses to the end user. For more information, see Chat streaming responses.
    • Virtual Agent API supports the following states for response streaming:
      • START
        {
          "clientSessionId": "va_api_conv_16875",
          "requestId": "1762864530268",
          "streamActive": true,
          "streamState": "START",
          "message": {
            "typed": true,
            "text": "what is spam?"
          },
          "body": [
            {
              "streamId": "cb928c9f53097e10f71a6dc230e5e639",
              "uiType": "StreamStart",
              "streamSequence": 1,
              "value": "Looking into your request"
            }
          ],
          "userId": "admin",
          "clientVariables": {
            "bot": {
              "id": "va-bot-12345"
            },
            "channelId": "postman"
          }
        }
      • INPROGRESS
        {
          "clientSessionId": "va_api_conv_16875",
          "requestId": "1762864530268",
          "streamActive": true,
          "streamState": "INPROGRESS",
          "message": {
            "typed": true,
            "text": "what is spam?"
          },
          "body": [
            {
              "streamId": "cb928c9f53097e10f71a6dc230e5e639",
              "uiType": "StreamChunk",
              "streamSequence": 2,
              "value": "Spam refers to unsolicited commercial email (UCE) or unsolicited bulk email (UBE), commonly known as junk email. It often"
            }
          ],
          "userId": "admin",
          "clientVariables": {
            "bot": {
              "id": "va-bot-12345"
            },
            "channelId": "postman"
          }
        }
      • END
        {
          "clientSessionId": "va_api_conv_16875",
          "score": 1,
          "interactionId": "d592c89f53097e10f71a6dc230e5e68c",
          "requestId": "1762864530268",
          "streamActive": false,
          "streamState": "END",
          "message": {
            "typed": true,
            "text": "what is spam?"
          },
          "body": [
            {
              "feedback": {
                "messageId": "6f92cc9f34097e108001c582b67b2a1f",
                "feedbackEnabled": true
              },
              "maskType": "NONE",
              "citations": [
                {
                  "citationHref": "http://192.168.29.27:8080/sp?id=kb_article&sys_id=24d9243187032100deddb882a2e3ec33",
                  "sysId": "24d9243187032100deddb882a2e3ec33",
                  "icon": "sn_nowassist_va.source-kb-article.png",
                  "header": "KB article",
                  "description": "What is Spam?",
                  "index": 0,
                  "source": "internal",
                  "category": "kb",
                  "citationLabel": "What is Spam?",
                  "table": "kb_knowledge",
                  "citationRef": "[1]"
                },
                {
                  "citationHref": "http://192.168.29.27:8080/sp?id=kb_article&sys_id=0b48fd75474321009db4b5b08b9a71c2",
                  "sysId": "0b48fd75474321009db4b5b08b9a71c2",
                  "icon": "sn_nowassist_va.source-kb-article.png",
                  "header": "KB article",
                  "description": "How to Deal with Spam",
                  "index": 1,
                  "source": "internal",
                  "category": "kb",
                  "citationLabel": "How to Deal with Spam",
                  "table": "kb_knowledge",
                  "citationRef": "[2]"
                }
              ],
              "streamId": "cb928c9f53097e10f71a6dc230e5e639",
              "uiType": "OutputText",
              "messageId": "6f92cc9f34097e108001c582b67b2a1f",
              "relatedList": [],
              "value": "Spam refers to unsolicited commercial email (UCE) or unsolicited bulk email (UBE), commonly known as junk email. It often includes phishing scams, foreign bank scams, pyramid schemes, \"get rich quick\" offers, quack health products, ads for pornographic sites, offers for bulk emailing services, chain letters, and pirated software. To reduce spam:\n\n- Do not reply to spam, as it confirms your address to spammers.\n- Be cautious when sharing your email address online or with companies.\n- Adjust browser security settings to limit personal information exposure.\n- Avoid forwarding chain mail, as most are hoaxes \u200b[1]\u200b\u200b[2]\u200b.\n\n[1] [What is Spam?](http://192.168.29.27:8080/sp?id=kb_article&sys_id=24d9243187032100deddb882a2e3ec33)\n[2] [How to Deal with Spam](http://192.168.29.27:8080/sp?id=kb_article&sys_id=0b48fd75474321009db4b5b08b9a71c2)",
              "group": "DefaultText"
            }
          ],
          "userId": "admin",
          "clientVariables": {
            "bot": {
              "id": "va-bot-12345"
            },
            "channelId": "postman"
          }
        }
    • Enable streaming in Virtual Agent API by the following configuration:
      1. Ensure that Allow response streaming is selected in Now Assist in Virtual Agent. To learn more, see Enable additional chat features.
      2. Navigate to All and enter sys_now_assist_channel_config.list in the navigation filter.
      3. In the Now Assist Channel configuration [now_assist_channel_config] table, set the Streaming Ready field value to true for Bot to Bot device.
        Figura 1. Now Assist Channel Configs table
        Set the Streaming Ready field value to true for Bot to Bot device.
    Support for new outbound authentication

    Version 4.0.0

    • Virtual Agent API updates the message text and the delivery status for messages between the live agent and the primary bot.
    • Virtual Agent API sends the interaction Id and message Id (agent Id for conversations with the live agent) in response to the primary bot.

      Interaction record stores the clientSessionId parameter sent by the supported third-party chat application (or the primary bot) for each of its conversations with the end user. To learn more, see Configure interaction record to store clientSessionId in Virtual Agent API.

    • The chat history from the primary bot's conversation with the end user includes timestamp of individual messages. The live agents can now see this chat history either in individual messages or in a single block. To learn more, see Configure to support chat history in Virtual Agent API. You can customize your Agent chat interface by setting a logo for the primary bot that appears in the chat history. For more information, see Setting logo for the primary bot in Virtual Agent API.

    Version 3.0.x

    Agent Chat enhancements in version 3.14.3
    • When the primary bot transfers a chat to a live agent, Virtual Agent API sends the agent Id, in addition to agent name and avatar, to the primary bot.
    • Virtual Agent API sends chat history from primary bot to live agent anywhere in the request during an ongoing conversation. This behavior is controlled by the following system property: allow_storing_history_in_ongoing-conversation. Set the value of the property to true to send chat history anywhere in the request.
    • Interaction record contains transcript of chat history along with timestamp of individual messages.
    Support for Now Assist experience
    Support for configuring multiple provider applications
    • Virtual Agent API enables configuration of multiple provider applications to support use cases where there are multiple primary bots using Virtual Agent API and you need to distinguish between them.
    • For more information, see Configure multiple provider applications.
    Support for transformation of Virtual Agent API request and response
    • Virtual Agent API supports transformation of request and response payloads to and fro Virtual Agent API. This is helpful in cases where the primary bot has a common response template across all secondary bots.
    • For more information, see Transform Virtual Agent API request and response.
    Secure file uploads from a private URL
    • Virtual Agent API supports file uploads up to 1 GB in size from a private URL. The primary bot must pass the user ID, optional provider application ID, and the name of the file. Observe the following guidelines:
      • Provider application ID is optional.
      • The user ID and provider application ID should be sent before the file name in the payload.
      • The end user must have a role specified in the glide.attachment.role property. For more information, see Require a role to attach files.
      • Basic or OAuth authentication is supported, but Message Authentication is not.
    • Example message payload from the primary bot:   
      curl -X POST \
        https://instance.service-now.com/api/now/v1/cccif/media/upload \
        -H 'authorization: Basic YWRtaW46YWRtaW4=' \
        -H 'content-type: multipart/form-data; \
        -F user_id=xxxxxx \
        -F provider_application_id=optionalId \
        -F 'file=@SomeFile.png'
    • Virtual Agent API sends the following example JSON:
      {
        "result": {
          "mediaUrl": "http://123.456.7.8:8080//api/now/v1/cs/media/string",
          "name":"imagefile.png",
          "state":"pending",
          "attachmentId":"abcdefghijklmno12345"
        }
      }
    Support for silentMessage flag
    • A silent message is a message that does not require a response. If Virtual Agent receives a request with silentMessage=true, all subsequent bot messages are suppressed until Virtual Agent receives a request to turn off silent mode (silentMessage=false).
    • Example message payload from the primary bot:
      { 
         "token": "BOT_TOKEN",
         "botToBot": true,
         "clientSessionId": "884502214730301027f83ee4070f589a",
         "clientVariables": {},
         "requestId": "48450221d23030107300b7756770bc9b",
         "silentMessage": "true",
         "timestamp": 1623916324820,
         "timezone": "GMT",
         "userId": "abel.tuter",
         "emailId": "abel.tuter@example.com" 
      }
      Nota:
      If silentMessage=true, notifications are not delivered.
    Support for action messages
    • In addition to passing messages to a ServiceNow® Virtual Agent secondary bot, the primary bot or chat client can pass messages to an agent through Agent Chat. Use the action parameter passed in the request body to specify how the content should be handled.
    • Virtual Agent API supports the following action message types:
      Tabela 1. Supported action message types
      actionType value Description
      ChatSubHeader Outbound message indicating one of the following occurred:
      • Dynamic translation failed.
      • Live agent autopilot was initiated and completed.
      StartSpinner Outbound message that starts a spinner when a message is in the pending state due to asynchronous processes, such as AI Search or the profanity filter.
      EndSpinner Outbound message that stops the spinner that was sent previously.
      StartTypingIndicatorActionMsg Outbound message indicating that a user or agent has begun to type (after an agent has accepted the chat).
      EndTypingIndicatorActionMsg Outbound message indicating that a user or agent has stopped typing.
      SubscribeToSupportQueue Indicates that the conversation is set to the support queue.
      SubscribeToChatPresence Outbound message indicating that a live agent conversation has begun.
      SwitchToLiveAgent Outbound message indicating that a live agent has accepted the conversation.
      SwitchToVirtualAgent Outbound message indicating that the live agent session has ended, and the conversation is returned to Virtual Agent.
      SwitchConversation Outbound message indicating that a notification was sent. This creates a new conversation, so Virtual Agent switches to the new conversation.
      System Outbound message indicating one of the following:
      • A live agent has entered the cat.
      • Either the live agent or the user closed the chat.
      • The conversation with a live agent has timed out.
    Synchronous handshake enhancements
    • Virtual Agent API can transfer to a live agent synchronously. When a user or agent finishes a conversation, the transfer back to Virtual Agent is done synchronously as well. Some system messages and wait time messages are also sent synchronously.
    • To use synchronous transfer to a live agent, be aware of the following guidelines:
      • Configure the Virtual Agent response endpoint. Agent Chat messages will be delivered to the endpoint you specify.
      • You must manually turn off Notifications for the instance.
      • If you are using synchronous transfer to a live agent, Virtual Agent API sends the typing indicator if it is enabled:
        {
          "uiType": "ActionMsg",
          "actionType": "StartTypingIndicator",
        }
        
      • Topics that use the following features are not supported in synchronous mode: file upload, the Action utility, and the Pause topic block.
    • To disable these features and enable synchronous support, see Enable synchronous support in Virtual Agent API.
    Improved topic switching errors and troubleshooting
    • Topic switching may fail for any of the following reasons:
      • The request includes both the topic name and topic ID (keyword topic discovery) or the topic intent name and topic intent ID (NLU topic discovery). Specify one or the other.
      • The request includes an invalid topic or intent name or ID.
      • The topic/intent name or ID is valid, but Virtual Agent can't run it because it's inactive or not a topic. For example, if the name or ID refer to a topic block or custom control asset.
      • The requested topic is already running.
      • The requested topic is valid, but a security condition is preventing access. For example, the topic may not be permitted to run in the channel or some other access-control condition may apply.
    • If topic switching fails, Virtual Agent API responds in the following ways, whether you're using it synchronously or asynchronously:
      • If topic switching fails, the conversation is closed with a message stating that the conversation cannot continue. The conversation will no longer remain in an open state.
      • The previous request is marked as processed so that a new request can be made without waiting for a timeout.
      • The reason for the failure is logged in the system log table (Automated Test Framework > System Logs > Errors).
    Improved Virtual Agent API response time
    • Virtual Agent API responses include parameters like Take Control and NLU Score. These parameters are processed while preparing the response.
    • Starting with version 3.9.0, you can exclude the Take Control and/or NLU Score parameters from the Virtual Agent API response to improve the response time.
    • To exclude Take Control and NLU Score parameters from the Virtual Agent API response, complete the following steps:
      1. Navigate to All > sys_cs_custom_adapter_property.list.
      2. Search for enable_take_control and send_nlu_score properties.
      3. Set the value of enable_take_control property to false to exclude Take Control setting and send_nlu_score property to false to exclude NLU Score calculation while processing the response. These properties are set to true by default.
    Ending abandoned Virtual Agent conversations
    • If a conversation is incomplete due to an error, Virtual Agent can ask the primary bot to take control. If the takeControl flag is true, Virtual Agent (as the secondary bot) will close the conversation automatically. If the primary bot wants to start a conversation, it can send the following action message: "hi"/START_CONVERSATION.
    • You can ask the primary bot to take control in the following situations:
      • Idle time out: Interaction State is Closed Abandoned. State Reason is No Activity.
      • Technical issues: Interaction State is Closed Abandoned. State Reason is Bot issues.
      • Invalid user input: Interaction State is Closed Abandoned. State Reason is Invalid user input.
    • To request that the primary bot take control, send the takeControl flag in the body of the payload to the primary bot with a value of true.
    • Example message payload:   
      {​ 
         "requestId": "xxxx-xxxx-xxxx-xxxx",
         "clientSessionId": "xxx-xxx-xxx-xxx",
         "message": {
             "text":"invalid3",
             "typed":true
             }
         "body":[{
             "uiType":"OutputText",
             "group":"DefaultText",
             "value":"Sorry, I didn't get that. Could you help me by answering this?"
             },
             {
             "uiType":"Boolean",
             "group":"DefaultPicker",
             "required":true,
             "nluTextEnabled": false,
             "label":"Choose a value",
             "options":[
                {"label":"Yes"},
                {"label":"No"}
                ]
             }],
          "takeControl":true,
          "score":0
      } 

    Deprecated features

    Support for additional rich controls
    Virtual Agent API now supports the following rich controls:
    • Boolean controls
      Boolean controls return responses as strings (either Yes or No) for easier localization.

      For more information about topic localization, see Localizing Virtual Agent conversations.

      Virtual Agent API sends the following example JSON for a boolean control:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "7a36412253a13010ff59ddeeff7b12fb",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "Boolean",
            "group": "DefaultPicker",
            "required": true,
            "nluTextEnabled": false,
            "label": "Sample Response for boolean control",
            "options": [
              {
                "label": "Yes"
              },
              {
                "label": "No"
              }
            ]
          }
        ],
        "score": 1
      }
    • Custom controls
      Topics that use custom controls are now supported. For more information about custom controls, see Customizing Virtual Agent with custom controls.
    • Table bot response controls
      Topics that use table bot response controls are now supported. For more information, see Table bot response control.

      All records are returned from Virtual Agent API at once. Virtual Agent will wait for a response from the API client to send the next control. Use the paginationBreak property to display records in chunks to the user. For example, if paginationBreak is set to 10, the user will see 10 records at a time. When the client is ready to move to the next control, it should send DONE.

      Virtual Agent API sends the following example JSON for a table bot response control:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Yes",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "OutputTable",
            "group": "DefaultOutputTable",
            "label": "Sample Table Rich control",
            "headers": [
              "Number",
              "Short description"
            ],
            "data": [
              [
                "INC0000005",
                "CPU load high for over 10 minutes"
              ],
              [
                "INC0000015",
                "I can't launch my VPN client since the last software update"
              ],
              [
                "INC0000025",
                "Need to add more memory to laptop"
              ],
              [
                "INC0000035",
                "Reset my password"
              ],
              [
                "INC0000055",
                "SAP Sales app is not accessible"
              ],
              [
                "INC0009005",
                "Email server is down."
              ]
            ],
            "paginationBreak": 10,
            "totalSearchResultsCount": 6,
            "navigationBtnLabel": "Click for more"
          }
        ],
        "score": 1
      }
    • HTML bot response controls
      Topics that use HTML bot response controls are now supported. For more information, see HTML bot response control.
      Virtual Agent API sends the following example JSON for an HTML bot response control:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Yes",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "OutputHtml",
            "group": "DefaultOutputHtml",
            "style": "inline",
            "height": 100,
            "width": 100,
            "value": "<html> <body> Sample Response for Html control </body> </html> ",
            "imageUrl": null,
            "imageHeight": 0,
            "imageWidth": 0,
            "links": null
          },
          {
            "uiType": "InputText",
            "group": "DefaultText",
            "required": true,
            "nluTextEnabled": false,
            "label": "some text",
            "maskType": "NONE"
          }
        ],
        "score": 1
      }
    • Multi-response bot response controls
      Topics that use multi-response bot response controls are now supported. For more information, see Multi-response bot response control.
      Virtual Agent API sends the following example JSON for a multi-response bot response control:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Done",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "MultiPartOutput",
            "group": "DefaultMultiPartOutput",
            "navigationBtnLabel": "Click for more",
            "content": {
              "uiType": "OutputText",
              "value": "Text response from multiflow control example",
              "maskType": "NONE"
            }
          }
        ],
        "score": 1
      }
    • Rich text support
      Topics that use rich text are now supported. Rich text includes bold or italicized text, hyperlinks, bulleted lists, and emojis.
    Additional Agent Chat features
    The Virtual Agent API now supports the following features when transferring to Agent Chat:
    • Pass agent name and avatar
      When the primary bot transfers a chat to a live agent, Virtual Agent can send the agent name and avatar to the primary bot. To enable this, activate Agent names and avatars in Agent Chat settings.
      An example message payload might look like this:
      { 
      "requestId":"f42f3550-5b44-4cde-aa52-9b6756b3131c", 
      "clientSessionId":"U94CSJLEN", 
      "message":{ 
      "text":"Live Agent support.", 
      "typed":true 
      }, 
      "userId":"U94CSJLEN", 
      "body":[ 
      { 
      "uiType":"OutputText", 
      "group":"DefaultText", 
      "agentInfo":{ 
      "sentFromAgent":true, 
      "agentName":"Beth Anglin", 
      "agentAvatar":"ee4eebf30a0004d963b5c5ac0d734dc4.iix?t=small" 
      }, 
      "value":"Thank you for contacting support. I am looking into your question now and will be with you shortly." 
      } 
      ], 
      "agentChat":true, 
      "score":1 
      }

      For more information, see Configure Agent Chat.

    • Live agent wait time
      When transferring to a live agent, the primary bot can receive the wait time and display this to the user. To enable this, select Wait Time in the Live chat wait status field in Agent Chat settings. The spinnerType value is set to wait_time. If the Live chat wait status is set to None, the spinnerType value is none.
      Virtual Agent API sends the following example JSON in the body parameter of the payload.
      {
      "uiType":"ActionMsg",
      "actionType":"StartSpinner",
      "spinnerType":"wait_time",
      "message":"Routing you to a live agent...",
      "waitTime":"8 Seconds"
      }
      

      For more information, see Configure Agent Chat.

    • Send chat history from the primary bot to Virtual Agent
      The primary bot can pass chat history to a live agent so that the agent can see the context of the conversation.
      Virtual Agent converts the message history to HTML and then to an image.
      • The converted image is sent to the live agent as the first message of the chat.
      • The primary bot should send the message history in the first request. In any other request after the first request, the message history payload will be ignored.
      • Only text messages are supported.
      • The primary bot can pass any URL as a value in the text message, but the live agent can only view it as part of the image. The live agent will not be able to click the link.
      Example message payload:
      {​ 
            "value": "Help me with password reset",​ 
            "displayName": "able",​ 
            "type": "text"​ 
            "isBotMessage": false,​ 
          } 
      Nota:
      In the previous example, type is case sensitive and should have a value of text.
    Enriched requests from the primary bot
    The Virtual Agent API now supports the following requests from the primary bot:
    • System parameters and context variables
      The primary bot can pass system parameters and context variables as input, and Virtual Agent will honor these  parameters. System parameters such as liveagent_devicetype, liveagent_requester_session_language, liveagent_topic, topic, live_agent_only, and liveagent_devicetimezone are supported. Custom context variables and Agent Chat context variables are also supported.
      Example message payload:
      {​ 
      "requestId": "f42f3550-5b44-4cde-aa52-xxxxxxxxxx",​ 
      "clientSessionId": "xxxxxxxxxx",​ 
      "token": "abcd",​ 
      "message": {​ 
          "text": "Test",​ 
          "typed": true​ 
      },​ 
      "contextVariables": {​ 
             "requester_session_language": "es"​ 
      },​ 
      "userId": ""abel.tuter",​ 
      "emailId": "abel.tuter@example.com"​ 
      }​ 
      

      For more information, see Live agent chat context variables and Configure context variables for storing chat-related information.

    • User timezone
      Set the user’s timezone by passing it in the request payload. Once set, that timezone setting is retained until it is reset.
      Example message payload:
      {​ 
      
          "requestId": "xxxxxx-xxxxxx-xxxx-xxxx-xxxxxxxxxx",​ 
          "clientSessionId": "xxxxxxxx-xxxx",​ 
          "token": "xxxxx",​ 
          "action" : "SET_USER_TIMEZONE",​ 
          "userId": "able.tuter",​ 
          "emailId": "abel.tuter@example.com",​ 
           "timezone":"Asia/Kolkata"​ 
      } 
      When using this functionality, consider the following:
      • The conversation must be open (current) in order to convert date and time to the user's timezone.
      • The primary bot must send date and time in one of the following formats:
        • Timezone name. For example, Asia/Kolkata or America/New_York.
        • Date Time 24-hour format. For example: YYYY-MM-DD HH:MM:SS
      • The Virtual Agent API uses the timezone specified by the primary bot, even if the timezone it sets differs from the value stored in the [sys_user] table.
      • To set the user timezone, send the SET_TIMEZONE action. If the timezone name is not valid, the timezone value defaults to UTC time. For example, 2021-02-16 20:13:13.
    Support for node skipping
    • Virtual Agent API supports skipping a node if it is designed to do so in the topic. For example, in Assistant Designer, you can designate a user input control as skippable in the Advanced > Hide or skip this node area of the property sheet.
      Figura 2. Condition or script that allows the user to skip the node
      In this example, the Script option is selected and defines when the user can skip the node.
    • For more information about defining a node as skippable, see Assistant Designer user input controls.
    • If a node is marked as skippable, the bot will present that option to the user. If the user skips it, the primary bot should pass the skip command as depicted in the following example.
      {
      "requestId": "f42f3550-5b44-4cde-aa52-9b6756b3131c",
      "clientSessionId": "835607",
      "token": "snow",
      "message": {
      "text": "_skip_",
      "typed": false
      },
      "emailId": "beth.anglin@example.com",
      "userId": "beth.anglin"
      }
    Synchronous handshake support
    Nota:
    These requirements apply to version 2.0.x of the Virtual Agent API. For greater synchronous handshake functionality, upgrade to version 3.0.x, which supports live agent transfer and other enhancements. For details, see .
    • When enabled, Virtual Agent delivers responses to the primary bot synchronously. If you want to enable communication with Virtual Agent in synchronous mode, you must manually turn off the following features in order for the handshake to work:
      • Agent Chat
      • Notifications
      • Typing indicators
      Nota:
      Topics that use the following features are not supported in synchronous mode: file upload, the Action utility, and the Pause topic block.
    • To disable these features and enable synchronous support, see Enable synchronous support in Virtual Agent API.
    Notifications support
    • Use Virtual Agent API to send the following types of notifications in the Bot to Bot channel when it is enabled in asynchronous mode:
      • Simple: Text-only notifications. Simple notifications are delivered as soon as they arrive.
      • Image Card: An image that is uploaded to the server or specified with a URL.
      • Record Card: Specified columns from a record in a table.
      • Actionable: Provides the user with the opportunity to perform certain actions. Actionable notifications are queued. The user can retrieve them on demand by sending the Show Notification command.

      For more information, see Configuring Virtual Agent notifications.

    • Virtual Agent API sends the following example JSON for a simple notification:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Done",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "OutputCard",
            "group": "DefaultOutputCard",
            "templateName": "Notification",
            "data": "{\"sys_id\":null,\"recordDisplayValue\":null,\"messageHeading\":\"[Heading]A notification has arrived. You can continue the conversation after viewing the notification.\",\"imageUrl\":null,\"tableLabel\":null,\"enableLink\":false,\"message\":\"[message]A notification has arrived. You can continue the conversation after viewing the notification.\",\"fields\":[],\"table_name\":null,\"url\":\"http://192.168.1.9:8080/null.do?sys_id=null\"}"
          }
        ],
        "completed": true,
        "score": 1
      }
    • Virtual Agent API sends the following example JSON for an Image Card notification:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Done",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "OutputCard",
            "group": "DefaultOutputCard",
            "templateName": "Notification",
            "data": "{\"sys_id\":null,\"recordDisplayValue\":null,\"messageHeading\":\"[Heading]A notification has arrived. You can continue the conversation after viewing the notification.\",\"imageUrl\":\"http://xxxxxx.service-now.com/2b2d0d2653a13010ff59ddeeff7b120d.iix\",\"tableLabel\":null,\"enableLink\":false,\"message\":\"[message]A notification has arrived. You can continue the conversation after viewing the notification.\",\"fields\":[],\"table_name\":null,\"url\":\"http://192.168.1.9:8080/null.do?sys_id=null\"}"
          }
        ],
        "completed": true,
        "score": 1
      }
    • Virtual Agent API sends the following example JSON for a Record Card notification:
      {
        "requestId": "asd2423-wrr434-weruyt-1234567",
        "clientSessionId": "",
        "nowSessionId": "",
        "message": {
          "text": "Done",
          "typed": false,
          "clientMessageId": "ABC-123"
        },
        "userId": "beth.anglin",
        "body": [
          {
            "uiType": "OutputCard",
            "group": "DefaultOutputCard",
            "templateName": "Notification",
            "data": "{\"sys_id\":\"552c48888c033300964f4932b03eb092\",\"recordDisplayValue\":\"INC0010112\",\"messageHeading\":\"[Heading]A notification has arrived. You can continue the conversation after viewing the notification.\",\"imageUrl\":null,\"tableLabel\":\"Incident\",\"enableLink\":true,\"message\":\"[message]A notification has arrived. You can continue the conversation after viewing the notification.\",\"fields\":[{\"fieldLabel\":\"Number\",\"fieldValue\":\"INC0010112\"},{\"fieldLabel\":\"Short description\",\"fieldValue\":\"Assessment : ATF Assessor\"}],\"table_name\":\"incident\",\"url\":\"http://192.168.1.9:8080/incident.do?sys_id=552c48888c033300964f4932b03eb092\"}"
          }
        ],
        "completed": true,
        "score": 1
      }
    • Notifications for the Bot to Bot channel are disabled by default. To enable them, do the following:
      1. Navigate to All, and then enter sys_cs_channel.list in the navigation filter.
      2. Open the Bot to Bot record.

        If prompted, enable editing on the record.

      3. Select the Enable Notifications check box.
      4. Click Update.

      Admins can limit the number of recipients per notification by modifying the com.glide.cs.per_notification_user_limit property. The default value is 1000.

    Topic switching using the topic name
    • In addition to using the topic ID or topic intent ID to switch topics, you can use the topic or topic intent name. It is recommended that you only send either the topic ID or the topic name. Currently, if either is incorrect or if the bot is already in the specified topic, Virtual Agent does not send any response. Usage depends on the mode you are using, as follows:
      • NLU topic discovery: Use the topic intent name or ID.
      • Keyword topic discovery: Use the topic name or ID.
    • The primary bot can send the SWITCH action along with the topic name to switch directly to a  particular  topic.
    • Example message payload:   
      {​ 
         "requestId": "xxxx-xxxx-xxxx-xxxx",
         "clientSessionId": "xxx-xxx-xxx-xxx",
         "action":"SWITCH",
         "topic":{
      ​      "name": "Topic Name"​
         },​
         "userId": "beth"​  
      } 
    Typing indicator support
    • You can enable typing indicators for users and live agents. Currently, typing indicators are displayed as follows:
      • Displayed to the agent when the user is typing
      • Displayed to the user when the bot is preparing a response
    • When the typing indicator is enabled, Virtual Agent API sends the StartTypingIndicator and EndTypingIndicator  actions in the response payload. For example:
      {​ 
              "uiType":"ActionMsg",​ 
              "actionType":"StartTypingIndicator"​ 
      } ​ 
    • To send the user typing indicator to a live agent, the client should send  the TYPING  action. When the user finishes typing, the  client should  send the  VIEWING  action.​ For example:
      {​ 
          "requestId": "xxxxxx-xxxxxx-xxxx-xxxx-xxxxxxxxxx",​ 
          "clientSessionId": "xxxxxxxx-xxxx",​ 
          "action": "TYPING/VIEWING",​ 
          "userId": "able.tuter",​ 
          "emailId": "abel.tuter@example.com",​ 
          "timezone":"Asia/Kolkata"​ 
      }​ 
    • To enable typing indicators, follow these steps:
      1. Navigate to All, and then enter sys_cs_channel.list in the navigation filter.
      2. Select the Bot to Bot record.
      3. Select the Support typing indicator check box.
      4. Click Update.
    Version 1.3.0

    You can login Virtual Agent API through the va.bot.to.bot.logging_enabled system property.

    Version 1.0.12
    • You can automatically close conversations that have been idle for more than one hour. The Time Out Abandoned B2B Conversations job runs hourly each day and automatically closes idle conversations that requesters have abandoned. For more information, see Closing idle bot-to-bot conversations.
    • When a user or primary bot ends a conversation, Virtual Agent records the state and reason codes in the interaction records. For example, an end user can type End to stop the conversation or click the X button to close the chat. To learn more, see Virtual Agent interaction records.
    • Notifying when a conversation ends
      The primary bot is notified when Virtual Agent or Agent Chat conversations end. The primary bot is also notified when it must take control of a conversation. Virtual Agent uses the following flags:
      • completed: Sent when the conversation with Virtual Agent or a live agent is finished.
      • takeControl: Sent when the primary bot must take control. This typically occurs when Virtual Agent can't determine the conversation intent after two consecutive attempts (the default value). You can add the va.bot.to.bot.take.control_times system property to change the default number of attempts that Virtual Agent tries to determine the conversation intent.

      For more information, see Virtual Agent Bot Integration API.

    • Changes with intents
      • Share the NLU confidence score for an intent match if NLU is enabled in Virtual Agent.
      • Enable end users to jump directly into a topic based on intent matching by the primary bot.
    Version 1.0.9
    • Provider authentication using static, hash, and token-based authentication
    • Auto-linking user IDs to ServiceNow accounts for a personalized experience
    • Virtual Agent transfer to a live agent in Agent Chat
    • Intent classification in bot-to-bot integrations through the following strategies:
      • The primary bot determines the user intent and sends the user request to Virtual Agent so that the corresponding topic is displayed to the user.
      • The primary bot sends the user utterance to Virtual Agent so that it can discover the intent and return a prediction confidence score. A higher confidence score indicates that the predicted topic more accurately matches the user utterance.