Common errors in Virtual Agent API
Summarize
Summary of Common errors in Virtual Agent API
This guide helps ServiceNow customers understand and resolve common errors encountered when working with the Virtual Agent API in the Zurich release. It covers the required request structure, file upload methods, and user linking prerequisites and troubleshooting steps to ensure smooth API integration and user session management.
Show less
Virtual Agent API Request Structure
The API expects a JSON request containing key fields:
- Mandatory:
userId(unique user identifier),message.text(user message content) - Optional:
requestId,clientSessionId,emailId(required for user linking),action,contextVariables,history,clientVariables
Only userId and message.text are mandatory, but including emailId is essential when user linking is needed.
File Upload Handling
Virtual Agent API supports two file upload modes:
- Synchronous: Upload files first using the Media API to obtain a media URL, then include this URL in the Virtual Agent API request for immediate processing.
- Asynchronous: Provide a direct or protected file URL directly in the API request. For protected URLs, include necessary authentication headers to enable secure file access.
Key fields for file attachments include contentType (MIME type), fileName, and url. Optionally, clientAttachmentId and authentication headers can be included for tracking and secure access.
User Linking Requirements and Troubleshooting
User linking allows the Virtual Agent to associate incoming requests with existing users automatically. To enable this:
- Message authentication must be configured and active in
syscsproviderapplication. - Request must include a valid and unique
userIdand a validemailIdthat exactly matches an active, unlocked user record insysuser. - The provider configuration in
syscsprovidermust haveautomaticlinkenabledandlinkaccountenabledset to true, andautomaticlinkactionpointing to the correct auto-link script. - Ensure no inactive records exist in
providerusermapfor the givenuserId. Inactive mappings prevent automatic linking and must be deleted by an admin. - Review any customizations to the auto-link script (
snvaasservice.virtualagentbottobotautolinkaccount) for custom logic or validations that may impact linking.
This checklist helps diagnose and resolve user linking failures effectively.
This section describes some common errors in Virtual Agent API and how they can be resolved.
Virtual Agent API structure validation
Request structure:
{
"requestId": "any-unique-request-id",
"clientSessionId": "any-unique-session-id",
"userId": "any-unique-user-id",
"emailId": "user@example.com",
"action": "",
"message": {
"text": "User message text",
"typed": true
},
"contextVariables": {},
"history": [
{
"isBotMessage": true,
"value": "How can I help you?",
"displayName": "Bot",
"type": "text"
}
],
"clientVariables": {
"id": "va-bot-12345",
"timestamp": "1687527831786"
}
}| Field | Required | Description |
|---|---|---|
requestId |
No | Pass-through variable returned in responses |
clientSessionId |
No | Pass-through session identifier |
userId |
Yes | Unique user identifier (mandatory) |
emailId |
No* | User email for linking (*required for user linking) |
action |
No | Optional action parameter |
message.text |
Yes | User message content (mandatory) |
message.typed |
No | true for search text, false for value selection |
contextVariables |
No | Optional context data |
history |
No | Bot conversation history (first request only) |
clientVariables |
No | Pass-through client variables |
File upload issues
Virtual Agent API supports two file upload modes, such as Synchronous and Asynchronous.
File upload request structure:
{
"userId": "{{user_id}}",
"message": {
"attachment": {
"clientAttachmentId": "{{request_id}}",
"contentType": "video/mp4",
"fileName": "sample.mp4",
"url": "https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4",
"headers": {
"header 1": "value 1"
}
},
"text": "along with text",
"typed": true
}
}
| Field | Required | Description |
|---|---|---|
contentType |
Yes | MIME type (e.g., video/mp4, image/png) |
fileName |
Yes | Name of the file with extension |
url |
Yes | Accessible URL to download the file |
clientAttachmentId |
No | Unique identifier for tracking |
headers |
No | Authentication headers for file download |
File upload in synchronous mode:
- Upload the file by using Media API. For more information, see CCCIF Media Resource API.Media API returns a url. An example of the response is:
{ "result": { "mediaUrl": "<instance>/api/now/v1/cs/media/JOBBfkqSq6kDiFzxyinvHhke73O4TZ0j", "name": "image.png", "state": "available", "attachmentId": "e8671b9193209210a755b8e86cba104b" } } - Use the media url in Virtual Agent API request. A JSON example is:
{ "userId": "user123", "message": { "attachment": { "contentType": "image/png", "fileName": "image.png", "url": "<instance>/api/now/v1/cs/media/JOBBfkqSq6kDiFzxyinvHhke73O4TZ0j" }, "text": "Here is the image", "typed": true } }
File upload in asynchronous mode:
- Use the file url in the Virtual Agent API request.
- Direct file url:
{ "userId": "user123", "message": { "attachment": { "contentType": "application/pdf", "fileName": "report.pdf", "url": "https://publicserver.com/files/report.pdf" }, "text": "Document attached", "typed": true } } - Protected file url:
{ "userId": "user123", "message": { "attachment": { "contentType": "application/pdf", "fileName": "confidential.pdf", "url": "https://secureserver.com/files/confidential.pdf", "headers": { "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "X-Custom-Header": "custom-value" } }, "text": "Secure document attached", "typed": true } }
- Direct file url:
- Using the Media API (as followed in synchronous mode).
User linking issues
Virtual Agent API supports automatic user linking by default. Manual linking is not enabled by default in Virtual Agent API.
- Message Auth is mandatory.
- Without message auth in
sys_cs_provider_application, user linking doesn't work. - You must configure Message auth properly. (See the authentication section.)
- Without message auth in
- Required request fields.
userIdmust be present and unique.emailIdmust be present and valid.
User record requirements:
emailId must match a sys_user record that meets all of the following conditions:- Record exists in the
sys_usertable. - Email field matches exactly.
- User is active. (
active=true) - User is not locked out. (
locked_out=false) - Only one user record matches these conditions.
- Verify the provider configuration.
- Navigate to the
sys_cs_providertable and open the "VA Bot to Bot Provider" record. -
Table 3. Required setting Field Expected Value automatic_link_enabledtrueautomatic_link_actionsn_va_as_service.virtual_agent__bot_to_bot_auto_link_accountlink_account_enabledtrue
- Navigate to the
- Check the provider user map.
- Navigate to the
provider_user_maptable. - Filter by:
active=falseANDchannel_user_id={userId from request}. - Issue: If record exists with
active=false, the user cannot be linked automatically. - Solution: User who has the admin role must manually delete the inactive record and retry the linking request.
- Navigate to the
- Check for customizations.
- Review customizations by running the
sn_va_as_service.virtual_agent__bot_to_bot_auto_link_accountscript. - Check for the common customization issues:
- Logic preventing automatic linking
- Additional validation checks
- Modified field mappings
- Review customizations by running the
Checklist for user linking troubleshooting
- Configuration:
- Message auth exists and is active.
userIdis present in request.emailIdis present in request.automatic_link_enabled = trueautomatic_link_actionpoints to correct script.link_account_enabled = true
- User record:
- User exists in
sys_user. - Email matches exactly (case-sensitive).
- User is active.
- User is not locked out.
- Only one user matches the email.
- User exists in
- Provider user map:
- No inactive records for this
userId. - Check for duplicate mappings.
- No inactive records for this
- Customizations:
- Review auto-link script for modifications.
- Test with default script if customized.