The user access token.
You can get the user access token from the Settings -> Users and Roles page. See Users or Groups , for more information.
Data types you wish to delete from the agent. Supported types: - storage : Clears the storage data. You can view the agent storage data in Agent -> Debug -> Storage. - js\_errors : Clears the JS errors. You can view the JS errors in Agent -> Debug -> JS Errors and use the Clear All option to clear JS errors from the UI. - conversation\_sessions : Clears the conversation states of the agent and takes the conversation to the initial state. Note that this does not clear Conversation History.
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"success": true
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key point**: The agent must be locked for edit.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request POST 'https://cx.avaamo.com/dashboard/agents/20xxx/clear_data.json' \
--header 'Content-Type: application/json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"data_types": [
"storage_data",
"js_errors",
"conversation_sessions"
]
}'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://cx.avaamo.com/dashboard/agents/20xxx/clear_data.json',
'headers': {
'Content-Type': ['application/json', 'application/json'],
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx'
},
body: JSON.stringify({"data_types":["storage_data","js_errors","conversation_sessions"]})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/collect-feedback.md
# Collect feedback
You can allow users to provide feedback on their conversational experience with your agent. Feedback provided by users is used to learn and analyse the experience of the user when they are interacting with your agent. You can enable the collect feedback option for specific skills to provide users the option to provide feedback.
When you enable the collect feedback option, the thumbs up and thumbs down option to provide negative and positive feedback is displayed after the agent response is displayed.
, if you wish to explore the node-js approach.

{% hint style="info" %}
**Note**: In the chatbot URL, the parameters **demo=true** and **action=demo** are used for internal purposes only.
{% endhint %}
## Embed your agent in iFrame
After you save your web channel configuration settings, click **Test.**
* Copy the URL displayed in the browser.
* In the URL, update demo.html to channel.html and include the URL in your iFrame source. The following is a sample HTML code:
```markup
Web Frame Example
```
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/confluence.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence.md
# Confluence
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-1-select-the-content-source-type.md): The first step is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter articles](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/filter-articles.md)
- [Set Document Attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/content-ingestion-apis-backward-compatibility.md
# Content ingestion APIs (Backward Compatibility)
{% hint style="danger" %}
**Note**: All the content ingestion APIs listed in the article are maintained solely for backward compatibility and are limited to support until version 6.4.0. However, these APIs will soon be marked as deprecated. Starting from version 7.0.0 onwards, it is recommended to transition to an enhanced and more efficient version of content ingestion APIs to ensure improved support. See [Content ingestion APIs (Recommended)](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/content-ingestion-apis-recommended), for more information.
{% endhint %}
## Upload document (HTML, URL) to the Answers knowledge base.
`POST` `https://answers-ingest.aiavaamo.com/api/document`
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
| content-type\* | json | application/json |
#### Request Body
| Name | Type | Description |
| ---------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See View or edit document groups , for more information.
|
| api\_server\* | String | Avaamo instance where the data is to be uploaded. Example:
Contact Avaamo Support to know the server name.
|
| document\* | JSON Object | Document object that needs to be uploaded |
| document -> name\* | String | Name of the document.
Max length: 255 characters.
|
| document -> type\* | String | Type of the document.
Supported values: html, url
|
| document -> content | String | Content of the document HTML body/Text/Base64 text of PDF file.
This field is mandatory for HTML document types but not required for URLs.
Content must in the format:
\Name of document\ \valid html content\
|
| document -> attributes | Key-value | Define attributes for the uploaded documents or URLs in your Answers skill to facilitate disambiguation or filtering.
Attributes can be metadata of the document. You define attributes in key-value pairs. See Defining attributes for documents or URLs , for more information.
|
| document -> preview\_url\* | String | URL that needs to be opened when the user clicks in the response.
You can get the preview\_url from the Document group -> Document -> View/Edit page.
|
| document -> language | String | Language of the document.
Default value: en-US
|
| document -> parsing\_template | JSON | Template to be used to parse the document. This is a JSON file that can be configured as a template while parsing a URL with the purpose of better extraction of content from the URL during the parsing process.
Default value: default parsing template
Contact Avaamo Support to get access to the parsing template repository.
|
| parsing\_template -> template\_json | JSON | Custom template to parse a URL. |
| parsing\_template -> key | String | Key for inbuilt parsing template, if not provided custom template is used. See [Parsing template](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/parsing-templates#inbuilt-parsing-templates), for more information. |
{% tabs %}
{% tab title="200: OK Successful request" %}
```json
{
"chunks": 1,
"response_text": {
"created_at": "2022-04-04T06:07:06.429408Z",
"document_group": 887,
"document_properties": null,
"document_type": "url",
"file_type": "url",
"id": 17472,
"index_pages": 0,
"language": 1,
"language_string": "English (en-US)",
"last_error": null,
"name": "Avaamo Docs",
"parsing_template": 6,
"preview_url": null,
"source_file": null,
"source_url": "https://docs.avaamo.com/user-guide/",
"status": "UPLOADED",
"updated_at": "2022-08-01T10:03:53.585745Z",
"updated_by": "John Miller",
"uuid": "9ffb4cbb-f62d-4757-b7b7-70b67ca4d0cc"
},
"status": true// Response
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key points**:
* Ensure that the right content is posted during upload as the HTML content is sanitized before processing.
* All content must be present in the following tags: "h1", "h2", "h3", "h4", "h5", "p", "img", "span", "td", "figure", "ol", "ul", "dd", "dt", "a", "table", "details", "summary". This list can be modified by using parsing templates.
* The maximum request size should not exceed 5 MB. Contact Avaamo Support, if the size exceeds the limit.
* Password-protected PDFs are not supported.
* The images inside HTML must be base64 encoded or must be public images.
{% endhint %}
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request POST 'https://answers-ingest.aiavaamo.com/api/document' \
--header 'access-token: xxxxxxf69ba5497e96ff614b00xxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo user guide",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/"
}
}
'
```
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://answers-ingest.aiavaamo.com/api/document',
'headers': {
'access-token': 'xxxxxxf69ba5497e96ff614b00xxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo user guide",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
```json
{
"chunks": 1,
"response_text": {
"created_at": "2022-04-04T06:07:06.429408Z",
"document_group": 887,
"document_properties": null,
"document_type": "url",
"file_type": "url",
"id": 17472,
"index_pages": 0,
"language": 1,
"language_string": "English (en-US)",
"last_error": null,
"name": "Avaamo Docs",
"parsing_template": 6,
"preview_url": null,
"source_file": null,
"source_url": "https://docs.avaamo.com/user-guide/",
"status": "UPLOADED",
"updated_at": "2022-08-01T10:03:53.585745Z",
"updated_by": "John Miller",
"uuid": "9ffb4cbb-f62d-4757-b7b7-70b67ca4d0cc"
},
"status": true
}
```
#### Response Body
Attribute Description Type chunks Chunks of the uploaded document Integer response_text -> created_at Created Datetime of document String response_text -> document_group Knowledge pack identifier where document is uploaded String response_text -> document_type Type of the document uploaded String response_text -> file_type Type of file uploaded String response_text -> id Document identifier String response_text -> language Document language String response_text -> name Document name String response_text -> parsing_template Parsing template used to upload document String response_text -> source_file Source file of the uploaded document, if any. String response_text -> source_url Source URL of the uploaded document, if any. String response_text -> status UPLOADED/ERROR String response_text -> updated_at Updated Datetime of document String response_text -> updated_by User who updated the document String response_text -> uuid Unique identifier of the uploaded document String status true if the document was uploaded successfully String
### Examples
The following table lists a few sample use cases for uploading a document to the Answers skill:
Use case Request payload Uploading a document using URL {
"document_group_id": 1,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo Docs",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/"
}
}
Uploading a document directly with HTML content {
"document_group_id": 1,
"api_server": "https://mx.avaamo.com",
"document": {
"content": "<title>Name of document</title><body><p>valid html content</p></body>",
"name": "Terms of Use",
"type": "html",
"preview_url": "https://avaamo.ai/privacy/"
}
}
## Delete the document from the specified document group in the Answers skill.
`DELETE` `https://answers-ingest.aiavaamo.com/api/document`
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| content-type\* | - | application/json |
| access-token\* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
User must have at least edit permission on the agent. See Permissions , for more information on agent permissions.
|
#### Request Body
| Name | Type | Description |
| ----------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | String | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See Create document groups , for more information.
|
| preview\_url | String | URL used to upload the document to the Answers skill. Use this if you have uploaded a document using a URL and wish to delete the document from the Answers skill.
You can get the preview URL from the Document group -> Document -> Edit pop-up window.
You must specify either preview\_url or document\_id in the delete payload request.
See Create document groups , for more information.
|
| api\_server\* | String | Avaamo Answers instance.
Contact Avaamo Support to get the API server URL.
|
| document\_id | String | Unique identifier of the uploaded document to the Answers skill. Use this if you have uploaded a document directly to the Answers skill and wish to delete the document from the Answers skill.
You can get the document\_id from the Document group -> Document -> Edit pop-up window. See Create document groups , for more information.
You must specify either preview\_url or document\_id in the delete payload request.
|
{% tabs %}
{% tab title="200: OK Successful request" %}
```javascript
{
"status": true
}
// status as true indicates that the document is deleted successfully
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request DELETE 'https://answers-ingest.aiavaamo.com/api/document' \
--header 'Content-Type: application/json' \
--header 'access-token: xxxxxxf69ba5497e96ff614b00xxxxxx' \
--data-raw '{
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"preview_url": "https://avaamo.ai/privacy-policy/"
}'
```
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'DELETE',
'url': 'https://answers-ingest.aiavaamo.com/api/document',
'headers': {
'Content-Type': 'application/json',
'access-token': 'xxxxxxf69ba5497e96ff614b00xxxxxx'
},
body: JSON.stringify({
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"preview_url": "https://avaamo.ai/privacy-policy/"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Examples
The following table lists a few sample use cases for deleting a document from the Answers skill:
| Use case | Request payload |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Delete a document that is uploaded using a URL | {
"document\_group\_id": 999,
"api\_server": "", "preview\_url": " "
}
|
| Delete a document uploaded that is uploaded directly | {
"document\_group\_id": 999,
"api\_server": "", "document\_id": 556
}
|
## Update the document name and attributes
`PUT` `https://answers-ingest.aiavaamo.com/api/document`
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
| content-type\* | json | application/json |
#### Request Body
| Name | Type | Description |
| ---------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page.
See Create document groups , for more information.
|
| api\_server\* | String | Avaamo instance where the data is to be uploaded.
Example:
|
| document\* | JSON Object | Document object that needs to be uploaded |
| document -> name | String | Name of the document.
Max length: 255 characters.
|
| document -> attributes | Key-value | Define attributes for the uploaded documents or URLs in your Answers skill to facilitate disambiguation or filtering.
Attributes can be metadata of the document. You define attributes in key-value pairs. See Defining attributes for documents or URLs , for more information.
|
| document -> preview\_url\* | String | URL that needs to be opened when user clicks in the response. See [Create document groups](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/create-document-groups), for more information. |
{% tabs %}
{% tab title="200: OK Successful request" %}
```json
{
"response_text": {
"https://docs.avaamo.com/user-guide/": {
"status": true
}
},
"status": true
}
// status as "true" indicates that the update was successful
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request PUT 'https://answers-ingest.aiavaamo.com/api/document' \
--header 'access-token: xxxxxxf69ba5497e96ff614b00xxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Terms of use",
"type": "url",
"preview_url": "https://avaamo.ai/privacy-policy/"
}
}
'
```
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://answers-ingest.aiavaamo.com/api/document',
'headers': {
'access-token': 'xxxxxxf69ba5497e96ff614b00xxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"document_group_id": 999,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Terms of use",
"type": "url",
"preview_url": "https://avaamo.ai/privacy-policy/"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for updating the document:
```json
{
"response_text": {
"https://docs.avaamo.com/user-guide/": {
"status": true
}
},
"status": true
}
```
#### Response Body
Attribute Description Type status true if the document is updated successfully else false.String
### Examples
The following table lists a few sample use cases for updating documents to the Answers skill:
Use case Request payload Update the name of the document {
"document_group_id": 1,
"api_server": "https://mx.avaamo.com", "document": {
"name": "Avaamo User Manual",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/"
}
}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/content-ingestion-apis-recommended.md
# Content ingestion APIs (Recommended)
## Upload document (HTML, URL) to the Answers knowledge base
`POST` `https://mx.avaamo.com/content-ingestion/parse-document`
#### Path Parameters
| Name | Type | Description |
| ----------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| mx.avaamo.com\* | URL | Avaamo instance where the data is to be uploaded. Example:
Contact Avaamo Support to know the server name.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
| content-type\* | json | application/json |
#### Request Body
| Name | Type | Description |
| ------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See View or edit document groups , for more information.
|
| document\* | JSON Object | Document object that needs to be uploaded |
| document -> name\* | String | Name of the document.
Max length: 255 characters.
|
| document -> type\* | String | Type of the document.
Supported values: html, url
|
| document -> content | String | Content of the document HTML body/Text/Base64 text of PDF file.
This field is mandatory for HTML document types but not required for URLs.
Content must in the format:
\Name of document\ \valid html content\
|
| document -> attributes | Key-value | Define attributes for the uploaded documents or URLs in your Answers skill to facilitate disambiguation or filtering.
Attributes can be metadata of the document. You define attributes in key-value pairs. See Defining attributes for documents or URLs , for more information.
|
| document -> preview\_url\* | String | URL that needs to be opened when the user clicks in the response.
You can get the preview\_url from the Document group -> Document -> View/Edit page.
|
| document -> language | String | Language of the document.
Default value: en-US
|
| document -> parsing\_template | JSON | Template to be used to parse the document. This is a JSON file that can be configured as a template while parsing a URL with the purpose of better extraction of content from the URL during the parsing process.
Default value: default parsing template
Contact Avaamo Support to get access to the parsing template repository.
Note instead of defining the parsing template in the document -> parsing\_template object, it is recommended to create the parsing template in the Parsing template page and use the parsing\_template\_id in the API payload. See Parsing template page , for more information.
|
| document -> parsing\_template\_id\* | String | Specify the parsing template identifier that must be used to parse the document. You can get the identifier from the Parsing template page .
Default value: default parsing template identifier is used.
Note instead of defining the parsing template in the document -> parsing\_template object, it is recommended to create the parsing template in the Parsing template page and use the parsing\_template\_id in the API payload.
|
| parsing\_template -> template\_json | JSON | Custom template to parse a URL. |
| parsing\_template -> key | String | Key for inbuilt parsing template, if not provided custom template is used. See [Parsing template](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/parsing-templates#inbuilt-parsing-templates), for more information. |
{% tabs %}
{% tab title="201: Created Successful request" %}
```json
{
"chunks": 1,
"response_text": {
"created_at": "2022-04-04T06:07:06.429408Z",
"document_group": 887,
"document_properties": null,
"document_type": "url",
"file_type": "url",
"id": 17472,
"language": 1,
"language_string": "English (en-US)",
"last_error": null,
"name": "Avaamo Docs",
"parsing_template": 6,
"preview_url": null,
"source_file": null,
"source_url": "https://docs.avaamo.com/user-guide/",
"status": "UPLOADED",
"updated_at": "2022-08-01T10:03:53.585745Z",
"updated_by": "John Miller",
"uuid": "9ffb4cbb-f62d-4757-b7b7-70b67ca4d0cc"
},
"status": true// Response
}
```
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key points**:
* Ensure that the right content is posted during upload as the HTML content is sanitized before processing.
* All content must be present in the following tags: "h1", "h2", "h3", "h4", "h5", "p", "img", "span", "td", "figure", "ol", "ul", "dd", "dt", "a", "table", "details", "summary". This list can be modified by using parsing templates.
* The maximum request size should not exceed 5 MB. Contact Avaamo Support, if the size exceeds the limit.
* Password-protected PDFs are not supported.
* The images inside HTML must be base64 encoded or must be public images.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location 'https://mx.avaamo.com/content-ingestion/parse-document' \
--header 'access-token: xxxxxx39e61f48829a47ccd9e6xxxxxx' \
--header 'Content-Type: application/json' \
--data '{
"document_group_id": 35xx,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo Docs",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/",
"parsing_template_id":"6"
}
}'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://mx.avaamo.com/content-ingestion/parse-document',
'headers': {
'access-token': 'xxxxxx39e61f48829a47ccd9e6xxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"document_group_id": 35xx,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo Docs",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/",
"parsing_template_id": "6"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
```json
{
"https://docs.avaamo.com/user-guide/": {
"status": true,
"chunks": 4,
"response_text": {
"id": 203021,
"name": "Avaamo Docs",
"uuid": "0ffa5161-1adb-479e-b5a1-4035fxxxxxx",
"document_type": "url",
"status": "QUEUED",
"language": 1,
"language_string": "English (en-US)",
"document_group": 35xx,
"source_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"preview_url": null,
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2023-07-20T12:28:04.639826Z",
"created_at": "2023-07-20T12:28:04.512307Z",
"updated_by": "John Miller"
}
}
}
```
#### Response Body
Attribute Description Type chunks Chunks of the uploaded document Integer response_text -> created_at Created Datetime of document String response_text -> document_group Knowledge pack identifier where document is uploaded String response_text -> document_type Type of the document uploaded String response_text -> document_properties Document attributes, if any. JSON response_text -> file_type Type of file uploaded String response_text -> id Document identifier String response_text -> language Document language identifier String response_text -> language_string Document language code corresponding to the identifier String response_text -> name Document name String response_text -> parsing_template Parsing template used to upload document String response_text -> source_file Source file of the uploaded document, if any. String response_text -> source_url Source URL of the uploaded document, if any. String response_text -> status UPLOADED/ERROR String response_text -> updated_at Updated Datetime of document String response_text -> updated_by User who updated the document String response_text -> uuid Unique identifier of the uploaded document String status true if the document was uploaded successfully String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for uploading a document to the Answers skill:
Use case Request payload Uploading a document using URL {
"document_group_id": 1,
"api_server": "https://mx.avaamo.com",
"document": {
"name": "Avaamo Docs",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/",
"parsing_template_id": "6"
}
}
Uploading a document using HTML {
"document_group_id": 1,
"document": {
"content": "<title>Terms of Use</title><body><h1>Privacy Policy</h1><p>Avaamo, Inc. ('Avaamo') provides this Privacy Policy to inform you of our policies and procedures regarding the collection, use and disclosure of Personally Identifiable Information that we may obtain through the use of Avaamo products such as Avaamo Platform ('Software'), applications such as Avaamo Messenger ('Application'), and access to www.avaamo.com, referred to as ('Site').</p></body>",
"name": "Terms of Use",
"parsing_template_id": 6,
"type": "html",
"preview_url": "https://avaamo.ai/privacy/",
"attributes": {"product": {"value": "Avaamo", "priority": 0}}
}
}
## Upload different types of files (pdf, docx, pptx, xlsx) to the Answers knowledge base
`POST` `https://mx.avaamo.com/content-ingestion/upload-file`
#### Path Parameters
| Name | Type | Description |
| ----------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| mx.avaamo.com\* | URL | Avaamo instance where the data is to be uploaded. Example:
Contact Avaamo Support to know the server name.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
#### Request Body
| Name | Type | Description |
| ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See View or edit document groups , for more information.
|
| name | String | Name of the file.
Max length: 255 characters.
|
| type | String | Type of the file.
Supported types: pdf, docx, pptx, xlsx
|
| attributes | Key-value | Define attributes for the uploaded file in your Answers skill to facilitate disambiguation or filtering.
Attributes can be metadata of the document. You define attributes in key-value pairs. See Defining attributes for documents or URLs , for more information.
|
| language | String | Language of the uploaded file.
Default value: en-US
|
| parsing\_template | JSON | Template to be used to parse the document. This is a JSON file that can be configured as a template while parsing a URL with the purpose of better extraction of content from the URL during the parsing process.
Default value: default parsing template
Contact Avaamo Support to get access to the parsing template repository.
Note instead of defining the parsing template in the document -> parsing\_template object, it is recommended to create the parsing template in the Parsing template page and use the parsing\_template\_id in the API payload. See Parsing template page , for more information.
|
| parsing\_template\_id\* | String | Specify the parsing template identifier that must be used to parse the document. Use the right parsing template according to type of file you are uploading. You can get the identifier from the Parsing template page .
Default value: default parsing template identifier is used.
Note instead of defining the parsing template in the document -> parsing\_template object, it is recommended to create the parsing template in the Parsing template page and use the parsing\_template\_id in the API payload.
|
| parsing\_template -> template\_json | JSON | Custom template to parse a URL. |
| parsing\_template -> key | String | Key for inbuilt parsing template, if not provided custom template is used. See [Parsing template](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/parsing-templates#inbuilt-parsing-templates), for more information. |
| file\* | File object | The actual file that you wish to upload. |
| parsing\_lib | String | parsing\_lib for pdf extraction. For tabular parsing use pdftotree.
Default: pdfbox
|
{% tabs %}
{% tab title="201: Created Successful request" %}
{
"MACPIZZA_Policy.pdf": {
"status": true,
"response_text": {
"id": 194658,
"name": "MACPIZZA_Policy.pdf",
"uuid": "2ff9d2e1-5897-4d2c-9c5d-5b5d9c144cb6",
"document_type": "pdf",
"status": "UPLOADED",
"language": 1,
"language_string": "English (en-US)",
"document_group": 3455,
"source_url": null,
"source_file": "<<source_file_URL_path>>",
"preview_url": null,
"document_properties": null,
"parsing_template": 8,
"file_type": "application/pdf",
"last_error": null,
"updated_at": "2023-07-19T07:26:59.464093Z",
"created_at": "2023-07-19T07:26:59.464025Z",
"updated_by": "John Miller"
}
}
}
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location 'https://mx.avaamo.com/content-ingestion/upload-file' \
--header 'Access-Token: xxxxxx39e61f488x47xxccd9e6xxxxxx' \
--form 'file=@"/Users/avaamo/Downloads/MacPizza_policy.docx"' \
--form 'document_group_id="34xx"' \
--form 'type="docx"' \
--form 'parsing_template_id="8x"' \
--form 'api_server="https://mx.avaamo.com"'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var fs = require('fs');
var options = {
'method': 'POST',
'url': 'https://mx.avaamo.com/content-ingestion/upload-file',
'headers': {
'Access-Token': 'xxxxxx39e61f488x47xxccd9e6xxxxxx'
},
formData: {
'file': {
'value': fs.createReadStream('/Users/avaamo/Downloads/MacPizza_policy.docx'),
'options': {
'filename': 'MacPizza_policy.docx',
'contentType': null
}
},
'document_group_id': '34xx',
'type': 'docx',
'parsing_template_id': '8x',
'api_server': 'https://mx.avaamo.com'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
{% code overflow="wrap" %}
```json
{
"MacPizza_policy.docx": {
"status": true,
"response_text": {
"id": 203002,
"name": "MacPizza_policy.docx",
"uuid": "d053xxxx-446f-xxxx-9f53-055cfxxxxxxx",
"document_type": "docx",
"status": "COMPLETE",
"language": 1,
"language_string": "English (en-US)",
"document_group": 34xx,
"source_url": null,
"source_file": "<>",
"preview_url": null,
"document_properties": null,
"parsing_template": 8x,
"file_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"last_error": null,
"updated_at": "2023-08-07T08:39:27.079826Z",
"created_at": "2023-07-20T09:49:39.163094Z",
"updated_by": "John Miller"
}
}
}
```
{% endcode %}
#### Response Body
Attribute Description Type status true if the document was uploaded successfully Boolean response_text -> id Unique file identifier String response_text -> name File name String response_text -> uuid Unique identifier of the uploaded file. This is for internal use only. String response_text -> document_type Type of the document uploaded String response_text -> document_properties Document attributes, if any. JSON response_text -> status UPLOADED/ERROR String response_text -> language Document language identifier String response_text -> language_string Document language code corresponding to the identifier String response_text -> document_group Knowledge pack identifier where file is uploaded String response_text -> source_file Source of the uploaded file String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file String response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for uploading a document to the Answers skill:
Use case Request payload Uploading a word document curl --location 'https://mx.avaamo.com/content-ingestion/upload-file' \
--header 'Access-Token: xxxxxx39e61f488x47xxccd9e6xxxxxx' \
--form 'file=@"/Users/avaamo/Downloads/MacPizza_policy.docx"' \
--form 'document_group_id="34xx"' \
--form 'type="docx"' \
--form 'parsing_template_id="8x"' \
--form 'api_server="https://mx.avaamo.com"'
## Delete the document from the specified document group in the Answers skill.
`DELETE` `https://mx.avaamo.com/content-ingestion/delete-document`
#### Path Parameters
| Name | Type | Description |
| ----------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| mx.avaamo.com\* | URL | Avaamo instance where the data is to be uploaded. Example:
Contact Avaamo Support to know the server name.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| content-type\* | JSON | application/json |
| access-token\* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
User must have at least edit permission on the agent. See Permissions , for more information on agent permissions.
|
#### Request Body
| Name | Type | Description |
| ----------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | String | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See Create document groups , for more information.
|
| preview\_url | String | URL used to upload the document to the Answers skill. Use this if you have uploaded a document using a URL and wish to delete the document from the Answers skill.
You can get the preview URL from the Document group -> Document -> Edit pop-up window.
You must specify either preview\_url or document\_id in the delete payload request.
See Create document groups , for more information.
|
| document\_id | String | Unique identifier of the uploaded document to the Answers skill. Use this if you have uploaded a document directly to the Answers skill and wish to delete the document from the Answers skill.
You can get the document\_id from the Document group -> Document -> Edit pop-up window. See Create document groups , for more information.
You must specify either preview\_url or document\_id in the delete payload request.
|
{% tabs %}
{% tab title="200: OK Successful request" %}
{
"https://docs.avaamo.com/user-guide/": {
"response_text": {
"created_at": "2023-07-18T10:34:10.750087Z",
"document_group": 3455,
"document_properties": "",
"document_type": "url",
"file_type": "url",
"id": null,
"language": 1,
"language_string": "English (en-US)",
"last_error": null,
"name": "Avaamo Docs",
"parsing_template": 6,
"preview_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"source_url": "https://docs.avaamo.com/user-guide/",
"status": "COMPLETE",
"updated_at": "2023-07-18T10:35:35.719236Z",
"updated_by": "John Miller",
"uuid": "c5164053-51e7-4687-98b5-363762d454ac"
},
"status": true
}
}
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request DELETE 'https://mx.avaamo.com/content-ingestion/delete-document' \
--header 'Content-Type: application/json' \
--header 'access-token: xxxxxxf69ba5497e96ff614b00xxxxxx' \
--data-raw '{
"document_group_id": 999,
"preview_url": "https://avaamo.ai/privacy-policy/"
}'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'DELETE',
'url': 'https://mx.avaamo.com/content-ingestion/delete-document',
'headers': {
'Content-Type': 'application/json',
'access-token': 'xxxxxxf69ba5497e96ff614b00xxxxxx'
},
body: JSON.stringify({
"document_group_id": 999,
"preview_url": "https://avaamo.ai/privacy-policy/"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
```json
{
"https://docs.avaamo.com/user-guide/": {
"response_text": {
"created_at": "2023-07-18T10:34:10.750087Z",
"document_group": 3455,
"document_properties": "",
"document_type": "url",
"file_type": "url",
"id": null,
"language": 1,
"language_string": "English (en-US)",
"last_error": null,
"name": "Avaamo Docs",
"parsing_template": 6,
"preview_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"source_url": "https://docs.avaamo.com/user-guide/",
"status": "COMPLETE",
"updated_at": "2023-07-18T10:35:35.719236Z",
"updated_by": "John Miller",
"uuid": "c5164053-51e7-4687-98b5-363762d454ac"
},
"status": true
}
}
```
#### Response Body
Attribute Description Type status true if the document was uploaded successfully Boolean response_text -> id Unique file identifier String response_text -> name File name String response_text -> uuid Unique identifier of the uploaded file. This is for internal use only. String response_text -> document_type Type of the document uploaded String response_text -> document_properties Document attributes, if any. JSON response_text -> status UPLOADED/ERROR String response_text -> language Document language identifier String response_text -> language_string Document language code corresponding to the identifier String response_text -> document_group Knowledge pack identifier where file is uploaded String response_text -> source_file Source of the uploaded file String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file String response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for deleting a document from the Answers skill:
| Use case | Request payload |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Delete a document that is uploaded using a URL | {
"document\_group\_id": 999,
"api\_server": "", "preview\_url": " "
}
|
| Delete a document uploaded that is uploaded directly | {
"document\_group\_id": 999,
"api\_server": "", "document\_id": 556
}
|
## Update the document name and attributes
`PUT` `https://mx.avaamo.com/content-ingestion/update-document`
#### Path Parameters
| Name | Type | Description |
| ----------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| mx.avaamo.com\* | URL | Avaamo instance where the data is to be uploaded. Example:
Contact Avaamo Support to know the server name.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
| content-type\* | JSON | application/json |
#### Request Body
| Name | Type | Description |
| ---------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page.
See Create document groups , for more information.
|
| document\* | JSON Object | Document object that needs to be uploaded |
| document -> name | String | Name of the document.
Max length: 255 characters.
|
| document -> attributes | Key-value | Define attributes for the uploaded documents or URLs in your Answers skill to facilitate disambiguation or filtering.
Attributes can be metadata of the document. You define attributes in key-value pairs. See Defining attributes for documents or URLs , for more information.
|
| document -> preview\_url\* | String | URL that needs to be opened when user clicks in the response. See [Create document groups](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/create-document-groups), for more information. |
{% tabs %}
{% tab title="200: OK Successful request" %}
```json
{
"https://docs.avaamo.com/user-guide/": {
"status": true,
"response_text": {
"id": 194636,
"name": "Avaamo User Manual",
"uuid": "8459623c-5df4-45ec-bc0c-831c6eaa08e9",
"document_type": "url",
"status": "COMPLETE",
"language": 1,
"language_string": "English (en-US)",
"document_group": 3455,
"source_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"preview_url": null,
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2023-07-18T10:49:20.486860Z",
"created_at": "2023-07-18T10:48:06.145736Z",
"updated_by": "John Miller"
}
}
}
```
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request PUT 'https://mx.avaamo.com/content-ingestion/update-document' \
--header 'access-token: xxxxxxf69ba5497e96ff614b00xxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"document_group_id": 999,
"document": {
"name": "Terms of use",
"type": "url",
"preview_url": "https://avaamo.ai/privacy-policy/"
}
}
'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
```javascript
var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://mx.avaamo.com/content-ingestion/update-document',
'headers': {
'access-token': 'xxxxxxf69ba5497e96ff614b00xxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"document_group_id": 999,
"document": {
"name": "Terms of use",
"type": "url",
"preview_url": "https://avaamo.ai/privacy-policy/"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for updating the document:
```json
{
"https://docs.avaamo.com/user-guide/": {
"status": true,
"response_text": {
"id": 194636,
"name": "Avaamo User Manual",
"uuid": "8459623c-5df4-45ec-bc0c-831c6eaa08e9",
"document_type": "url",
"status": "COMPLETE",
"language": 1,
"language_string": "English (en-US)",
"document_group": 3455,
"source_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"preview_url": null,
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2023-07-18T10:49:20.486860Z",
"created_at": "2023-07-18T10:48:06.145736Z",
"updated_by": "John Miller"
}
}
}
```
#### Response Body
Attribute Description Type status true if the document was uploaded successfully Boolean response_text -> id Unique file identifier String response_text -> name File name String response_text -> uuid Unique identifier of the uploaded file. This is for internal use only. String response_text -> document_type Type of the document uploaded String response_text -> document_properties Document attributes, if any. JSON response_text -> status UPLOADED/ERROR String response_text -> language Document language identifier String response_text -> language_string Document language code corresponding to the identifier String response_text -> document_group Knowledge pack identifier where file is uploaded String response_text -> source_file Source of the uploaded file String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file String response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for updating documents to the Answers skill:
Use case Request payload Update the name of the document {
"document_group_id": 1,
"api_server": "https://mx.avaamo.com", "document": {
"name": "Avaamo User Manual",
"type": "url",
"preview_url": "https://docs.avaamo.com/user-guide/"
}
}
---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis.md
# Content ingestion APIs
## Upload document (HTML, URL) to LLaMB
`POST` `https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-web`
{% hint style="info" %}
**Note:**
1. The rate limit for the upload-web API is capped at 50 uploads per minute. Contact Avaamo Support with your use-case details if you wish to increase the rate limit for the API.
2. Replace `{{instance-name}}` with your actual instance name, such as `c6` or `h1`.
{% endhint %}
{% hint style="warning" %}
**Recommendation:**
It is recommended to use the `upload-file` API instead of the `upload-web` API when uploading HTML content to the system. This approach ensures better control and consistency in content management.\
Using the upload-file API offers several advantages:
1. **Content Persistence:** The uploaded HTML content is explicitly stored in the database, ensuring it is readily available for future reference.
2. **Seamless Retraining:** Since the content is saved, it can be easily accessed during document retraining operations initiated through the UI.
{% endhint %}
#### Headers
Name Type Description access-token* String Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
content-type String application/JSON
#### Request Body
Name Type Description document_group_id* Number Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See View or edit document groups , for more information.Note: You can use either the document_group_id or a combination of agent_id and document_group_uuid in the request body. Both approaches are supported.
agent_id Number Agent identifier.
You can get the agent identifier from the agent URL.
document_group_uuid String Unique user identifier for the document group.
You can get the document group UUID from the Document group -> View/Edit page. See View or edit document groups , for more information.
document* JSON Document object that needs to be uploaded document -> name* String Name of the document.
Max length: 255 characters.
document -> attributes Key-value Define attributes for the uploaded documents or URLs in your LLaMB skill to facilitate disambiguation or filtering.
Example: "attributes": "{\"key\": \"value\"}"
Attributes can be metadata of the document. You define attributes in key-value pairs. See Document attributes , for more information.
document -> type* String Type of the document.
Supported values: html, url
document -> preview_url* String Mandatory only for uploading HTML content.
Display the URL that needs to be opened when the user clicks the source citation in the response.
You can get the preview_url from the Document group -> Document -> View/Edit page.
document -> language String This refers to the document's language. If you specify a language during ingestion, LLaMB uses that language to extract the content. If you do not provide, LLaMB automatically detects the document’s language and processes it accordingly. document -> parsing_template_id* Integer Specify the parsing template identifier that must be used to parse the document. You can get the identifier from the Parsing template page.
Default value: default parsing template identifier is used.
It is recommended to create the parsing template in the Parsing template page and use the parsing_template_id in the API payload.
document -> source * String If uploading from a URL, source is the actual source URL from where the content must be ingested.
If uploading a HTML content, source is the raw HTML content.
Raw HTML Content must be in the following format:
<title>Name of document</title><body>valid html content</body>
{% tabs %}
{% tab title="400: Bad Request Bad " %}
Request indicates the payload is wrong
{% endtab %}
{% tab title="200: OK Successful request" %}
```javascript
{
"https://avaamo.ai/privacy-policy/": {
"status": true,
"chunks": 8,
"response_text": {
"id": 85xxx,
"name": "Privacy documents",
"uuid": "01ca5f76-xxx-xxx-xxx-8784e8f61154",
"document_type": "url",
"status": "QUEUED",
"language": 1,
"language_string": "English (en-US)",
"document_group": 10xx,
"source_url": "https://avaamo.ai/privacy-policy/",
"source_file": null,
"preview_url": "https://avaamo.ai/gdpr-compliance/",
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2024-02-23T09:36:48.795473Z",
"created_at": "2024-02-23T09:36:48.715125Z",
"updated_by": "John Miller"
}
}
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key points**:
* Ensure that the right content is posted during upload, as the HTML content is sanitized before processing.
* All content must be present in the following tags: "h1", "h2", "h3", "h4", "h5", "p", "img", "span", "td", "figure", "ol", "ul", "dd", "dt", "a", "table", "details", "summary". This list can be modified by using parsing templates.
* The maximum request size should not exceed 5 MB. Contact Avaamo Support, if the size exceeds the limit.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-web' \
--header 'access-token: 8ce0573xxxxxxxxxxxx7ccd9e60f3bd5' \
--header 'Content-Type: application/json' \
--data '{
"document_group_id": 10xx,
"document": {
"name": "Privacy documents",
"type": "url",
"source": "https://avaamo.ai/privacy-policy/",
"preview_url": "https://avaamo.ai/gdpr-compliance/",
"parsing_template_id": 6
}
}'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://cx.avaamo.com/llamb-content-skill/content-ingestion/upload-web',
'headers': {
'access-token': '8ce0573xxxxxxxxxxxx7ccd9e60f3bd5',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"document_group_id": 10xx,
"document": {
"name": "Privacy documents",
"type": "url",
"source": "https://avaamo.ai/privacy-policy/",
"preview_url": "https://avaamo.ai/gdpr-compliance/",
"parsing_template_id": 6
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
```json
{
"https://avaamo.ai/privacy-policy/": {
"status": true,
"response_text": {
"id": 85xxx,
"name": "Privacy documents",
"uuid": "01ca5f76-xxx-xxx-xxx-8784e8f61154",
"document_type": "url",
"status": "QUEUED",
"document_group": 10xx,
"source_url": "https://avaamo.ai/privacy-policy/",
"source_file": null,
"preview_url": "https://avaamo.ai/gdpr-compliance/",
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2024-02-23T09:36:48.795473Z",
"created_at": "2024-02-23T09:36:48.715125Z",
"updated_by": "John Miller"
}
}
}
```
#### Response Body
Attribute Description Type status true if the document was updated successfully Boolean response_text -> id Unique document identifier Integer response_text -> name Document name String response_text -> uuid Unique internal identifier of the document. String response_text -> document_type Type of the document uploaded String response_text -> status Status can be any one of the following values: Uploaded, Queued, Extracting, Learning, Complete, Error, or Warning.
See Status , for more information.
String response_text -> document_group Group identifier of the updated document. Integer response_text -> source_url Source of the URL used for uploading the document. String response_text -> source_file Source of the file used for uploading the document. String response_text -> preview_url Preview URL of the updated document. String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file Integer response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for uploading a document to LLaMB:
Use case Request payload Uploading a document using URL
{
"document_group_id": 10xx,
"document": {
"name": "Privacy documents",
"type": "url",
"source": "https://avaamo.ai/privacy-policy/",
"preview_url": "https://avaamo.ai/gdpr-compliance/",
"parsing_template_id": "6",
"attributes": "{\"product\": {\"value\": \"Avaamo\", \"priority\": 0}}"
}
}
Uploading a document using HTML
{
"document_group_id": 10xx,
"document": {
"source": "<title>Terms of Use</title><body><h1>Privacy Policy</h1><p>Avaamo, Inc. ('Avaamo') provides this Privacy Policy to inform you of our policies and procedures regarding the collection, use and disclosure of Personally Identifiable Information that we may obtain through the use of Avaamo products such as Avaamo Platform ('Software'), applications such as Avaamo Messenger ('Application'), and access to www.avaamo.com, referred to as ('Site').</p></body>",
"name": "Terms of Use",
"parsing_template_id": 6,
"type": "html",
"preview_url": "https://avaamo.ai/privacy/"
}
}
Uploading a document using HTML using agent_id and document_group_uuid {
"agent_id": 71xx,
"document_group_uuid": 539axxxx-xxxx-xxxx-xxxx-xxxxxxxxx4d2,
"document": {
"source": "<title>Terms of Use</title><body><h1>Privacy Policy</h1><p>Avaamo, Inc. ('Avaamo') provides this Privacy Policy to inform you of our policies and procedures regarding the collection, use and disclosure of Personally Identifiable Information that we may obtain through the use of Avaamo products such as Avaamo Platform ('Software'), applications such as Avaamo Messenger ('Application'), and access to www.avaamo.com, referred to as ('Site').</p></body>",
"name": "Terms of Use",
"parsing_template_id": 6,
"type": "html",
"preview_url": "https://avaamo.ai/privacy/"
}
}
## Upload different types of files (pdf, docx, pptx, xlsx, csv, html) to LLaMB
{% hint style="info" %}
**Note:**
1. The rate limit for upload-file API is capped to 50 uploads per minute. Contact Avaamo Support with your use-case details if you wish to increase the rate limit for the API.
2. Replace `{{instance-name}}` with your actual instance name, such as `c6,` `h1`.
{% endhint %}
`POST` `https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-file`
#### Headers
Name Type Description access-token* String Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
#### Request Body
Name Type Description document_group_id* Number Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page. See View or edit document groups , for more information.Note: You can use either the document_group_id or a combination of agent_id and document_group_uuid in the request body. Both approaches are supported.
agent_id Number Agent identifier.
You can get the agent identifier from the agent URL.
document_group_uuid String Unique user identifier for the document group.
You can get the document group UUID from the Document group -> View/Edit page. See View or edit document groups , for more information.
name String Name of the file.
Max length: 255 characters.
type String Type of the document.
Supported types: pdf, docx, pptx, xlsx, csv
attributes Key-value Define attributes for the uploaded documents or URLs in your LLaMB skill to facilitate disambiguation or filtering.
Example: "attributes": {"key": "value"}
Attributes can be metadata of the document. You define attributes in key-value pairs. See Document attributes , for more information.
language String This refers to the file's language. If you specify a language during ingestion, LLaMB uses that language to extract the content. If you set auto_detect_language to true, LLaMB automatically detects the document’s language and processes it accordingly. source* String The actual file that you wish to upload. Source is the file path location of the document. preview_url* String Display URL that needs to be opened when the user clicks the source citation link in the response.
Mandatory only for uploading HTML files.
You can get the preview_url from the Document group -> Document -> View/Edit page.
document -> parsing_template_id Integer Specify the parsing template identifier that must be used to parse the document. You can get the identifier from the Parsing template page Default value: The default parsing template identifier is used.
It is recommended to create the parsing template in the Parsing template page and use the parsing_template_id in the API payload.
document -> auto_detect_language String If a user wants to upload a non-English document, LLaMB automatically detects its language if you set it to true.
{% tabs %}
{% tab title="200: OK Successful request" %}
```javascript
{
"MACPIZZA_Policy.pdf": {
"status": true,
"response_text": {
"id": 85xxx,
"name": "MACPIZZA_Policy.pdf",
"uuid": "1b0d1416-xxxx-48df-xxxx-f013e72fce9f",
"document_type": "pdf",
"status": "UPLOADED",
"document_group": 1058,
"source_url": null,
"source_file": "<>",
"preview_url": null,
"document_properties": null,
"parsing_template": 12,
"file_type": "application/pdf",
"last_error": null,
"updated_at": "2024-02-26T08:24:02.771628Z",
"created_at": "2024-02-26T08:24:02.771606Z",
"updated_by": "John Miller"
}
}
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key points**:
* The maximum request size should not exceed 5 MB. Contact Avaamo Support, if the size exceeds the limit.
* You can upload only one file at a time.
* Password-protected PDFs are not supported.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-file' \
--header 'access-token: 8ce05739e61f48829a47xxxxxxxxxxxx' \
--form 'source=@"o5pyxxxxx/MACPIZZA Policy.pdf"' \
--form 'document_group_id="10xx"' \
--form 'type="pdf"'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var fs = require('fs');
var options = {
'method': 'POST',
'url': 'https://cx.avaamo.com/llamb-content-skill/content-ingestion/upload-file',
'headers': {
'access-token': '8ce05739e61f48829a47xxxxxxxxxxxx'
},
formData: {
'source': {
'value': fs.createReadStream('o5pyxxxxx/MACPIZZA Policy.pdf'),
'options': {
'filename': '',
'contentType': null
}
},
'document_group_id': '10xx',
'type': 'pdf'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
{% code overflow="wrap" %}
```json
{
"MACPIZZA_Policy.pdf": {
"status": true,
"response_text": {
"id": 85xxx,
"name": "MACPIZZA_Policy.pdf",
"uuid": "1b0d1416-xxxx-48df-xxxx-f013e72fce9f",
"document_type": "pdf",
"status": "UPLOADED",
"document_group": 1058,
"source_url": null,
"source_file": "<>",
"preview_url": null,
"document_properties": null,
"parsing_template": 12,
"file_type": "application/pdf",
"last_error": null,
"updated_at": "2024-02-26T08:24:02.771628Z",
"created_at": "2024-02-26T08:24:02.771606Z",
"updated_by": "John Miller"
}
}
}
```
{% endcode %}
#### Response Body
Attribute Description Type status true if the document was updated successfully Boolean response_text -> id Unique document identifier Integer response_text -> name Document name String response_text -> uuid Unique internal identifier of the document. String response_text -> document_type Type of the document uploaded String response_text -> status Status can be any one of the following values: Uploaded, Queued, Extracting, Learning, Complete, Error, or Warning.
See Status , for more information.
String response_text -> document_group Group identifier of the updated document. Integer response_text -> source_url Source of the URL used for uploading the document. String response_text -> source_file Source of the file used for uploading the document. String response_text -> preview_url Preview URL of the updated document. String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file Integer response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for uploading a document to LLaMB:
Use case Request payload Uploading a pdf document curl --location 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-file' \
--header 'access-token: 8ce05739e61f48829a47xxxxxxxxxxxx' \
--form 'source=@"o5pyxxxxx/MACPIZZA Policy.pdf"' \
--form 'document_group_id="10xx"' \
--form 'type="pdf"'\
--form 'attribute="{\"country\" : \"Japan\"}"'
Uploading a html file curl --location 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-file'
--header 'access-token: 5b190f6c144xxxxxxxxxxxxxxxxxx'
--form 'source=@"o5pyxxxxx/MACPIZZA Policy.html"'
--form 'document_group_id="6xxx"'
--form 'type="html"'
--form 'preview_url="https://avaamo.ai/privacy/"'
Uploading a html file using agent_id and document_group_uuid curl --location 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/upload-file'
--header 'access-token: 5b190f6c144xxxxxxxxxxxxxxxxxx'
--form 'source=@"o5pyxxxxx/MACPIZZA Policy.html"'
--form 'agent_id="7xxx"'
--form 'document_group_uuid="539axxxx-xxxx-xxxx-xxxx-xxxxxxxxx4d2"'
--form 'type="html"'
--form 'preview_url="https://avaamo.ai/privacy/"'
## Delete the document from the specified document group
`DELETE` `https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/delete-document`
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
User must have at least edit permission on the agent. See Permissions , for more information on agent permissions.
|
| content-type | String | application/JSON |
#### Request Body
| Name | Type | Description |
| ----------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | Integer | Unique identifier of the document group from which you wish to delete a document.
You can get the document group identifier from the Document group -> View/Edit page. See Create document groups , for more information.
|
| document\_id\* | Integer | Unique identifier of the document that you wish to delete from the document group.
You can get the document\_id from the Document group -> Document -> Edit pop-up window. See Edit document , for more information.
|
{% tabs %}
{% tab title="200: OK Successful request" %}
```json
{
"82xxx": {
"status": true,
"response_text": {
"id": null,
"name": "Privacy policy",
"uuid": "1a35c363-xxxx-xxxx-xxxx-aa26b14fc6ef",
"document_type": "url",
"status": "COMPLETE",
"document_group": 10xx,
"source_url": "https://avaamo.ai/privacy-policy/",
"source_file": null,
"preview_url": null,
"document_properties": "",
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2024-02-16T06:02:13.199489Z",
"created_at": "2024-02-16T06:01:07.934949Z",
"updated_by": "John Miller"
}
}
}
```
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request DELETE 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/delete-document' \
--header 'access-token: xxxxxxxxx61f48829a47ccd9xxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{
"document_id": 82xxx,
"document_group_id": 10xx
}'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var options = {
'method': 'DELETE',
'url': 'https://cx.avaamo.com/llamb-content-skill/content-ingestion/delete-document',
'headers': {
'access-token': 'xxxxxxxxx61f48829a47ccd9xxxxxxxx',
'Content-Type': 'application/json',
},
body: '{ \n"document_id": 82xxx,\n"document_group_id": 10xx'
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for uploading a document:
```json
{
"82xxx": {
"status": true,
"response_text": {
"id": null,
"name": "Privacy policy",
"uuid": "1a35c363-xxxx-xxxx-xxxx-aa26b14fc6ef",
"document_type": "url",
"status": "COMPLETE",
"document_group": 10xx,
"source_url": "https://avaamo.ai/privacy-policy/",
"source_file": null,
"preview_url": null,
"document_properties": "",
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2024-02-16T06:02:13.199489Z",
"created_at": "2024-02-16T06:01:07.934949Z",
"updated_by": "John Miller"
}
}
}
```
#### Response Body
Attribute Description Type status true if the document was deleted successfully Boolean response_text -> id Unique document identifier Integer response_text -> name Document name String response_text -> uuid Unique internal identifier of the document. String response_text -> document_type Type of the document uploaded String response_text -> document_properties Document attributes, if any. JSON response_text -> status Status can be any one of the following values: Uploaded, Queued, Extracting, Learning, Complete, Error, or Warning.
See Status , for more information.
String response_text -> document_group Group identifier of the deleted document Integer response_text -> source_url Source of the URL used for uploading the document. String response_text -> source_file Source of the file used for uploading the document. String response_text -> preview_url Preview URL of the deleted document. response_text -> created_at Created datetime of document String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload document Integer response_text -> updated_at Last updated datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
The following table lists a few sample use cases for deleting a document from the `LLaMB Content` skill:
Use case Request payload Delete a document from a document group
{
"document_id": 82xxxx,
"document_group_id": 10xx
}
## Update the document name or document preview URL
`PUT` `https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/update-document`
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| access-token\* | String | Unique access token of the user.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
| content-type | String | application/JSON |
#### Request Body
| Name | Type | Description |
| ---------------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| document\_group\_id\* | Number | Unique identifier for the document group.
You can get the document group identifier from the Document group -> View/Edit page.
See Create document groups , for more information.
|
| document\* | JSON Object | Document object that needs to be updated. |
| document -> name | String | Name of the document.
Max length: 255 characters.
|
| document -> preview\_url | String | URL that needs to be opened when user clicks in the response. See [Create document groups](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/create-document-groups), for more information. |
| document -> document\_id\* | Integer | Unique identifier of the document that you wish to update from the document group.
You can get the document\_id from the Document group -> Document -> Edit pop-up window. See Edit document , for more information.
|
{% tabs %}
{% tab title="200: OK Successful request" %}
```json
{
"https://docs.avaamo.com/user-guide/": {
"status": true,
"response_text": {
"id": 194636,
"name": "Avaamo User Manual",
"uuid": "8459623c-5df4-45ec-bc0c-831c6eaa08e9",
"document_type": "url",
"status": "COMPLETE",
"document_group": 3455,
"source_url": "https://docs.avaamo.com/user-guide/",
"source_file": null,
"preview_url": null,
"document_properties": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2023-07-18T10:49:20.486860Z",
"created_at": "2023-07-18T10:48:06.145736Z",
"updated_by": "John Miller"
}
}
}
```
{% endtab %}
{% tab title="400: Bad Request Bad request indicates payload is wrong" %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request PUT 'https://{{instance-name}}.avaamo.com/llamb-content-skill/content-ingestion/update-document' \
--header 'access-token: xxxxxxxxx61f48829a47ccd9xxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{
"document_group_id": 10xx,
"document": {
"document_id": 82xxx,
"name": "Avaamo Privacy Policy"
}
}'
```
{% endcode %}
{% endtab %}
{% tab title="node.JS" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://cx.avaamo.com/llamb-content-skill/content-ingestion/update-document',
'headers': {
'access-token': 'xxxxxxxxx61f48829a47ccd9xxxxxxxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"document_group_id": 10xx,
"document": {
"document_id": 82xxx,
"name": "Avaamo Privacy Policy"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample API response for updating the document:
```json
{
"82xxx": {
"status": true,
"response_text": {
"id": 82xxx,
"name": "Avaamo Privacy Policy",
"uuid": "f9a5bd9d-xxxx-xxxx-xxxx-581304c847e1",
"document_type": "url",
"status": "COMPLETE",
"document_group": 10xx,
"source_url": "https://avaamo.ai/privacy-policy/",
"source_file": null,
"preview_url": null,
"parsing_template": 6,
"file_type": "url",
"last_error": null,
"updated_at": "2024-02-16T07:04:09.070652Z",
"created_at": "2024-02-16T06:54:20.278755Z",
"updated_by": "John Miller"
}
}
}
```
#### Response Body
Attribute Description Type status true if the document was updated successfully Boolean response_text -> id Unique document identifier Integer response_text -> name Document name String response_text -> uuid Unique internal identifier of the document. String response_text -> document_type Type of the document uploaded String response_text -> status Status can be any one of the following values: Uploaded, Queued, Extracting, Learning, Complete, Error, or Warning.
See Status , for more information.
String response_text -> document_group Group identifier of the updated document. Integer response_text -> source_url Source of the URL used for uploading the document. String response_text -> source_file Source of the file used for uploading the document. String response_text -> preview_url Preview URL of the updated document. String response_text -> created_at Created Datetime of file String response_text -> file_type Type of file uploaded String response_text -> parsing_template Parsing template used to upload file Integer response_text -> updated_at Updated Datetime of file String response_text -> updated_by User who updated the file String last_error Last error encountered with respect to the document String
### Examples
Use case Request payload Update the name of the document
{
"document_group_id": 10xx,
"document": {
"document_id": 82xxx,
"name": "Avaamo Privacy Policy"
}
}
Update the preview URL of the document
{
"document_group_id": 10xx,
"document": {
"document_id": 82xxx,
"preview_url": "https://avaamo.ai/gdpr-compliance/"
}
}
## Document Status
The `Status` can be any of the following values based on the status of the uploaded content:
* **Uploaded:** The document has been added to the skill.
* **Queued:** The content is placed in a queue for further processing.
* **Extracting**: Chunks of content are being extracted.
* **Learning:** Acronyms and vocabulary are being generated.
* **Complete**: The document is uploaded successfully. The extracted knowledge from the document is populated and ready to be used by any agent. See [View and Edit Knowledge](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/view-and-edit-knowledge), for more information.
* **Error**: The upload has errored out. In case of errors, you can click `Error` in the `Status` column to view more details. See [Troubleshooting tips](https://docs.avaamo.com/user-guide/llamb/troubleshooting-tips), for more information.
* **Warning:** No business vocabulary was found in the document.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/content-ingestion.md
# Content ingestion
You can create a quick smart conversational knowledge base by importing any PDF document or from any externally accessible URL using Answers skill. However, if you have an enterprise with a huge knowledge base, then uploading the documents or the URL to the Answers skill can be tedious and time-consuming. See [Add Document or URL](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/add-document-or-url-1), for more information on how to ingest content using PDF documents and URLs to the Answers skill knowledge base.
Instead, you can use this new feature to configure webhooks to push content to Avaamo Platform using the API or run document parsing repo on a system to ingest content.
### How does this work?
{% hint style="info" %}
**Note**: Contact Avaamo Support to start using this feature and for more information on repo access and API documentation.
{% endhint %}
Based on your requirements, you can ingest content in one of the following ways:
* **Document parsing utility**: Most enterprise content websites have sitemaps with indexes and last modified timestamps. The content ingestion utility crawls through the pages provided in the sitemap to create an Answers skill with the knowledge base. This utility can be configured to be run periodically to keep the Answers skill upto date as and when the content is updated in the indexes. Filters can be added to upload content based on certain criteria - for example, to filter content that is only in the English language.
* **Webhooks**: Answers can be set up as an application that can expose its functions using an API call. Those APIs can be configured with a CMS using Webhooks, such that whenever there is any update to the content, the CMS can call the APIs and update the Answers skill.
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources.md
# Content sources
- [SharePoint](/user-guide/datasync-ai/content-sources/sharepoint.md)
- [Pre-requisites](/user-guide/datasync-ai/content-sources/sharepoint/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/datasync-ai/content-sources/sharepoint/step-1-select-the-content-source-type.md): The first step in using DataSync AI, you choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/datasync-ai/content-sources/sharepoint/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/datasync-ai/content-sources/sharepoint/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Select sites](/user-guide/datasync-ai/content-sources/sharepoint/step-2-configure-content-source-and-ingest-content/select-sites.md)
- [Select documents pages and lists](/user-guide/datasync-ai/content-sources/sharepoint/step-2-configure-content-source-and-ingest-content/select-documents-pages-and-lists.md)
- [Set Document Attributes](/user-guide/datasync-ai/content-sources/sharepoint/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [ServiceNow](/user-guide/datasync-ai/content-sources/servicenow.md)
- [Pre-requisites](/user-guide/datasync-ai/content-sources/servicenow/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/datasync-ai/content-sources/servicenow/step-1-select-the-content-source-type.md): The first step in using DataSync AI, you choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/datasync-ai/content-sources/servicenow/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/datasync-ai/content-sources/servicenow/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter Articles](/user-guide/datasync-ai/content-sources/servicenow/step-2-configure-content-source-and-ingest-content/filter-articles.md)
- [Set Document Attributes](/user-guide/datasync-ai/content-sources/servicenow/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Website](/user-guide/datasync-ai/content-sources/website.md)
- [Pre-requisites](/user-guide/datasync-ai/content-sources/website/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/datasync-ai/content-sources/website/step-1-select-the-content-source-type.md): The first step in using DataSync AI, you choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/datasync-ai/content-sources/website/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/datasync-ai/content-sources/website/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter web pages](/user-guide/datasync-ai/content-sources/website/step-2-configure-content-source-and-ingest-content/filter-web-pages.md)
- [Set document attributes](/user-guide/datasync-ai/content-sources/website/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Files](/user-guide/datasync-ai/content-sources/files.md)
- [Pre-requisites](/user-guide/datasync-ai/content-sources/files/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/datasync-ai/content-sources/files/step-1-select-the-content-source-type.md)
- [Step 2: Configure content source and ingest content](/user-guide/datasync-ai/content-sources/files/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/datasync-ai/content-sources/files/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Upload files](/user-guide/datasync-ai/content-sources/files/step-2-configure-content-source-and-ingest-content/upload-files.md)
- [Set document attributes](/user-guide/datasync-ai/content-sources/files/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Confluence](/user-guide/datasync-ai/content-sources/confluence.md)
- [Pre-requisites](/user-guide/datasync-ai/content-sources/confluence/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/datasync-ai/content-sources/confluence/step-1-select-the-content-source-type.md): The first step in using DataSync AI, you choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/datasync-ai/content-sources/confluence/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/datasync-ai/content-sources/confluence/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter Articles](/user-guide/datasync-ai/content-sources/confluence/step-2-configure-content-source-and-ingest-content/filter-articles.md)
- [Set Document Attributes](/user-guide/datasync-ai/content-sources/confluence/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Common actions](/user-guide/datasync-ai/content-sources/common-actions.md)
- [Auto sync](/user-guide/datasync-ai/content-sources/common-actions/auto-sync.md)
- [Sync Now](/user-guide/datasync-ai/content-sources/common-actions/sync-now.md)
- [Upload files](/user-guide/datasync-ai/content-sources/common-actions/upload-files.md)
- [View job details](/user-guide/datasync-ai/content-sources/common-actions/view-job-details.md)
- [Delete job](/user-guide/datasync-ai/content-sources/common-actions/delete-job.md)
- [Email Notifiers](/user-guide/datasync-ai/content-sources/common-actions/email-notifiers.md)
- [Advanced Attributes Handler](/user-guide/datasync-ai/content-sources/common-actions/advanced-attributes-handler.md)
- [View job version history](/user-guide/datasync-ai/content-sources/common-actions/view-job-version-history.md)
- [Actions](/user-guide/datasync-ai/content-sources/common-actions/actions.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/context-management.md
# Context management
Universal agents allow switching of intents mid-way through a dialog from one member agent to another. When multiple-member agents are participating in a conversation, the Universal agent can switch the conversational flow back and forth between the member agents based on the context of the conversation and the requirement of the user - without losing track of the flow.
This ability of the Universal agent to switch contexts between member agents without losing the flow of the conversation and produce the desired outcome is called **Intent switching**.
In the following illustration, a user starts a conversation with a request to update the address.
* This is a Dialog skill in Acme HR agent which is a part of the Universal agent Acme Enterprise.
* However, in the middle of the conversation, the user switches to another intent asking about employee Id. This is a Q\&A skill in Acme IT agent which is also a part of the Universal agent Acme Enterprise.
* You can observe, how the conversations switch seamlessly based on the user intent, and later when the user switches back with the Employee ID, the conversation resumes with the Dialog skill flow in the Acme HR agent.
* The conversation and context are retained without losing track of the flow.

---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context.md
# Context
Context object encapsulates various details of the user’s interaction with the agent at a particular instance in the agent's flow. **Example**: If a user’s intent is "I want to order cheese pan pizza", then broadly, a context object contains details of the user, agent, agent flow, and the intent applicable at that instance in the agent flow. In addition, it also contains details on the insights and history of agent conversation.
### Syntax
A context attribute can be accessed using **${context.<\>}** in a text message or using **context.<\>** in JavaScript.
### Attributes
The following is a sample context JSON object:
{% hint style="info" %}
**Note:** In the JSON structure, ellipses (...) are used for brevity. Refer to individual sections for more information.
{% endhint %}
{% tabs %}
{% tab title="Structure" %}
```yaml
{
"bot_id": 2154,
"bot_layer_id": "fe8ee61c-f039-4cdc-8986-5bebec9edf08",
"conversation_uuid": "1faa40c8253e65aa02bfd02fd8643d35",
"user_uid": "dashboard_admin_test_user_696",
"last_message": "i want to order cheese pan pizza",
"visible_message": "i want to order cheese pan pizza",
"last_message_timestamp": 1566205610480070,
"last_message_custom_properties": {...},
"message_uuid": "807dc584-1703-4b4e-b978-dce52a965e02",
"device_uuid": "30809947-ec9a-4408-93ac-c7523d1f3058",
"bot_name": "Mac Pizza",
"bot_description": "order pizza and more",
"is_validation_user": false,
"phone": [...],
"layer_id": "dashboard_admin_test_user_696",
"last_name": "C",
"first_name": "John",
"custom_properties": {...},
"<>": "https://cx.avaamo.com/v1/getdata.json",
"email": [...],
"location": [...],
"organization": [...],
"money": [...],
"person": [...],
"percent": [...],
"url": [...],
"credit_card": [...],
"datetime": [...],
"datetime_range": [...],
"number": [...],
"entities": {
"<>": [...],
"<>": [...]
},
"stepmain": {
"input": "reset"
},
"variables": {...},
"user": {...},
"constants": {...},
"insights": {...},
"intent_name": "order pizza",
"history": [...],
"is_agent_enabled": true
}
```
{% endtab %}
{% tab title="Example 1 " %}
User query: I am very excited today I want to order pepper pan pizza. Where pepper and pan are both entity slots.
```javascript
{
"bot_id": 4426,
"bot_layer_id": "a5da2d81-9603-4316-beda-a7bb3ee9ebc1",
"conversation_uuid": "e08b4ed471a08fb4e1afae4ced99b4f9",
"user_uid": "dashboard_admin_test_user_12",
"last_message": "I am very excited today I want to order pepper pan pizza",
"visible_message": "I am very excited today I want to order pepper pan pizza",
"last_message_timestamp": 1624871080666740,
"last_message_custom_properties": {},
"text": "I am very excited today I want to order pepper pan pizza",
"message_uuid": "028ee78a-4193-44d0-9e07-c5344e304e7e",
"device_uuid": "907847bf-8f49-4c29-b5ae-0c55cf490347",
"bot_name": "MacPizza",
"bot_description": "order pizza and more",
"is_validation_user": false,
"first_name": "John",
"last_name": null,
"layer_id": "dashboard_admin_test_user_12",
"avatar": false,
"avaamo_id": 22,
"phone": [],
"avatar_updated_at": null,
"custom_properties": {},
"email": [],
"bot_inline_domain_5a3c0eb1-cbae-4167-9b9c-9fb255fe331d": {
"pizza_types": [
"veg"
],
"pizza_toppings": [
"pepper"
],
"pizza_crust": [
"pan"
]
},
"location": [],
"organization": [],
"money": [],
"person": [],
"percent": [],
"url": [],
"credit_card": [],
"datetime": [
1624881600000
],
"datetime_range": [],
"number": [],
"entities": {
"pizza_types": [
"veg"
],
"pizza_toppings": [
"pepper"
],
"pizza_crust": [
"pan"
],
"location": [],
"organization": [],
"money": [],
"person": [],
"percent": [],
"email": [],
"url": [],
"credit_card": [],
"phone": [],
"datetime": [
1624881600000
],
"datetime_range": [],
"number": []
},
"bot_inline_domain_d5fc76f2-03d8-4b06-8df0-3e53a7e28a89": {
"pizza_types": [
"veg"
],
"pizza_toppings": [
"pepper"
],
"pizza_crust": [
"pan"
]
},
"stepmain": {
"input": "reset"
},
"step1": {
"input": "I am very excited today I want to order pepper pan pizza"
},
"variables": {},
"user": {
"first_name": "John",
"last_name": null,
"layer_id": "dashboard_admin_test_user_12",
"avatar": false,
"avaamo_id": 22,
"phone": null,
"avatar_updated_at": null,
"custom_properties": {}
},
"constants": {},
"insights": {
"analyzed_document": "I am very excited today I want to order pepper pan pizza",
"document": "I am very excited today I want to order pepper pan pizza",
"domain_ids": [
13751
],
"entities": [
{
"entity": "pizza_types",
"entity_type": "pizza_types",
"entity_value": "veg",
"domain_key": "bot_inline_domain_5a3c0eb1-cbae-4167-9b9c-9fb255fe331d",
"value": "veg",
"current_value": "pepper",
"index": 39,
"derived_parent": true,
"parent_entity_key": null,
"custom_entity_type": true
},
{
"entity": "pizza_toppings",
"entity_type": "pizza_toppings",
"entity_value": "pepper",
"domain_key": "bot_inline_domain_5a3c0eb1-cbae-4167-9b9c-9fb255fe331d",
"value": "pepper",
"current_value": "pepper",
"index": 39,
"parent_entity_key": "pizza_types",
"custom_entity_type": true
},
{
"entity": "pizza_crust",
"entity_type": "pizza_crust",
"entity_value": "pan",
"domain_key": "bot_inline_domain_5a3c0eb1-cbae-4167-9b9c-9fb255fe331d",
"value": "pan",
"current_value": "pan",
"index": 47,
"custom_entity_type": true
}
],
"featured_tokens": [
"i",
"am",
"very",
"excite",
"today",
"i",
"want",
"to",
"order",
"pepper",
"pan",
"pizza"
],
"featured_tokens_lemma_map": {
"am": "am",
"excited": "excite",
"i": "i",
"order": "order",
"pan": "pan",
"pepper": "pepper",
"pizza": "pizza",
"to": "to",
"today": "today",
"very": "very",
"want": "want"
},
"id": null,
"lemma": "i am very excite today i want to order pepper pan pizza",
"negation": false,
"original_document": "I am very excited today I want to order pepper pan pizza",
"pos": [
[
"i",
"NN"
],
[
"am",
"VBP"
],
[
"very",
"RB"
],
[
"excited",
"JJ"
],
[
"today",
"NN"
],
[
"i",
"VBP"
],
[
"want",
"VBP"
],
[
"to",
"TO"
],
[
"order",
"NN"
],
[
"pepper",
"NN"
],
[
"pan",
"NN"
],
[
"pizza",
"NN"
]
],
"sentiment": "neutral",
"tone": "Surprise",
"raw_document": "I am very excited today I want to order pepper pan pizza",
"bow_normalized_document_with_stopwords": "i very excite datetime want order randomA randomB pizza",
"bow_normalized_document": "excite datetime want order randomA randomB pizza",
"bow_words": [
"want",
"randomb",
"randoma",
"pizza",
"order",
"excite",
"datetime"
],
"normalized_document": "excite datetime want order randomA randomB pizza",
"featured_normalized_tokens": "excite datetime want order randomA randomB pizza",
"normalized_tokens": "excite datetime want order randomA randomB pizza",
"multiIntentEligible": false,
"bow_score": 1,
"entities_already_processed": true,
"intent": "node_intent_node_1",
"intent_name": "MacPizza Order",
"skill_name": "MacPizza Order",
"score": 1,
"es_score": 33.98229,
"confidence_score": 0,
"training_datum_id": 2130273,
"intent_id": 81879,
"intent_type": "INLINE::INTENT",
"bot_key": "macpizza_order",
"skill_key": "macpizza_order",
"intent_key": "1",
"matching_document": "I want to order pepper pan pizza",
"second_best_result": null,
"detected_language": "en-US",
"original_text": "I am very excited today I want to order pepper pan pizza",
"is_transaction": false
},
"response_filters": [],
"intent_name": "MacPizza Order",
"history": [],
"is_agent_enabled": true
}
```
{% endtab %}
{% tab title="Example 2 " %}
User query: I want to travel by air and sea. Where air and sea are both entity slots.
```javascript
{
"bot_id": 32745,
"bot_layer_id": "039db95b-f27b-4ae3-8c89-fc529e32d772",
"conversation_uuid": "bbf0d8d9491049750e87423a0dcb8063",
"user_uid": "dashboard_admin_test_user_368",
"last_message": "I want to travel via both air and sea",
"visible_message": "I want to travel via both air and sea",
"last_message_timestamp": 1624866162245929,
"last_message_custom_properties": {},
"text": "I want to travel via both air and sea",
"message_uuid": "1ff21e25-a452-4739-8e41-94dac2a38e26",
"device_uuid": "83133fee-79b0-497f-bc3d-10e568e05b89",
"bot_name": "Travel assistant",
"bot_description": "Travel assistant",
"is_validation_user": false,
"first_name": "John",
"last_name": "Miller",
"layer_id": "dashboard_admin_test_user_368",
"avatar": false,
"avaamo_id": 30572,
"phone": [],
"avatar_updated_at": null,
"custom_properties": {},
"email": [],
"bot_inline_domain_7447fd52-19d1-493c-b1d1-c4552d5ad7e4": {
"travel_modes_1": [
"air"
],
"travel_modes_2": [
"sea"
]
},
"location": [],
"organization": [],
"money": [],
"person": [],
"percent": [],
"url": [],
"credit_card": [],
"datetime": [],
"datetime_range": [],
"number": [],
"entities": {
"travel_modes_1": [
"air"
],
"travel_modes_2": [
"sea"
],
"location": [],
"organization": [],
"money": [],
"person": [],
"percent": [],
"email": [],
"url": [],
"credit_card": [],
"phone": [],
"datetime": [],
"datetime_range": [],
"number": []
},
"bot_inline_domain_35ff647c-2031-4a4b-a78b-d850e99ee074": {
"travel_modes_1": [
"air"
],
"travel_modes_2": [
"sea"
]
},
"bot_inline_domain_71e3373f-b5f2-4de8-8ef6-d10dcdaf3618": {
"travel_modes_1": [
"air"
],
"travel_modes_2": [
"sea"
]
},
"bot_inline_domain_c60eeee0-4810-41b8-a9ac-bce503abd117": {
"travel_modes_1": [
"air"
],
"travel_modes_2": [
"sea"
]
},
"stepmain": {
"input": "reset"
},
"step3": {
"input": "I want to travel via both air and sea"
},
"variables": {},
"user": {
"first_name": "John",
"last_name": "Miller",
"layer_id": "dashboard_admin_test_user_368",
"avatar": false,
"avaamo_id": 30572,
"phone": null,
"avatar_updated_at": null,
"custom_properties": {}
},
"constants": {},
"insights": {
"analyzed_document": "I want to travel via both air and sea",
"document": "I want to travel via both air and sea",
"domain_ids": [
53292
],
"entities": [
{
"entity_type": "travel_modes",
"entity": "travel_modes_1",
"entity_value": "air",
"current_value": "air",
"domain_key": "bot_inline_domain_7447fd52-19d1-493c-b1d1-c4552d5ad7e4",
"value": "air"
},
{
"entity_type": "travel_modes",
"entity": "travel_modes_2",
"entity_value": "sea",
"current_value": "sea",
"domain_key": "bot_inline_domain_7447fd52-19d1-493c-b1d1-c4552d5ad7e4",
"value": "sea"
}
],
"featured_tokens": [
"i",
"want",
"to",
"travel",
"via",
"both",
"air",
"and",
"sea"
],
"featured_tokens_lemma_map": {
"air": "air",
"and": "and",
"both": "both",
"i": "i",
"sea": "sea",
"to": "to",
"travel": "travel",
"via": "via",
"want": "want"
},
"id": null,
"lemma": "i want to travel via both air and sea",
"negation": false,
"original_document": "I want to travel via both air and sea",
"pos": [
[
"i",
"NN"
],
[
"want",
"VBP"
],
[
"to",
"TO"
],
[
"travel",
"VB"
],
[
"via",
"IN"
],
[
"both",
"DT"
],
[
"air",
"NN"
],
[
"and",
"CC"
],
[
"sea",
"NN"
]
],
"sentiment": "neutral",
"tone": "",
"raw_document": "I want to travel via both air and sea",
"bow_normalized_document_with_stopwords": "want travel via both randomB and randomA",
"bow_normalized_document": "want travel randomB randomA",
"bow_words": [
"want",
"travel",
"randomb",
"randoma"
],
"normalized_document": "want travel randomB randomA",
"featured_normalized_tokens": "want travel randomB randomA",
"normalized_tokens": "want travel randomB randomA",
"multiIntentEligible": true,
"bow_score": 1,
"entities_already_processed": true,
"intent": "node_intent_node_1",
"intent_name": "Book Travel",
"skill_name": "Book Travel",
"score": 1,
"es_score": 44.024994,
"confidence_score": 0,
"training_datum_id": 2187561,
"intent_id": 272933,
"intent_type": "INLINE::INTENT",
"bot_key": "book_travel",
"skill_key": "book_travel",
"intent_key": "1",
"matching_document": "I want to travel via both air and sea",
"detected_language": "en-US",
"original_text": "I want to travel via both air and sea",
"is_transaction": false
},
"response_filters": [],
"intent_name": "Book Travel",
"history": [],
"is_agent_enabled": true
}
```
{% endtab %}
{% endtabs %}
The following attributes are supported in the context object:
Attribute Description Type bot_id Indicates a unique identifier of the agent. Integer bot_layer_id Indicates a unique agent identifier internally used by the Avaamo platform. String conversation_uuid Indicates a unique identifier of conversation per user. Note that conversation/uuid is different for each user. String user_uid Indicates a unique identifier of the user interacting with the agent. String last_message Indicates the last message sent to the agent. For form fields, you can access last_message in one of the following ways:
context.last_message.ID context.last_message["ID"] context.last_message[expression] Note that context.last_message can store any valid Javascript object.
Examples :
// context.last_message.ID
context.last_message.da83d;
// context.last_message["ID"]
context.last_message["3a62c2"];
// context.last_message[expression]
var control = "3a62c2";
context.last_message[control];
See Card , for more details.
String visible_message Indicates the last visible message sent to the agent. Note that in case of hidden messages, visible and last messages can be different. String last_message_timestamp Indicates timestamp of the last message sent by the user to the agent in milliseconds. UTC Timestamp last_message_custom_properties Indicates any additional user properties specified in the last message.
Example :
"custom_properties": {
"employee_id":12345,
"dept":"quality"
},
JSON key-value pairs message_uuid Indicates a unique identifier of the message. String device_uuid Indicates a unique identifier of the device from which the agent is being used. String bot_name Indicates the name of the agent specified during creation. String bot_description Indicates the description of the agent specified during creation. String is_validation_user Indicates if queries posted to the agent are from an actual user or from regression tests. Returns true, if the queries posted to the agent are from regression tests. Boolean phone Indicates an array of phone numbers of the user interacting with the agent.
Example : phone["+16503835663", "+919999988888"].
Array layer_id Indicates a unique user identifier internally used by the Avaamo platform. String last_name Indicates the last name of the user interacting with the agent. String first_name Indicates the first name of the user interacting with the agent. String custom_properties Indicates any additional user properties specified when sending requests to the agent.
Example :
"custom_properties": {
"employee_id":12345,
"dept":"quality"
},
NOTE: If you have set custom user properties, then you can use context.user.custom_properties.<> to get the value of the set property.
JSON key-value pairs environment variables Indicates the environment variables configured in your agent. JSON key-value pairs email Indicates an array of email Ids of the user interacting with the agent.
Example : email["john@gmail.com", "john@hotmail.com"]
Array location, organization, money, person, percent, URL, credit_card, DateTime, datetime_range, number Indicates all the system entities that are predefined and available for all the agents. Note that values for these are populated as applicable during the execution of a user’s intent in the agent flow. Array entities -> <<slot_name>> Indicates slot names extracted and applicable during the execution of a user’s intent in the agent flow. JSON with an array of slot_name as key-value pairs step<<node>> Indicates the steps in the agent flow for which the user’s intent is executed. There can be multiple steps and each is specified as individual JSON key-value pairs.
<<node>> here refers to main for starting step or a specific node number. Example:
"step14": {
"input": "i want to order cheese pan pizza"
},
JSON key-value pairs variables Indicates the temporary variables that are defined to store information required for the agent flow at a particular node. JSON key-value pairs user Indicates the details of the user interacting with the agent. JSON key-value pairs constants Indicates environment variables constants defined for the agent. These environment variables are global for all users of the agent.
Examples : External service access credentials like web service login credentials, webservice_username, webservice_password.
JSON key-value pairs insights Indicates insights into how the user’s intent was analyzed and matched in the agent flow. JSON key-value pairs history Indicates the history of the message such as created date and time, actual message, and the sender of the message generated during the execution of the user’s intent in the agent flow. JSON with an array of entity_name as key-value pairs intent_name Indicates the name of the intent that mapped to the user query. String is_agent_enabled Indicates if the live agent is enabled or not for the agent. Boolean
### When is the context reset?
* By default, the context is reset at the leaf node of the Dialog skill. However, if you wish to retain certain values, then you can consider using other storage options depending on the use case. See [Use storage](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/using-storage), for more information.
* If you wish to reset context in a non-leaf node, then you can use the **Reset Context** slider in the Skill Response -> Advanced Settings. See [Reset Context in Advanced Settings](https://docs.avaamo.com/user-guide/how-to/build-skills/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings#reset-context), for more information.
* Note that when you use `execute intent, goto node, or goto output`from the leaf node, then the context is not reset as the agent is still in the same transactional flow and context. Example: Consider that in the last post-processing node of the Pizza order flow, you have specified `return execute_intent('main','I want to check my order status')`. When the specified intent is executed at the transferred node, the previous context is still available.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/controlling-skill-flow.md
# Control skill flow
You can use functions such as goto\_node, goto\_intent, execute\_intent, or goto\_output in the JS while building a skill flow for navigating to different nodes in the flow, based on your business requirements. See [Flow control](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control), for more information.
Consider that at the end of placing a pizza order, you wish to navigate to another node that provides options to place order starters in the Order skill of the MacPizza agent. At the end of taking the order details,
* You can add a JS node with **return goto\_node('<\>.<\>')** and navigate to the required node. See [Flow control](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control), for more information.
* You can also specify the same suing **Goto Skill Message** in the **Advanced Settings** of the response node. See [Advanced Settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information.

In the agent, the navigation is displayed as follows:

Similarly, you can use JS in post-processing for navigating to different nodes in the flow based on your business requirements. See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information on post-processing.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/conversation-history.md
# Source: https://docs.avaamo.com/user-guide/debug/conversation-history.md
# Conversation history
The **Conversation history** page displays the records of the agent and all of its user interactions for the selected agent.
* Click any conversation to see the details. In the URL, you can also see a unique identifier for the conversation. This is referred to as conversation\_uuid. You can use this in APIs. See [Conversation API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/conversation-message-api), for an example.
* You can search through history to find specific conversations, messages, and users.
{% hint style="info" %}
**Notes**:
* Currently, list view responses are not displayed in the conversation history.
* Conversation history is not real-time, and it may take up to 2 minutes for the Conversation history to be updated.
{% endhint %}
The **Conversation history** page includes a search bar, agent profile icon, and user profile icon.
### Search bar
You can use the **Search** bar to search through conversation titles and message content. This helps you narrow down user queries and the agent’s response to the query.
#### Conversations
Each conversation in the **Conversation history** page is grouped by user name. You can search for conversations related to a specific user by entering the user name in the search bar. All the conversation for the user or message containing the user name is displayed in the result.
#### Messages
You can search the conversation history with messages. These messages can be user queries or the agent's response. To search with a message, type the message content in the search bar.
All the messages with the searched message content are displayed. Click the message to view the details and the conversations.
Note that if you have deployed your agent in C-IVR or Phone channel, then the user responses are available as audio files in the **Conversation history**.
#### **Conversation Transcript and Audio Playback**
The transcript feature provides a comprehensive view of the conversation between the user and the agent, available at the bottom of the conversation history. It covers both text and voice interactions, helping you clearly understand the flow and context of each conversation.
For voice conversations, an audio recording is also available alongside the written transcript. You can play the audio directly within the interface to gain deeper insights into the interaction, which is especially useful when tone or pronunciation needs to be reviewed.
This feature is valuable not only for understanding conversations but also for debugging and troubleshooting purposes. By reviewing both the transcript and the audio, you can easily identify any discrepancies, misinterpretations, or technical issues that may have occurred during the conversation, leading to faster resolution and improved user experiences.
Additionally, the session end reason is displayed at the bottom of the transcript, offering further context for analyzing why the conversation concluded.
### Agent profile icon
The agent profile icon button allows you to edit the profile and change the view of the conversation history page. You can perform the following actions:

* View the agent avatar by clicking the profile option.
* Change the outlook of the **Conversation history** page by clicking the **Compact view** option.
* Logs you out from the Avaamo platform dashboard.
### User icon
You can view the details of a user in the conversation by clicking the user profile icon:

* The email address and other custom user authentication details are provided in the **Custom user authentication handler** and **Returning user message handler**. See [Define settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings), for more information.
* The channel through which the user interacted with the agent.
* The link for the agent.
* The location of the user's IP.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/conversation-message-api.md
# Conversation API
## Get conversation summary
`GET` `https://cx.avaamo.com/v1/conversations/{{conversation_uuid}}.json`
Gets the summary of a conversation using Conversation API. In the conversation summary, you can learn about the participants involved in the conversation and the last message of the conversation.
#### Path Parameters
| Name | Type | Description |
| ---------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| conversation\_uuid\* | integer | Conversation identifier.
You can get the conversation identifier from the Conversation history URL or from the Get Messages API or from the message object when you are using the Avaamo.onBotMessage callback function in the Web channel.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Device-Id\* | number | Currently, this can be any random number such as 12345678. |
| access-token\* | string | The agent access token. You can get the agent access token from the Agent -> Settings page. See [Agent Authentication Keys](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings#agent-authentication-keys), for more information |
{% tabs %}
{% tab title="200 " %}
```javascript
{
"conversation": {
"uuid": "9e2484a9be77d54ef1b0b668231cc065",
"mode": false,
"members_type": 2,
"avatar": false,
"name": null,
"created_at": 1582707000.0,
"user": null,
"receivers": [
{
"first_name": "MacPizza",
"last_name": "",
"layer_id": "a1148a3e-58ce-4cc6-9ea6-2c2d7b092730",
"phone": null,
"email": null,
"avaamo_id": 3344,
"avatar": false,
"avatar_updated_at": null,
"custom_properties": {},
"display_name": "MacPizza ",
"bot_user_info": []
},
{
"first_name": "David",
"last_name": "Miller",
"layer_id": "dashboard_admin_test_user_163",
"phone": null,
"email": null,
"avaamo_id": 1380,
"avatar": false,
"avatar_updated_at": null,
"custom_properties": {
"email": "david@avaamo.com"
},
"display_name": "David Miller",
"bot_user_info": [
{
"key": "email",
"bot_id": null,
"value": "david@avaamo.com"
}
]
}
],
"avatar_updated_at": null,
"description": null,
"last_message": {
"uuid": "923cd3d7-3ecb-4aab-939c-2877406cb17a",
"content": "Currently, you can place only online orders. Visit, www.macpizza.com, for more information.",
"content_type": "text",
"created_at": 1586255204.153764,
"user": {
"first_name": "MacPizza",
"last_name": "",
"layer_id": "a1148a3e-58ce-4cc6-9ea6-2c2d7b092730",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 3344
},
"timetoken": 1586255204140986,
"external_source": null,
"device_uuid": "3c163171-9bec-492f-8448-685e9bfeffbc",
"request_message_uuid": "2ac5917f-16d1-431f-883d-0a1c9d255658",
"sequence": "1/1",
"custom_properties": {
},
"agent_message_uuid": null,
"read_acks": [
{
"read_at": 1586255204.0,
"user": {
"first_name": "David",
"last_name": "Miller",
"layer_id": "dashboard_admin_test_user_163",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 1380
}
}
],
"attachments": [],
"conversation": {
"uuid": "9e2484a9be77d54ef1b0b668231cc065",
"mode": false,
"display_name": "MacPizza,David",
"locale": null
}
},
"members_count": 2
}
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/v1/conversations/xxxxxxae172c539696ff6f4f67xxxxxx.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Device-Id: 12345667' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/v1/conversations/xxxxxxae172c539696ff6f4f67xxxxxx.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Device-Id': '12345667',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### **Response attributes**
In the response, the following attributes are returned:
Attribute Description Type uuid Indicates the page from which the entries are fetched. Integer created_at Indicates the number of entries fetched per page. Integer receivers Indicates the details of the participants in the conversation.
This is an array of two -
One with the details of the user and another the details of the agent in the conversation.
JSON key-value pairs last_message Indicates the details of the last message in the specified conversation. JSON key-value pairs
#### receivers
Indicates the details of the participants in the conversation. This is an array of two - one with the details of the user and another with the details of the agent in the conversation.
Attribute Description Type
first_name
Indicates the first name of the user or agent participating in the conversation. String last_name Indicates the last name of the user participating in the conversation. For agents, this field is null. String layer_id Indicates a unique user or agent identifier internally used by the Avaamo Platform. String phone Indicates an array of phone numbers of the user interacting with the agent. Array email Indicates the email of the user interacting with the agent. String custom_properties Indicates any additional custom properties of the user interacting with the agent.
Example :
"custom_properties": {
"employee_id":12345,
"dept": "quality"
},
JSON key-value pairs display_name Indicates the display name of the user participating in the conversation. String
#### **last\_message**
Indicates the last message of the specified conversation:
Attribute Description Type uuid Indicates a unique identifier of the message. String content Indicates the content of the message. String content_type Indicates the type of content such as text, ListView, card String created_at Indicates the timestamp of when the message was created in seconds. UNIX epoch timestamp user Indicates the details of the user interacting with the agent.
phone : Indicates an array of phone numbers of the user interacting with the agent.layer_id : Indicates a unique user identifier internally used by the Avaamo Platform.last_name : Indicates the last name of the user interacting with the agent.first_name : Indicates the first name of the user interacting with the agent.email : Indicates the email of the user interacting with the agent.JSON key-value pairs timetoken Indicates the created timestamp of the message in milliseconds. UNIX epoch timestamp device_uuid Indicates a unique identifier of the device from which the agent is being used. String request_message_uuid Indicates the message identifier from the agent to which this conversation is linked to. String sequence Indicates the sequence of the agent response message. There can be multiple responses for a user query, each identified with the request_message_uuid and sequence. Note that the request_message_uuid is the same for each agent response. <<message_sequence>>/<<total message> custom_properties Indicates any additional user properties in the fetched message.
Example :
"custom_properties": {
“employee_id”:12345,
“dept”: “quality”
},
JSON key-value pairs read_acks Indicates the details of when the message was read and acknowledged.
read_at : Indicates the read timestamp of the message in UNIX epoch format.user : Indicates the details of the user who acknowledged the message.An array of JSON key-value pairs attachments Indicates an array of attachments that is fetched from the agent message. JSON key-value pairs conversation Indicates the conversation details of the message:
uuid : Indicates a unique identifier of the conversation.display_name : Indicates display name of the conversation in the following format: <<Agent Display Name>>, <<User First Name>>.locale : Indicates the locale used in the agent conversation.JSON key-value pairs
## Get conversation messages
`GET` `https://cx.avaamo.com/v1/conversations/{{conversation_uuid}}/messages.json`
Gets the complete message details of a specific user conversation using Conversation Message API. \
All the conversation with an Avaamo agent has a conversation uuid associated with the conversation. In the message details, you can learn about the actual message content, type, identifier, and details of when the message was read and acknowledged.
#### Path Parameters
| Name | Type | Description |
| ---------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| conversation\_uuid\* | integer | You can get the conversation identifier from the Conversation history URL or from the Get Messages API or from the message object when you are using the Avaamo.onBotMessage callback function in the Web channel.
|
#### Query Parameters
| Name | Type | Description |
| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| since\_timetoken | number | Timestamp from which the records are fetched. If you specify timetoken and not since\_timetoken, then the latest 5 entries up to the specified timetoken are fetched. Specify UNIX Epoch Timestamp in microseconds.
|
| timetoken | number | Timestamp until which the records are fetched. The default value is the current timestamp. Specify UNIX Epoch Timestamp in microseconds. |
| page | integer | Page from which the entries must be fetched. The default value is 1. |
| per\_page | integer | The number of entries fetched per page. Default value: 25
Maximum: 100
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Device-Id\* | string | Currently, this can be any random identifier such as 12345678. |
| access-token\* | string | The agent access token. You can get the agent access token from the Agent -> Settings page. See [Agent Authentication Keys](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings#agent-authentication-keys), for more information. |
{% tabs %}
{% tab title="200 " %}
```javascript
{
"current_page": 1,
"per_page": 1,
"total_entries": 66,
"total_pages": 66,
"time_token": 1586147024.9868526,
"entries": [
{
"uuid": "251c8106-2e06-422c-9495-11c9878b9289",
"content": "Chez MacPizza, nous avons utilisé des ingrédients biologiques fraîchement préparés dans toutes nos recettes.",
"content_type": "text",
"created_at": 1582737781.470828,
"user": {
"first_name": "MacPizza",
"last_name": "",
"layer_id": "a1148a3e-58ce-4cc6-9ea6-2c2d7b092730",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 3344
},
"timetoken": 1582737781457202,
"external_source": null,
"device_uuid": "3c163171-9bec-492f-8448-685e9bfeffbc",
"request_message_uuid": "f6850f78-a869-403c-b765-20b546343ea6",
"sequence": "1/1",
"custom_properties": {},
"agent_message_uuid": null,
"read_acks": [
{
"read_at": 1582737781.0,
"user": {
"first_name": "David",
"last_name": "Miller",
"layer_id": "dashboard_admin_test_user_163",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 1380
}
}
],
"attachments": [],
"conversation": {
"uuid": "9e2484a9be77d54ef1b0b668231cc065",
"mode": false,
"display_name": "MacPizza,David",
"locale": null
}
}
]
}
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/v1/conversations/7db4d0ae172c539696ff6f4f676f2222/messages.json?page=2&per_page=55' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Device-Id: 12345667' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/v1/conversations/xxxxxxae172c539696ff6f4f67xxxxxx/messages.json?page=2&per_page=55',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Device-Id': '12345667',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the agent messages. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp entries Indicates an array of messages fetched from the agent.
The number of entries in the array = Number specified in the per_page parameter.
JSON key-value pairs
#### **entries**
Indicates an array of messages fetched from the agent. Each array contains the following attributes:
Attribute Description Type uuid Indicates a unique identifier of the message. String content Indicates the content of the message. String content_type Indicates the type of content such as text, ListView, card String created_at Indicates the timestamp of when the message was created in seconds. UNIX epoch timestamp user Indicates the details of the user interacting with the agent.
phone : Indicates an array of phone numbers of the user interacting with the agent.layer_id : Indicates a unique user identifier internally used by the Avaamo Platform.last_name : Indicates the last name of the user interacting with the agent.first_name : Indicates the first name of the user interacting with the agent.email : Indicates the email of the user interacting with the agent.JSON key-value pairs timetoken Indicates the created timestamp of the message in milliseconds. UNIX epoch timestamp device_uuid Indicates a unique identifier of the device from which the agent is being used. String request_message_uuid Indicates the message identifier from the agent for which this conversation is linked to. For a live agent conversation message, request_message_uuid is null. String sequence Indicates the sequence of the agent response message. There can be multiple responses for a user query, each identified with the request_message_uuid and sequence. Note that the request_message_uuid is the same for each agent response. <<message_sequence>>/<<total message> custom_properties Indicates any additional user properties in the fetched message.
Example :
"custom_properties": {
“employee_id”:12345,
“dept”: “quality”
},
JSON key-value pairs agent_message_uuid Indicates the unique identifier for a live agent conversation. String read_acks Indicates the details of when the message was read and acknowledged.
read_at : Indicates the read timestamp of the message in UNIX epoch format.user : Indicates the details of the user who acknowledged the message.An array of JSON key-value pairs attachments Indicates an array of attachments that is fetched from the agent message. JSON key-value pairs conversation Indicates the conversation details of the message:
uuid : Indicates a unique identifier of the conversation.display_name : Indicates display name of the conversation in the following format: <<Agent Display Name>>, <<User First Name>>.locale : Indicates the locale used in the agent conversation.JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get the latest message of a user conversation per_page : Specify 1 to get the latest message.
Example : https://cx.avaamo.com/v1/conversations/
<<conversation_uuid>>/messages.json?per_page=1
Get messages of a user conversation within a specified period since_timetoken : Specify the from timestamp in epoch format such as 1569229247677821
timetoken : Specify the to timestamp in epoch format such as 1569229251418739.
Example :
https://cx.avaamo.com/v1/conversations/
<<conversation_uuid>>/messages.json?since_timetoken=1569229247677821&timetoken=1569229251418739
Get messages of a user conversation using pagination page : Specify the page from which you wish to fetch records.
per_page : Specify the number of entries per page.
Example : https://cx.avaamo.com/v1/conversations/
<<conversation_uuid>>/messages.json?page=5&per_page=2
---
# Source: https://docs.avaamo.com/user-guide/configuration/channels/conversational-ivr-c-ivr-or-phone.md
# Conversational IVR (C-IVR) or Phone
You can deploy the agents built on the Avaamo Platform into your phone channel. This allows callers to converse naturally with agents via interactive voice responses (IVR) to achieve the desired results without having to navigate lengthy audio menus. This feature can help to reduce live-agent calls, improve call routing, and provide a good user experience.
**To configure a C-IVR channel:**
After a successful configuration, a phone number is generated in the **Activated phone number** area, and this is the number that can be used to connect to your agent via the C-IVR channel.
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in the C-IVR Channel.
* Specify the following channel setting details:
Parameter Descriptions Name Indicates the Name used to identify the C-IVR channel. Note that you can have upto 150 characters in the channel name. Languages and
Playback Voice for
Select the language and configure the voice or the persona to be used by your agent in the interactive phone conversations with the user. Each language has a different set of voice personas that you can choose from. Select the persona from the options provided in the "Playback voice for <<language>>" section:
As with any enterprise voice, audio, or video application, each region or country has its phone number to dial. Similarly, in the C-IVR channel, you choose the language of the region or country where you wish to share the configured number. If you wish to share the number in multiple regions, then set up the C-IVR channel specific to each language. Note that one C-IVR channel is specific to only one language. To hear the voice preview, type any text in the text area and click the play button. You can also download the voice preview if required. You can select only those languages for which the agent is configured and those that are supported in the C-IVR channel. If you have switched to a language that is not supported in the C-IVR channel, then the agent responds in the default language. See Add languages and Supported languages , for more information.
Live agent transfer mode Defines how a live agent is invited into the conversation when escalation is required. Supports Invite (conference style where the bot stays in the call) or Refer (the call is handed over to the agent directly). ASR Configuration Allows selection of the Automatic Speech Recognition (ASR) provider version for speech-to-text processing. Available options are V1, V2, V3, V4, V5, V6 . Choose the version based on performance and compatibility. Enable Noise Filter When enabled, background noise is filtered out during user input. This improves recognition accuracy by reducing interference from non-speech sounds. Fallback Forward Configuration Defines the backup handling flow when the AI agent cannot process the user’s request. The request is forwarded to the specified destination along with the required headers. Forward Destination Specifies the phone number to which incoming calls will be forwarded. Forward Headers Custom headers to be included while forwarding the request. Headers should be specified in JSON object format. Speech timeout Indicates a maximum wait time of the agent within which a user response is expected. If the user response is not received within the time-out period, then an automated message is rendered back to the user indicating that the agent is awaiting the user response. Currently, this is a standard message and cannot be customized.
The default value is 1 second. Use the up and down arrows to increase or decrease time as required. SMS message options Enable this option and specify a message, if you wish to send an SMS message to the caller when the call gets disconnected and/or when the call is completed. Specify the SMS text message in the respective options as required. Note that a single SMS can have upto 150 characters. Send an SMS after completion of call Enable this option and specify a message, if you wish to send an SMS message to the caller when the call is completed. Note that a single SMS can have upto 150 characters. If a call is hung up after a successful dialogue between the user and the agent, that is a user asks a query and the agent responds back to the query, then it is considered as complete. Send an SMS if call disconnects Enable this option and specify a message if you wish to send an SMS message to the caller when the call gets disconnected. Note that a single SMS can have up to 150 characters. A call is considered disconnected when the user asks a query and, before the agent's response is received, the call is hung up. This is the case when the user is between conversation flows. Enable custom user authentication Use this if you wish to enable custom authentication for your agents deployed on the phone channels using JavaScript code. See User authentication handler , for more information. Enable wait time tone Use this option if you wish to play an idle tone to the user in case the agent is taking a little longer to respond.
Rather than experiencing silence or a lack of input, the introduction of a tone serves to engage the user actively and assures that the agent will respond shortly. For example, the system generates a typing tone when processing DTMF/keypad input.
Select file Once you enable the wait time tone, the option to upload a file becomes available. You can customize the wait time tone by uploading an audio file that plays an idle tone for the user. The file must not exceed 10 seconds and should be within 5 MB in size.
Click Select File , then choose and upload the desired file for the wait time tone.
Enable warmup message Enables playback of a static message at the start of a phone call to mask call setup latency. After enabling this option, you must specify the message text to be played. Enabling the toggle alone does not play any message. The configured message is played while the call setup continues in the background. Supported only for the Phone (C-IVR) channel and compatible with multiple TTS providers.
* Click **Save** to save the C-IVR channel configuration details. A phone number is generated in the **Activated phone number** area, and this is the number that can be used to connect to your agent.

{% hint style="success" %}
**Key Points**:
* After successfully saving the C-IVR configuration, you have the option to add "Agent voice", "Voice menu", and "Voice hints" to the agent responses. See [Build skill responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses) and [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information.
* If you have deployed your agent in the C-IVR or Phone channel and masking is enabled, then the audio files from the user responses are not available in the conversation history, since it can contain PII data. See [Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for information.
* You can also enable custom voice for your C-IVR agents in the Avaamo Platform. Contact Avaamo Support for more information.
{% endhint %}
Refer [Conversational IVR (C-IVR) or Phone](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/conversational-ivr-c-ivr-phone), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/conversational-ivr-c-ivr-phone.md
# Conversational IVR (C-IVR) or Phone (change needed)
You can deploy the agents built on the Avaamo Platform into your phone channel. This allows the callers to converse naturally with the agents via interactive voice responses (IVR) to get the desired results without having to navigate long audio menus. This feature can help to reduce live-agent calls, improve call routing, and provide a good user experience.
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance. Note that only the web channel is enabled by default.
{% endhint %}
When you deploy your agents on the Avaamo platform, you can also add multiple languages for your agent's response, specify the timeout seconds, and choose the SMS option on call completion or when the call gets disconnected.
In this article, the following steps are detailed:
1. [Before you begin](#before-you-begin)
2. [Configure C-IVR channel](#configure-c-ivr-channel)
3. [Test C-IVR channel](#test-c-ivr-channel)
4. [Manage channel settings](#manage-c-ivr-channel)
5. [Frequently asked questions](#frequently-asked-questions)
## Before you begin
Ensure that you have the C-IVR channel enabled for your account. If it is not enabled for your account, contact Avaamo Support for further assistance
## Configure C-IVR channel
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can deploy the agent to a channel after creating and building an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing**.**
{% endhint %}
**To configure a C-IVR channel:**
After a successful configuration, a phone number is generated in the **Activated phone number** area and this is the number that can be used to connect to your agent via the C-IVR channel.
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in the C-IVR Channel.
* Specify the following channel setting details:
Parameter Descriptions Name Indicates the Name used to identify the C-IVR channel. Note that you can have upto 150 characters in the channel name. Languages and
Playback Voice for
Select the language and configure the voice or the persona to be used by your agent in the interactive phone conversations with the user. Each language has a different set of voice personas that you can choose from. Select the persona from the options provided in the "Playback voice for <<language>>" section:
As with any enterprise voice, audio, or video application, each region or country has its phone number to dial. Similarly, in the C-IVR channel, you choose the language of the region or country where you wish to share the configured number. If you wish to share the number in multiple regions, then set up the C-IVR channel specific to each language. Note that one C-IVR channel is specific to only one language. To hear the voice preview, type any text in the text area and click the play button. You can also download the voice preview if required. You can select only those languages for which the agent is configured and those that are supported in the C-IVR channel. If you have switched to a language that is not supported in the C-IVR channel, then the agent responds in the default language. See Add languages and Supported languages , for more information.
Speech timeout Indicates a maximum wait time of the agent within which a user response is expected. If the user response is not received within the time-out period, then an automated message is rendered back to the user indicating that the agent is awaiting the user response. Currently, this is a standard message and cannot be customized.
The default value is 1 second. Use the up and down arrows to increase or decrease time as required. SMS message options Enable this option and specify a message, if you wish to send an SMS message to the caller when the call gets disconnected and/or when the call is completed. Specify the SMS text message in the respective options as required. Note that a single SMS can have upto 150 characters. Send an SMS after completion of call Enable this option and specify a message, if you wish to send an SMS message to the caller when the call is completed. Note that a single SMS can have upto 150 characters. If a call is hung up after a successful dialogue between the user and the agent, that is a user asks a query and the agent responds back to the query, then it is considered as complete. Send an SMS if call disconnects Enable this option and specify a message, if you wish to send an SMS message to the caller when the call gets disconnected. Note that a single SMS can have upto 150 characters. A call is considered disconnected when the user asks a query and before the agent response is received the call gets hung up. This is the case when the user is in between a conversation flow. Enable custom user authentication Use this if you wish to enable custom authentication for your agents deployed on the phone channels using JavaScript code. See User authentication handler , for more information. Enable wait time tone Use this option if you wish to play an idle tone to the user in case the agent is taking a little longer to respond.
Rather than experiencing silence or a lack of input, the introduction of a tone serves to engage the user actively and assures that the agent will respond shortly. For example, the system generates a typing tone when processing DTMF/keypad input.
Select file Once you enable the wait time tone, the option to upload a file becomes available. You can customize the wait time tone by uploading an audio file that plays an idle tone for the user. The file must not exceed 10 seconds and should be within 5 MB in size.
Click Select File , then choose and upload the desired file for the wait time tone.
* Click **Save** to save the C-IVR channel configuration details. A phone number is generated in the **Activated phone number** area and this is the number that can be used to connect to your agent.

{% hint style="success" %}
**Key Points**:
* After you save the C-IVR configuration successfully, you get options to add "Agent voice", "Voice menu", and "Voice hints" to the agent responses. See [Build skill responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses) and [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information.
* If you have deployed your agent in the C-IVR or Phone channel and masking is enabled, then the audio files from the user responses are not available in the conversation history, since it can contain PII data. See [Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for information.
* Currently, you cannot [transfer to a live agent](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent) that is configured in the Avaamo Platform from the C-IVR channel. Instead, it is recommended that you use [Call forward](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#call-forward) for connecting to live agents.
* You can also enable custom voice for your C-IVR agents in the Avaamo Platform. Contact Avaamo Support, for more information.
{% endhint %}
## Test C-IVR channel
After you save your C-IVR channel configuration settings, you can test the C-IVR channel using Agent Simulator from the bottom-right corner of the page. See [Agent simulator](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/simulator), for more information.

If you select the IVR / Phone option, then C-IVR activated phone number is displayed with a phone icon.

Click the phone icon to dial the activated phone number and test your conversation flow. Click transcripts to further know how your agent is interpreting the responses from the user.

## Manage channel settings
{% hint style="info" %}
**Note**: When you re-deploy a C-IVR channel, a new number is assigned and the existing phone number is removed from the channel.
{% endhint %}
After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirements. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
You can also deploy your agent through multiple C-IVR channels simultaneously. On the Channels page, click **Connect** in the C-IVR channel and follow the steps in [Configure C-IVR Channel](#configure-c-ivr-channel) to deploy your agent into another custom channel.
## Frequently asked questions
### 1. How to improve the accuracy or recognition of speech in the C-IVR channel?
You can specify certain keywords or phrases in the **Voice hints** that can provide better interpretation or recognition of the user response in the conversational IVR interaction. Providing voice hints can significantly improve user interaction with your agent. When you add voice hints, the agent gives preference to the phrases provided in the hints when interpreting the user responses. This helps you to redirect the conversational flow smoothly. See [Voice hints](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/voice-hints), for more information.
### 2. How is the PII (Personally identifiable information) data masked if my agent is deployed in the C-IVR channel?
If you have deployed your agent in the C-IVR or Phone channel and masking is enabled, then the audio files from the user responses are not available in the conversation history, since it can contain PII data.
### 3. The agent is not recognising my response. What should I do?
In cases where you are unable to receive the expected agent response, refer to the following troubleshooting tips:
* Use the Agent simulator -> Chat transcripts to know how your agent is interpreting the responses from the user. See [Test C-IVR channel](#test-c-ivr-channel), for more information.
* Try adding Voice hints and check if that helps in improving the recognition of the user responses. You can add [Voice hints at the agent level](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-voice-settings) and also for a node at the Dialog skill in the [Advanced settings -> Voice hints section](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings#voice-hints).
### 4. I am unable to transfer to a live agent from the C-IVR channel. What can I do?
Currently, you cannot [transfer to a live agent](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent) that is configured in the Avaamo Platform from the C-IVR channel. Instead, it is recommended that you use [Call forward](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#call-forward) for connecting to live agents.
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/agent-assist-widget/conversations-view.md
# Conversations View
In the `Conversations` view, you can review both current and past call conversations, including the transcript and a summary of completed calls.
This displays the last 10 calls you handled and key details such as the associated ticket (interaction or case) number and related CMS (e.g., ServiceNow). You can click on any conversation to be redirected to its detailed summary.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/create-a-new-dynamic-q-and-a-skill.md
# Create a new Dynamic Q\&A skill
Based on your requirement, you can either start by creating a new Dynamic Q\&A skill from scratch or by importing from any one of the available skills. See [Import skill](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills), for more information.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent), for more information.
* If you wish to edit an agent, then navigate to the Agents tab in the top menu, search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
* You can apply the Outro messages to the Dynamic Q\&A skill. Refer [Global Outro skill](https://docs.avaamo.com/user-guide/build-agents/add-skills-to-agent#global-outro-skill), for more information.
{% endhint %}
**To create Dynamic Q\&A skill:**
* In the **Agent** page, navigate to the Skills option in the left navigation menu, click **Add Skill** in the Agent skills page.
* In the **Skill builder** page, select **Dynamic Q\&A** and click **Create**.
* Specify the following details and click **Create**:

Parameters Description Maximum Length Skill name Indicates the name of the Q&A skill, primarily used to identify the skill. The skill name must be less than 50 characters. 50 characters Skill description Indicates the description of the skill. Use this to specify the purpose of the skill. The skill description must be less than 200 characters. 200 characters Skill key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the skill.
Supported characters: Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information.
Note that the skill key must be unique in the agent. You can specify the same identifier in the flow control statements such as Goto node and in regression testing . It helps in easy identification and readability.
20 characters Collect Feedback Indicates if you wish to enable user feedback or not. By default, it is set to false. Use the slider for setting to true.
Note that you can also disable feedback at the skill level and add feedback to individual responses usingcollectFeedback()method. See Add feedback (JS) , for more information.
Currently, Collect feedback functionality is supported only in Web, Android, and iOS channels.
NA Mask responses Move the slider if you mask all the agent's responses of this skill in the conversation flow. When you enable masking for the skill, all the responses in the skill are masked and cannot be accessed. Note that this option is available only when masking is enabled for an agent. See Information masking , for more information. NA
A new empty Dynamic Q\&A skill is created.
### Next Steps
You can start by [adding questions and answers ](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/add-questions-and-answers)to your Dynamic Q\&A skill either manually or by importing a CSV file. Once the Q\&A is added successfully, your Q\&A skill is ready for [testing](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/test-dynamic-q-and-a-skill). See [Debug Dynamic Q\&A skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/debug-dynamic-q-and-a-skill), for common troubleshooting tips.
{% hint style="success" %}
**Key Points**:
* If you have imported a skill, ensure to edit the name and description of the skill. See the [Edit skill](https://docs.avaamo.com/user-guide/how-to/manage-skill#edit-skill), for more information.
* Refer to [Design skills](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill), for best practices and do's and don'ts while building a skill.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-advanced-agent.md
# Create Advanced agent
{% hint style="info" %}
**Note**: You can create Advanced agents only if it is enabled in your account. Contact Avaamo Support for further assistance.
{% endhint %}
In its fundamental nature, an Advanced agent achieves the core objective of a "Conversational Assistant" by involving the user in a dialogue closely resembling human interaction.
It utilizes an advanced inference engine behind the scenes to boost user experience and takes on a personalized approach, understanding nuances in the conversation, and transforming interactions from a robotic demeanor to a more pleasurable and "conversational" experience for the user.
For developers, this translates to a substantial reduction in the amount of training data needed for the agent to comprehend user queries. Consequently, an `Advanced agent` stands out as distinctly superior, more intelligent, and more personalized compared to a `Classic agent`. The following illustrations depict a comparison of training data between a `Classic agent` and an `Advanced agent`:
| Classic agent | Advanced agent |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| | |
## Key features
### **Human-like conversation**
`Advanced agent` responses are not limited to simple one-word responses but can include detailed explanations, descriptions, or discussions, depending on the complexity of the question. It makes your agent more intuitive and user-friendly, simulating human-like interactions.
### **Deep semantic understanding**
`Advanced agents` can comprehend the meaning of language beyond surface-level syntax by understanding the context, and relationships between words, and grasping the nuances of language semantics. This implies there is a massive reduction in the amount of training data required by the agent to understand the user query.
The following illustration demonstrates how an `Advanced agent` is capable of understanding different nuances and variations of "create and incident" training data:
### **Conversational memory**
`Advanced agents` can remember and maintain context throughout a conversation. This enables the system to understand references, callbacks, and evolving topics within the dialogue.

## Quick preview
Here's a quick sneak peek at the `Advanced agent`:
## Create an Advanced agent
{% hint style="info" %}
**Note**: Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
{% endhint %}
* In the Avaamo Platform UI, click the **Agents** option in the top menu, navigate to the **Development** tab, and select **Advanced Agent** under **Create.**
* Specify the `Agent name, Agent description`and `Agent avatar` for the `Advanced agent`. See [Create Classic agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information on these fields.
## Skill in an Advanced agent
A newly created Advanced agent has the `Greetings, Frustration, Unhandled and Smalltalk` skills in it by default. You can configure this skill as required. See [Built-in skills](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#built-in-skills), for more information.
All custom skills supported in the `Classic agent` are available in the `Advanced agent` also. See [Add skills to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills-to-agent), for more information.
{% hint style="info" %}
**Note**: The[ Import skills](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#import-skills) option is available only in `Classic agents`.
{% endhint %}
## Training an Advanced agent
The Advanced agent can comprehend numerous nuances and variations in user queries. The process of adding training data, such as in the [Invocation intent of a Dialog skill ](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent)or a [Q\&A skill ](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/add-questions-and-answers), remains consistent with that of the `Classic agent`. However, there is a significant reduction in the volume of training data required.
The best way to train the agent is to start with a minimal set of meaningful training data, perform testing, and then iteratively train and build the agent.
1. Start with a small set of training data
2. Test with a few sets of users
3. Add additional training as required
4. Perform UAT with UAT users. This gives an idea of the actual production use case testing
5. Add additional training as required
6. Roll it out to the production users
7. Monitor and improvise
For example, here in the invocation intent of a Dialog skill, "create an incident" training data can handle variations such as "require assistance for a problem" without any additional training. In such cases, it is not required to add additional training data.
## What is not supported in Advanced agent?
Currently, except for the following modules, all other modules available for the `Classic agent` apply to the `Advanced agent` too:
* [Import skills](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#import-skills)
* [Dictionaries](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-dictionaries)
* All operations of Skills store - [Publish](https://docs.avaamo.com/user-guide/build-skills/manage-skill/publish-skill-to-skills-store#publish-skill), [Re-publish](https://docs.avaamo.com/user-guide/build-skills/manage-skill/publish-skill-to-skills-store#republish-skill), [Re-import ](https://docs.avaamo.com/user-guide/build-skills/manage-skill/import-and-re-import-skills#re-import-skill)skills
* [Entities](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types)
## Migrating to Advanced agent
* Currently migrating from a `Classic agent` to an `Advanced agent` is a manual process. Contact your dedicated Customer Success Manager for further assistance.
* Importing a `Classic agent` into an `Advanced agent` is not supported.
---
# Source: https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent.md
# Create agent
Avaamo Platform is a robust, flexible, and easy-to-use platform that allows you to build a wide variety of agents for different domains with just a few clicks. This section walks you through the steps of quickly creating a basic agent in the Avaamo Platform**.**
{% hint style="info" %}
**Note**: Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites) before creating a new agent.
{% endhint %}
{% hint style="success" %}
**Key point**: As you start building your first agent in the Avaamo Conversational AI Platform, it is also recommended to know a few simple commands that are very useful. See [Agent commands](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands), for more information.
{% endhint %}
## Build an agent
Consider that you are required to build a Pizza agent for "MacPizza - a Quick Service Restaurant", where you can place online orders for pizzas. Your first step is to build a simple "Hello" or "Welcome" greeting message to the user. Iteratively, you can enhance the agent by adding additional skills and other functionalities, as required. See the [Next steps](#next-steps), for more information.
Once you login to the Avaamo Platform, building an agent is just a 3-step process:
1. [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent)
2. [Add greeting message to agent](#step-2-add-greeting-message-to-agent)
3. [Test and view agent in action](#step-3-test-and-view-agent-in-action)
{% embed url="" %}
### Step 1: Create agent
An agent is an intelligent dialogue system that interprets and responds to the user’s conversation in natural language. It is a container of skills, each specialized to understand and handle a specific task in the user conversation flow. **Example**: In the Pizza agent, you can create an "Order Pizza" skill responsible for handling all pizza orders, similarly you can create a "FAQ" skill to handle all the Mac Pizza FAQs.
**To build an agent**:
* In the Avaamo Platform UI, click the **Agents** option in the top menu, navigate to the **My agents -> Development** tab, click **Create agent**.
* Enter the following required details and click **Create agent**:
* **Name**: Indicates the display name of your agent.
* **Description**: Indicates a brief description of your agent.
{% hint style="info" %}
**Note**: Since this is your first agent, specify only the required details and skip the other details for now. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more detailed information.
{% endhint %}

A new empty agent is created. The next step is to add a greeting message and other custom skills as per your business needs.
### Step 2: Add greeting message to agent
A new agent in the Avaamo Platform is already available with certain built-in skills. See [Built-in skills](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills-to-agent#built-in-skills), for more information.
You can also create various custom skills using an interactive skill builder as per your business needs. See [Build skills](https://docs.avaamo.com/user-guide/how-to/build-skills), for more information.
For the welcome message, you can use the pre-built Greeting skill already available in the agent.
**To add a greeting message to the agent**:
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu.

* Your agent is already available with certain sample skills. Click Greeting skill.
* In the **Skill message** pop-up, customize the message as required and click OK. You can add different types of responses (card, quick reply, carousel, etc..) in the message with response filters and tags. Since this is your first agent, you can just add a simple text message.
* Click **Save**. Your first agent is ready for testing now.

### Step 3: Test and view agent in action
In the **Agent** page, click the agent icon in the bottom-right corner. You can view your customized welcome message in the agent.

## Next steps
Now that you have successfully built the first agent with a welcome message, you can dig deeper to learn the rich features available in the Avaamo Platform, and enhance the agent conversational flow to provide a great user experience. This document is built around the MacPizza agent use case. The next steps enable you to add and test the following skills in the agent:
* [Add Answers skill](https://docs.avaamo.com/user-guide/quick-start-tutorials/add-answers-skill)
* [Add LLaMB skill](https://docs.avaamo.com/user-guide/quick-start-tutorials/add-llamb-skill)
* [Add Dynamic Q\&A skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a)
* [Add Smalltalk skill](https://docs.avaamo.com/user-guide/quick-start-tutorials/add-smalltalk-skill)
* [Add Dialog skill](https://docs.avaamo.com/user-guide/quick-start-tutorials/add-dialog-skill)
---
# Source: https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent.md
# Create an AI agent
{% hint style="info" %}
**Note**: Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
{% endhint %}
Consider that you need to build a **ticket booking agent** for **Galaxy Cinemas**, a movie theater where customers can book tickets and select their seats online.
In the Avaamo Platform UI, click the `Agents` option in the top menu, navigate to the `Development` tab, and select `AI Agent` under `Create`**.**
Specify the `Agent name, Agent description`and `Agent avatar` for the `AI agent`.
Parameters Description Agent name Indicates the name of the agent. As you promote the agent to different stages in the life cycle (Testing, Staging, and Production), this name is used to identify the agent in the different stages. Agent description Indicates the description of the agent. Use this to specify the purpose of the agent. Agent avatar Indicates the avatar used for identifying the agent. Browse and choose your avatar image. Agent avatar file name must be in UTF-8 format.
- Recommended image types: PNG, JPEG - Recommended image size: 200px * 200px
On the home page, an `AI Agent` can be easily identified and distinguished from other agents by its unique icon, which includes a small logo within it.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/create-custom-html-web-views.md
# Create custom HTML web views
You can create custom HTML web views on **Web Channel** and **Facebook** for the skill responses configured using a card, carousel, or list view. See [Build Skill Response](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses) and [Web Channe](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel)l, for more information on creating custom HTML web views for a **card, carousel, and list view**.
Consider that you wish to create a **custom HTML web view** that displays more details on how pizzas are prepared in the **Order Skill** of **Mac Pizza Agent** via a "Know more.." button.
**To create a custom HTML web view**:
* Click the skill response where you wish to custom HTML web view.
* Add a button, select **Webview (HTML)**.
* Add HTML code and select a view such as **Compact**, **Tall**, and **Full**.
* Click **OK** and **Save** the skill.
* In the **Skill** page, click the agent icon in the bottom right corner. Either you can use **goto\_node\_<\>** to directly test the node or specify intents that navigate to that node.
* Click the link that is configured to display the web view. The custom web view HTML as specified in the response is displayed.
{% hint style="info" %}
**Notes**:
* Currently, Compact, Tall, and Full view are not supported in the Microsoft Teams channel due to the limitations on the channel's side. See [Microsoft Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information on deploying your agent in the MS Teams channel.
* If the agent response contains sensitive PII data such as name, account number, password, then it is recommended to mask the agent responses to protect user privacy. See [Agent response masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking#masking-agent-responses), for more information.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-user-properties.md
# Create custom user properties
You can use [context.user.custom\_properties](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user) to get any additional user properties specified by the channel when sending a request to the agent.
You can set custom properties in one of the following ways:
1. **Using parameter in the web channel URL**: In the web channel, you can pass custom properties in the URL, using `custom_properties[<>]=<>` in the web channel URL. See [Customization parameters](https://docs.avaamo.com/user-guide/build-agents/configure-agents/deploy/web-channel/configure-web-channel#advanced-customization-parameters), for a complete list of parameters that can be passed in the web channel URL.
2. Using **User.setProperty:** You can also set custom properties using **User.setProperty**. See [Set user property](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/set-user-property), for more information.
{% hint style="info" %}
**Note**: You can also access custom properties using `context.params.custom_properties` from the [User Authentication Handler](https://docs.avaamo.com/user-guide/build-agents/configure-agents/define-settings#user-authentication-handler).
{% endhint %}
Consider that the MacPizza application sends the **custId** and **customerType** properties in the **context user** object through a [custom channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel) when a user starts interacting with the agent:
```javascript
{
"bot_uuid": "edb408fb-de21-45ed-b899-915eb5cab81e",
"channel_uuid": "5acc8a59-1c51-4735-8b28-dc2f0151533c",
"event_type": "MESSAGE",
"user": {
"uuid": "9ac15843-151d-47fb-8b3d-930b89ce797e",
"first_name": "Will",
"last_name": "Smith",
"layer_id": "e3e7372d-70ee-43cc-ad2d-747e477e88e5",
"custom_properties": {
"custId": "11521932",
"customerType": "guest"
}
},
"conversation": {
"uuid": "c040161d7299f0c5b3d995fc086c1ce9"
},
"sender": "BOT",
"message": {
"text": "Hi Will welcome to Mac Pizza",
"request_message_uuid": "92cdceb1-6a4f-4096-a002-7dd656a21c54",
"sequence": 1
}
}
```
The following is a sample JS to get the custom user properties and [store in a user session ](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/using-storage#set-and-get-user-variables)that can be used later:
```javascript
if (context.user.custom_properties) {
context.variables.custId = context.user.custom_properties.custId;
context.variables.customerType = context.user.custom_properties.customerType;
Storage.user.set("custId", context.variables.custId);
Storage.user.set("customerType", context.variables.customerType);
console.log("custId: ", context.variables.custId);
console.log("customerType: ", context.variables.customerType);
} else {
Storage.user.set("custId", "");
Storage.user.set("customerType", "");
console.log("No user details found.");
}
```
Since there are "console log" statements in the above code, you can use [Debug logs](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/debug-logs) to view the log statements:

{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-variables.md
# Create context variables
You can use **context.variables** as temporary variables to store information required for a skill flow at a particular node. See [context variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/variables), for more information.
Consider that at the end of placing a pizza order, you wish to display the final order details to the user. At each stage of taking the order details, you can store the values in a **context variable** and later use the same to display the final order details:
The following message is displayed in the agent:

{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/skills/dialog-skill/create-dialog-skill.md
# Create dialog skill
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent), for more information.
* If you wish to edit an agent, navigate to the Agents tab in the top menu, search for the agent, and open it. See [Search agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
{% endhint %}
**To create Dialog skills:**
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu and click **Add Skill**.
* In the **Skill Builder** page, select **Dialog Skill** and click **Create**.
* Specify the following details and click **Create**:
Parameters Description Maximum length Skill name Indicates the name of the dialog skill. 50 characters Skill description Indicates the description of the dialog skill. Use this to specify the purpose of the skill. 200 characters Skill key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the skill. By default, a key is provided when you create a skill. You can change it to any user-friendly identifier.
Supported characters: Alphanumeric and underscore.
It is recommended that the key be at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information.
Note that the skill key must be unique in the agent. You can specify the same identifier in the flow control statements , such as the Goto node, and in regression testing . It helps in easy identification and readability.
20 characters
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/create-document-groups.md
# Source: https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/create-document-groups.md
# Create document groups
`Document Groups` are used for categorizing and managing content uploaded in your agent. For example, you can upload information that belongs to different products in different document groups.
When you upload content to a document group, a knowledge base is created by extracting chunks of information from the content you upload.
You can upload any PDF or HTML pages in your `LLaMB content` skill. See [Upload content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/upload-content), for more information.
### Steps to create a document group
1. Open the `LLaMB content skill` and click `Add group` to create a Document group.
2. Specify the following details and click `Create`:
Parameters Description Maximum length Group name name Indicates the name of the document group. 50 characters Group description Indicates the description of the document group. Use this to specify the purpose of the group. 200 characters
The newly created group is displayed in the `Documents Group` page. The count of `Total groups` is increased by one.
When you create a document group, a unique document group ID is generated. You can view the group ID when you click the three dots on the document group box and select `View/Edit`.
### View/edit a document group
You can view or edit a document group by clicking the three dots on the document group box and selecting `View/Edit`.
* In the pop-up, you can view the details of the group, such as the Skill ID, Group ID, and Group UUID.
* You can edit the `Group Name` and `Description`.
### Delete a document group
When you delete a group, all the knowledge stored in the group is deleted along with the group.
Steps to delete a document group:
1. Click the three dots on the document group box and select delete.
2. Click `Yes, delete it!` in the confirmation box.
### Disable a document group
When you disable a group, all the knowledge in the group is disabled and is not made available to the user.
To disable a group, click the three dots on the document group box and select disable. When a document group is disabled, it is marked as disabled.
A disabled group can be enabled at any time by clicking the three dots on the document group box and selecting the enable option.
---
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/create-knowledge-skill.md
# Create knowledge skill
The **Knowledge skill** is designed to empower AI agents by seamlessly integrating and processing information from a variety of content sources—such as documentation, product guides, FAQs, and enterprise systems. With this capability, the agent can deliver accurate, context-aware responses grounded in the most up-to-date information.
Using `Knowledge skill`, users can now integrate a wide variety of content directly from their repositories into the skill, streamlining the content integration and management process.
#### Key highlights
* **Content integration**: Ingest structured and unstructured information from documents, web pages, repositories, and other sources.
* **Real-time synchronization**: Connect with systems of record such as `SharePoint`, `ServiceNow`, `web platforms`, and `files` to ensure content is always current.
* **Flexible synchronization modes**: Choose between `AutoSync` for continuous updates or `Manual` synchronization, with execution history tracking for visibility and control.
* **Data management**: Improve processing and integration of information, ensuring consistency, accuracy, and reliability across the knowledge base.
* **Scalability**: Support a wide range of content formats and sources, enabling AI agents to expand knowledge effortlessly.
The Knowledge skill lays the foundation for creating intelligent, self-sufficient AI agents that scale support, reduce manual intervention, and enhance the quality of information delivered to end users.
Based on your requirements, you can create a new Knowledge skill.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent), for more information.
* To edit an agent, navigate to the Agents tab in the top menu, search for the agent, and then open it. See [Search agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
{% endhint %}
**To create Knowledge skills:**
* In the Agent page, navigate to the `Skills` option in the left navigation menu and click `Add Skill`.
* In the `Skill Builder` page, select `LLaMB Content Skill.`
* Specify the following details and click `Create skill`:
Parameters Description Maximum length Skill name Indicates the name of the dialog skill. 50 characters Skill description Indicates the description of the dialog skill. Use this to specify the purpose of the skill. 200 characters Skill key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the skill. By default, a key is provided when you create a skill. You can change it to any user-friendly identifier.
Supported characters: Alphanumeric and underscore
It is recommended that the key be at least three characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information.
Note that the skill key must be unique in the agent. You can specify the same identifier in the flow control prompts. It helps in easy identification and readability.
20 characters
---
# Source: https://docs.avaamo.com/user-guide/outreach/campaigns/create-new-campaign.md
# Create new campaign
Avaamo Platform allows you to create multiple campaigns each with different schedules in just a few clicks. This section walks you through the steps of quickly creating a campaign in the Avaamo Platform.
{% hint style="info" %}
**Notes**:
* See [Quick start](https://docs.avaamo.com/user-guide/outreach/quick-start), for a quick article on creating your first outreach program.
* Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/outreach/before-you-begin) before creating a new campaign.
{% endhint %}
In the Avaamo Platform UI, click the **Outreach** option in the top menu, navigate to the **Campaign** tab, and click **Create new campaign -> {{Delivery channel}} .** Supported channels - SMS, C-IVR, MS Teams, and Custom channel.
{% hint style="info" %}
**Notes**:
* C-IVR, MS Teams, and Custom channel delivery channel for outreach campaign is available only when it is enabled for the account. Contact Avaamo Support for further assistance.
* For quick start, refer to the following topics
* [Campaign in SMS channel](https://docs.avaamo.com/user-guide/outreach/quick-start/campaign-in-sms-channel)
* [Campaign in C-IVR channel](https://docs.avaamo.com/user-guide/outreach/quick-start/campaign-in-c-ivr-channel)
* [Campaign in MS Teams channel](https://docs.avaamo.com/user-guide/outreach/quick-start/campaign-in-ms-teams-channel)
* [Campaign in Custom channel](https://docs.avaamo.com/user-guide/outreach/quick-start/campaign-in-custom-channel)
{% endhint %}
A campaign consists of three sections:
1. [Configure](#configure): In this section, you start by specifying the campaign name, and description, and pick a list of recipients for your campaign. Based on your requirements, you can configure a campaign with just one-way outbound calls or with two-way communication where the campaign recipients can communicate back to the campaign by responding to the same campaign message.
2. [Add Message](#add-message): In this section, you specify the actual message that is sent to the recipients.
3. [Activate](#activate): This section is where you specify when to send the message to the recipients. You can send it immediately after activating the campaign or you can schedule it for a later time based on your business requirements.
## Configure
{% hint style="success" %}
**Pre-requisite:** You must create a recipient list before creating a new campaign. See [Create new recipient list](https://docs.avaamo.com/user-guide/outreach/recipient-lists), for more information.
{% endhint %}
In this section, you start by specifying the campaign name and description, pick a list of recipients for whom the campaign is intended, and select a delivery channel for your campaign. Specify the following details and click **Next**:
Parameters Description Maximum length Campaign name Indicates the name of the campaign. 50 characters Campaign description Indicates the description of the campaign. Use this to specify the purpose of the campaign. 200 characters Select recipient list Indicates the list of the recipients for whom the campaign is intended. Pick a recipient list from the dropdown.
Note that only those recipient lists that are not marked for testing are available in the dropdown. See Create new recipient list , for more information on how to create a recipient list. NA
### Phone: One-way communication
**Applicable for**: SMS and C-IVR channels
One-way campaigns are only outbound messages to the recipients. With this option, you can only send campaign messages to the recipients. There is no action performed when a recipient sends messages back to the campaign message.
In the **Create campaign -> Configure** section, select the **Phone** option. Provide a phone number for making the outbound calls. This is the number used to send the campaign message to the recipient. Phone number is a pre-loaded list for your company. Contact Avaamo Support for more information, if required.
### Link to Avaamo agent: Two-way communication
**Applicable for**: SMS, C-IVR, MS Teams, and Custom channels
In two-way communication, a campaign message is sent to the recipients and the campaign recipients can communicate back to the campaign by responding to the same campaign message. This is a very useful feature to make the campaign conversational and proactively enables users to quickly accomplish a wide variety of tasks.
For example, consider that you have sent a reminder to all the recipients of an upcoming vaccination drive. A recipient reads the reminder message but now wishes to reschedule the appointment due to some personal reasons. With two-way communication, the recipient can now send an SMS message back to the campaign asking for rescheduling.
{% hint style="success" %}
**Pre-requisite**: Depending on the delivery channel for your campaign, you must have an agent with the corresponding channel enabled. Based on your requirement, you can design this agent to handle specific use cases, say, for example, rescheduling an appointment flow. See [Channels](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy), for more information.
{% endhint %}
In the **Create campaign -> Configure** section, select the **Link to Avaamo agent** option. Based on the delivery channel selected, all the agents where the corresponding channel is enabled and you have at least [View permission](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions) on the agent are listed in the dropdown.
Each agent is displayed using the following nomenclature - `<> <>::<>.` This helps users easily identify the right channel to select since the agent with the same name can exist in multiple stages.
Pick the agent from the list as per your requirement and click **Next**.
{% hint style="info" %}
**Note**: When you link the campaign to an Avaamo agent, all the campaign conversations are also available in the Conversation history of the agent. See [Conversation history](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/conversation-history), for more information.
{% endhint %}
## Add Message
In this section, you specify the actual message that is sent to the recipients and click **Next** to proceed to the [Activate](#activate) section. Based on the selected delivery channel, you can either specify an SMS message, Voice message, or MS Teams message in this section.
### **Language-specific messages**
You can add customized campaign messages in all the different languages supported by the Avaamo Platform. See [Languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-supported-languages), for more information on the list of supported languages in the Avaamo Conversational AI Platform.
* The default supported language is en-US.
* In the **Add message** section, click the + icon and select the language in which you wish to add the message.
* When you add a language, the response is automatically translated and displayed in the message area. All the other fields such as the response name, phone header, and country code as applicable are copied as-is in the new language tab.
* By default, the translation only gets added when adding a new language and is not a continuous process, which implies that if you have added a message in English and later update it, the translation is not updated for the other languages and remains the same as it was at the time of adding the new language. You can further customize the response as required.
* You can also add and load language-specific templates. See [Create new template](https://docs.avaamo.com/user-guide/templates#create-new-template), for more information.
### Response sets
You can add multiple responses for the same language and then apply different filters for each response in the response set. See [Filters](#filters-optional), for more information.
Click **Add** in the **Responses** section to add another response for the same language. For each response, you can enter the response name that helps you to identify the response.
{% hint style="info" %}
**Note**: If you add multiple responses for a language without any filter, then the system picks a random response from the set of multiple responses and displays it to the user.
{% endhint %}
You can add up to 50 responses to the same language.
### Multiple campaign messages
**Supported channels**: SMS, MS Teams, Custom Channel
This feature allows you to trigger multiple messages to the same recipient using the same campaign configuration at the same time. It saves the time and effort of configuring the campaign from scratch and hence promotes the reusability of campaigns.
To configure multiple campaign messages, in the **Add message** tab, specify each message separated by ` ` tag. You can add any number of messages, there is no restriction on the number of messages that can be configured using ` ` tag.
Here, for this example, when a campaign is triggered, two SMS messages are sent to the user. Though a part of the same campaign, each message is delivered independently, which implies that each message can have its delivery status and failure reasons, if any.
Another example can be a healthcare campaign, where you have a set of SMS messages (instructions) that you wish to send to the patients before a procedure. You can configure multiple SMS messages using a simple ` ` tag.
Once the campaign is triggered, you can view the complete status in the `Campaign statistics` page.
Click the help icon in the `Text Sent` column to view more details on the message delivery:
In the `Campaign statistics` page, you can also download reports for further analysis. Each message in a multi-message campaign sent to a recipient can be identified using a `recipient_uuid.` The `recipient_uuid` remains the same for each message in the multi-message list when multiple messages are sent to the same recipient. See [Campaign statistics](https://docs.avaamo.com/user-guide/outreach/campaign-statistics), for more information.
{% hint style="info" %}
**Notes**:
* There is no option to add a delay between messages.
* The order is which the campaign messages are sent to the recipient is dependent on the carrier provider.
* If you have a use case, to trigger different messages at different times, then the best option is to configure and schedule a different campaign.
* `recipient_uuid` is also available in the Outreach insights API. See [Outreach insights API](https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/outreach-insights-api), for more information.
{% endhint %}
### Phone header
**Applicable for C-IVR and SMS Delivery Channel**
You can [create a recipient list](https://docs.avaamo.com/user-guide/outreach/recipient-lists) in either Avaamo format or any custom format according to your business requirements. When you wish to trigger a campaign in the C-IVR or SMS channel, all that is required is a phone number to which the campaign message must be sent. Phone numbers in the recipient CSV can be in multiple columns and are based on the use case, say as Phone number, Preferred Phone number, Home number.
In the **Select phone header** dropdown, a list of all the column headers from the selected recipient list is populated. Pick the appropriate column header containing the phone number of the recipients to which the campaign message must be sent. If the recipient list is in Avaamo format, then by default **phone** column header is selected in the dropdown.
### Email header
**Applicable for MS Teams Channel**
You can [create a recipient list](https://docs.avaamo.com/user-guide/outreach/recipient-lists) in either Avaamo format or any custom format according to your business requirements. When you wish to trigger a campaign in the Microsoft Teams channel, all that is required is an email to which the campaign message must be sent.
In the **Select email header** dropdown, a list of all the column headers from the selected recipient list is populated. Pick the appropriate column header containing the email of the recipients to which the campaign message must be sent. If the recipient list is in Avaamo format, then by default **email** column header is selected in the dropdown.
### **Primary header**
**Applicable for Custom Channel**
You can [create a recipient list](https://docs.avaamo.com/user-guide/outreach/recipient-lists) in either Avaamo format or any custom format according to your business requirements. When you wish to trigger a campaign in the Custom channel, all that is required is the primary header to which the campaign recipient is bound.
The field selected in the primary header is the `client_uuid` in the custom channel outgoing payload. A campaign triggered to a recipient is hence identified by the combination of `channel_uuid and client_uuid` in the Avaamo Conversational AI Platform. See [Custom channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel#payload-details), for more information on the outgoing message payload format.
### **Country code - Optional**
**Applicable for SMS and C-IVR Channel**
This field is optional and allows you to specify the country code for the recipients. If a country code is specified, then all the recipient phone numbers are automatically prefixed with the designated code.
Given the mandatory requirement for recipient phone numbers to be in the E.164 format, which necessitates a country code, this feature proves valuable when working with recipient files that lack country codes.
### **Filters - Optional**
For each language, you can add multiple messages and for each message, you can associate filters. This allows you to reuse the same campaign configuration and tailor the messages to different sets of recipients as per the requirement. Adding filters is optional.
Note that if you add multiple responses without any filter, then when the campaign is triggered, a random message from the set of messages is picked and delivered to the recipient. See [Filters](https://docs.avaamo.com/user-guide/outreach/filters), for more information.
### SMS Message
* **Delivery Channel**: SMS
* **Maximum length**: Each SMS message can be a maximum of 1600 characters. It is recommended to specify an SMS Message with less than 320 characters for better delivery of the message.
Indicates the actual text message sent to the user in the SMS channel. You can create a customized message using the column headers from your recipient list CSV. This helps you to make the message personal and reachable to users. See [Examples](https://docs.avaamo.com/user-guide/templates#examples), for a few sample message templates.
Alternatively, if you already have a template, then click the **Load Message Template** link to reuse and select a pre-existing message.
{% hint style="success" %}
**Key points**:
* You can add customized campaign messages in all the different languages supported by the Avaamo Platform. See [Language-specific messages](#language-specific-messages), for more information.
* For each language, you can add multiple messages and for each message, you can associate filters to target a specific set of recipients. See [Filters](https://docs.avaamo.com/user-guide/outreach/filters), for more information.
{% endhint %}
### MS Teams message
**Delivery Channel**: [MS Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams)
Indicates the actual message sent to the user in the MS Teams channel. You can create a customized message using the column headers from your recipient list CSV. This helps you to make the message personal and reachable to users. See [Examples](https://docs.avaamo.com/user-guide/templates#examples), for a few sample message templates.
Alternatively, if you already have a template, then click the **Load Message Template** link to reuse and select a pre-existing message.
{% hint style="success" %}
**Key points**:
* You can add customized campaign messages in all the different languages supported by the Avaamo Platform. See [Language-specific messages](#language-specific-messages), for more information.
* For each language, you can add multiple messages and for each message, you can associate filters to target a specific set of recipients. See [Filters](https://docs.avaamo.com/user-guide/outreach/filters), for more information.
{% endhint %}
### Voice Message
**Delivery Channel**: C-IVR
Indicates the actual voice message sent to the user in the C-IVR channel. You can create a customized message using the column headers and SSML tags from your recipient list CSV. This helps you to make the message personal and reachable to users. See [Examples](https://docs.avaamo.com/user-guide/templates#examples), for a few sample voice message templates. Alternatively, if you already have a template, then click the **Load Message Template** link to reuse and select a pre-existing message.
{% hint style="success" %}
**Key Points**:
* For each language, you can add multiple messages and for each message, you can associate filters to target a specific set of recipients. See [Filters](https://docs.avaamo.com/user-guide/outreach/filters), for more information.
* You can add customized campaign messages in all the different languages supported by the Avaamo Platform. See [Language-specific messages](#language-specific-messages), for more information.
{% endhint %}
* Click the SSML tags at the bottom of the message box to add the corresponding tag in the Message box area. You can use this to quickly construct messages using SSML tags. see [Supported SSML tags](https://docs.avaamo.com/user-guide/ref/speech-synthesis-markup-language-ssml), for more information and examples on SSML tags.
* Click the **Play** button below the message box to preview the voice message. This reads out the message in the selected voice persona and you can use this feature to alter the voice message as required.
* **Voice persona**: If you have specified one-way communication (using Phone in the Configure section) then, you can pick the voice persona from the list of available personas in the Voice message section. Alternatively, if you are using a two-way communication by linking to an existing Avaamo agent, then the persona as configured in the C-IVR channel of the Avaamo agent is selected and displayed.
### Custom channel Message
**Delivery Channel**: Custom Channel
Indicates the actual message sent to the user in the Custom channel. You can create a customized message using the column headers from your recipient list CSV. This helps you to make the message personal and reachable to users. See [Examples](https://docs.avaamo.com/user-guide/templates#examples), for a few sample message templates.
Alternatively, if you already have a template, then click the **Load Message Template** link to reuse and select a pre-existing message.
{% hint style="success" %}
**Key points**:
* You can add customized campaign messages in all the different languages supported by the Avaamo Platform. See [Language-specific messages](#language-specific-messages), for more information.
* For each language, you can add multiple messages and for each message, you can associate filters to target a specific set of recipients. See [Filters](https://docs.avaamo.com/user-guide/outreach/filters), for more information.
{% endhint %}
## Activate
This section is where you specify when to send the message to the recipients. You can send it immediately after activating the campaign or you can schedule it for a later time based on your business requirements. Specify the activation method for your campaign and **Create**:
### Send on activate
Enable this toggle if you wish to send the campaign message to the recipients immediately after activation.
### **Schedule campaign**
Enable this toggle if you wish to set a specific time and date for sending the campaign message to the list of recipients.
* Time: The time when the scheduled campaign message is sent.
* Date: The date when the scheduled campaign message is sent. The scheduled date must be less than one year from the current date.
* Timezone: The timezone of the selected time for the scheduled campaign.
### **Recurring campaign**
Enable this toggle if you wish to periodically send the campaign message to the list of recipients.
* Timezone: The timezone of the selected time for the recurring campaign.
* Start time: The time when the recurring campaign message is sent.
* Repeat: Pick the frequency of the recurring campaign.
* Ends: The date when the recurring campaign ends. The end date must be less than one year from the start date.
* After: Number of occurrences after which the recurring campaign ends. Occurrences must be between 1 to 100.
### **Campaign failures**
Specify the email Ids of the users to receive campaign error notifications.
* These errors are related to campaign configuration errors such as (SFTP file uploaded errors or Teams configuration errors) that result in a complete campaign failure.
* These are not related to the errors in the [Campaign Statistics](https://docs.avaamo.com/user-guide/outreach/campaign-statistics) page.
* It is sent only for activated campaigns per campaign run. If you have a recurring campaign, then each time the campaign is executed and until the error is resolved, the error notification is sent to the emails configured in the **Campaign failures** section.
{% hint style="info" %}
**Note**: You can enable all the toggles and accordingly the campaign message is sent on activation, also at the set specific time and date, and recurring as required. Ensure that the date and times in the scheduled campaign and recurring campaign are non-overlapping for a better user experience.
{% endhint %}
## Campaign summary details
After creating the campaign, a **Campaign summary** details pop-up is displayed.
* You can quickly glance at all the details before actually activating or testing the campaign. Scroll to the right to view all the messages.
* Click **View filter details** to view the list of recipients filtered for each language and response set to whom the campaign message is sent.
* Click **Download CSV** to download the recipient list CSV. In this CSV, you can view
* The list of recipients and the filters applied against each recipient to whom the campaign message is triggered.
* The failed reason for all those recipients to whom the campaign message is not triggered.
* Click **Test campaign**, if you wish to test your campaign with a selected set of test recipients before activating the campaign. See [Test campaign](https://docs.avaamo.com/user-guide/outreach/campaigns/test-campaign), for more information.
* Click **Activate** to activate your campaign. Based on the option selected in the **Campaign** -> **Activate** section, the SMS message is either sent immediately after activation or at a scheduled date.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill.md
# Create a new Dialog skill
Based on your requirement, you can either start by creating a new Dialog skill or by importing from any one of the available skills. See [Import skill](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills), for more information.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent), for more information.
* If you wish to edit an agent, then navigate to the Agents tab in the top menu, search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
* You can apply the Outro messages to the Dialog skill. Refer [Global Outro skill](https://docs.avaamo.com/user-guide/build-agents/add-skills-to-agent#global-outro-skill), for more information.
{% endhint %}
**To create Dialog skill:**
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu and click **Add skill**.
* In the **Skill builder** page, select **Dialog skill** and click **Create**.
* Specify the following details and click **Create**:

Parameters Description Maximum length Skill name Indicates the name of the dialog skill. 50 characters Skill description Indicates the description of the dialog skill. Use this to specify the purpose of the skill. 200 characters Skill key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the skill. By default, a key is provided when you create a skill. You can change it to any user-friendly identifier.
Supported characters: Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information.
Note that the skill key must be unique in the agent. You can specify the same identifier in the flow control statements such as Goto node and in regression testing . It helps in easy identification and readability.
20 characters Mask responses Move the slider if you mask all the agent's responses of this skill in the conversation flow. When you enable masking for the skill, all the responses in the skill are masked and cannot be accessed. Note that this option is available only when masking is enabled for an agent. See Information masking , for more information. NA
* Save your agent.
A new empty Dialog skill is created. See the [Next steps](#next-steps), for more information on how to continue building dialogs.
### Next steps
You can start by adding an [invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent) to your skill. This is the intent that invokes this skill when added to an agent.
You can then continue to edit the skill by [building dialogs](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill) with user intents and skill responses. Ensure to [test your skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/test-skill) at each step. You can navigate to the [Debug](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/debug-skill) section in the Dialog skill to troubleshoot your skill if required.
{% hint style="success" %}
**Key Points**:
* If you have imported a skill, ensure to edit the name and description of the skill. See [Edit skill](https://docs.avaamo.com/user-guide/how-to/manage-skill#edit-skill), for more information.
* Refer to [Design skill](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill), for best practices and do's and don'ts while building a skill.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/create-new-knowledge-base.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/create-new-knowledge-base.md
# Create a new Smalltalk skill
Based on your requirement, you can either start by creating a new Smalltalk skill from scratch or by importing from any one of the available skills. See [Import skill](#import-skill), for more information.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent), for more information.
* If you wish to edit an agent, then navigate to the Agents tab in the top menu, search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
{% endhint %}
**To create a Smalltalk skill:**
* In the **Agent** page, navigate to the Skills option in the left navigation menu, click **Add Skill** in the **Agent skills** page.
* In the **Skill builder** page, select **Smalltalk** and click **Create**.
* Specify the following details and click **Create**:

Parameters Description Maximum length Skill name Indicates the name of the Smalltalk skill, primarily used to identify the skill. 50 characters Description Indicates the description of the skill. Use this to specify the purpose of the skill. 200 characters Skill key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the skill.
Supported characters: Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information.
Note that the skill key must be unique in the agent. You can specify the same identifier in the flow control statements such as Goto node and in regression testing . It helps in easy identification and readability.
20 characters Mask responses Move the slider if you mask all the agent's responses of this skill in the conversation flow. When you enable masking for the skill, all the responses in the skill are masked and cannot be accessed. Note that this option is available only when masking is enabled for an agent. See Information masking , for more information. NA
A new empty Smalltalk skill is created. The next step is to [add questions and answers](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill/add-smalltalk-qa) to the Smalltalk skill.
### Next steps
You can start by [adding questions and answers](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill/add-smalltalk-qa) to your Smalltalk skill either manually or by importing a CSV file. Once the Smalltalk is uploaded successfully, your skill is ready for [testing](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/test-smalltalk-q-and-a). See [Debug Smalltalk](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/troubleshooting-tips), for common troubleshooting tips.
{% hint style="success" %}
**Key Points**:
* If you have imported a skill, ensure to edit the name and description of the skill. See [Edit skill](https://docs.avaamo.com/user-guide/how-to/manage-skill#edit-skill), for more information.
* Refer to [Design skills](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill), for best practices and do's and don'ts while building a skill.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill.md
# Build and manage dialogs
- [Add invocation intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent.md)
- [Flow designer - Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/dialog-designer-overview.md)
- [Change default greeting message](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/change-default-greeting-message.md)
- [Add user intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent.md)
- [Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/overview.md)
- [Training Phrases](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/training-phrases.md)
- [Existing entity](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/existing-entity.md)
- [System intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/system-intent.md)
- [Custom code](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/custom-code.md)
- [Instructions](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/instructions.md)
- [Voice entity model](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/voice-entity-model.md)
- [FAQs](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/faqs.md)
- [Build skill responses](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses.md)
- [Skill message window - Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/skill-message-window-overview.md)
- [Add skill messages (responses)](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-skill-messages-responses.md)
- [Add buttons](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-buttons.md)
- [Add form elements](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-form-elements.md)
- [Advanced settings](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings.md)
- [Channel-wise supported responses](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/channel-wise-supported-responses.md)
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/perform-common-actions.md)
---
# Source: https://docs.avaamo.com/user-guide/skills/prompt-skill/create-prompt-skill.md
# Create prompt skill
The **Prompt Skill** enables you to create responses using simple effective prompts without any extensive training. It guides the AI agents to interpret, process, and respond to user queries.
It is ideal for handling open-ended queries where a structured multi-step dialog is not required. Prompt Skill leverages AI-driven completions to generate contextual responses based on user input.
Examples: The Prompt skill can be used in scenarios such as:
* To book a flight ticket or a doctor's appointment
* Providing an informational response, like FAQs or knowledge base answers.
* Retrieving and displaying dynamic information based on a single input.
In the Avaamo Platform, you can easily create and customize Prompt skills using a simple interface, allowing you to configure specific responses to be triggered by a user’s input. The platform enables seamless integration of the Prompt skill into various workflows with minimal technical effort.
Based on your requirements, you can create a new Prompt skill.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add skills immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent), for more information.
* If you wish to edit an agent, then navigate to the Agents tab in the top menu, search, and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/other-common-actions#search-agents), for more information.
* Click Edit to unlock the agent before editing.
{% endhint %}
**To create Prompt skills:**
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu and click **Add Skill**.
* In the **Skill Builder** page, select **Prompt Skill** and click **Create**.
* Specify the following details and click **Create**:
Parameters Description Maximum length Set as Entry Point Click the checkbox to enable this option. When enabled, the skill is triggered at the start of the conversation.
If multiple skills are configured, enabling this option designates it as the starting skill, initiating the conversation from the agent.Note: When there is only one Prompt Skill, this option is enabled automatically.
NA Skill Avatar You can upload an image to represent the digital avatar of the agent.
A built-in crop tool is available to adjust the image size as needed.
The file size should be 2MB maximum. Skill name Indicates the name of the prompt skill 190 characters Skill description Indicates the description of the prompt skill. Use this to specify the purpose of the skill. 2000 characters Skill instructions A set of predefined phrases to be displayed on the UAT page. 1000 characters for each instruction Skill key A unique identifier assigned to the skill for programmatic identification. It is used for functionalities such as skill transfer and other integrations. 190 characters
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill.md
# Create and test skills
- [Dialog](/user-guide/how-to/build-skills/create-skill/using-dialog-designer.md): Design complex conversation flows using interactive Dialog Designer.
- [Quick overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/quick-overview.md): Provides a quick glance on how you can build Dialog skill in the platform.
- [Create a new Dialog skill](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill.md): Quickly create new Dialog skill from scratch or by importing from any one of available skills in the skill store.
- [Build and manage dialogs](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill.md): Learn how to change default greeting message, add user intents, and build skill responses.
- [Add invocation intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent.md)
- [Flow designer - Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/dialog-designer-overview.md)
- [Change default greeting message](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/change-default-greeting-message.md)
- [Add user intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent.md)
- [Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/overview.md)
- [Training Phrases](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/training-phrases.md)
- [Existing entity](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/existing-entity.md)
- [System intent](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/system-intent.md)
- [Custom code](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/custom-code.md)
- [Instructions](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/instructions.md)
- [Voice entity model](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/voice-entity-model.md)
- [FAQs](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/faqs.md)
- [Build skill responses](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses.md)
- [Skill message window - Overview](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/skill-message-window-overview.md)
- [Add skill messages (responses)](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-skill-messages-responses.md)
- [Add buttons](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-buttons.md)
- [Add form elements](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-form-elements.md)
- [Advanced settings](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings.md)
- [Channel-wise supported responses](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/channel-wise-supported-responses.md)
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/perform-common-actions.md)
- [Test Dialog skill](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/test-skill.md): Use Simulator and Regression Testing to test Dialog skill.
- [Debug Dialog skill](/user-guide/how-to/build-skills/create-skill/using-dialog-designer/debug-skill.md): Use JS errors and logs to debug Dialog Skill.
- [Dynamic Q\&A](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a.md): Create responses for one-off questions and answers. Typically, the questions are Frequently Asked Questions (FAQs) related to your business, product, or service.
- [Quick overview](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/quick-overview.md): Provides a quick glance at how you can build Dynamic Q\&A skills in the platform.
- [Create a new Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/create-a-new-dynamic-q-and-a-skill.md): Quickly create new Dynamic Q\&A skills from scratch or by importing from any one of the available skills in the skill store.
- [Build and manage Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill.md): Learn how to add Q\&A, import Q\&A, and perform other common actions such as edit, clear, and delete.
- [Add questions and answers](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/add-questions-and-answers.md)
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/perform-common-actions.md)
- [Test Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/test-dynamic-q-and-a-skill.md)
- [Debug Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/debug-dynamic-q-and-a-skill.md)
- [Smalltalk](/user-guide/how-to/build-skills/create-skill/using-smalltalk.md): A form of Q\&A skill that allows you to build a personality for your agent to represent the organization.
- [Quick overview](/user-guide/how-to/build-skills/create-skill/using-smalltalk/quick-overview.md): Provides a quick glance on how to build a Smalltalk skill in the platform.
- [Create a new Smalltalk skill](/user-guide/how-to/build-skills/create-skill/using-smalltalk/create-new-knowledge-base.md): Quickly create new Smalltalk skill from scratch or by importing from any one of available skills in the skill store.
- [Build and manage Smalltalk skill](/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill.md): Learn how to add Q\&A, import Q\&A, and perform other common actions such as edit, clear, and delete.
- [Add questions and answers](/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill/add-smalltalk-qa.md): Create customized Smalltalk for your organization using Smalltalk Designer.
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill/perform-common-actions.md): Import Smalltalk, edit or delete Smalltalk, and add languages to your Smalltalk skill.
- [Test Smalltalk skill](/user-guide/how-to/build-skills/create-skill/using-smalltalk/test-smalltalk-q-and-a.md): Ensure the Smalltalk skill provides appropriate responses for user queries.
- [Debug Smalltalk skill](/user-guide/how-to/build-skills/create-skill/using-smalltalk/troubleshooting-tips.md): Few troubleshooting tips to debug Smalltalk skill for most common scenarios.
- [Answers (Deprecated)](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1.md): Get answers from enterprise content via conversations.
- [Quick overview](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/quick-overview.md): Provides a quick glance on how you can build Avaamo Answers in the platform.
- [Create a new Answers skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/create-new-knowledge-base.md): Quickly create new Answer skill from scratch.
- [Build and manage Answers skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1.md): Learn how to edit the Answers skill and fine-tune to improvise responses to user queries.
- [Create Document Groups](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/create-document-groups.md): Categorize and manage your content using document groups.
- [Upload Content](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/add-document-or-url-1.md): Create a knowledge base by extracting content from PPTs, Docs, PDF, HTML, Excel or CSV files, or any externally accessible URL.
- [Tabular answering](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/tabular-answering.md)
- [Multilingual answering](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/multilingual-answering.md)
- [Content ingestion](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/content-ingestion.md)
- [View and edit knowledge](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/view-and-edit-knowledge.md): View the extracted content (sections, entities, acronyms, vocabulary) to fine-tune and edit the knowledge base.
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/perform-common-actions.md): Retrain, edit the uploaded documents or URLs, or delete the documents or URLs from the Answers skill.
- [Configure Answers skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/configure-answers-skill.md): Specify configuration settings for an Answers skill.
- [Intro Outro Messages](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/intro-outro-messages.md)
- [Parsing Templates](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/parsing-templates.md)
- [Test Answers skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/test-avaamo-answers.md): Test to ensure the extracted knowledge base provides appropriate responses for user queries.
- [Debug Answers skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/troubleshooting-tips.md): Few troubleshooting tips to debug Answers skill for most common scenarios.
- [Improving accuracy in Answers Skill](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/improving-accuracy-in-answers-skill.md)
- [Keeping content updated](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/keeping-content-updated.md)
- [Answers skill - FAQs](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-faqs.md): Frequently asked questions on Answers skill
- [Answers REST APIs](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis.md)
- [Answer prediction API](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/answer-prediction-api.md)
- [Content ingestion APIs (Recommended)](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/content-ingestion-apis-recommended.md)
- [Content ingestion APIs (Backward Compatibility)](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/answers-rest-apis/content-ingestion-apis-backward-compatibility.md)
- [LLaMB](/user-guide/how-to/build-skills/create-skill/llamb.md)
- [Using Javascript and Code](/user-guide/how-to/build-skills/create-skill/customize-your-skill.md): Customize Dialog skill via Javascript (JS) programming using a rich set of objects and functions of Avaamo Platform
- [Quick overview](/user-guide/how-to/build-skills/create-skill/customize-your-skill/quick-overview.md): Provides a quick glance of the key concepts, objects, functions, and properties used for customizations
- [Built-in functions window](/user-guide/how-to/build-skills/create-skill/customize-your-skill/built-in-functions-window.md)
- [How-to](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to.md): Common scenarios for customizing your skill using JS programming
- [Use context](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context.md)
- [Get user details](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/to-get-user-details.md)
- [Get last message](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-last-message.md)
- [Get slot details](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-domain-entity-details.md)
- [Get environment variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-environment-variables.md)
- [Create context variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-variables.md)
- [Set user property](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/set-user-property.md)
- [Create custom user properties](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-user-properties.md)
- [Detect user tone and sentiment](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-tone-and-sentiment.md)
- [Detect user device](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-channel.md)
- [Detect user channel](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-channel.md)
- [Switch user's language](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/switch-users-language.md)
- [Transfer to live agent](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/transfer-to-live-agent.md)
- [Get skill conversation insights](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-insights.md)
- [Show ambiguous intents](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/show-ambiguous-intents.md)
- [Use storage](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/using-storage.md)
- [Control skill flow](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/controlling-skill-flow.md)
- [Add tags (JS)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/add-tags-js.md)
- [Add feedback (JS)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/add-feedback.md)
- [Send SMS - SMS.send](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/sending-notifications.md)
- [Send Email - Email.send](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/send-email-email.send.md)
- [Forward call (C-IVR channel)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/forward-call-c-ivr-channel.md)
- [Hangup call (C-IVR channel)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/hangup-call-c-ivr-channel.md)
- [Build dynamic skill response](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response.md): Add customized input cards, carousel, list-view, quick reply
- [Card response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card.md)
- [Single line text](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/single-line-text.md)
- [Multi-line text](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/multi-line-text.md)
- [Date and time](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/date-and-time.md)
- [Select (PickList)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/select-picklist.md)
- [File upload](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/file-upload.md)
- [Polls](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/polls.md)
- [Checklist](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/checklist.md)
- [Rating](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/rating.md)
- [Card links](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/card-links.md)
- [Card images](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/card-images.md)
- [Carousel response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/carousel.md)
- [ListView response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/list-view.md)
- [Quick Reply response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/quick-reply.md)
- [Delay](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/delay.md)
- [Graphs & Charts](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/graphs-and-charts.md)
- [Create custom HTML web views](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/create-custom-html-web-views.md): Create custom HTML web views on Web Channel and Facebook for the skill responses configured using card, carousel, or list view
- [Define custom intents](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/define-matching-rules-using-custom-intents.md): Define your own matching rules using custom intents in nodes using JS
- [Integrate](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1.md)
- [REST and SOAP API](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/rest-and-soap-api.md)
- [Hybrid SDK](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/hybrid-sdk.md)
- [Test customizations](/user-guide/how-to/build-skills/create-skill/customize-your-skill/test-your-skill.md): Describes different methods to test the skill after customizations
- [Debug JS code](/user-guide/how-to/build-skills/create-skill/customize-your-skill/troubleshooting-tips.md): Provides useful tips in cases where you are unable to receive the expected results
- [Coding best practices](/user-guide/how-to/build-skills/create-skill/customize-your-skill/best-practices.md): Dos and Don’ts of JS programming during skill flow customizations.
- [Reference library](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library.md): Commonly used objects, functions, and attributes during agent flow customizations
- [Context](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context.md): Encapsulates various details of a user’s interaction with the agent at a particular context
- [variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/variables.md)
- [user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user.md)
- [live\_agent\_user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user-1.md)
- [insights](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights.md)
- [history](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/history.md)
- [User.setProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperty.md): Sets the user property of the specified key to the indicated value
- [User.setProperties](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperties.md): Sets the user property of the specified key to the indicated value
- [User.removeProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.removeproperty.md)
- [Storage](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage.md): Stores data either for a global session or for a specific user session.
- [Flow control](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control.md): Customize the navigation of the agent flow using JS functions
- [Notifications](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/notifications.md): Allows agent to send SMS and email notifications to the users
- [Agent commands](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands.md): Perform actions such as clear, reset, and transfer (to name a few) during a user’s interacting with the agent
- [Language.switch](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch.md): Switch language to anyone of the languages added to the agent.
- [Agent.transfer](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.transfer.md): Allows agent to switch to a live agent, if live agent option is enabled.
- [Agent.setContext](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.setcontext.md): Allows agent to set context before transferring the request. Used in Skill-based routing
- [Advance JS libraries](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/advanced-js-libraries.md): List of supported Nodejs libraries with version no.
- [SmartCall (C-IVR)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/smartcall-c-ivr.md)
- [Q\&A (Backward Compatibility)](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer.md): Managing the existing Q\&A skill created before v5.3.0 release
- [Build and manage Q\&A skill](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/build-and-manage-q-and-a-skill.md): Learn how to add Q\&A, import Q\&A, and perform other common actions such as edit, clear, and delete.
- [Add questions and answers](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/build-and-manage-q-and-a-skill/add-intents-and-languages.md): Add questions and answers to your Q\&A skill.
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/build-and-manage-q-and-a-skill/perform-common-actions.md): Import Q\&A, edit or delete Q\&A, and add languages to the Q\&A skill.
- [Configure Q\&A skill](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/configure-q-and-a-skill.md): Learn how-to add languages to Q\&A
- [Add language translations](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/configure-q-and-a-skill/add-languages.md)
- [Test Q\&A skill](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/test-q-and-a.md): Test to ensure the Q\&A skill provides appropriate responses for user queries.
- [Debug Q\&A skill](/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/troubleshooting-tips.md): Few troubleshooting tips to debug Q\&A skills for most common scenarios.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent.md
# Create Universal agent
- [Key terms](/user-guide/how-to/build-agents/create-universal-agent/key-terms.md)
- [Overview - Get started](/user-guide/how-to/build-agents/create-universal-agent/overview-get-started.md)
- [Add member agents](/user-guide/how-to/build-agents/create-universal-agent/add-member-agents.md)
- [Manage member agents](/user-guide/how-to/build-agents/create-universal-agent/manage-member-agents.md)
- [Intent detection and routing](/user-guide/how-to/build-agents/create-universal-agent/intent-detection-and-routing.md)
- [Context management](/user-guide/how-to/build-agents/create-universal-agent/context-management.md)
- [Disambiguation](/user-guide/how-to/build-agents/create-universal-agent/disambiguation.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel.md
# Source: https://docs.avaamo.com/user-guide/llamb/custom-channel.md
# Custom channel
After building and testing your LLaMB agent, the next step is to select the deployment channel. The Avaamo Platform offers several pre-built channels, including Web, iOS, Android, and MS Teams, for deploying agents with LLaMB. If you need to deploy agents to a channel not listed, you can configure and deploy agents to a custom channel.
Deploying LLaMB agents in a custom channel enhances the ability to seamlessly integrate LLaMB with any enterprise application, increasing accessibility for users.
### How does it work?
Custom channel support has been a core feature for all agents within the Avaamo Platform since its inception. This capability now includes agents with LLaMB skills.
The overview, concept, configuration, incoming request payload, and testing for Custom channels remain unchanged when enabling them for agents with LLaMB skills. See [Custom channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel), for more information.
The only modification is in the payload of the outgoing message sent by the Avaamo platform to the Webhook URL for requests from the custom channel. The rest of the payload parameters and their usage remain unchanged. See [Outgoing request](#outgoing-request), for more information.
### Outgoing request
An outgoing request indicates the payload response sent by the Avaamo platform to the Webhook URL for the request received from the custom channel. The interface hosting the URL must be able to consume this payload structure.
The following is a simple payload response of an outgoing request for an agent with a `text` response (Here the response is from Greeting skill which is a simple `text` response):
{% code overflow="wrap" %}
```json
{
"bot_uuid": "7316833d-xxxx-xxxx-xxxx-b68aec69da8f",
"channel_uuid": "b9bf302a-xxxx-xxxx-xxxx-730f645968b6",
"event_type": "MESSAGE",
"user": {
"uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e",
"first_name": "Will",
"last_name": "Smith",
"layer_id": "2212b3a0-xxxx-xxxx-xxxx-c21734a9c47b",
"custom_properties": {
"first_name": "Will",
"last_name": "Smith",
"client_uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e"
},
"client_uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e"
},
"conversation": {
"uuid": "d5exxxxxxxxxxxx29c2817b69fdea5f9"
},
"sender": "BOT",
"message": {
"text": "Hello, I am Leena, your healthcare assistant. I can help with appointment booking or any canceling and rescheduling. I can also answer a few common FAQs on healthcare policies. How can I assist you today?",
"request_message_uuid": "b08d9d57-xxxx-xxxx-xxxx-7ad017c0a8f0",
"sequence": 1,
"total_messages": 1
},
"status_callback_url": null
}
```
{% endcode %}
When the response is from the LLaMB skill, instead of a `text` response, a `stream` response is sent by the Avaamo Platform that contains a `URL.`
You can consume the payload and use the streaming URL to get chunks of responses and then process the request as required. The following is a simple payload response of an outgoing asynchronous request where the response is from the LLaMB skill:
```json
{
"bot_uuid": "7316833d-xxxx-xxxx-xxxx-b68aec69da8f",
"channel_uuid": "b9bf302a-xxxx-xxxx-xxxx-730f645968b6",
"event_type": "MESSAGE",
"user": {
"uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e",
"first_name": "Will",
"last_name": "Smith",
"layer_id": "2212b3a0-xxxx-xxxx-xxxx-c21734a9c47b",
"custom_properties": {
"first_name": "Will",
"last_name": "Smith",
"client_uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e"
},
"client_uuid": "9ac15843-xxxx-xxxx-xxxx-930b89ce797e"
},
"conversation": {
"uuid": "d5exxxxxxxxxxxx29c2817b69fdea5f9"
},
"sender": "BOT",
"message": {
"stream": {
"url": "<>"
},
"request_message_uuid": "67c2c017-xxxx-xxxx-xxxx-1f826b5e596e",
"sequence": 2,
"total_messages": 2
},
"status_callback_url": null
}
```
See [Outgoing request in the Custom channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel#outgoing-request) for more information on all the other parameters in the payload.
{% hint style="info" %}
**Notes**:
* Currently, there is no set expiration date for the streaming URL.
* All the other functionality of the custom channel remains the same as applicable to the agents without LLaMB skills, including custom user properties. See [Custom channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel), for more information.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/custom-code.md
# Custom code
When you build enterprise agents, there can be scenarios, where you wish to check for certain business logic and then trigger an intent. In such cases, Avaamo Platform allows you to write custom Javascript logic in the intents and then trigger the intents if the condition returns true.
### Before you begin
Before you begin to add user intents in the Dialog skill conversational flow, it is recommended to have a thorough understanding of the following concepts:
* [Intents and Training data](https://docs.avaamo.com/user-guide/overview-and-concepts/intents)
* [Entities](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types)
* [Slots](https://docs.avaamo.com/user-guide/overview-and-concepts/slots)
* [Intent execution sequence](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/intent-execution-sequence)
* [Best practices of designing a skill](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill)
### What are custom code intents?
These are intents with custom JavaScript code. See [Using Script and Code](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill), for more information on the in-built library and objects available in the Avaamo Platform.

**Example**: You can create a custom intent with a regular expression to match the pizza order number entered by the user. Alternatively, you can also create an entity with a regular expression. Note that goto\_node is not supported in the custom intent handler, you must return true or false in this handler.
### How to use custom code intents?
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can build and manage dialogs (conversational flow) immediately after creating a Dialog skill. See [Create new Dialog skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill), for more information.
* If you wish to edit skills in an agent, then:
* Navigate to the Agents tab in the top menu. Search and open the required agent.
See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* In the Agent page, navigate to the Skills option in the left navigation menu. Search and open the required skill.
* The quality of the intents and their training determines the quality of the agent's accuracy in understanding the user queries. See [Design skill](https://docs.avaamo.com/user-guide/how-to/design-skill#intent-and-training-phrases), for more information on intent training guidelines.
{% endhint %}
* In the **Dialog skill** page, click **Edit** to unlock the skill
* Click the **Implementation** option in the left navigation pane. A dialog flow tree is displayed.
* Add user intents by creating a new node in one of the following ways:
* Click the **plus (+)** icon to add a new user intent and skill response in the node below the current node.
* Click the **fork** icon to add a new user intent and skill response as a forked branch to the current node.

* Click the red call-out bubble above "Add agent Response" to add an Intent and specify the following details:

Parameters Description Maximum length Intent name Indicates the name of the intent.
Each intent name must be unique within the skill.
192
characters
Intent key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the intent name.
By default, a key is automatically generated for you. Click Edit to update the key to any user-friendly identifier. Note that the intent key must be unique within the skill.
Supported characters: Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information. You can use this in any JS code customizations (Flow control) , regression testing , and query insights for getting a closer look at the user conversations with the agent.
Intent type Indicates the type of user intent. Select Custom code . N/A Custom intent handler Specify a Javascript function to parse user input. Return true to execute the intent or false to exit from intent. N/A
* Click **Save**.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/custom-entity-type-values.md
# Custom entity type API
## Get entity values
`GET` `https://cx.avaamo.com/api/v1/custom_entity_types/{{entity_type_id}}/values.json`
Get a list of all entity values from a custom entity type.
#### Path Parameters
| Name | Type | Description |
| -------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------- |
| entity\_type\_id\* | integer | Entity type identifier. You can get the entity type identifier from the entity type URL. |
#### Query Parameters
| Name | Type | Description |
| --------- | ------- | -------------------------------------------------------------------------------- |
| page | integer | Page from which the entries must be fetched. Default: 1
|
| per\_page | integer | Number of entries fetched per page. Default: 25 Maximum value: 100
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Access-Token\* | string | User access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
Users must have at least view permission on the agent. See Permissions , for more information
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"current_page": 1,
"per_page": 5,
"total_entries": 3,
"total_pages": 1,
"time_token": 1590674605.172428,
"values": [
{
"id": 14926171,
"value": "Bread Sticks",
"alternate_values": []
},
{
"id": 14926168,
"value": "French Fries",
"alternate_values": [
{
"id": 14926169,
"value": "French fingers",
"alternate_values": []
}
]
},
{
"id": 14926167,
"value": "Onion rings",
"alternate_values": []
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v1/custom_entity_types/20xxx/values.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v1/custom_entity_types/20xxx/values.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the agent messages. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp values Indicates an array of entity values fetched from the custom entity type. Number of entries in the array = Number specified in per_page parameter.
Each array entry contains the following details:
id: Unique value identifier value: Entity value alternate_values: Array of alternate values specified for the entity value, if any. parent_value: Parent entity value, if any. JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
| Use-case | Query Parameter |
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Get entity values from custom entity type using pagination | page : Specify the page from which you wish to fetch records.
per\_page : Specify the number of entries per page.
Example : [https://cx.avaamo.com/api/v1/custom\_entity\_types/\<\<entity\_type\_id>>/values.json?page=2\&per\_page=5](https://cx.avaamo.com/api/v1/custom_entity_types/\<\<entity_type_id>>/values.json?page=2\&per_page=5)
|
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/custom-feedback.md
# Custom feedback
In the **Agent -> Configuration -> Custom feedback** page, you can customize the user feedback form as per your requirement using Javascript (JS) code. This feature helps to:
* Build user feedback forms that are robust and intuitive. You can now create a custom feedback form by leveraging the rich set of objects and functions in the Avaamo Platform.
* Enhance how you can collect feedback from the users. Since the feedback form can now be tailored to suit your business requirements, it enables you to collect relevant and effective feedback from users. The collected feedback can be used to significantly enhance the user's experience when interacting with your agent.
* Create different custom feedback forms for both positive and negative feedback.

See [Collect feedback](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/collect-feedback), for more information on understanding the concept and various ways in which you can collect feedback from the users.
### Add custom user feedback
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can configure custom feedback to the agent immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
{% endhint %}
* In the Agent page, navigate to the **Configuration -> Custom feedback** option in the left navigation menu.
* By default, the custom user feedback toggle is disabled. Toggle the slider to enable this option.
* In the **Positive feedback** tab, specify the custom JS feedback form you wish to invoke when the user clicks the thumbs-up option in feedback.
* In the **Negative feedback** tab, specify the custom JS feedback form you wish to invoke when the user clicks the thumbs-down option in feedback.
* Click **Save** to save the details. To invoke the custom feedback form, you must enable collecting user feedback option at the skill or intent level as per your requirements. See [Example](#example) section, for a sample end-to-end illustration.
### Key points
Note the following important points about custom feedback:
* By default, the Custom user feedback option is disabled.
* Custom user feedback option when enabled
* Overrides the default feedback form provided by the platform. This implies that if you enable the toggle and do not provide any custom feedback form, then no form is displayed to the user.
* Shows syntax errors(if any) in the JS code for custom feedback on the feedback pop-up form.
* Is applicable wherever the user feedback is displayed to the user throughout the agent.
* Currently, you can only use Card elements to create a custom user feedback form. See [Card](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card), for more information.
* In the Custom feedback, the Card returned must be a single object and not an array.
* If you are using [Polls](https://docs.avaamo.com/user-guide/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/polls#example-2-polls-with-default-values), [Checklist](https://docs.avaamo.com/user-guide/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/checklist#example-2-checklist-with-default-value), or [Picklist](https://docs.avaamo.com/user-guide/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/select-picklist#example-2-picklist-with-a-default-value) in Cards, then for each option in the card element you must specify the UUID. Currently, in the Custom feedback JS form, it is recommended to use user-friendly identifiers for UUIDs instead of a random-generated number in the "Options" object as it helps you to identify the message in the [User feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) page.
* Currently, in the custom feedback, the post\_message type is not supported in Card links. See [Card links](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/card-links), for more information.
* Currently, any media content including images is not supported in Custom feedback.
* Use `CTRL+ENTER` key to toggle between fullscreen mode. You can view the complete list of built-in functions with syntax and examples in the Built-in functions window available in the JS editor. See [Built-in functions window](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/built-in-functions-window), for more information.
* All the feedback provided via the custom feedback form is recorded in the Analytics and can be viewed in the **User feedback** page for further analysis. See [User feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback), for more information.
* If you have any error in the custom feedback JS code template, then
* An appropriate template error message is displayed when you are in debug mode, say when you are testing the custom feedback using the Agent simulator. This helps you to troubleshoot and correct the error as a developer of the agent.
* If you are in a non-debug mode, say, testing the same scenario using the Test button in the Web channel, then since you are viewing as a user, an error message that something went wrong is displayed.
### Example
Consider in your agent that you wish to collect feedback on how the service was helpful to the users for all the questions and responses in the Q\&A skill.
* In the **Agent ->** **Configuration -> Custom feedback** page, enable **Custom user feedback** toggle.
* In the **Positive feedback** tab, specify the custom form as per your requirement. Currently, you can only use Card elements to create a custom user feedback form. See [Card](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card), for more information. The following code is a sample illustration of the custom feedback form:
```javascript
return {
"notification_message": "Thank you for your valuable feedback. We appreciate your time and response.",
"card": {
"inputs": [{
"type": "single_line_text",
"title": "First Name",
"uuid": "firstName",
"default_value": "John"
},
{
"type": "single_line_text",
"title": "Last Name",
"uuid": "lastName",
"default_value": "Creek"
},
{
"type": "data_capture",
"title": "Anything you would like us to improve on?",
"uuid": "a4615857-c2f7-4586-b4b0-f771683fcb1a"
},
{
"title": "Rate our service",
"type": "rating",
"uuid": "784cc8d5-b3d0-4cbc-89c4-4ef3c2fa43ea"
}
]
}
}
```
* Enable the **Collect feedback** option for the Q\&A skill. See [Collect feedback](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/collect-feedback#enabling-feedback), for more information.

* You can now test the agent. Click the agent icon at the bottom-right corner to invoke the agent simulator. Specify the intent to invoke the Q\&A skill where feedback is enabled. After the Q\&A response, a thumbs-up and thumbs-down icon is displayed in the agent.

* Click the thumbs-up option in the feedback. The following pop-up is displayed as configured in the Agent -> Configuration -> Custom feedback -> Positive feedback tab.

* Provide the feedback and click **Submit**. Note the message displayed in the agent after providing feedback is from the "notification\_message" attribute.

* You can view the submitted feedback in the [User feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) page for further monitoring and analysis.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent/custom-live-agent.md
# Source: https://docs.avaamo.com/user-guide/configuration/live-agent/custom-live-agent.md
# Custom live agent
The Avaamo Platform provides prebuilt live-agent integrations with Avaamo, Oracle RightNow, and Zendesk. However, if you wish to transfer to a live agent other than the ones available, you can configure a custom live agent. When you configure a custom live agent in the Avaamo platform, you also provide a webhook URL that serves as an endpoint for sending and receiving requests and responses to and from the Avaamo platform.
When the user interacts with the virtual assistant and requests to speak to a live agent, the request is sent to the live agent (chat application) via a webhook call. The **Live agent integrator** transforms payloads to and from the Avaamo platform and the **Custom live agent,** respectively.
Refer [Custom live agent,](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent/custom-live-agent) for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/custom-properties-api.md
# Custom properties API
## Get custom user properties
`GET` `https://cx.avaamo.com/v1/user_info/{{user_id}}.json?access_token={{agent_access_token}}`
Get details about custom user properties from the agent.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user\_id\* | integer | User identifier. Based on the requirement, you can get the user identifier in one of the following ways: - From the avaamo\_id attribute in the Get Message API. - From the user -> Id attribute in the Query Insights API .
|
#### Query Parameters
| Name | Type | Description |
| ----------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| access\_token\* | string | The agent access token. You can get agent access token from Agent -> Configuration -> Settings page. See [Agent Authentication Keys](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings#agent-authentication-keys), for more information. |
{% tabs %}
{% tab title="200 Success" %}
```javascript
{
"user_info": [
{
"user_id": 30572,
"key": "customerType",
"value": "guest"
},
{
"user_id": 30572,
"key": "customerLocation",
"value": "India"
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/v1/user_info/30xxx.json?access_token=xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/v1/user_info/30xxx.json?access_token=xxxxxx8d9952499ea466fc007dxxxxxx',
'headers': {
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, user\_info array is returned with the key and value for each custom property:
| Attribute | Description | Type |
| --------- | ------------------------------------------- | ------ |
| key | Indicates the key of the custom property. | String |
| value | Indicates the value of the custom property. | String |
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill.md
# Using Javascript and Code
- [Quick overview](/user-guide/how-to/build-skills/create-skill/customize-your-skill/quick-overview.md): Provides a quick glance of the key concepts, objects, functions, and properties used for customizations
- [Built-in functions window](/user-guide/how-to/build-skills/create-skill/customize-your-skill/built-in-functions-window.md)
- [How-to](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to.md): Common scenarios for customizing your skill using JS programming
- [Use context](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context.md)
- [Get user details](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/to-get-user-details.md)
- [Get last message](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-last-message.md)
- [Get slot details](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-domain-entity-details.md)
- [Get environment variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-environment-variables.md)
- [Create context variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-variables.md)
- [Set user property](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/set-user-property.md)
- [Create custom user properties](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-user-properties.md)
- [Detect user tone and sentiment](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-tone-and-sentiment.md)
- [Detect user device](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-channel.md)
- [Detect user channel](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-channel.md)
- [Switch user's language](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/switch-users-language.md)
- [Transfer to live agent](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/transfer-to-live-agent.md)
- [Get skill conversation insights](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-insights.md)
- [Show ambiguous intents](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/show-ambiguous-intents.md)
- [Use storage](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/using-storage.md)
- [Control skill flow](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/controlling-skill-flow.md)
- [Add tags (JS)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/add-tags-js.md)
- [Add feedback (JS)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/add-feedback.md)
- [Send SMS - SMS.send](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/sending-notifications.md)
- [Send Email - Email.send](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/send-email-email.send.md)
- [Forward call (C-IVR channel)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/forward-call-c-ivr-channel.md)
- [Hangup call (C-IVR channel)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/hangup-call-c-ivr-channel.md)
- [Build dynamic skill response](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response.md): Add customized input cards, carousel, list-view, quick reply
- [Card response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card.md)
- [Single line text](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/single-line-text.md)
- [Multi-line text](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/multi-line-text.md)
- [Date and time](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/date-and-time.md)
- [Select (PickList)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/select-picklist.md)
- [File upload](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/file-upload.md)
- [Polls](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/polls.md)
- [Checklist](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/checklist.md)
- [Rating](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/rating.md)
- [Card links](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/card-links.md)
- [Card images](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/card-images.md)
- [Carousel response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/carousel.md)
- [ListView response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/list-view.md)
- [Quick Reply response (Javascript)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/quick-reply.md)
- [Delay](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/delay.md)
- [Graphs & Charts](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/graphs-and-charts.md)
- [Create custom HTML web views](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/create-custom-html-web-views.md): Create custom HTML web views on Web Channel and Facebook for the skill responses configured using card, carousel, or list view
- [Define custom intents](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/define-matching-rules-using-custom-intents.md): Define your own matching rules using custom intents in nodes using JS
- [Integrate](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1.md)
- [REST and SOAP API](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/rest-and-soap-api.md)
- [Hybrid SDK](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/hybrid-sdk.md)
- [Test customizations](/user-guide/how-to/build-skills/create-skill/customize-your-skill/test-your-skill.md): Describes different methods to test the skill after customizations
- [Debug JS code](/user-guide/how-to/build-skills/create-skill/customize-your-skill/troubleshooting-tips.md): Provides useful tips in cases where you are unable to receive the expected results
- [Coding best practices](/user-guide/how-to/build-skills/create-skill/customize-your-skill/best-practices.md): Dos and Don’ts of JS programming during skill flow customizations.
- [Reference library](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library.md): Commonly used objects, functions, and attributes during agent flow customizations
- [Context](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context.md): Encapsulates various details of a user’s interaction with the agent at a particular context
- [variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/variables.md)
- [user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user.md)
- [live\_agent\_user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user-1.md)
- [insights](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights.md)
- [history](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/history.md)
- [User.setProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperty.md): Sets the user property of the specified key to the indicated value
- [User.setProperties](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperties.md): Sets the user property of the specified key to the indicated value
- [User.removeProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.removeproperty.md)
- [Storage](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage.md): Stores data either for a global session or for a specific user session.
- [Flow control](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control.md): Customize the navigation of the agent flow using JS functions
- [Notifications](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/notifications.md): Allows agent to send SMS and email notifications to the users
- [Agent commands](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands.md): Perform actions such as clear, reset, and transfer (to name a few) during a user’s interacting with the agent
- [Language.switch](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch.md): Switch language to anyone of the languages added to the agent.
- [Agent.transfer](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.transfer.md): Allows agent to switch to a live agent, if live agent option is enabled.
- [Agent.setContext](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.setcontext.md): Allows agent to set context before transferring the request. Used in Skill-based routing
- [Advance JS libraries](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/advanced-js-libraries.md): List of supported Nodejs libraries with version no.
- [SmartCall (C-IVR)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/smartcall-c-ivr.md)
---
# Source: https://docs.avaamo.com/user-guide/ref/data-retention.md
# Data Retention
Agents in the Avaamo Conversational AI Platform consume a voluminous amount of user data in its lifecycle - right from its inception, to production, and ongoing over a period of years until the agent is active. Data can be in various forms - ranging from simple text descriptions to images, videos, and files. Further, data captured by agents in certain domains, say finance or banking, or healthcare can also be sensitive in nature.
Hence, it is critical and essential to manage data appropriately and to define required policies to ensure data security, confidentiality, integrity, and availability. Policies are required at every stage of data in its lifecycle - from the time data is collected and stored to when it must be archived or deleted.
One such important policy is **Data retention**. In simple terms, data retention means retaining or storing data for a specific period of time for meeting legal and business data archival requirements. Without a data retention policy, an organization can eventually store unnecessary data for a long period of time, impacting system performance, compromising data availability, and can have a rippling effect on data integrity and security.
This article provides describes the data retention policy applicable to the data in the Avaamo Conversational AI platform.
### What is data retention?
Data retention in the Avaamo Conversational AI Platform defines how long data is retained in the platform and what happens to the data once the retention time period for a particular data set expires.
### How long is the data retained?
As a part of Avaamo’s ongoing governance policy, your data is retained for upto 2 years. It is recommended that you plan and set up a process to take required backups of all your production agents to your desired location on a regular basis.
{% hint style="info" %}
**Note**: By default, your data is retained for 2 years. All data older than 2 years are purged. If you wish to retain data for a lesser number of days, then contact Avaamo Support with details about your specific retention requirements.
{% endhint %}
### What data is retained and how to take backup?
Data in the following modules are purged. Refer to `How to take backup?` in the following table to take backup as per your requirement:
| Data purged | How to take backup? |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Query insights | [Query insights API ](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/query-insights) |
| Analytics | [Analytics APIs](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/analytics-api) |
| User journey | [Download user journey as PDF](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/user-journey#download-user-journey) |
| Conversation History | [Conversation History API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/conversation-message-api) |
| JS Errors | [Export JS Errors to a CSV](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/js-errors#export-js-errors-to-a-csv-file) |
| Feedback | [User feedback API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/feedback-api) |
| Change Logs | [Changelog API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/change-log-apis) |
| Messages | [Message API](https://docs.avaamo.com/user-guide/avaamo-platform-api-documentation/message-api#get-agent-messages) |
{% hint style="info" %}
**Notes:** All the data returned from the API is in JSON format.
{% endhint %}
### Can this data be recovered in any way?
No, once purged the data is completely deleted from the Avaamo Conversational AI Platform and cannot be recovered.
### What is the format of the data from the API?
All the data returned from the API is in JSON format.
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/datasync-ai-faqs.md
# DataSync AI FAQ’s
### 1. **Is it possible to utilize multiple content sources within the same document group?**
You can do it by creating separate jobs and mentioning the same document group.
### **2. How many articles or documents can be ingested simultaneously?**
There is no limit to the number of articles or documents that can be ingested simultaneously.
### **3. Can I remove or delete the ingested article or document?**
Yes, you can delete, edit, or retrain the ingested document. Refer to the article [Common actions](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/common-actions).
### **4. If the content is updated after ingestion, then does it automatically update in the agent's skill?**
Yes, if a document is updated after it has been ingested into your skill or system, those updates automatically reflect in your agent. Refer [Setup content sync](https://docs.avaamo.com/user-guide/datasync-ai/broken-reference) for SharePoint Connector and [Setup content sync](https://docs.avaamo.com/user-guide/datasync-ai/broken-reference) for ServiceNow connector, for more information
### **5. What if the same document’s different versions are ingested into the skill?**
The system updates the existing document by replacing it with the most recently ingested version, ensuring that only one version is maintained.
### 6. What happens if the ingested article/document contains an attachment?
It ingests the attachment if it is in PDF format. Refer [Before you begin](https://docs.avaamo.com/user-guide/datasync-ai/before-you-begin), for more details.\
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/datasync-ai-use-cases.md
# DataSync AI Use cases
## Use Case: Accessing Holiday Calendar Information for Employees from the US Region
### Objective:
To enable employees from the United States (US) region to access specific contract policy information tailored to their area using a content management system.
### Actors:
1. Employee from the India region
2. Content manager or administrator
### Prerequisites:
1\. The content management system is set up and operational.
2\. Documents detailing contract policies for various regions, including US and others, are available for ingestion.
### Normal Flow:
#### 1. Create a Document for the US Region Holiday calendar:
\- The content manager creates a document outlining the holiday calendar for employees from the US region.
#### 2. Ingest Document for US Region:
\- The content manager uses the content connector to ingest the document into the system.
\- Sets the attribute "**Region**" with the value "**US**" (United States).
#### 3. Test Scenario - Accessing via Simulator:
\- The content manager tests the scenario by accessing the agent from a simulator.
\- The simulated user asks, "**May I know about the holiday calendar?**"
\- Since the simulated user is from a non-US region (e.g., India), the system checks for documents related to contract policy for non-US region employees.
\- If no document is found for the non-US region, the system does not provide an answer.
#### 4. Ingest Document for Other Regions (e.g., India):
\- Recognizing the need for regional specificity, the content manager then creates and ingests another document specifically for employees from India.
\- Sets the attribute "**Region**" with the value "**India**."
#### 5. Test Scenario - Accessing Updated Information:
\- The simulated user, now from India, asks the same question about the contract policy.
\- The system retrieves and presents information from the document meant for India region employees, acknowledging the updated ingestion.
### Postconditions:
\- Employees from the United States region can access relevant contract policy information tailored to their region.
\- The system dynamically retrieves and presents information based on the user's region attribute, ensuring accurate and contextually relevant responses.
### Exceptional Flow:
\- If documents specific to a user's region are not ingested or available, the system should inform the user that no information is currently accessible for their region's contract policy.
### Business Benefits:
**Efficiency:** Provides targeted information to employees based on their region, reducing ambiguity and ensuring compliance.
**Customization:** Allows for customization and refinement of content attributes, supporting continuous adaptation to meet evolving regional needs.
**Accuracy:** Enhances answer accuracy by delivering region-specific information, improving user satisfaction and operational effectiveness.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/date-and-time.md
# Date and time
You can use date and time in the card input to provide a date picker for the user.
### Syntax
The following is the syntax to add a picklist response in the card input:
{% hint style="info" %}
**Notes**:
* There is a 191 character limit for all the user-defined text fields.
* **format** and **disable\_weekends** attributes are not supported in the Microsoft Teams channel due to the limitations on the channel's side.
* In the MS Teams channel, only the "date" type is supported due to the limitations on the channel's side.
* See [Microsoft Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information on deploying your agent in the MS Teams channel.
{% endhint %}
```yaml
"card": {
"inputs": [{
"title": "<>",
"type": "date_time/date",
"uuid": "<>",
*"disable_weekends": true/false,
*"default_value": "<>",
*"min_date": "<>",
*"max_date": "<>",
*"should_validate": true/false,
"format": "<>",
}]
}
* - Indicates optional parameter
```
Attribute Description Type title Indicates the title of the card. String uuid Indicates a secure random UUID that can be used later to get the date and time entered by the user. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
Date selected by the user is available in the context.last_message.
Syntax: context.last_message.<<uuid>>
String disable_weekends Indicates if weekends must be disabled in the date picker or not. This is an optional attribute.
This attribute is not supported in the Microsoft Teams channel due to the limitations on the channel's side. See Microsoft Teams Compliance , for more information.
Boolean default_value Indicates the default value displayed in the date
picker in the format - MM/DD/YYYY HH:MM. If you
are using only Date, then you can skip specifying
HH:MM. This is an optional attribute.
String min_date Indicates the minimum date or the start date
displayed in the date picker in the format -
MM/DD/YYYY HH:MM. If you are using only Date,
then you can skip specifying HH:MM. This is an
optional attribute.
String max_date Indicates the maximum date or the end date
displayed in the date picker in the format -
MM/DD/YYYY HH:MM. If you are using only Date,
then you can skip specifying HH:MM. This is an
optional attribute.
String should_validate Indicates if the user can skip entering values for the field or not before submitting. By default, the value is set to true. Boolean format Indicates the date formats. By default, it is "DD-MM-YYYY HH:mm"
You can change the format accordingly Like
String
### **Examples**
**Example 1**: The following is a sample JS to provide a date picker in the card input without default values:
```yaml
return {
"card": {
"inputs": [
{
"title": "Date of Birth",
"type": "date_time",
"uuid": "2025383e-9127-4091-b565-6a01a3701911"
}
]
}
}
```
In the agent, the following response is displayed:

You can use `context.last_message.<>`to get the date selected by the user.
**Example 2**: The following is a sample JS to provide a date picker in the card input with default values and other options:
```yaml
return {
"card": {
"inputs": [
{
"title": "Date of Birth",
"type": "date_time",
"uuid": "2025383e-9127-4091-b565-6a01a3701911",
"disable_weekends": true,
"default_value": "12/01/2019 10:00",
"min_date": "12/01/2019 10:00",
"max_date": "12/31/2019 10:00",
"format": "DD-MM-YYYY HH:mm"
}
]
}
}
```
In the agent, the following response is displayed:

Note that the date from the date picker is displayed in the specified format. You can use `context.last_message.<>` to get the date selected by the user.
**Example 3**: The following is a sample JS to provide a date picker in the card input with only Date:
```yaml
return {
"card": {
"inputs": [
{
"title": "Date of Birth",
"type": "date",
"uuid": "2025383e-9127-4091-b565-6a01a3701911",
"disable_weekends": true,
"default_value": "12/30/2019",
"min_date": "12/01/2019",
"max_date": "12/31/2019"
}
]
}
}
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` to get the date selected by the user.
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents.md
# Debug agents
In case you are unable to receive the expected response from the agent, you can debug using the following troubleshooting tips:
{% hint style="success" %}
**Key points**:
* **Defining entities:**
* Entities must be a logical grouping of nouns e.g. scheme name, which holds the same meaning across all training variations for the agent.
* An entity must be relevant to your intent and must provide a specific context for an intent.
* You must retain only those entities and slots that are required by the skill to process.
* **Defining skills**:
* FAQ type skills must be Q\&A, all casual and informal queries must be Smalltalk.
* If you have Smalltalk as Q\&A intents, then the priority of intent processing gets affected. Smalltalk has a lower priority when compared to Q\&A. See the[ Intent execution sequence](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/intent-execution-sequence), for more information.
* Also, note that Smalltalk does not participate in disambiguation.
* **Disable skill as that is no longer required**: If a skill that is no longer required is enabled, then the entities from that node still participate. The best practice is to disable the skill if it is no longer required.
{% endhint %}
## **Using Insights**
* Click the eye icon below the user query to know the intent mapped to the query.

* In the **Insights** pop-up, you can know if the query is mapped to the required intent type, name, skill key, intent key, entities, and the language of the query.

* You can use this information to update the conversation flow, as required, based on the details available in the insights.
{% hint style="success" %}
**Key Points**:
* By default, the insights eye icon is available in the agent widget at the bottom-right corner when you are accessing the agent from the dashboard. You can enable the insights icon using debug parameter in the web channel URL if required. See [Customization parameters](https://docs.avaamo.com/user-guide/how-to/configure-agents/deploy/web-channel/configure-web-channel#customization-parameters), for more information.
* In the insights, at times additional entities are extracted. This is because in the agent all the entities that are available in any of the agent's skills are considered for extraction as it may be required in any of the JavaScript. But only those entities that are used in the slot of a training phrase are used to match the training phrases. So even if the entity is extracted, the slot is not created for that entity, it is not used for intent matching.
{% endhint %}
## Using JS errors
In case, you have JavaScript code in your agent, then you can check for any errors using the **JS errors** option. In this section, you can view errors related to SSML, live agent, custom channel, Regex entities, and JS errors across nodes. The following illustrates a few scenarios:

* In the **Agent** page, click **Debug -> JS errors** option in the left navigation menu.
* A list of JS Errors are displayed in the following format:
* **Message**: Indicates the message or user query in the skill at the point of error.
* **Step**: Indicates the node number in the flow that caused the error.
* **Sender**: Indicates the details of the user who sent the message.
* **Time**: Indicates the time of error creation.
* **JS error**: Indicates the details of the JS error in the format - `{"error":"","line":,"section":""}`
* Correct the JS errors in the conversation flow, based on the error details displayed in the **JS errors** page.
{% hint style="info" %}
**Notes**:
* You can use the **Clear All** option to clear all JS errors.
* The error messages are sorted based on the descending order of error creation time.
* All errors get displayed only when the specific cases are triggered in the conversation flow with a user query. For example, Regex entity error is displayed only when you use the entity in the conversation flow and it gets triggered in the conversation flow.
{% endhint %}
## Using Debug logs
Use **console.log** to log messages at specific steps in the script. This helps to verify if the script is executing as expected and to identify points of failure. You can then use **Debug logs** options in **Dialog skill** to display all the logs generated using console.log.
Consider that in the **Order Status skill** of the **Pizza agent**, you have logged **context** for an intent:
```markup
console.log(context);
```
* In the **Agent** page, click **Debug -> Debug logs** option in the left navigation menu.
* Click the agent icon in the bottom-right corner.
* Enter the order number. Context details are displayed in the **Debug logs** window. Similarly, you can use **console.log** to log messages at specific steps in the script, as required.
{% hint style="info" %}
**Note**: In the `Debug logs` pop-up window, a maximum of 50 consecutive `Console.log` statements can be printed.
{% endhint %}
## Using Storage
You can view all the data stored either for a global session (applicable for all the users interacting with agents) or for a specific user session in your agent.
* In the **Agent** page, click **Debug -> Storage** option in the left navigation menu.
* You can search within a specified date range or using key values of the storage variables.

## Using Conversation history
The **Conversation history** page displays the records of the agent and all of its user interactions for the selected agent.
* Click any conversation to see the details. In the URL, you can also see a unique identifier for the conversation. This is referred to as conversation\_uuid. You can use this in APIs. See [Conversation API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/conversation-message-api), for an example.
* You can search through history to find specific conversations, messages, and users.

{% hint style="info" %}
**Notes**:
* Currently, list view responses are not displayed in the conversation history.
* Conversation history is not real-time and it may take upto 2 minutes for the Conversation history to be updated.
* In the Configuration -> Live agent page if the **Save conversations** toggle is set to **No**, then no data or chat conversations between the users and live agents are saved in the Avaamo platform. At the specific section in the Conversation history page, a system message indicating the same is displayed.
{% endhint %}
The **Conversation history** page includes a search bar, agent profile icon, and user profile icon.
### Search bar
You can use the **Search** bar to search through conversation titles and message content. This helps you narrow down user queries and the agent’s response to the query.

#### Conversations
Each conversation in the **Conversation history** page is grouped by user name. You can search for conversations related to a specific user by entering the user name in the search bar. All the conversation for the user or message containing the user name is displayed in the result.
#### Messages
You can search the conversation history with messages. These messages can be user queries or the agent's response. To search with a message, type the message content in the search bar.
All the messages with the searched message content are displayed. Click the message to view the details and the conversations.
Note that if you have deployed your agent in C-IVR or Phone channel, then the user responses are available as audio files in the **Conversation history**.
### Agent profile icon
The agent profile icon button allows you to edit the profile and change the view of the conversation history page. You can perform the following actions:

* View the agent avatar, first name, last name, and the job description. You can also view any custom user authentication setting if you have provided any.
* Change the outlook of the **Conversation history** page by clicking the **Compact view** option.
* Logs you out from the Avaamo platform dashboard.
### User icon
You can view the details of a user in the conversation by clicking the user profile icon:

* The email address and other custom user authentication details are provided in the **Custom user authentication handler** and **Returning user message handler**. See [Define settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings), for more information.
* The channel through which the user interacted with the agent.
* The link for the agent.
* The location of the user's IP.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/debug-dynamic-q-and-a-skill.md
# Debug Dynamic Q\&A skill
In case you are unable to receive the expected response from the **Dynamic Q\&A** skill, you can debug using the following troubleshooting tips:
### **Using local skill testing**
* Use the **Test** in the Dynamic Q\&A page to test the skill locally. See [Test Dynamic Q\&A](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/test-dynamic-q-and-a-skill), for more information. If you are not receiving the appropriate responses, then check the user query and edit the user intents, if required. See [Edit skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/build-and-manage-dynamic-q-and-a-skill/perform-common-actions#edit-skill), for more information.
* If you are receiving appropriate responses, then test the skill at the agent level. [Use insights](#using-insights) in the agent testing for further debugging.
### **Using Insights**
* Click the **eye icon** below the user query to know the intent mapped to the query.

* In the **Insights** pop-up, you can know if the query is mapped to the required intent type, intent name, skill name, response node, and the language of the query.

* Add the query that is not handled \[mapped to unhandled intent] by the agent as inline training data. See [Add Questions and Answers,](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/add-questions-and-answers) for more information.
### Using Conversation history
You can also check the user query from the [Conversation history](https://docs.avaamo.com/user-guide/build-agents/debug-agents#conversation-history) to know the query for which the expected response is not displayed in the agent.
### Using Debug Logs
In case you are receiving a JS error in the Dynamic Q\&A response, check [Debug Log](https://docs.avaamo.com/user-guide/build-agents/debug-agents#debug-log) for more details.
---
# Source: https://docs.avaamo.com/user-guide/debug/debug-log.md
# Source: https://docs.avaamo.com/user-guide/skills/prompt-skill/debug-log.md
# Debug Log
In case you are unable to receive the expected response from the **Prompt** skill, you can debug using the following troubleshooting tips:
### Using Debug logs
Use console.log to log messages at specific steps in the script. This helps to verify if the script is executing as expected and to identify points of failure. You can then use the **Debug logs** options in **Dialog skill** to display all the logs generated using console.log.
**Note**: In the `Debug logs` pop-up window, a maximum of 50 consecutive `Console.log` statements can be printed.
### Using Conversation history
You can check the user query from the [Conversation history](https://docs.avaamo.com/user-guide/debug/conversation-history) to view the complete flow that caused an error or unexpected response.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/debug-logs.md
# Debug logs
You can use the **console.log** statement in the Javascript node to log messages at specific steps in the script. This helps to verify if the script is executing as expected and to identify points of failure. You can then use the **Debug logs** options in **Dialog skill** to display all the logs generated using console.log.
Consider that in the **Order Status skill** of the **Pizza agent**, you have logged **context** for an intent:
```markup
console.log(context);
```
* In the **Agent** page, click the **Debug -> Debug logs** option in the left navigation menu.
* Click the agent icon in the bottom-right corner.
* Enter the order number. Context details are displayed in the **Debug logs** window. Similarly, you can use **console.log** to log messages at specific steps in the script, as required.
{% hint style="info" %}
**Note**: In the `Debug logs` pop-up window, a maximum of 50 consecutive `Console.log` statements can be printed.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/debug-skill.md
# Debug Dialog skill
In case you are unable to receive the expected response from the **Dialog** skill, you can debug using the following troubleshooting tips:
### **Using Insights**
* Click the eye icon below the user query to know the intent mapped to the query.

* In the **Insights** pop-up, you can know if the query is mapped to the required intent type, skill name, intent name, response node, and the language of the query.

* You can then consider updating the conversation flow, if required, based on the details available in the insights.
### Using Debug logs
Use console.log to log messages at specific steps in the script. This helps to verify if the script is executing as expected and to identify points of failure. You can then use the **Debug logs** options in **Dialog skill** to display all the logs generated using console.log.
Consider that in the **Order skill** of the **Pizza agent**, you have logged **context** for an intent:
```markup
console.log(context);
```
* In the **Dialog skill** page, click the **Debug -> Debug logs** option in the left navigation menu.
* Click the **agent** icon in the bottom-right corner.
* Enter the pizza order details. Context details are displayed in the **Debug logs** window. Similarly, you can use **console.log** to log messages at specific steps in the script, as required.
{% hint style="info" %}
**Note**: In the `Debug logs` pop-up window, a maximum of 50 consecutive `Console.log` statements can be printed.
{% endhint %}
### Using Conversation history
You can check the user query from the [Conversation history](https://docs.avaamo.com/user-guide/build-agents/debug-agents#conversation-history) to view the complete flow that caused an error or unexpected response.
---
# Source: https://docs.avaamo.com/user-guide/debug.md
# Debug
- [Error Log](/user-guide/debug/error-log.md)
- [Debug log](/user-guide/debug/debug-log.md)
- [Storage](/user-guide/debug/storage.md)
- [Conversation history](/user-guide/debug/conversation-history.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-environment-variables.md
# Environment variables
You can define environment variables from the **Configuration -> Environment variables** option. These are constants that can be accessed anywhere in the agent and are global to all users of the agent. **Examples**: External service access credentials like web service login credentials, webservice\_username, webservice\_password.
The environment variables are used to configure the environment details when an agent is promoted from one stage to another.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can configure an agent immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
{% endhint %}
* In the **Configuration -> Environment variables** tab, specify the **name** and **value** of the environment variable and click **Add.**
{% hint style="success" %}
**Key point**: You must specify the variable names according to the Javascript variable standards. See [JavaScript Variables](https://www.w3schools.com/js/js_variables.asp), for more information.
{% endhint %}

* You can add multiple environment variables as required. Use **Delete** option in the Actions column to delete an environment variable.
* Click **Save.**
{% hint style="info" %}
**Note**: You can also access the environment variable in the JS code. See[ Get environment variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-environment-variables), for an example.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/define-matching-rules-using-custom-intents.md
# Define custom intents
You can define your own matching rules using custom intents in nodes using JS. See [Build skill Response](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses), for more information on creating user intents while building skill response.
Consider that you allow users to register in the MacPizza agent. You can create a Register skill to handle all registration-related user conversations. In the Register skill, you start by asking the name under which the user wishes to register. In order to match the name entered by the user in the skill, you can define a custom intent with matching rules.
The following is a sample JS that validates if the user has entered only a single word (assuming name in this case) using regex in [context.last\_message](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context):
```javascript
var regex = /^[a-zA-Z]+$/;
if(regex.test(context.last_message.trim())){
return true;
}
```
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings.md
# Settings
You can specify the general settings of the agent such as persona, notifications, and question repeat count from the **Configuration -> Settings** option. Also, you can note the agent authentication keys generated by the platform that can help you access certain details about your agent.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can configure the agent immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
{% endhint %}
## Returning user message handler
You can write a JavaScript code in the **Returning user message handler** that is executed when the returning user accesses the agent and the returning value is sent as an agent response.
{% hint style="info" %}
**Note**: `goto_node` and `goto_output` are not supported in the Returning User Message Handler JS block.
{% endhint %}
**Example**: Consider that you have specified the following JS code in the **Returning user message handler**:
```yaml
return [{
quick_reply: {
"content": "Would you like help with any of the following?",
"links": [{
"title": "Placing an order",
"type": "post_message",
"value": "Just mention type of pizza with your toppings and you are good to go."
},
{
"title": "Kids Menu",
"type": "post_message",
"value": "All our menu items are customizable for kids."
},
{
"title": "Others",
"type": "post_message",
"value": "We will connect with a customer service representative."
}
]
}
}]
```

Consider that you have already accessed the agent once and you are accessing it again. The JavaScript code as specified in the **Returning user message handler** is executed, and you can view the following message in the agent as soon as you access it:

## User authentication handler
You can authenticate the users using the agent in the web, phone, or SMS channels using this block. Here, you can write any custom JS code based on your requirements and it gets executed to authenticate the user before the agent loads. This helps secure all communication through the agent by authenticating the user before using the channel.
{% hint style="info" %}
**Note**: You can use global storage (Storage.global.set and Storage.global.get) in the User authentication handler. However, you cannot use user storage variables in the User authentication handler, as the user is not created yet. See [Storage variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage), for more information.
{% endhint %}
### Web and Phone Channels
Ensure that you have enabled custom user authentication in the Web channel. See [Web channe](https://docs.avaamo.com/user-guide/how-to/build-agents/deploy/web-channel/configure-web-channel#security)l, for more information.

The JS code has a "key" (uuid) embedded in the agent URL, and this "key" is then parsed through the Avaamo server and then to the client. Once authenticated by the client-server, the user can interact with the agent. The diagram below explains the process of authentication of a user interacting with the agent through the Avaamo server to the client-server:
**To add custom user authentication for your agent in the web channel**:
Ensure that you have enabled custom user authentication in the Web channel. See [Web channe](https://docs.avaamo.com/user-guide/how-to/build-agents/deploy/web-channel/configure-web-channel#security)l, for more information.

* In the **Agent -> Settings** page, navigate to the **User authentication handler** block to add the JavaScript code.
* You can access the custom properties and other properties passed through the web channel using `context.params` in the User Authentication Handler.
* You can pass any parameters in the return value, however, passing `uuid` is mandatory. Here, `role` and `authStatus` are returned to the agent along with `uuid`.
```yaml
if (context.user) {
return {
"uuid": context.user.uuid,
"authStatus": "true",
"role": "guest"
};
} else {
return {
"uuid": uuid.v4(),
"role": "guest",
"authStatus": "fail"
};
}
```
* Click **Save.**
**To test the agent:**
* Navigate to **Agent -> Channels**. Click **View** in Web channel. Click **Test** to test the agent.
* A demo test URL is displayed in the new tab. Click the agent icon at the bottom-right corner.
* Once the JavaScript code is added, it is called every time the agent loads. You can view the same update in the user profile of conversation history.

* If the user is not authenticated, then the agent displays a blue screen with a 403 error.
### SMS channel
Ensure that you have enabled custom user authentication in the SMS channel. See [SMS channel](https://docs.avaamo.com/user-guide/how-to/build-agents/deploy/sms#deploy-your-agent-to-sms-channel), for more information.
**To add custom user authentication for your agent in the SMS channel**:
* In the **Agent -> Settings** page, navigate to the **User authentication handler** block to add the JavaScript code.
* You can access the custom properties passed through the SMS channel using `context.params` in the User Authentication Handler. See [SMS Send API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/sms-send-api), for more information.
* You can pass any parameters in the return value, however, passing `to_phone` is mandatory. Here, `uuid` is returned to the agent along with `to_phone.`
{% code overflow="wrap" %}
```javascript
const isAuth = () => {
// Perform authentication as per your requirement and return true/false accordingly
}
return isAuth() ? { to_phone: context.params.to_phone, uuid: context.params.to_phone} : false;
```
{% endcode %}
**To test the agent:**
* Navigate to **Agent -> Channels**. Click **View** in the SMS channel.
* Copy the POST request and send a sample request using the SMS Send API.
* Based on your implementation in the User authentication handler, if the user is authenticated, then the SMS message is sent to the specified to\_phone number.
{% hint style="info" %}
**Note**: The user authentication handler for the SMS channel is triggered only when custom user authentication is enabled in the [SMS channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/sms) and the message is posted via [SMS send API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/sms-send-api).
{% endhint %}
### MS Teams channel
Ensure that you have enabled custom user authentication in the MS Teams channel. See [MS Teams channel](#ms-teams-channel), for more information.
**To add custom user authentication for your agent in the MS Teams channel**:
* In the **Agent -> Settings** page, navigate to the **User authentication handler** block to add the JavaScript code.
* You can access the custom properties passed through the MS Teams channel using `context.params` in the User Authentication Handler. See [MS Teams Send API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/microsoft-teams-send-api), for more information.
* You can pass any parameters in the return value, however, passing `email` is mandatory. Here, `uuid` and `message` are returned to the agent along with `email.`
{% code overflow="wrap" %}
```javascript
const isAuth = () => {
// Perform authentication as per your requirement and return true/false accordingly
}
return isAuth() ? { email: context.params.email, uuid: context.params.email, message: { text: context.params.message} } : false;
```
{% endcode %}
**To test the agent:**
* Navigate to **Agent -> Channels**. Click **View** in the MS Teams channel.
* Copy the POST request and send a sample request using the MS Teams Send API.
* Based on your implementation in the User authentication handler, if the user is authenticated, then the Teams message is sent to the specified email.
{% hint style="info" %}
**Note**: The user authentication handler for the MS Teams channel is triggered only when custom user authentication is enabled in the [MS Teams channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams) and the message is posted via [Microsoft Teams send API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/microsoft-teams-send-api).
{% endhint %}
#### OAuth type of authorization
The diagram below explains the authorization process of a user interacting with the agent through the Avaamo server to the client-server using an OAuth type of authorization.
## None of these handlers (Disambiguation)
Currently, when there is a disambiguation response, the agent displays a set of options along with **None of these** option. By default, when you click on **None of these**, a standard text is displayed. You can use this handler and write a JS code to override the standard response and display any other message or actions you wish to perform when the user clicks **None of these** option in disambiguation.
**Example**: Consider that you have specified the following JS code in **None of these** handlers:
```yaml
return [{
quick_reply: {
"content": "Would you like help with any of the following?",
"links": [{
"title": "Placing an order",
"type": "post_message",
"value": "Just mention type of pizza with your toppings and you are good to go."
},
{
"title": "Kids Menu",
"type": "post_message",
"value": "All our menu items are customizable for kids."
},
{
"title": "Others",
"type": "post_message",
"value": "We will connect with a customer service representative."
}
]
}
}]
```
During disambiguation, if you click **None of these** option, then the **Quick Reply** message is displayed in the agent response:

## Dispatch handler
{% hint style="info" %}
**Note:** This option is available only for **Universal agents**.
{% endhint %}
In this handler, you can provide a script that is called before probing the member agents. For example, you can use this handler for setting up conditions before probing the member agents.
By default, when a user query is posted, all the member agents that are enabled and available in the Universal agents are probed before providing a response to the user. In this section, you can specify a list of member agents that you wish to probe in a return statement:
```javascript
return [{key: "member_key_1"},{key: "member_key_2"}];
```
Here, the `key` indicates the member agent key provided at the time of adding the member agent. See [Add member agents](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/add-member-agents), for more information.
You can also use `context.memberAgents` to get a list of all enabled member agents. The returned object is an array and you can use this information in the Dispatch handler to get the member key and member name:
```json
"memberAgents": [
{
"key": "home_loan",
"name": "Home Loan"
},
{
"key": "education",
"name": "Educational Loan Virtual Agent"
},
{
"key": "personal",
"name": "Personal Home Loan Agent"
},
{
"key": "vehicle",
"name": "Vehicle Loan"
}
]
```
**Example**: Consider that you are authenticating the user and based on the user details, you are setting the `customerType` user property in the Greeting skill of the Universal agent. According to type of the user, say "guest" or "auth", you wish to probe specific member agents. You can use the following JS code in the Dispatch handler to conditionally probe member agents as per the requirement:
```javascript
if (context.user.custom_properties.customerType == "guest")
return [{key: "acme_it"}];
else if (context.user.custom_properties.customerType == "auth")
return [{key: "acme_hr"},{key: "acme_it"}, {key: "acme_finance"}];
```
## Max question repeat count
Indicates the maximum number of times a question is automatically repeated to the user in the conversation flow that is already in progress. By default, the value is 3.
**Example**: Consider that you have an Order skill and FAQ skill in the MacPizza agent. Consider the following conversation flow in the agent:
* You have started the conversation with "I want to order pizza".
* This has invoked the Order skill, hence the next step in the Order skill flow is displayed to the user, such as, "We have a wide variety of freshly baked pizzas. Would you like to order veg or non-veg pizza?".
* Instead of answering this question, you asked another question from the FAQ, "where is your store?". The agent displays the response from the FAQ skill and repeats the follow-up question from the Order skill for which the user is yet to answer.
* If you continue to ask questions, instead of answering the follow-up question from the Order skill, then the follow-up question is again repeated and this continues to the number of times the "Max Question Repeat Count" is set.
Consider that you have set **Max question repeat count** to 1. The following is an illustration of how "Max Question Repeat Count" works in the Avaamo Platform:

{% hint style="info" %}
**Notes**:
* When a question gets repeated, only the question part is repeated, the other text/output in the response does not get repeated.
* Also, in the question repetition, the configurations specified in the **Advanced settings** configuration of the skill message response are not applied. See [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information.
{% endhint %}
## Advanced features
The following options are available in Advanced features:
### Disable multi-intent
Avaamo Platform provides the ability to respond to queries belonging to multiple intents in the agent.
**Example**: Consider that you have an Order skill and FAQ skill in the MacPizza agent. You can ask a query with one intent from the Order skill and another from the FAQ skill, "*I want to order pizza and where is your store?*". The agent responds to both queries.
{% hint style="info" %}
**Notes**:
* Currently, **Multi-intent** works only if you have two intents separated by "and" and at least one of the intents is from Q\&A. If you have more than two intents separated by "and", then the response of only the first two intents is returned.
* Smalltalk intents are not supported in multi-intents, which implies that if you have multi-intents and one of them is a Smalltalk, then the response of Smalltalk is not returned.
{% endhint %}

If you wish to disable this option, then you can check **Disable multi-intent** in the **Agent -> Settings** page. In such cases, the response displayed in the agent is random.

### Disable Co-reference query generation
An `agent` can remember and maintain context throughout a conversation. This enables the system to understand references, callbacks, and evolving topics within the dialogue. However, co-reference may not be required for all use cases. In specific scenarios where co-reference resolution might introduce errors or unnecessary complexity, you can choose to disable co-reference.
{% hint style="info" %}
**Note**: This feature applies to Classic agents using the LLaMB skill.
{% endhint %}
Here are some cases when it might be appropriate to disable co-reference:
* **Processing Isolated or Short Texts**: When dealing with isolated sentences, short commands, or brief messages, co-reference resolution is often unnecessary because each piece of text is self-contained and does not refer back to previous content.
* **Avoiding Misinterpretation in Ambiguous Contexts**: In cases where co-references can lead to ambiguity or misinterpretation, such as texts with frequent use of similar pronouns, disabling co-references can prevent incorrect associations.
* **Domain-Specific Applications**: In certain domain-specific applications, such as some technical or legal documents, the explicit structure and terminology make co-reference resolution less useful. Disabling it can simplify the processing pipeline.
### Disable citation link security in the LLaMB response
The Avaamo Platform provides an option to `enable or disable citation link security` in LLaMB responses. By default, [citation links](https://docs.avaamo.com/user-guide/llamb/citation-links) expire 24 hours after generation.
Go to `Configurations > Settings` in the Avaamo Platform. Under `Advanced Settings`, click the checkbox to `Disable Citation Link Security`. This feature is useful for debugging, troubleshooting, or sharing persistent references with users.
**When citation links are disabled:**
* The generated citation links in LLaMB responses can be accessed at any time, without any time restrictions.
* There is no expiration limit for accessing these links.
* Users can revisit citation links whenever needed, ensuring persistent access to the referenced information.
See [Citation links](https://docs.avaamo.com/user-guide/llamb/citation-links), for more information.
### Disable disambiguation
The user queries that do not match with intent, and the agent responds with a selection of the closest intent options, is a disambiguation intent. If the user selects and responds with one of the options, the query is successful, else it is categorized as a failed disambiguation query.

Here, we have queried "order". The agent has responded with the intents that support "order". This is categorized as disambiguation. So, if we select one of the above options, the query is a successful disambiguation query, and if we select "none of these" then it is a failed disambiguation query.
By default, a disambiguation response is enabled in the agent. If you wish to not display such responses, then you can check **Disable Disambiguation.** The following is an illustration of how the response is displayed in the agent when **Disable Disambiguation** is checked:

### Do not translate entity values
By default, the entity values in different languages are always translated to en-US before intent matching. However, in certain scenarios, translating the entity values may result in a completely different meaning in the corrected query and can result in unexpected intent matches. In such cases, you can enable the checkbox `Do not translate entity values`. When you enable this checkbox entity values are not translated to en-US and are used as-is for intent matching.
{% hint style="info" %}
**Note:** By default, `Do not translate entity values` is disabled, which implies that entity values are always translated to en-US before intent matching.
{% endhint %}
**Example**: Consider the following entity values in an agent:
The following table illustrates the difference when `Do not translate entity values` is enabled versus when it is disabled. You can observe that when `Do not translate entity values` is enabled the entity values are considered as-is and not translated to en-US.
| Do not translate entity value enabled | Do not translate entity value disabled |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | |
### Enable Hybrid SDK
If you wish to
integrate Avaamo Platform using **Hybrid SDK**, then you must **Enable Hybrid SDK** in the **Agent -> Settings** page. The Platform then opens up the channel to listen to requests in Hybrid SDK integration. By default, this communication is not available unless the **Enable Hybrid SDK** option is enabled. See [Hybrid SDK](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/hybrid-sdk), for more information.
### Enable debug logs
The `Enable Debug Logs` option allows users to enable or disable debug logs at the `agent level`. This feature provides better control over log visibility for troubleshooting and debugging. This is especially useful when masking is enabled, as logs are otherwise suppressed.
* When enabled all logs generated using console.log are displayed.
* When the checkbox is unchecked, logging is disabled, and no logs are displayed.
{% hint style="info" %}
**Note:**
1. By default, this option is **disabled**.
2. `Enable debug logs` setting is preserved during pull and promotion.
3. In production, the `enable_debug_logs` setting is disabled by default, cannot be modified by users, and can only be enabled or disabled through a request to the support team.
{% endhint %}
## Enable information masking
Masking allows you to protect PII/PHI/GDPR compliance data within the Avaamo Conversational AI system. There are ways to configure information masking in the Avaamo Platform based on your business requirements. See[ Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for more information.
Once configured, you can use the **Information masking** toggle to enable or disable masking for an agent. Hence, developers can test and debug masking during the development and testing phase.
{% hint style="success" %}
**Key point**: For masking user messages where patterns or entities are required, developers must contact Avaamo Support with all the required masking configurations. See [Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for more details.
{% endhint %}
By default, the **Information masking** toggle is enabled for all newly created agents. Slide the toggle to disable/enable masking for the agent. When it is enabled, information or data in the agent is masked as per the masking configurations.

## Retention period
The retention period configuration allows users to define how long data remains accessible before it is masked. This feature provides **agent-level control** over data masking, ensuring compliance with data privacy policies while maintaining system reliability.
For example, if the retention period is set to 10 minutes, any PII data in the conversation is automatically masked the next time the process runs after the 10-minute window.
You can set the `Retention period` when `Information masking` is enabled from the `Settings` page:
Masking behavior based on retention period values:
| Condition | Masking Behavior |
| --------------------------------------- | ----------------------------------------- |
| **Within Retention Period** | Data remains unmasked and accessible. |
| **After Retention Period** | Data is automatically masked. |
| **No Retention Period Set (0 minutes)** | Data is masked as soon as it is processed |
{% hint style="info" %}
**Note:**
1. The toggle to enable or disable masking is enabled by default in the production agent.
2. The masking and retention period settings are not editable by bot developers in the production agent and can only be modified by contacting support.
3. The default retention period is zero. You can configure it only when information masking is enabled.
{% endhint %}
Retention Period and Mask Enable Configuration Life Cycle
| Action | Retention Period Carried Forward | Mask Enable Configuration Carried Forward |
| -------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------- |
| Pull from Dev to Stage | No | No |
| Pull from Stage to Prod | No | No |
| Promote from Dev to Stage | Yes | Yes |
| Promote from Stage to Prod | Yes | No, it is enabled by default regardless of the configuration in the staging environment. |
## Persona
You can add new personas to your agent and this can be used to configure persona for the Facebook channel. See [Persona Configuration](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/persona-configuration), for more information.
* In the **Agent -> Configuration -> Settings** page, click **Add new** in **Persona**.
* Specify the name of the persona and add an image to the agent avatar.
* Click **Add Persona** and **Save** to save the agent details.
## Notifications
You can use notifications to send daily usage and error notification reports to the users, as required.
**Daily usage report:** In this field, specify the email IDs of the users who need to get a daily report on agent usage. The first daily usage report is generated at 1:00 AM in the time zone specified in the **Time Zone** field and the next consolidated report is generated after 24 hours and so on.
**Error notification**: In this field, specify the email IDs of the users who need to receive error notification if JS errors are encountered during agent interaction. Error notifications are sent with a 15 minutes gap between each email.
**Time zone:** Select the time zone to generate the daily usage report. If no timezone is selected in this field, then the UTC timezone is considered.
#### Add email IDs for daily usage reports and error notifications
* Specify the email IDs of the users in the **Daily usage report** and **Error notification** field.
* Click + icon to add the email ID.
* Click **Save** to save the changes made to the page.
#### Error notification emails
Each error notification email has the following information:

* The stage in the application in which the errors occurred. Stage refers to development, testing, staging, or production. If errors occurred in more than one stage, separate notification emails are sent to notify errors in each stage.
* A link to the JS errors page.
* The errors and the corresponding details of each error. The email lists a maximum of 25 errors. If there are more than 25 errors, a link is provided to view all the errors.
* A link to send an email to all the agent owners.
## Agent authentication keys
The following are the authentication keys of an agent that are generated by the Platform. Typically, these keys are used in an API when you are required to authenticate an agent:
* **Agent UUID**: A unique agent identifier generated by the platform.
* **Agent AccessToken**: This access token is used only for Conversation API and Message API operations.
* **API Token**: This access token is used for all the Dashboard operations except for Conversation API and Message API operations.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/delay.md
# Delay
You can programmatically include a delay in the JS response using **\_.delay** function. This can be used to provide better user experience when you are using JS to perform backend API integrations.
If you expect multiple responses to be returned from the JS block, then you can introduce a delay between the responses. This provides a better conversational experience to the user by allowing them to read responses that are verbose, instead of displaying all the responses at once.
The following is a sample usage of delay in a Promise function:
```javascript
return new Promise ((res,rej) =>{
_.delay(function(text){
res(text);
}, 3000, "Response after 3 seconds");
});
```
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/delete-job.md
# Delete job
You can delete a job at any time if it is no longer needed or duplicates an existing one. Deleting a job also removes all articles ingested under that job ID.
1. To delete a job, click the three-dot menu next to the job name and select `Delete job`.
2. In the confirmation window, click `Delete` to confirm and permanently remove the job.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deploy-and-test-web-channel.md
# Deploy in multiple web channel instances
Typically, large enterprises can have multiple websites catering to different aspects of the organization. Since all web channels are a part of the same organization, it may be required to deploy the same agent or assistant across different web channels.
Avaamo Platform allows you to deploy "one" agent across multiple instances of the web channel. This allows you to style, customize configurations, maintain different user sessions, and manage security for each web channel instance separately.
See [Use-case analysis](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/overview#use-case-analysis), for more information on few example use cases.
**To deploy your agent in multiple instances of web channel**:
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can deploy the agent to a channel after creating and building an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing
{% endhint %}
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in Web Channel and follow the steps in [Configure web channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/configure-web-channel) to deploy your agent into another instance of the web channel.

* Once you configure web channel settings, you can view, edit, disconnect, and delete web channel settings. See [Manage web channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/manage-web-channel), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy.md
# Channels
- [Web (Enabled by default)](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel.md)
- [Overview](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/overview.md)
- [Configure web channel](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/configure-web-channel.md)
- [Channel details](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/channel-details.md)
- [Theme](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/theme.md)
- [Widget configuration](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/widget-configuration.md)
- [Voice](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/voice.md)
- [Deployment](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deployment.md)
- [AI Agent](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/ai-agent.md)
- [Security](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/security.md)
- [Advanced](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/advanced.md)
- [UAT](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/uat.md)
- [Web channel callback functions](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/web-channel-callback-functions.md)
- [Authorization using JWT](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/authentication-using-jwt.md)
- [Deploy in multiple web channel instances](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deploy-and-test-web-channel.md)
- [Manage web channel](/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/manage-web-channel.md)
- [Android](/user-guide/how-to/build-agents/configure-agents/deploy/android-apps.md)
- [iOS](/user-guide/how-to/build-agents/configure-agents/deploy/ios-apps.md)
- [Microsoft Teams (MS Teams)](/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams.md)
- [Use case: Get user access token ](/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams/use-case-get-user-access-token.md)
- [Facebook](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel.md)
- [Facebook Channel Configuration](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/untitled.md)
- [Facebook Channel Manual Configuration](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-channel-manual-configuration.md)
- [Handover Protocol Integration- Facebook](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/handover-protocol-integration-facebook.md)
- [Persona Configuration](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/persona-configuration.md)
- [Image Aspect Ratio- Facebook](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/image-aspect-ratio-facebook.md)
- [Facebook file cache](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-buttons.md)
- [Facebook Messenger compliance](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-messenger-compliance.md)
- [Skype for Business](/user-guide/how-to/build-agents/configure-agents/deploy/skype.md)
- [WhatsApp](/user-guide/how-to/build-agents/configure-agents/deploy/whatsapp.md)
- [SMS](/user-guide/how-to/build-agents/configure-agents/deploy/sms.md)
- [Facebook Workplace](/user-guide/how-to/build-agents/configure-agents/deploy/facebook-workplace.md)
- [Amazon Alexa](/user-guide/how-to/build-agents/configure-agents/deploy/alexa.md)
- [WeChat](/user-guide/how-to/build-agents/configure-agents/deploy/wechat.md)
- [SIP](/user-guide/how-to/build-agents/configure-agents/deploy/sip.md)
- [Genesys](/user-guide/how-to/build-agents/configure-agents/deploy/genesys.md)
- [Nice InContact](/user-guide/how-to/build-agents/configure-agents/deploy/nice-incontact.md)
- [Cisco PCCE](/user-guide/how-to/build-agents/configure-agents/deploy/cisco-pcce.md)
- [Cisco UCCE](/user-guide/how-to/build-agents/configure-agents/deploy/cisco-ucce.md)
- [Custom channel](/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel.md)
- [Conversational IVR (C-IVR) or Phone (change needed)](/user-guide/how-to/build-agents/configure-agents/deploy/conversational-ivr-c-ivr-phone.md)
- [Universal agent](/user-guide/how-to/build-agents/configure-agents/deploy/universal-agent.md)
- [Manage channel settings](/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings.md)
- [Web - Supported languages](/user-guide/how-to/build-agents/configure-agents/deploy/web-supported-languages.md)
- [Voice - Supported languages and Browsers](/user-guide/how-to/build-agents/configure-agents/deploy/voice-supported-languages.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deployment.md
# Deployment
You can use the script provided in the **Deployment** section to deploy your agent in any web channel.
* Click the copy icon in the text area to copy the script provided in "Copy your embed code".

* Right-click anywhere on your website and open the HTML document, scroll down to the end of the page, copy the script provided in the web channel detail page immediately above the end of the body tag in your HTML page.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/design-agents.md
# Design agents
An agent is synonymous to a "human agent". Similar to a human agent that has or is trained with different skills for responding to user queries, an agent is a "container of skills", each specialized to understand and handle a specific task in the user conversation flow. When a user posts a query to an agent, the agent understands and classifies the input (both text and voice) and then selects an appropriate skill to engage with the user.
Agents help you handle various use cases. The Avaamo platform equips you to build agents that suit all your business needs. Understanding the purpose of your agent and designing the agent in the right way with all the recommended best practices and guidelines is essential for a good user experience.
## 1. Define the purpose of the agent
Here are a few questions that can help you define the purpose of your agent:
* Why do you want to build an agent?
* Who is your target audience?
* How will your customers discover your agent?
* What kind of use cases would you want your agent to handle?
* What would you define as a successful agent interaction?
* Does your agent reflect your company's brand?
* Do you need to integrate the agent into existing systems?
## 2. Knowing your audience
* Understand that the needs and wants of your audience are important for the success of any agent.
* You need to know your customers — the demographics they belong to, and the kind of questions they might have.
* You can study previous interactions and equip your agent to respond to queries that they might frequently ask.
* Knowing your customer base well enough will determine the success of your agent.
## 3. Design your agent right
With well-defined business requirements in place, you can get started on designing your agent.
* The Avaamo platform allows you to quickly focus your efforts on developing a framework for the agent. Here, you start visualizing and incorporating the use cases and define a user journey.
* Ensure that you build the journey in such a way that it makes for the best user experience. Focus on developing just the framework, you can improve that later by adding Javascript or integration services codes. Use in-line intents, to begin with.
* The framework itself can be used to demonstrate the agent to the users or the proxy users to ensure that the agent design is as expected.
* Keep this question in mind always: "is the agent intuitive for someone who is using the agent for the first time?". If not, then redo, test, and review.
See [Build skills](https://docs.avaamo.com/user-guide/how-to/build-skills) and [Build agents](https://docs.avaamo.com/user-guide/how-to/build-agents), for more information.
## 4. **Add a good greeting message**
Creating a good first impression of your agent with users matters and will help to engage the users positively.
* Your welcome message is designed to help your users understand that the users are talking to an agent, and it is one of the most important messages.
* You can add the functionality of the agent to its welcome message.
* By listing its functionality upfront, the agent keeps your users from being disappointed and gives them ideas and instructions on how to engage further.
In this greeting message example of a medical assistant, notice how the functionalities of the agent are listed upfront. This guides and eases user navigation and also provides a good first impression to the users:

See [Greeting skill](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#greeting-skill), for more information.
## 5. Entity types vs Dictionaries vs Training variations
* **Entity types**: An entity type is a named collection of similar objects such as states in a country, all pediatricians, a list of product names, or data types (Date, Email, Location). Each entity type contains one or more values. **Example**: An entity type named "US City" contains values - Los Altos, San Francisco, Los Angeles. See [Entities](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types), for more information.
* **Dictionaries**: A dictionary, in the agent, is a collection of words or phrases that hold a specific meaning to your business. **Example**: You are creating an HR agent regarding the employee bonus policies. Here, EB (Employee bonus), QEB (Quarterly Employee Bonus), and such terminologies can be added to the dictionary. See [Dictionaries](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-dictionaries), for more information.
* **Training variations**: For an agent to respond to user queries, each intent must be trained with specific sentences that are used as representative phrases for user queries. This set of sentences is referred to as the Training data set. See [Intent and Training Data](https://docs.avaamo.com/user-guide/overview-and-concepts/intents), for more information.
When you are deciding on whether you must create an entity type, dictionary, or training variations, consider answering these questions:
| What are the values I have? | Where should it go? |
| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Are the values a logical grouping of nouns e.g. scheme name, which holds the same meaning across all training variations for the agent? | Consider defining these as entity types and values. See [Add entity types to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent), for more information. |
| Are these values not typical dictionary words but hold specific meaning to your business? | Consider defining these in the dictionary.
See Add dictionaries , for more information.
|
| Are these just regular words for which you have given some alternate synonyms? | For example, eat -> grab, gobble, drink. Consider adding them as training data variations for the intent. See [Add invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent) and [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information. |
**Example**: The following table lists a few use cases and corresponding categorizations:
| Use case | How to define them? |
| ------------------------------------------------------------ | ------------------- |
| AEM: Adobe Experience Manager | Dictionaries |
| KYC: Know your customer | Dictionaries |
| Policy: Plan, Strategy | Training variations |
| Correction: change, updated | Training variations |
| Ticket type: Incident, Request Item, Change Request, Problem | Entity type |
| Account type: Savings, Current, Recurring, Fixed | Entity type |
{% hint style="info" %}
**Note**: Spell correction is performed on words in the user query by identifying and correcting the phrase that is closest to the training data. Hence, only those words that are a part of either part of training data, entities, or dictionary are spell-corrected.
{% endhint %}
## **6: Prepare for ambiguities and misunderstandings**
Program your agent to deal proactively with any ambiguities and misunderstandings. If your agent detects various entities and is unsure of a response, have your agent ask related questions, suggest a possible next step, and remedy misunderstandings. This way, if your agent's answer is not satisfactory, your users will have several other questions to choose from, and this will not result in an interrupted agent conversation flow.
Anticipating follow-up questions can go a long way is building confidence with the user and navigating through the conversation flow. Leverage the Platform's capability to gather a set of closely matched intents related to a user’s query in a particular context. This helps you to anticipate follow-up questions users might have. Consider showing these in a section such as "Here’s related content" or as "Other Common Questions". This feature can help in:
* Reducing false positives and providing more options from a similar set of responses already available in the agent.
* Providing a pleasant user experience where the agent attempts to provide the best possible answers from all possible available options in the agent.
* Providing guided navigation allows the user to explore more options.
You can show the best answer and additionally show three "common questions" from the curated set of responses that are related to the user query.

See [how to show ambiguous intents](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/show-ambiguous-intents), for a sample scenario and example.
## **7: Take advantage of the auto-complete (Type-ahead) feature**
Leverage the auto-complete feature to reduce false positives and significantly improve accuracy. By presenting the user with a list of available options, the user likely selects one of those options for which accurate curated responses are already available in the agent.

See [Auto-complete in web channel](https://docs.avaamo.com/user-guide/how-to/configure-agents/deploy/web-channel#example-3-auto-complete), for more information.
## **8: Test rigorously**
One of the key factors for the success of any agent is thorough testing. Continuous testing is required for each skill to reach the maximum level of accuracy. These skills must be reviewed from time to time and improvements can be made to enhance the experience of the interaction between your users and the agent.
See [Test agents](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents), for more information.
## 9. Detect frustration and handle it
Unhappy customers are inevitable. The goal of the agent is not to wear them down or impress them with their smarts. The goal is to respond to the queries in a satisfactory manner. Design your agent to detect and understand dissatisfaction and frustration in the customer's tone. Handle the situation by integrating human intervention.
See [Frustration](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#frustration) and [Unhandled skills](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#unhandled-skill), for more information.
## 10. Continuously train the agent
Once the agent is deployed, closely monitor the initial interactions, and gather feedback to understand how your users are interacting with the agent. Gathering these use cases and adding them to your agent's conversation flow can improve user interaction over time.
Once you deploy the agent, ensure that you monitor the agent and its unhandled queries. You can categorize these unhandled queries into three categories:
1. Other variants of user requests for services that the agent already supports. These variants have to be added to the agent's training data.
2. New service requests that users are making of the agent, that you want to add to the agent's scope as part of a roadmap. These will be added over time when you have developed new intents and responses in your agent.
3. Service requests that you feel are totally out of scope for the agent. For example, a user may query the agent for the latest football score, while your agent may have nothing to do with sports. These may be discarded since you feel your agent should not be servicing these requests. Be helpful and while telling the user these questions you cannot help with, please suggest frequently asked questions so that users are reminded of the purpose and scope of your agent.
See [Monitor agents](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze), for more information.
While developing your agent, take into account the various channels that your agent would be deployed on. Understand the specific impacts of those channels on your agent development.
As an example, Facebook Messenger has many limitations on message sizes that you will want to incorporate into your agent for the best experience across channels.
## **Don’ts**
* Do not overlap the purpose of the agent. Keeping your requirements clear always helps you to design your agent effectively. If you have two sets of requirements that serve different purposes, consider creating two different agents.
* Do not overdesign or clutter your agent. Start with the basic set of requirements and test it. Iteratively build over the basic framework.
* Do not ignore JS Errors in your agent. Periodically plan to check for JS Errors and clean it up. See [JS Errors](https://docs.avaamo.com/user-guide/how-to/debug-agents#using-js-errors), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill.md
# Design skills
Skill is part of an agent that is specialized to understand and handle a specific task in the user conversation flow. **Example**: **Order Pizza skill** in a **Pizza agent** is responsible for taking the user through a conversation for capturing the required data to order a pizza.
Training the skill with a set of quality intents and each intent with the right number of training data/training phrases/training utterances determines the quality of the agent's accuracy in understanding the user queries. Creating the right number of intents with the right number of training data samples for each intent is essential to provide a good user experience.
This article describes the recommended best practices for designing a skill.
## Identify the purpose of skill
* When you start designing an agent, consider defining the functionality of the agent in well-defined tasks.
* For each specific task, you can build skills and later choose to publish the skill to your company skill store, for re-usability.
* Modularizing and building skills also help to troubleshoot and debug skills in an agent.
* Provide an appropriate name and description for each skill you build, as this name is used to identify the skill when publishes to the skill store.
## Intent and training phrases(training utterances or training data)
Creating the right number of intents with the right number of training data samples for each intent is essential to provide a good user experience. 5 to 10 training phrases is a good number to start with.
{% hint style="info" %}
**Notes**:
* This document is for reference only and the actual intent to be created varies for each use case.
* It is not required for you to be a linguist. However, it is expected that the creator has good written communication skills.
* "Importing" is a reserved keyword and hence it is recommended to not use in the training data.
{% endhint %}
### 1. **Avoid intent overlap**
* Avoid combining multiple goals in one intent
* Read the intent to identify overlaps
**Use Case**: To find a hospital or a specialist
| Recommended | Not Recommended |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Can you help me find a hospital? Where is the nearest hospital? Find a specialist for me. I am looking for a pediatrician. | Find a hospital or specialist. Search Something Manage account |
### **2. Combine intents separated by entities**
Avoid creating separate intents when they mean the same with the difference only in entities**.**
**Use Case**: To find a tyre
| Recommended | Not Recommended |
| -------------------------- | --------------------------------------------------------------------- |
| I am looking for X2 tyres. | I am looking for X2 I am looking for tyres |
### **3. Write full sentences**
Writing full sentences helps the system comprehend the true intent of training data.
**Use Case**: To transfer money
| Recommended | Not Recommended |
| ---------------------------------- | --------------- |
| I want to transfer money to India. | Transfer Money |
### 4. **Avoid providing duplicate training data for a single intent**
* Do not overtrain
* Avoid including sentences in the training data that differ only by an alternate word
**Use Case**: To find a hospital or a specialist
| Recommended | Not Recommended |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
Can you help me find a hospital? Where is the nearest hospital? | Here, the following two training phrases are duplicate
for the same intent, since they differ only
by an alternate word:
Can you help me find a hospital? Can you search for a hospital? |
### **5.** Avoid using the same or similar training data in different intents
Avoid using the same or similar training data that differ only by an alternate word in different intents. In such cases, different responses may be displayed to the user based on the closest match to the user's intent and it often results in confusion.
**Use Case**: Outlook email policy
| Recommended | Not Recommended |
| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Have a clearly defined intent with proper training data based on your use case. Avoid similar training data in different intents. | Intent 1: Outlook Email Policy
Training Data: Older emails are missing from Outlook
Intent 2: Outlook Missing Email
Training Data: Older emails are missing on Outlook
Here, both are different intents but the training data is similar and differs only by an alternative word
|
### **6. Use slots for alternatives**
Create custom entity types that is generic.
**Use Case**: To open a bank account
**Recommended**:
* I want to open a \[savings] account.
* I want to open a \[checking] account.
### **7. Use minimal words to convey meaning**
Leave out unnecessary and irrelevant words that do not contribute to the meaning of the sentence.
**Use Case**: To find a hospital or a specialist
| Recommended | Not Recommended |
| -------------------------------- | -------------------------------------------------------------- |
| Can you help me find a hospital? | Can you help me find a gigantic, sophisticated, huge hospital? |
### **8. Avoid spelling mistakes**
Spelling mistakes in the training data cause the system to make wrong spelling corrections for user queries.
**Use Case**: Quote status
| Recommended | Not Recommended |
| --------------------------------------- | -------------------------------------- |
| Can you give me the status of my quote? | Can you give me the status of my quot? |
### **9. Use proper case for all words**
The most common mistake is writing a full sentence in lowercase.
**Use Case:** Car service center in Bangalore**.**
| Recommended | Not Recommended |
| --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| Where is the Lexus service center in Bangalore?
Here, “L” in Lexus helps to identify a proper car brand.
| Where is the lexus service center in bangalore? |
### 10. **Ensure proper punctuation marks**
* It helps to identify the sentence type (declaration, question) and boundary.
* Missed or incorrect punctuation marks may make the training data completely unusable in some circumstances.
* Include punctuation marks such as period ( . ), comma ( , ), question mark ( ? ), exclamation point ( ! ), apostrophe( ' ), quotation mark ( "" ), and hyphen ( - ) as required.
**Use Case:** To transfer money
| Recommended | Not Recommended |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| What is the status of the transfer? I transferred money to my mother last week. | What is the status of the transfer I transferred money to my mother last week |
### **11. Readable intent name**
* In cases of disambiguation, the intent name is used as a button label. Hence, the intent names must be human-readable.
* Note that intent names can be longer with a full sentence
**Recommended**:
* Open a savings account
* Find a specialist for me.
* Get warranty information.
### 12. Generic vs specific training phrases
If you want training data that must match specific and generic queries, then it is recommended to provide generic training data. **Example**: If you wish to match "I want my fund value" and "I want fund value", then it is recommended to use "I want fund value" in the training data.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-channel.md
# Detect user device
You can use **context.user.getDevice()** to get the device details of the user interacting with the agent. See [getDevice()](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/reference-library/context/user#getdevice), for more information.
Consider that for analytical purposes you wish to log the details of the "user agent" with which the user is interacting with the MacPizza agent. The following is a sample JS to get the channel details and display them on the console. Similarly, you can get channel details and later use an external API to send data for analytical purposes, as required:
```javascript
var device = await(context.user.getDevice());
return "User agent details: " + device.user_agent;
```
In the agent, the "user agent" details are returned:

{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-channel.md
# Detect user channel
You can use **context.user.getChannel()** to get the device details of the user interacting with the agent. See [getDevice()](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/reference-library/context/user#getdevice), for more information.
Consider that for analytical purposes you wish to log the details of the "Channel name" with which the user is interacting with the MacPizza agent. The following is a sample JS to get the channel details and display them on the console. Similarly, you can get channel details and later use an external API to send data for analytical purposes, as required:
```javascript
var channel = await(context.user.getChannel());
return "Here is the channel name - " + channel.name;
```
In the agent, the channel details is displayed:

---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-user-tone-and-sentiment.md
# Detect user tone and sentiment
You can use `context.insights.tone` and `context.insights.sentiment` to detect tone and sentiment from a user query to either change flows or respond with appropriate messages as per your business requirement. See [context.insights](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights), for more information.
Consider that when you detect if a user is sad from the user query and then wish to provide a comforting response to the user. You can create a custom Smalltalk skill to capture such intents and write a JS code as follows:
```javascript
if(context.insights.tone == "Sadness" && context.insights.sentiment == "negative")
{
return "I am sorry to learn that. How can I cheer you up today?";
}
```
In the agent, when a user query with sadness is detected, then the following response is displayed:

---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/dialog-designer-overview.md
# Flow designer - Overview
The **Flow designer** is an intuitive conversational modeling tool that enables you to build multi-turn conversational flows quickly with user intents and responses. The **Designer** provides a comprehensive set of content templates such as surveys, forms, carousels, and rich media cards to create beautiful and engaging conversational interfaces.
## Components of a Flow designer
The following diagram illustrates the main components of the **Flow designer**:

## Scenario
Consider that you are building an **Order Pizza Dialog skill** in a Pizza agent that is responsible for taking the user through a conversation for capturing the required data to order a pizza.
1. Create an entity type - Pizza types with "veg" and "non-veg" entity values. See [Add entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information.
2. Start by adding invocation intent such as "I want to order veg pizza" to invoke the skill. See [Add invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent), for more information.
3. Change default greeting message of the Dialog skill to "We have a wide variety of freshly baked pizzas. Would you like to order veg or non-veg pizza?". See [Change default greeting message](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/change-default-greeting-message), for more information.
4. The next step is where you build the flow by adding nodes in the Flow designer.
## Invocation intent key
This is the intent key provided at the time of creating the invocation intent. See [Add invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent), for more information.
You can also use the intent key to transfer the conversational flow to a different intent based on your business requirement. See [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings) and [Flow control](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control), for more information.
## Node
This is a primary component of the Flow designer. A node consists of user intent and a corresponding skill message. **Example**: Consider the following flow in the Order pizza skill.

* After the skill is invoked, the first message that is displayed is "We have a wide variety of pizza. Would you like to order veg or non-veg pizza?"
* When the user specifies the intent as "Veg" or "Non-Veg" pizza, then the corresponding message from the agent is to ask for toppings the user wishes to add to the pizza. The skill message here can be - "Great. Let's add some toppings. You can say something like onion, tomato, cheese, pepperoni, or a combination of these."
* The intent "Veg" or "Non-Veg" pizza together with the skill message is referred to as a **node**.
### Creating a node
You can create a node in one of the following ways:
* **Using the plus (+) icon**: This creates a node below the current node.
* **Using the fork icon**: This creates a node as a forked branch to the current node. Use this when you are expecting different user intents for the same skill response.

**Example**: Considering the scenario of Order pizza skill, after the agent displays a message "We have a wide variety of freshly baked pizzas. Would you like to order veg or non-veg pizza?.", the user response can be "veg" or "non-veg". To implement this, you can create a node below the current node using the plus(+) icon to capture the user intent and corresponding response.
### User intent
User intent is where you capture the intention of what the user wishes to do. In the Flow designer, user intent is indicated using a red call-out bubble above "Add agent Response".
You can use one of the following options to specify the user intent - Training Phrase, Entity from Invocation Intent, System Intent, or Custom Code. See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.
**Example**: Considering the scenario of Order pizza skill, you can create a node with a user intent using the existing entity "Pizza types"

Each user intent is associated with a unique intent key that is specified at the time of creating the intent. See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information. Each user intent within a skill is uniquely identified using the following notation "I *<\>*" **Example**: "I pizza\_types".
{% hint style="info" %}
**Note**: The intent key for a forked branch node is the same for each child intent in the branch node.
{% endhint %}
You can also use the intent key to transfer the conversational flow to a different intent based on your business requirement. See [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings) and [Flow control](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control), for more information.
### Skill response
A skill message in the Flow designer is where you configure a response for the corresponding user intent. In the **Flow designer**, skill response is indicated using a red call-out bubble above "Add agent Response".
You can add rich responses to user queries in a Dialog skill. This can be as simple as a text message, card, quick reply, or complex JavaScript. See [Build skill responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses), for more information.
**Example**: Considering the scenario of Order pizza skill, after the user chooses a Pizza type - "veg" or "non-veg", you can proceed further in the conversational flow by asking the user to choose some toppings for your pizza:

## Next steps
Continue to build Pizza agent conversational flow by adding user intents and skill responses:
* Explore the various ways in which you can add user intents. See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.
* Explore the different types of skill responses such as card, carousel, quick reply, Listview. See [Build skill responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/dialog-intents.md
# Dialog intents
## Get dialog intents
`GET` `https://cx.avaamo.com/api/v1/agents/{{agent_id}}/intents/dialog.json`
Get a list of all the inline dialog intents (Training Phrases) from the agent.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| agent\_id\* | integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Query Parameters
| Name | Type | Description |
| --------- | ------- | -------------------------------------------------------------------------- |
| page | integer | Page from which the entries must be fetched. Default: 1
|
| per\_page | integer | Number of entries fetched per page. Default: 25 Maximum: 100
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | string | User access token. You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"current_page": 1,
"per_page": 5,
"total_entries": 1,
"total_pages": 1,
"time_token": 1590675148.365381,
"intents": [
{
"id": 185265,
"name": "MacPizza Order",
"created_at": 1590390904,
"updated_at": 1590661609,
"skill": {
"id": 17828,
"name": "MacPizza Order",
"type": "dialog",
"source_id": 20459,
"created_at": 1590390904,
"updated_at": 1590391698,
"status": "complete"
},
"training_data": [
{
"id": 1162843,
"created_at": 1590481750,
"value": "I want to have veg cheese pizza with french fries",
"slots": [
{
"id": 76492,
"mask": "I want to have veg cheese pizza with french fries",
"entity": {
"id": 102338,
"name": "pizza_type_1",
"entity_type": "pizza_type",
"entity_type_id": 21661,
"skill_ids": []
}
},
{
"id": 76493,
"mask": "I want to have veg cheese pizza with french fries",
"entity": {
"id": 102339,
"name": "pizza_toppings_1",
"entity_type": "pizza_toppings",
"entity_type_id": 21662,
"skill_ids": []
}
}
]
},
{
"id": 1165747,
"created_at": 1590569783,
"value": "I want to order veg cheese pizza",
"slots": [
{
"id": 77335,
"mask": "I want to order veg cheese pizza",
"entity": {
"id": 102338,
"name": "pizza_type_1",
"entity_type": "pizza_type",
"entity_type_id": 21661,
"skill_ids": []
}
},
{
"id": 77336,
"mask": "I want to order veg cheese pizza",
"entity": {
"id": 102339,
"name": "pizza_toppings_1",
"entity_type": "pizza_toppings",
"entity_type_id": 21662,
"skill_ids": []
}
}
]
},
{
"id": 1171919,
"created_at": 1590661609,
"value": "i want to order pizza",
"slots": []
}
]
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v1/agents/20xxx/intents/dialog.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v1/agents/20xxx/intents/dialog.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the response. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp intents Indicates an array of dialog inline intents from the agent. Number of entries in the array = Number specified in per_page parameter.
Each intent entry contains the following details:
JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get dialog inline intents from agent using pagination page : Specify the page from which you wish to fetch records.
per_page : Specify the number of entries per page.
Example : https://cx.avaamo.com/api/v1/agents/<<agent_id>>/intents/dialog.json?per_page=2&page=5
---
# Source: https://docs.avaamo.com/user-guide/skills/dialog-skill.md
# Dialog skill
- [Quick overview](/user-guide/skills/dialog-skill/quick-overview.md)
- [Create dialog skill](/user-guide/skills/dialog-skill/create-dialog-skill.md)
- [Add invocation](/user-guide/skills/dialog-skill/add-invocation.md)
- [Flow designer - Overview](/user-guide/skills/dialog-skill/flow-designer-overview.md)
- [Add user intent](/user-guide/skills/dialog-skill/add-user-intent.md)
- [Build skill responses](/user-guide/skills/dialog-skill/build-skill-responses.md)
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/dictionary-values.md
# Dictionary values
## Get dictionary values
`GET` `https://cx.avaamo.com/api/v1/agents/{{agent_id}}/dictionary_values.json`
Get a list of all the dictionary values from an agent.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| agent\_id\* | integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Query Parameters
| Name | Type | Description |
| --------- | ------- | -------------------------------------------------------------------------------- |
| page | integer | Page from which the entries must be fetched. Default: 1
|
| per\_page | integer | Number of entries fetched per page. Default: 25 Maximum value: 100
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Access-Token\* | string | User access token. You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
Users must have at least view permission on the agent. See Permissions , for more information
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"current_page": 1,
"per_page": 5,
"total_entries": 2,
"total_pages": 1,
"time_token": 1590675292.2248158,
"dictionary_values": [
{
"id": 19376,
"value": "POS",
"dictionary_id": 755,
"created_at": 1590399522,
"updated_at": 1590491408,
"synonyms": [
{
"id": 19377,
"value": "Pizza Order Status",
"parent_id": 19376,
"created_at": 1590399522,
"updated_at": 1590491408
}
]
},
{
"id": 19632,
"value": "SSN",
"dictionary_id": 755,
"created_at": 1590467160,
"updated_at": 1590491408,
"synonyms": [
{
"id": 19633,
"value": "Social Security Number",
"parent_id": 19632,
"created_at": 1590467160,
"updated_at": 1590491408
}
]
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v1/agents/20xxx/dictionary_values.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v1/agents/20xxx/dictionary_values.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### **Response attributes**
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the response. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp dictionary_values Indicates an array of dictionary values fetched from the agent. Number of entries in the array = Number specified in per_page parameter.
Each array entry contains the following details:
id: Unique value identifier value: Dictionary value dicitonary_id: Indicates the dictionary the value belongs to created_at: Created timestamp of dictionary value updated_at: Updated timestamp of dictionary value synonyms: Array of synonyms specified for the dictionary value. Each synonym contains an identifier, value, created_at, and updated_at details. JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
| Use-case | Query Parameter |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Get dictionary values from agent using pagination | page : Specify the page from which you wish to fetch records.
per\_page : Specify the number of entries per page.
Example : [https://cx.avaamo.com/api/v1/agents/\<\<agent\_id>>/dictionary\_values.json?page=2\&per\_page=5](https://cx.avaamo.com/api/v1/agents/\<\<agent_id>>/dictionary_values.json?page=2\&per_page=5)
|
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/disambiguation.md
# Disambiguation
When the response to a user query is found in more than one member agent (more than one member agent has the same intent), the Universal agent disambiguates between the responses by listing the member agents that have the response - the names of the first two member agents are displayed; the **More Options** link lists the names of the other member agents that have a response.

Once the member agent responds, all subsequent queries in the workflow (regardless of whether intents span over more than one agent) are answered by the same member agent. This is applicable even in the case of disambiguation. If subsequent query results in disambiguation, then disambiguation options also are within the context of the member agent that is currently in the transactional flow. This setup allows the Universal agent to keep the conversation within the context of a member agent when there are shared intents between member agents.
Similarly, when a member agent has more than one response (more than one intent is available for the response), disambiguation options are provided for the user to select the context for the response.
---
# Source: https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/document-attributes.md
# Document attributes
In enterprise organizations, content is extensive and often tailored to specific user groups. LLaMB facilitates seamless content ingestion and allows you to associate attributes with uploaded content.
Document attributes are valuable for filtering responses and creating personalized responses based on user properties like region, roles, and products. By creating user properties and associating document attributes with the ingested content in LLaMB, personalized responses can be efficiently generated from your enterprise content.
### Scenario: How to use it?
Consider a scenario in an enterprise organization where different privacy policies apply based on the employee's region. There is a requirement to display responses from the appropriate region-specific privacy policy according to the employee's location.
For example, if an employee from India inquires about the privacy policy, the response must be provided from the policy applicable to the India region. Similarly, if an employee from the US inquires about the privacy policy, the response must be sourced from the policy applicable to the US region.
### Step 1: Identify attributes
Identify the set of attributes from the URLs you wish to ingest into your LLaMB content and understand how the content is organized. Categorizing the content helps in determining the necessary attributes for creating personalized responses.
For example, you can define "region" as an attribute name for regional content. Similarly, for a set of Microsoft Office 365 suite URLs, you could define "product" as an attribute name. Another example is using "status" as an attribute to display responses based on the employee's status.
### Step 2: Create user property
The next step is to create a user property based on your identified attributes.
For the [given scenario](#scenario-how-to-use-it), you can create a `region`user property in the `Configuration -> User property` section. See [User property](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-user-properties), for more information.
### Step 3: Associate document attributes with the URL
Ingest the URL into your LLaMB Content skill and associate attributes based on the ingested content. Document attributes can be any name-value pair formatted as valid JSON. You can specify the attributes either at the time of [uploading the URL](https://docs.avaamo.com/user-guide/llamb/get-started/upload-content#upload-from-url) or if the URL has already been uploaded, you can [edit the document](https://docs.avaamo.com/user-guide/llamb/get-started/common-actions#edit) to associate the required attributes.
{% hint style="success" %}
**Key points:**
* Document attributes must be valid JSON.
* Ensure that the name of the user property matches the document attribute.
{% endhint %}
Property Description <<attribute_name>> Indicates the name of the attribute. Ensure that the name of the user property matches the document attribute. <<attribute_name>> -> value Indicates the attribute value associated with this content.
**Example 1:** Adding an Attribute with a Single Value Associated with a Key
**Example 2:** Adding an Attribute with an Array as the Value
### Step 4: Set user property
You can set the user properties in various ways based on your requirements.
* Using [User.setProperty](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperty) or [User.setProperties](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperties) in the conversational flow. Example: In the Greeting node or the User authentication handler as per your requirements.
* If you are using a custom channel, then you can specify user properties in the custom channel payload. See [Custom channel](https://docs.avaamo.com/user-guide/llamb/custom-channel), for more information.
For the [given scenario](#scenario-how-to-use-it), the user property is directly set in the Greeting node.
{% hint style="success" %}
**Key points**:
* The hardcoded value used in this example is for demonstration purposes only. In a real enterprise setting, user property values are typically set dynamically, such as from an API response following user authorization.
* If the user properties are not set, all ingested content in your agent, regardless of attributes, is used to render responses.
{% endhint %}
### Step 5: Test the conversation flow to view personalized responses
Open the agent simulator and ask a query from the uploaded Privacy Policy document.
In this example, the uploaded Privacy Policy document has the "region" attribute set to "India." Since the user property is set to "India," the responses is displayed from the document with the region attribute set to "India."
Now, update the user property to "China" and ask a query from the uploaded Privacy Policy document. Since the user property is set to "China" and there are no documents with the region attribute set to "China," an unhandled response is displayed.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a.md
# Dynamic Q\&A
- [Quick overview](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/quick-overview.md): Provides a quick glance at how you can build Dynamic Q\&A skills in the platform.
- [Create a new Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/create-a-new-dynamic-q-and-a-skill.md): Quickly create new Dynamic Q\&A skills from scratch or by importing from any one of the available skills in the skill store.
- [Build and manage Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill.md): Learn how to add Q\&A, import Q\&A, and perform other common actions such as edit, clear, and delete.
- [Add questions and answers](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/add-questions-and-answers.md)
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/perform-common-actions.md)
- [Test Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/test-dynamic-q-and-a-skill.md)
- [Debug Dynamic Q\&A skill](/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/debug-dynamic-q-and-a-skill.md)
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/email-notifiers.md
# Email Notifiers
You can configure email notifications to alert stakeholders whenever a job fails. This helps teams monitor job health, quickly identify failures, and take timely corrective action.
When email notifiers are configured, the system sends a notification to the specified email addresses if a job fails. For example, if an auto-sync job scheduled to run at a specific time fails, the configured recipients receive an immediate alert.
**To configure email notifications:**
1. Navigate to the job.
2. Click the three-dot menu next to the job name and select `Email Notifiers`.
3. Add up to five email addresses, using `+ Add` to include them one by one. Click `Save` to apply the configuration.
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/end-to-end-flow.md
# Example: All concepts together
This article provides a few examples that help you to understand how all the concepts come together when a user interacts with an agent.
### Weather agent
The following diagram illustrates a simple flow of a user interacting with a Weather agent to find the weather details:

### Pizza agent
The following diagram illustrates a simple flow of a user interacting with a Pizza agent for placing a pizza order:
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/entity-skipping.md
# Entity skipping
Avaamo Platform provides the ability to automatically detect the entities in a user query and skip asking questions to the users for which the answers are already available in the initial query. This is referred to as entity skipping.
**Examples**:
| Entity type | Entity values |
| ------------ | ---------------------------------------- |
| Pizza types | Veg, Non-Veg, Vegan |
| Specialists | Cardiologist, Neurologist, Paediatrician |
| Account type | Savings, Current |
Further, you can also link an entity type to a parent entity type. **Example**: state entity type as a parent of the city entity type. The state entity type can in turn be a child of the country entity type. See [Add entity types to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent), for more information.
{% hint style="info" %}
**Notes**:
* If at the same level, multiple entity intents are matched for a user query, then entities are not skipped, as the platform is unsure which flow to further navigate. On the other hand, if you have such a use case, then consider accessing your requirements and revisiting your flow if required.
* Post-processing is where the intent execution still continues after matching a node; hence, when post-processing is enabled at a node, the entity skipping is no longer relevant and is not evaluated.
{% endhint %}
Consider the following sample flow implementation in an "Order Pizza" dialog skill for ordering pizzas:

### Entity type - Simple use case

* Create an entity type "Pizza type" for types of pizzas. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type) and [Add entity values](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/manage-entity-types#add), for more information

* In your Dialog skill, the user intent "pizzatype" is mapped to the entity type "pizza\_type". See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.

* Test the agent using the agent icon at the bottom-right corner:

* Click the eye icon, you can view the entity extracted in the user query.

Note that if you specify a value other than those mentioned in the entity values, then the query goes to an unhandled response.
### Entity skipping - Entity type linked to parent entity type

* Create an entity type "Pizza toppings" and specify "Pizza type" as the parent entity type. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type) and [Add entity values](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/manage-entity-types#add), for more information.

* In your Dialog skill, the user intent "pizzatoppings" is mapped to the entity type "pizza\_toppings". See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.

* Test the agent using the agent icon at the bottom-right corner. Note that as the entities are extracted from the user query, the platform understands that the details on the pizza type and pizza toppings are already provided by the user. Hence, those responses are skipped and the skill response after the pizza toppings is displayed to the user.

* Click the eye icon, you can view the entity extracted in the user query.

Note that if you specify a value other than those mentioned in the entity values, then the query goes to an unhandled response.
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types.md
# Entities
In simple terms, if an intent refers to a verb or the action in the user query, then an entity refers to a noun (the object on which the action is performed) in the user query. **Example**: In the user query \
"I want to book tickets from San Francisco to New York", San Francisco and New York represent entities of type Location.
### Entity types
An entity type is a named collection of similar objects such as states in a country, all pediatricians, a list of product names, or data types (Date, Email, Location). Each entity type contains one or more values. **Example**: An entity type named "US City" contains values - Los Altos, San Francisco, Los Angeles.
The following entity types are available in the Avaamo Platform:
* **System entities**: In-built entities in your agents that can match the common data types such as Location, Date, DateTime, Person, Organization.
* **Custom entities**: User-defined entities that represent the structured data related to your business. Few examples of customized entities in a Pizza agent - pizza size (small, medium, large), toppings (cheese, corn, tomato).
{% hint style="info" %}
**Notes**:
* When you define a custom entity, the custom entity values must be replaceable in all the training data, which implies that in all the intents the custom entity values must have the same meaning.
* If you are using a date-time system entity in your training data and in a scenario where the only day and month is specified in the user query but not the year, the system picks the closest date to the current date. Example:
* Date in user query -> Feb 12
* Current date -> Aug 6, 2020
* Since Feb 12 2020 is closer than Feb 12, 2021, the year considered in the user query is 2020 instead of 2021.
{% endhint %}
### **Entity alternate values**
Some of the entity values may have one or more direct alternate values or other phrases/words considered equivalent in meaning.
**Examples**:
* City entity type:
Entity value Alternate value San Francisco SF New York NYC, The Big Apple
* Pizza sizes entity type and alternate values
| Entity value | Alternate value |
| ------------ | --------------- |
| small | 12 inch |
| medium | 14 inch |
| large | 16 inch |
See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information on managing entity types and their values in the Avaamo Platform.
### Entity disambiguation
When a user value does not match a specific entity value at a node entity step in the conversation flow, the agent responds with a selection of closest entity values, referred to as entity disambiguation.
Consider that you have an entity type "Colorado Cities" with four values - Colorado Springs, Glenwood Springs, Hot Sulphur Springs, and Idaho Springs.
In the conversation flow, if a node entity "Colorado Cities" is expected and the user just enters "Springs" when asked for a Colorado city, then the system shows a disambiguation message to confirm for "Colorado Springs" or “Glenwood Springs” and any other entity value with Springs in "Colorado Cities" entity type.

{% hint style="info" %}
**Notes**:
* This disambiguation works even when there is a single option.
* The top 5 closest disambiguations is displayed to the user.
* Disambiguation options are from the selected entity node values.
{% endhint %}
### Name entity recognition
In certain scenarios, the entity values are also used as common words. Example: "I am looking for Doctor Treat" and "Chocolate is his favorite treat". Both of these mean different in different context. For such scenarios, you can create a custom name entity type for the Platform to appropriately recognize and extract the "Name" entity as required based on the context of the user query.
{% hint style="info" %}
**Notes**:
* This feature is applicable to only custom entity types.
* Contact support to enable this feature for your agent.
{% endhint %}
**Example**:
User: "*I am looking for Doctor Bill*", extracts Bill as a name

Here, the name is a custom entity type and this query extracts *Bill* as a name.
User: "*I am unable to find my bill*", does not extract bill as a name.

Here, the word "bill" is not extracted as a "Name" entity.
### Number entity extraction
When the user enters a number name instead of a number, the number name entity is automatically recognized and converted to a number if it is expected at a number entity step.
**Example**: If a user enters "two and half million", then it is automatically converted to 2500000 if it is expected at a number entity step or if a user enters a query as illustrated below then the number name is automatically converted to a number entity.

---
# Source: https://docs.avaamo.com/user-guide/configuration/environment-variables.md
# Environment variables
You can define environment variables from the `Configuration -> Environment variables` option. These are constants that can be accessed anywhere in the agent and are global to all users of the agent.
**Examples**: External service access credentials like web service login credentials, webservice\_username, webservice\_password.
Refer [Environment variables](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-environment-variables), for more information.
---
# Source: https://docs.avaamo.com/user-guide/debug/error-log.md
# Error Log
You can view all the error details that occurred during the execution of responses from the agent. This section helps developers to monitor, filter, and analyze error logs effectively.
#### **Histogram**
* This graph provides a **visual representation of errors over time**, allowing you to spot patterns or spikes quickly.
* **X-axis:** Displays the dates within the selected range.
* **Y-axis:** Shows the count of errors recorded on each date.
#### **Filter Error logs**
**By type:**
Use the filter dropdown to view only **Errors** or only **Warnings**. Select the required option from the dropdown to apply the filter.
**By skill type**
Use the **Skill type** filter to view JS errors for a specific skill. Select a skill from the dropdown (which lists all skills associated with the agent) to narrow down the error list.
**By date:**
Use the date filter to view Error logs within a specific date range (up to 90 days). By default, the page shows errors from the last 30 days.
Click the date picker and choose one of the preset ranges, Last 30 days, Previous 15 days, or Today, or select **Custom Range**. For a custom range, pick a start date, drag to the end date, and click **Apply**.
#### **Search JS error logs**
Use the **Search** option to find error logs by entering a **conversation\_uuid** or **conversation\_session\_ID**. This helps you quickly locate specific conversations and troubleshoot issues more efficiently.
#### **Log Table**
This table lists the individual error entries in detail. The main columns include:
* **Type:** Specifies the type of error.
* **Skill:** Identifies the skill associated with the error.
* **Conversation UUID:** A unique identifier for the conversation.
* **Conversation Session ID:** Unique identifier assigned to each conversation session between a user and an agent.
* **Timestamp:** Indicates the exact date and time when the error occurred.
* **Actions:** Provides options to interact with each log entry. Click `View` to see details.
### Key features
The error logging system provides a streamlined way to detect, analyze, and resolve issues across your application. Here's how each feature helps improve visibility and troubleshooting:
**Unified Error Log**\
Instead of checking multiple sources, you get a single view that consolidates all API and JavaScript errors. This makes it easier to troubleshoot issues without switching between tools or logs.
**Proactive Alerts**\
You don’t have to wait for users to report problems. The system can alert you in real time when issues arise, such as a sudden latency spike or a runtime error, so you can respond quickly.
**Deep Insights**\
Each error entry includes detailed metadata, such as the error type, the skill or component involved, and the exact time it occurred. This helps you understand what went wrong and when. You can also export logs for later review or share them with your team.
**Integrated Debugger**\
Troubleshooting is faster when everything you need is in one place. The built-in debugger lets you dig into errors directly from the log view, helping you trace the cause and test solutions without switching environments.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/example-pizza-agent.md
# Examples
Consider the following sample flow implementation in an "Order Pizza" dialog skill for ordering pizzas:
{% hint style="info" %}
**Note**: If at the same level, multiple entity intents are matched for a user query, then entities are not skipped, as the platform is unsure which flow to further navigate. On the other hand, if you have such a use-case, then consider accessing your requirements and revisiting your flow if required
{% endhint %}

Also, consider the following sample flow implementation in an "Order Status Pizza" dialog skill for getting status of a pizza order:

### Entity type - Simple use case

* Create an entity type "Pizza type" for types of pizzas. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type) and [Add entity values](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-entity-types#add), for more information

* In your Dialog skill, the user intent "pizzatype" is mapped to the entity type "pizza\_type". See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.

* Test the agent using the agent icon at the bottom-right corner:

* Click the eye icon, you can view the entity extracted in the user query.

Note that if you specify a value other than those mentioned in the entity values, then the query goes to an unhandled response.
### Entity skipping - Entity type linked to parent entity type

* Create an entity type "Pizza toppings" and specify "Pizza type" as the parent entity type. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type) and [Add entity values](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-entity-types#add), for more information.

* In your Dialog skill, the user intent "pizzatoppings" is mapped to the entity type "pizza\_toppings". See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.

* Test the agent using the agent icon at the bottom-right corner. Note that as the entities are extracted from the user query, the platform understands that the details on the pizza type and pizza toppings are already provided by the user. Hence, those responses are skipped and the skill response after the pizza toppings is displayed to the user.

* Click the eye icon, you can view the entity extracted in the user query.

### Entity type with regular expression
* Create an entity type "Order number" with a regular expression for the order number. In this example, the order number starts with a character followed by four numbers. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type) and [Add entity values](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-entity-types#add), for more information.

* In your Dialog skill, the user intent "order number" is mapped to the entity type "order number". See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.

* Test the agent using the agent icon at the bottom-right corner.

* Click the eye icon, you can view the entity extracted in the user query.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.1-cloning-a-sample-agent.md
# Exercise 1.1: Cloning a sample agent
The easiest way to understand how agents work is by observing and understanding how a sample agent works. Once you login to your Avaamo dashboard, you are presented with 4 sample agents. These agents are
* Sample: My Assistant
* Sample Agent: Auto Insurance
* Sample Agent: Service Desk
* Sample Agent: Healthcare.
Pick the Sample Agent, Sample Agent: My Assistant. Make a copy of the Agent by clicking the hamburger menu and select the option - Make a Copy

Once the copy starts, the following message is displayed:

Click OK, the copy process runs in the background. Once the copy is complete, you now have a clone Agent that is ready.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.2-asking-questions-to-the-agent.md
# Exercise 1.2: Asking questions to the agent
Now that your agent is ready, try asking some questions and see how it responds. In your agent (Sample: My Assistant) try asking these questions:
```
I want to order a medium cheese pizza
What is the weather like in Seattle?
I want to see some general news
What's the stock price of Microsoft?
```
You can even use misspellings, try these examples:
```
I want to oder a pizza
What is the weater like in Seattle?
I want to general nws?
```
If the agent is not sure what you are asking about it responds with a disambiguation question. Try these examples to see the behavior:
```
I want to order a smed piza?
I wnt to se news?
Wht the stck pice of Microsft?
```
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.3-changing-agent-avatar-and-name.md
# Exercise 1.3: Changing agent avatar and name
Click the edit icon (pencil) next to the agent name on the top left corner. The following pop-up is displayed, where you can edit agent name and description:

Follow these steps to change the Agent Name and Agent Avatar:
* Let us change the Agent name to "My Assistant" by clicking on Agent Name.
* To add a new Avatar, click Agent Avatar and upload an image for the agent, choose your favorite image, and upload it. Once you have made all your changes, go ahead and click the update button. Refresh your screen to see your changes.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.4-changing-welcome-message.md
# Exercise 1.4: Changing welcome message
To change the welcome message you can click the Greeting in the built-in skills section.
Once you are in the greeting message, delete the text output**,** and then add a card. In the description section of the card, add a short welcome message to your agent. For example:



---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.6-deploying-your-agent-to-a-web-page.md
# Exercise 1.6: Deploying your agent to a web page
To deploy your Agent on the web navigate to Agent -> Configuration -> Channel -> View -> Test.
This will open the agent on a new webpage, you can now go ahead and test your agent.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.6-entity-types.md
# Exercise 1.5: Entity types
In the Agent menu, click *Entity types* to observe and see the entities that the Agent is using. In our example we see that the agent is using the following entities:
* Pizza Size
* Pizza Toppings
* US cities
* US States
* Stock Symbol
* Stock Name
Let’s try to edit some entity types and add some alternate values.
* Click the entity type Pizza Size and add value - Extra large. Our agent will now understand that extra large is a pizza size.
* To this extra-large entity type add alternate values as shown below.

* Save the changes in your agent.
### **Testing your Updated Entities**
Now that we have made so many changes to our Agent, let’s open up the Agent Simulator and ask some questions. Try incorporating the new entity types in your queries to see if the agent is able to understand the changes you have made.

### **Resources**
* [Entity types](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types)
* [Add entity types to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent)
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-10-life-cycle-management-and-agent-permission/exercise-10.1-understanding-life-cycle-management.md
# Exercise 10.1: Understanding Life-Cycle Management
Typically the agent goes through different stages in its lifecycle right from the time of its inception to the time it is pushed into production. Agents typically follow Development, Testing, Staging, and production. In the new Avaamo 5.0, you can create users with different roles for collaborating in each stage of the agent lifecycle. This allows teams to develop, test, stage, and deploy agents in a different environment, thereby providing the required compliance.
**10.1.1** **Development**
Users with development roles gather requirements, configure the development environment, start designing and developing agents and skills as well as agents. The developers can also create copies of the agent and then prepare the agent for testing for the testing team.
**10.1.2** **Testing**
Users with a testing role testers can promote agents from development to testing environment, configure the test environment, test the agent’s functionality, and report bugs and issues. Once testing is complete they notify the staging users, to promote the bot from testing to staging.
**10.1.3** **Staging**
Users with the staging role can promote the agents from testing to staging, configure the staging environment, test the agent’s functionality by replicating production instance, report bugs, and issues. Staging users can also pull updates from testing to staging for re-testing the issues reported.
**10.1.4** **Production**
Users with the production role can promote agents from staging to the production environment. Production users can configure the production environment and report bugs and issuers in the live production instance. Production users can also pull updates from staging to production and also apply hot-fixes to the production if and when necessary.
**10.1.5** **Reference Documentation**
See [Plan your development process agent life cycle](https://docs.avaamo.com/user-guide/how-to/plan-your-development-process-agent-life-cycle), for more information.
Along with these stages, you can assign different roles to the users, to assign different roles:
* Log in to the user profile
* Grant roles such as Development, Testing, Staging, and Production

.png?alt=media\&token=46d1b148-bf03-4f4a-81e5-0187770e2c95)

{% hint style="info" %}
**Note:** You can only give access to the users if you have the setting role assigned. If you don’t have the setting role then contact your admin.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-10-life-cycle-management-and-agent-permission/exercise-10.2-understand-agent-permission.md
# Exercise 10.2: Understand Agent Permission
When you create an agent, you become the owner of the agent. Also, when a user promotes an agent, he becomes the owner of the agent. As the owner of the agent, you can now assign different permissions to different people within your company.
There are 4 types of permissions available for the agent:
* **View** - Users can only view the agent, but cannot edit it
* **Edit** - The users can view and edit the agent
* **Publish** - Users can view agent, edit agent and publish skills from the agent to the skill store
* **Owner** - Full access to the agent. Users can view agent, edit agent, publish agent from the agent to skill store, and edit agent permissions.
To give users permission to access your agent navigate to **Agent -> Configuration -> Permission**

See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.1-avaamo-skill-store.md
# Exercise 11.1: Avaamo Skill store
The Avaamo skill store is the central repository of all the skills. These skills are prebuilt and pre-trained. You can use import these skills into your agent and use it as it is or customize it to your liking. To access the skill store navigate to Home Screen -> Skill Store.

In the skill store you will find prebuilt skills under the following categories:
* Banking
* Travel
* Mutual fund,
* Life Insurance
* Telecom
* Service Desk
* Healthcare
* Education
* Stock Broking
* Human Resources
* Supply Chain
* Health Insurance.

See [Avaamo skills](https://docs.avaamo.com/v5/how-to/manage-skills-store#avaamo-skills), for more information.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.2-company-skill-store.md
# Exercise 11.2: Company Skill Store
The Company skill store contains a collection of all published skills available in your company skill store across certain user-defined categories.
Avaamo Platform also allows you to group your company skills into different categories. By default, four categories are available - Category A, Category B, Category C, and Category D. Based on how you want to organize these skills, you can create your own categories and add them as well.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.3-creating-new-categories-in-the-skill-store.md
# Exercise 11.3: Creating new categories in the skill store
To create a new category in the skill store do the following:
• Navigate to company skills and click on New category

• Give your category a name and save. Your category will now appear in the company skills

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.4-adding-skills-to-the-company-skill-store.md
# Exercise 11.4: Adding Skills to the Company skill store
Once you are done building and testing the skill, and you would like to share your skill with other users, then click on the hamburger menu available in the skill and click on Publish to skill store as shown below:

Once you click on publish to skill store, fill in the skill details as shown below:

Click on publish and your skill will be available in the company skill store in the category you selected

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.5-updating-a-published-skill-to-a-new-version.md
# Exercise 11.5: Updating a published skill to a new version
Once you publish a skill, you can make changes and upgrade your company skill store with the latest changes that you have made to your skill. Your skill can be upgraded by as shown below:

Click republish to the skill store, update the changes, and also change the version number to help users understand that you have changed/ updated your skill.

Once you have made all the changes, you will be asked if you want to update your skill. Click Yes

Your changes will now be available in the company skill store.\

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.1-create-an-answers-skill.md
# Exercise 2.1: Create an Answers skill
{% hint style="danger" %}
Answers skill is deprecated in Atlas 8. See [Atlas 8 - Deprecated and removed features](https://docs.avaamo.com/user-guide/deprecated-and-removed-features/atlas-8-deprecated-and-removed-features), for more information.
{% endhint %}
* In the Agent page, navigate to the Skills option in the left navigation menu and click *Add skill*.
* In the Skill builder page, select Answers and click Create.
* Specify Skill name: Credit Card Policy and Skill description: FAQs related to credit card policy and click Create.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.2-uploading-a-document.md
# Exercise 2.2: Uploading a document
In the Answers skill page, click *Add documents* in the Documents tab. Click *Select files*, choose a PDF document, and click the *Import* button.

Once the document is uploaded, and the training is completed, your Answers skill is now ready for use.

In the Agent page, click the agent avatar in the bottom-right corner. You can now ask questions to see if you are receiving appropriate responses. Click *View More* to view the actual section in the document. All the conversations are stored in the answer history and you can view the same to fine-tune the skill.
Here are some example questions:
```
What is the late payment fee?
What is the penalty fee?
```

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.3-examining-answers-knowledge-base.md
# Exercise 2.3: Examining Answers knowledge base
To navigate to the knowledge goto **Answer Skill -> Implementation -> Knowledge**
To understand Answers better, click on the *Knowledge* menu item in the skill menu. The knowledge page consists of five tabs:
* Sections
* Entities
* Acronyms
* Vocabulary
* Knowledge graph
### **2.3.1 Sections**
Sections are chunks of content extracted and created based on the structure of the uploaded document. Each section contains the skill’s response to the user’s intent. You can add additional training data as required. Each section is displayed with a breadcrumb that indicates the page number from which the section is extracted and the corresponding section header.
Navigate to the *Sections* tab and observe the sections that have been identified.

### **2.3.2** **Entities**
Entities are business terms in your document. All entities are identified and extracted from your document and classified as entities in this section. Here, you can either view all the entities from all the documents or select a specific document and view all the entities.
You can change the document by selecting the document from the dropdown in the top right corner of the page. Select an entity from the list and try adding all the values. Test this in the agent to see how it responds

### **2.3.3** **Acronyms**
If there is an acronym used in your document, then the acronym along with the full form is present in the acronyms tab. Here, you can view all the acronyms available in the document. You can get the definition of an acronym, like in the following examples:
*What is APR?*
*What is DPR?*

### **2.3.4** **Knowledge Graph**
This is a view-only graph that maps the relationship between words. This mapping is based on the document uploaded, the content and context of the document.
### **2.3.5** **Resources**
[View and Edit Knowledge](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/view-and-edit-knowledge)
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.4-building-an-answers-skill-from-a-url.md
# Exercise 2.4: Building an Answers Skill from a URL
Here we learn how to build an Answers skill by providing a publicly accessible URL.
* Create an Answers skill as we have done previously with the *Skill name* Microsoft Support and *Skill description* Answer Skill for Microsoft Office Support

* In the Answers skill page, click on the button *Add URL* in the Documents tab. In the popup, provide the URL, a name for the URL, and click the button Import URL.
* Once the import is successful and training is complete, your Answers skill is now ready for use.
For the ease of understanding, the URL being used in this module is [Put a background picture on your slides](https://support.microsoft.com/en-us/office/put-a-background-picture-on-your-slides-7a17358c-b76e-4c94-84db-604e1bba76da?ui=en-us\&rs=en-us\&ad=us). You can either use this URL or use any other publicly available URL.
Here are some example queries to try with the URL provided above:
```
Adding a background picture
Pictures on slides
Putting a background image on a slide
```
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.5-training-your-skill-and-training-the-knowledge-models.md
# Exercise 2.5: Training the knowledge models
### **Retrain**
If you have edited the details of your uploaded document or URL then you need to retrain the document. You could also use this option if there has been an error during upload.
**To retrain follow the following steps**:
* In the Answers Skill page, navigate to Implementation -> Documents\
option in the left navigation menu.
* Click Retrain option, this starts a new cycle of extracting the content and creating a new knowledge base.
### **Edit**
Here you can make edits to your document. To make edits to your document
* In the Answers Skill page, navigate to Implementation -> Documents\
option in the left navigation menu.
* Click the Edit option. Update the title. (Attributes will be covered in the advanced training).

### **Adding Training Variations**
You can train the skill to increase the accuracy of the skill. In order to do so, we need to identify the section to which your question corresponds and then train the section with your question.
In our example- What is the late payment fee?, let’s add the training data: What is the late fee?
* Navigate to Answers -> Implementation -> Knowledge -> Section
* Search for the section using the search bar located in the section tab

* Once you have found the section, let's add, What is the late fee? as training data to the Add Training Data section.
* Save your changes in the Skill and test this variation in the Agent.
* Repeat this exercise for 3 other sections of the document.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.1-create-a-q-and-a-skill.md
# Exercise 3.1: Train the Skill with Questions and Answer Pairs
## **Create a Q\&A Skill**
* Navigate to **Agent -> Skills**
* Click the *Edit* button in the upper right-hand corner

* Click on *Add Skill* button
* In the displayed page, click the *Q\&A* card

* Specify the following details using the values from the picture below and click the *Create.*
## **Add question and answers**
* In the Q\&A page, click Question & Answers in the Implementation tab.
* Click plus icon to add user questions and the skill responses (answers).

* Let us add intent and call it Order return and cancelation. Add the following training phrase and message to your intent from the text in the table below.

| Training Phrase | Message |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Can I cancel an existing order? | You can return your online order in store. If you do not have your receipt, you may return your purchase for in-store credit at our lowest selling price during the previous 30 days. You will need to provide a valid form of identification to return an item without a receipt. There are restrictions on special orders. |
* Repeat the same exercise for 3 more question-answer pairs of your choice.
* Test your skill in the agent and see how it responds.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.2-add-questions-and-answers.md
# Exercise 3.2: Adding Variations to Question and Answer Pairs
By adding variations to the intents you have created, the skill can handle many more variations of the same question.
Let us add two more variations
| Intent | Variation |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Can I cancel an existing order? | I want to cancel an existing order
I have placed an order and want to cancel it. Can I cancel it now?
|
Save your changes in the skill, and save the changes in your agent. Test these changes in your agent and see how it responds.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.3-configuring-user-feedback.md
# Exercise 3.3: Configuring User Feedback
You can set up user feedback for your Q\&A Skill too. By doing so you can keep track of helpful these answers have been to the user.
To set up feedback
* Click the edit icon skill name
* Enable feedback

* Once you have enabled feedback in your skill, test your skill in the agent to see how feedback appears.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.4-adding-an-introductory-message-to-q-and-a-skill.md
# Exercise 3.4: Adding an Introductory Message to Q\&A Skill
An intro message is a small introductory message that precedes the answer from the agent.
* To add an intro message to your Q\&A skill, click the intro messages as shown below.

* Add a small message as text input to the intro message as shown below.

* Once you are done with the changes, save your changes, and test them in the agent.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.5-adding-an-outro-message-to-your-q-and-a-skill.md
# Exercise 3.5: Adding an Outro Message to your Q\&A Skill
An outro is a message that follows the Q\&A response.
* To add an outro message to your Q\&A skill, click the outro messages as shown below.

* Add a small message as text input to the outro message as shown below.

* Save the above changes and test them in the agent.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.1-default-smalltalk-skill.md
# Exercise 4.1: Default Smalltalk skill
Smalltalk is a form of Q\&A skill that allows you to build a personality for your agent to represent the organization. It can be used across agents developed by the organization. Smalltalk has lesser priority as compared to Q\&A skills.
Examples of Smalltalk questions are:
```
Who built you?
Who is your CEO?
Which is your favourite sports team?
```
Open the Smalltalk skill in the skill builder and see what questions are already answered. Create a list of questions and answers that would want your agent to answer.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.2-creating-a-smalltalk-skill.md
# Exercise 4.2: Creating a Smalltalk skill
* In the Agent page, navigate to the *Skills* option in the left navigation menu, click *Add skill* button in the Agent skills page.
* In the Skill builder page, select *Smalltalk* and click *Create*.
* Specify the following details and click *Create*:

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.3-adding-variations-to-your-smalltalk-questions.md
# Exercise 4.3: Adding variations to your Smalltalk questions
Just as we did in the previous step, add a question-answer pair to your new Smalltalk skill.
Adding Question and Answers
* In the Smalltalk page, click Question & Answers in the Implementation tab.
* Click plus icon to add user questions and the skill responses (answers).

* Let us add intent and call it: Who is your CEO?. Add the following training phrases and messages to your intent
| Training Phrase | Message |
| ---------------- | ----------------------- |
| Who is your CEO? | Jason Smith is our CEO. |

* Repeat the same exercise for 3 more question-answer pairs of your choice.
* Test your skill in the agent and see how it responds.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.4-train-q-and-a-pairs-with-variations.md
# Exercise 4.4: Train Q\&A pairs with variations
By adding variations to the intents you have created, the skill can handle many more variations of the same question.
Let us add two more variations:
| Intent | Variation |
| ---------------- | -------------------------------------------------------------------------------------- |
| Who is your CEO? | Tell me more about your CEO.
Where can I find information about your CEO?
|
Repeat this step and add 2 or more variations to all your Smalltalk pairs.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.5-test-smalltalk-in-your-agent.md
# Exercise 4.5: Test Smalltalk in your agent
Save your changes in the skill and save changes in the Agent. Test these changes in your agent and see how it responds.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.1-creating-a-dialog-skill.md
# Exercise 5.1: Creating a Dialog skill
Let us build a skill to create an incident using ServiceNow integration. Here are some ways people can ask the agent to create a ticket:
```
I want to create a support ticket
My printer is not working, create a ticket
My Desktop is laggy, raise an incident
```
For the purpose of this exercise, we are limiting the training to these 3 phrases, you can go in and add more training data.
**To create a new Dialog skill**:
* In the Agent page, click on the Skills option in the left navigation menu to display the Skills page. Click on the *Add skill* button.
* In the Skill builder page, select Dialog skill and click *Create*.
* Specify the following details and click the *Create* button:

* Now, let us add some some training data to our invocation intent. After adding the training data, we can see that entities are automatically identified and slotted by the platform:

Let us create a conversation flow for this skill.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.2-creating-a-conversation-flow.md
# Exercise 5.2: Creating a conversation flow
We will be using a sample ServiceNow instance for my integration here. The mandatory fields to create a ticket are Short description, Description and Urgency.
* Our first node will be used to capture the short description, let us create the first node:

* Our Second node will be used to capture a detailed description of the issue reported. Let us create node 2.

* Our third node will be used to capture the urgency of the ticket. Lets use a quick reply to show the urgency. The buttons will be:
* High
* Medium
* Low
* Select the post message option for each of the buttons added to a quick reply.


* At the end your conversation tree will look like above. Create a blank node 4, will be used to integrate with the service desk.
{% hint style="info" %}
**Tip**: It is good to have validation for each node, for example, you can check if the short description is too short, or you can even check if the user entered the right urgency. You can use your validation code in post-processing.
{% endhint %}
Documentation that describes how to create a new dialog is found at this link: [Create a new Dialog skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill)
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.3-capturing-data-from-a-conversation.md
# Exercise 5.3: Capturing data from a conversation
There are two ways to capture and store data from a conversation:
* Using a JavaScript property `context.variables`.
* Using Javascript methods: `Storage.user.set()` to store and `Storage.user.get()` to retrieve. For this example, you will be using context.variables. Context values are stored only along one single branch, if your conversation switches branches then the value is lost.
In the post-processing section of the document add this code for each node as shown below:
### Node 2
* Name: `capture short description`
* Intent Type: Training Phrases
* Post Processing: Yes
* Post Processing Script:`context.variables.short_description = context.last_message;`

### Node 3
* Name: `capture description`
* Intent Type: Custom Intent Code:
* `return true`
* Post Processing Script: `context.variables.short_description = context.last_message`;

### Node 4
* Name: `Capture Urgency`
* Intent Type = Custom Intent Code
* `return true`
* Post Processing: Yes
* Post Processing Script: `context.variables.short_description = context.last_message;`

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.4-adding-a-javascript.md
# Exercise 5.4: Adding a JavaScript
Let us add the javascript that will create the incident
You can add the following code to your code block:
```javascript
var SERVICE_NOW_INSTANCE_ID = "66374";
var SERVICE_NOW_URL = "https://dev"+SERVICE_NOW_INSTANCE_ID+".service-now.com/api/now/";
var SERVICE_NOW_USERID = "admin";
var SERVICE_NOW_PWD = "qPoOh5VfCsV5";
let SERVICE_NOW_CALLER = "2def7d7edb3d330082fb6a49489619c0";
function createNewIncident(description,urgency,sht_desc) {
let caller = SERVICE_NOW_CALLER;
let url = SERVICE_NOW_URL+'table/incident'
return await(fetch(url, {
method: 'POST',
headers: {
"Content-Type": "application/json",
'Authorization': 'Basic '+Buffer.from(SERVICE_NOW_USERID+':'+SERVICE_NOW_PWD).toString('base64')
},
body: JSON.stringify({
"short_description": sht_desc,
"caller_id": caller,
"description": description,
"severity": 8,
"impact": 9,
"urgency":urgency
})
}).then(function(response) {
return response.json();
})
.then(function(apiJson) {
console.log(apiJson.result);
return apiJson.result.number;
}));
}
let shortDescription = context.variables.short_description
let description = context.variables.description
let urgency = context.variables.urgency
var incidentNumber = createNewIncident(shortDescription, description, urgency);
if(incidentNumber){
return ("Ticket "+incidentNumber+" has been created on your behalf.");
}
else{
return "Unable to create a ticket at the moment. Please try again later.";
}
```
Once the code has been written, save your changes to the skill and build the agent. Let us test the skill to see how it responds.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.4-test-the-dialog-skill.md
# Exercise 5.5: Test the Dialog skill
Click the agent icon on the bottom right corner of the screen and ask the agent questions that you have trained it with.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.5-deploy-your-agent-on-a-web-channel.md
# Exercise 5.6: Deploy your Agent on a Web Channel
**To deploy your agent on a web channel,**
* Navigate to Agent Configure -> Channels
* Once in channels, click the view in the web channel card.

* Click Test in the pop-up

* Click on the Test button to view how your agent will appear in a web browser.You can change the background of the webpage by using the parameter “\&background = \”
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.1-analytics-dashboard.md
# Exercise 6.1: Analytics Dashboard
In the Agent Configuration menu, click Monitor to understand and view the analytics of the agent.
* To find your top intents in the Agent, navigate to **Agent-> Monitor -> Analytics**

* On this dashboard**,** you will see different conversation metrics associated with the agent. You can see the total queries, Active users, Channels, User Feedback, Top dialog skills, and top Q\&A intent.
* Observe the analytics for your agent and identify the top intents.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.2-user-journey-display.md
# Exercise 6.2: User Journey Display
The User Journey displays the user’s journey through the conversation with the agent. This can be used to analyze the user’s experience with the agent that can also be used to improve the conversation flow.
* To navigate to the User Journey navigate to **Agent-> Monitor -> User Journey**

* Observe the user journey and see how the user converses with the Agent. Also**,** see where the conversations are dropping and analyze how it can be improved.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.3-query-insights.md
# Exercise 6.3: Query Insights
The query insights help to give you a closer look into the conversations that users have with your agent.
* To navigate to Query Insights navigate to **Agent-> Monitor -> Query Insights**.

* Select a date range, the agent, and filter the conversations to see each query and its associated insight in detail.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.4-monitoring-user-feedback.md
# Exercise 6.4: Monitoring User Feedback
The User Feedback shows the feedback received by the agent from the users for the selected date range. It displays the Intent, User Comments, Feedback, and Node. You can use this to analyze the experience of the user when they are interacting with your agent.
* To navigate to the User Feedback navigate to **Agent-> Learning-> User Feedback**

* In the User Feedback, you can see the user, Step (node), Intent type, Positive (Feedback), and message(if any).
* Try giving some feedback to your Agent and observe that feedback here.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.1-configuring-an-agent-in-a-web-page.md
# Exercise 7.1: Configuring an agent in a web page
You can embed an Agent on a web page by just including a script tag block. You can retrieve the script tag to use by navigating to Agent-> Settings -> Channels.

Find the web channel on the page and click on the link View. A dialog appears, click on the Test button which shows the script tag:

### **Embedding the Agent in a Web Page**
In the course materials, we have provided a stylized web page in which you can showcase your agent. Perform the following:
1. Download the HTML page from here to your local computer.
2. Find the UUID that appears in the URL for the test page described above.
3. Using your preferred HTML at the bottom of the page replace the UUID with the text ###replace with agent id### at the bottom of the page.
4. Open the page in a web browser.
5. You can open the chat window by clicking on the agent's avatar.
6. Optionally you can click on one of the example queries listed under each of the cards for each of the listed skills.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.2-configuring-a-sms-channel.md
# Exercise 7.2: Configuring a SMS Channel
The next exercise is to configure your agent to communicate over an SMS channel.
The steps to configure the SMS channel:
1. Navigate to Agent-> Settings -> Channels
2. Find the SMS channel card and click on the Connect link.
3. The Connect link will change to Disconnect.
4. Use the telephone number provided to send an SMS message from your mobile.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.3-configuring-a-facebook-messenger-channel.md
# Exercise 7.3: Configuring a Facebook Messenger Channel
Configuring an agent to use Facebook Messenger requires configuration on Facebook and the Avaamo agent.
See [Setup and Configuration of Facebook Messenger](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel), for more information.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-8-live-agent-integration/exercise-8.1-invoking-a-live-agent.md
# Exercise 8.1: Invoking a Live Agent
If the agent detects either frustration or request to talk with the live agent then the user will be prompted to ask if they want to talk with a live agent:

Clicking on the Chat with an Agent link then connects you to the Live Agent Chat configured for the agent. In the case above this the built-in live agent in the Avaamo platform. You can explicitly invoke a request to the agent by typing: `#talk to agent` in the chat window.
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-8-live-agent-integration/exercise-8.2-avaamo-live-agent-console.md
# Exercise 8.2: Avaamo Live Agent Console
The Avaamo platform contains a built-in Live Agent Console that you can use the exercise the live agent handoff.
* You open the Avaamo Live Agent Console by first navigating to the Agent Dashboard:

* Next click on the circle in the upper corner of the browser which will display a pop-menu:\
\

* Select the Agent Console menu item which then displays the agent console:

* If there are pending agent conversations they will be shown at the bottom of the page. Click on the button which displays:
* Click on the Accept button and then click on the conversation on the list. You can now have a direct conversation with the user via the agent chat window.

---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-9-language-support/exercise-9.1-adding-a-language-to-an-agent.md
# Exercise 9.1: Adding a Language to an Agent
* Open an agent and navigate to the **Agent-> Configuration -> Language**:
* Click on the Add language button in the Language page which then displays a pop-up menu as shown here:

* In the search text field type: Spanish. Next, select the menu item *Spanish (es-US)* to select the US dialect of the Spanish language.
* Save the agent. Open the agent chat window and type the following: #switch\_langage es-US. You can now interact with the agent in the Spanish language.
* Use Google Translate to formulate Spanish questions from English like the following example (Using the My Assistant agent): *Order pizza* => *Ordenar pizza*
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-9-language-support/exercise-9.2-overriding-default-language-translation.md
# Exercise 9.2: Overriding Default Language Translation
Existing output to the user is automatically translated but can be overridden by different responses in the added language.
First, you need to add the language to the dialog skill. In this example, we are using the **Order Pizza** skill. Adding a language is done similarly to the agent. Open the skill, navigate to **Configuration -> Language**. Add the language in the same manner as the previous exercise. Save the skill.
Navigate to the Implementation page and click on node 1. A dialog is then displayed. Click on the drop-down menu that is showing English (US) and select the item Spanish (es-US). The Spanish text is translated from English text by default. You can now override the Spanish as needed.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/existing-entity.md
# Existing entity
{% hint style="success" %}
**Key point**: You can add an existing entity only when you have trained a sample query with the required entity extracted in the Invocation intent of the respective skill. For example: If you wish to use say a regex entity `order_number` in your implementation, then
* Create an entity with the required regex. See [Add entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information.
* Add a user query with the order number in the invocation intent. Example: `I want to check the status of my order 6BFC86`, the order\_number entity is extracted and available in the Invocation intent. See [Add Invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent), for more information
* Next, in the Dialog skill implementation, you can add order\_number as an existing entity in the user intent.
{% endhint %}
If an intent refers to a verb or the action in the user query, then an entity refers to a noun (the object on which the action is performed) in the user query. **Example**: In the user query "I want to book tickets from San Francisco to New York", San Francisco and New York represent entities of type Location. See [Entities](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types), for more information.
To respond to user queries accurately, it is important to extract the right entities from the user query to interpret the user's intent correctly.
### Before you begin
Before you begin to add user intents in the Dialog skill conversational flow, it is recommended to have a thorough understanding of the following concepts:
* [Intents and Training data](https://docs.avaamo.com/user-guide/overview-and-concepts/intents)
* [Entities](https://docs.avaamo.com/user-guide/overview-and-concepts/entity-types)
* [Slots](https://docs.avaamo.com/user-guide/overview-and-concepts/slots)
* [Intent execution sequence](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/intent-execution-sequence)
* [Best practices of designing a skill](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill)
### What is an Existing entity in user intent?
Existing entities are intents with entities. This helps to extract accurate entities from the user query in the conversation flow.
**Example**: Consider that in the Order Pizza skill, the first message asks the user for the type of pizza - veg, non-veg. You can create "pizza\_types" as an entity, and in the subsequent node, add an intent with this entity to process the user response and proceed further in the conversation flow.

### Why use an Existing entity in user intent?
Using existing entities in user intent helps in:
* **Improving the accuracy** of responding to user queries, since the entities are detected properly in from user's query.
* **Maintainability and Scalability**, since you just have to specify only one training phrase with an entity value, and the system automatically replaces it with other entity values of the same entity type in the training phrase. Example: In a Health assistant -> Appointment booking skill, the training phrases can be
1. I want to book an appointment with a Cardiologist
2. I want to book an appointment with a Neurologist
3. I want to book an appointment with a Physician, and so on
If you have created an entity type say "Speciality" with values as Cardiologist, Neurologist, and Physician, you just have to specify training phrase - " I want to book an appointment with a Cardiologist" and the system automatically matches if the user utterance is "I want to book an appointment with a Physician" or any other entity value. It is not required for the agent to be trained in all such occurrences. Hence it is easy to maintain and scale. You can continue to add further values in your entity type, without having to modify your training phrase.
* Automatically detect the entities in a user query and skip asking questions to the users for which the answers are already available in the initial query. This is referred to as [Entity skipping](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/entity-skipping).
* Re-using the entities across different virtual assistants or different skills in the same virtual assistant instead of requiring to train such common phrases repeatedly.
### When to use Existing entity?
Use the "Existing entity" option in the user intent when you expect an entity to be extracted at a specific point in the conversation flow.
### How to use Existing entity in user intents?
{% hint style="success" %}
**Key point**: Only the entities added to the skill in the **Invocation intent** page are displayed in the list. See [Invocation Intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent), for more information on adding entities to the skill.
{% endhint %}
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can build and manage dialogs (conversational flow) immediately after creating a Dialog skill. See [Create new Dialog skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill), for more information.
* If you wish to edit skills in an agent, then:
* Navigate to the Agents tab in the top menu. Search and open the required agent.
See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* In the Agent page, navigate to the Skills option in the left navigation menu. Search and open the required skill.
* The quality of the intents and their training determines the quality of the agent's accuracy in understanding the user queries. See [Design skill](https://docs.avaamo.com/user-guide/how-to/design-skill#intent-and-training-phrases), for more information on intent training guidelines.
{% endhint %}
* In the **Dialog skill** page, click **Edit** to unlock the skill.
* Click the **Implementation** option in the left navigation pane. A dialog flow tree is displayed.
* Add user intents by creating a new node in one of the following ways:
* Click the **plus (+)** icon to add a new user intent and skill response in the node below the current node.
* Click the **fork** icon to add a new user intent and skill response as a forked branch to the current node.

* Click the red call-out bubble above "Add agent Response" to add an Intent and specify the following details:

Parameters Description Maximum length Intent name Indicates the name of the intent.
Each intent name must be unique within the skill.
192
characters
Intent key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the intent name.
By default, a key is automatically generated for you. Click Edit to update the key to any user-friendly identifier. Note that the intent key must be unique within the skill.
Supported characters : Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information. You can use this in any JS code customizations (Flow control) , regression testing , and query insights for getting a closer look at the user conversations with the agent.
Intent type Indicates the type of user intent. Select Existing entity . N/A Select entity Start entering the entity type and the results are automatically filtered out in the list.
Choose an entity from the list. You can add only one entity to user intent.
N/A Select entity value (Optional) Choose the values from the selected entity type. Only these values are matched in the user intent.
Example : Consider the "pizza_type" entity type with cheese, corn, and pineapple as values. You have selected "pizza_type" in the user intent and only cheese and corn in the entity value. In this case, a user intent "I want to order veg pineapple pizza" is not matched to this node.
N/A Training data (Optional) Enter the training phrase and click Add .
N/A Post-processing Indicates any JS that is executed after the intent is invoked and before displaying the skill response.
Use this to dynamically reroute the flow and skip the current intent. Example :if(context.variables.hasId==true){ return goto_output(2)}
See Build skill responses using script and code , for more information.
N/A
* Click **Save**.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/export-and-import-agents.md
# Export and import agents
You can create a backup copy of your agent in your local system using the **Backup & Export** option. Later, you can use the exported copy and **import** it into any existing agent in any account.
When you export an agent, an exact snapshot of the agent at that point in time is exported to a ZIP file. The following lists a few use cases of this feature:
* Import to an existing agent within the same company
* Import to an existing agent of a different company
* Import an agent when you wish to create a new similar agent

{% hint style="info" %}
**Notes:**
* **Backup & export** option is available only in the Development stage of the agent life-cycle and only when you have at least view permission on the agent. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
* **Import to agent** option is available in the Development stage of the agent life-cycle and only when you have at least edit permission on the agent. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
* Importing the agent creates an exact copy of the exported agent. Hence, all the existing details in the imported agent are entirely replaced. (except those listed in [What agent details are not imported?](#what-agent-details-are-not-imported))
* Import and export work only in the same version of the platform. This implies that you cannot export your agent in 5.1 and import it in the 5.2 version or you cannot export an agent in 5.2 and import it back to the 5.1 version.
* You can export and import agents upto a maximum size of 4 GB.
{% endhint %}
## How does it work?

### **Export an agent**
* In the **Agents -> Development** tab, click three ellipse dots in the **Actions** column of the agent to view the extended menu and click **Backup & Export.**
* If the agent is getting exported for the first time, then the following pop-up is displayed. Click "Export Zip" to export a fresh copy of the agent.

* You can exclude the LLaMB skill from the export by clearing the checkbox.
* If the agent has already been exported before, then in the pop-up message, the following details are displayed:
* "First name" and "Last name" of the user who last exported the agent
* Timestamp of when the agent was last exported
* A link to download the last exported zip file
You can either download the last exported zip file or click "Export Zip" to export the agent.

* When you click "Export zip", a zip file of the agent "<\>\_<\>\_<\>.zip" is downloaded to your local system. The zip file is a collection of files (JSON, images) of the agent as available at that point in time.
### **Import an agent**
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can import to an agent immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the Avaamo Platform UI, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/..#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
{% endhint %}
* In the **Agents -> Skills** page, click **Import to agent** option.
* Browse the exported zip file and click **Open**. In the import message, click **OK** to import.
* An exact copy of the exported agent is created in the agent. See [What agent details are not imported?](#what-agent-details-are-not-imported) for more information.
## What agent details are not imported?
The following lists the agent items or configurations that are not imported from the source to the target agent:
* Answers skill. Also note that if the target agent has answer skills, they are cleared after import.
* Live-agent settings
* Channel configuration
* Permissions
* Notification settings and Personas
* Environment variables: Copied if the target agent does not have any environment variables.
* Details available in Debug, Test, Monitor, and Learning
{% hint style="info" %}
**Notes**: For the items or configurations that are copied from source to target, the existing details in the target agent are cleared out and completely replaced with the details of the source except for a few items such as Web channel and environment variables.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-buttons.md
# Facebook file cache
The Facebook file caching slider button helps you upload media files such as videos or images or a GIF on your agent for the end-users to play and view the file multiple times with no buffering or streaming.
To access the button:
* Click Channels, and click on connect under Facebook Messenger.
* On the Connect popup window, enable the slider for "Use Facebook file caching for images, GIFs and videos" to Yes.

---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-channel-manual-configuration.md
# Facebook Channel Manual Configuration
The agent developed on the Avaamo platform can be deployed on different channels. Facebook is a popular social media platform. You can deploy your agent on Facebook by clicking on the **Channels** tab on the Visual Editor.
{% hint style="info" %}
**Note**: You can also configure the Facebook channel without creating a new application. [Read more](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel).
{% endhint %}
Here, let us configure the Facebook Channel manually to add your application.
* Open a browser and go to [developer.facebook.com](https://developers.facebook.com/)
* Login with your Facebook login credentials.
* Click on **My Apps** and select your product.
* Click on **Create a New App**.
* Enter a **Display Name**.
* Click on **Create App ID**.
* In the **Settings -> Basic** page, select the checkbox for **Get Started with the Pages API** and click on Confirm.
* Now, you can add an App Icon, Enter the Avaamo URL for Terms of Service URL and Privacy Policy URL. You can also choose a category, and make the required changes. And click on **Save Changes**.
### **Page Access Token**
The manual configuration of the Facebook Messenger as a channel on the Avaamo platform requires a Page Access Token. To generate a token on [developers.facebook.com](https://developers.facebook.com/) and configure the same on Avaamo UI follow the steps below:
* Click on **Dashboard** on the left pane and go to **My Products**.

* Click on **Settings** under Messenger. Under **Token Generation** select the page you want to create the token for (from the drop-down list) and the **Page Access Token** is generated.
Now, on the Avaamo UI, go to the Visual Editor and click on Channels. Click on Connect under Facebook Messenger.

\
On the popup window, select the slider for Yes to enable **Manual Configuration**.
* Enter the Page Name of the Facebook page.
* Enter the App ID of the Facebook page.
* Enter the Page Access Token, and click on Save. The Channel Settings are saved and the Webhook URL is generated.
### **Webhook**
The Webhook setup requires the Callback URL from the Avaamo platform. So, on the Channels page click on **View** under Facebook Messenger. The Channel Settings popup window has the Webhook URL details required to set up Webhook on [developers.facebook.com](https://developers.facebook.com/).
To set up the Webhook URL, click on **Dashboard** on the left pane and go to **My Products**. Click on Settings under Messenger.
Under Webhooks, click on **Setup Webhooks**.

On the New page Subscription popup window,

* Enter the Callback URL and Verify Token from Channels page on Avaamo UI.
* Select the checkboxes under **Subscription Fields**, and click on **Verify and Save**.
Subscribe to the page under Webhooks and you are ready to use your agent on Facebook Messenger.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel.md
# Facebook
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance.
{% endhint %}
The Facebook channel configuration on the Avaamo platform helps you deploy your agent on your Facebook page.

You can [configure the Facebook channel ](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/untitled)on your agent to use the features supported by the Avaamo platform:
* [Facebook file caching](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-buttons#facebook-file-cache): You can upload media files such as a video or an image or a GIF on your agent for the users to play and view the file multiple times with no buffering or streaming.
* [1:1 aspect ratio for images](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/image-aspect-ratio-facebook): You can upload images with the 1:1 aspect ratio that displays as a square image.
* [Camera button](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-buttons#camera-button): You can add a camera button for users to open the camera.
* [Handover protocol](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/handover-protocol-integration-facebook): You can enable two or more Facebook apps to participate in a conversation by passing control of the conversation between them.
* [Manual Configuration](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-channel-manual-configuration): You can manually configure the Facebook channel on the Avaamo platform for new apps.
* [Personas](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/persona-configuration): You can create different avatars for the agent.
* [Send scheduled messages](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/message-api): You can schedule messages (using message API) to be displayed on your agent for the users who are subscribed to the Facebook page.
{% hint style="info" %}
**Notes:**
* Audio and video responses are not supported in the Facebook channel
* If you have more than one message in the response, then it is recommended to either
* Add delays between messages in the response, or
* Split it into two response messages, so that the responses get delivered in the proper sequence when sent to the Facebook channel.
Though the messages are sent sequentially from the Avaamo Platform to the Facebook channel, the FB channel processes this asynchronously, and hence sequencing cannot be assured. The amount of delay to be added between messages is by the trial and error method.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/facebook-messenger-compliance.md
# Facebook Messenger compliance
Facebook Messenger offers several content templates to display information in a conversational UI. It is important to understand the specifications of these templates so that conversation flows can be more quickly and accurately translated to the Messenger chatbot UI.
### **Text bubble**
Used for simple text and conversations. Can be used to display the largest blocks of text for all content types:
* Upto 640 characters, which is by far the largest text container.
* No support for rich text such as bolding, italics, color, etc.
* No URL linking within the text bubble (except for tel #s). However, you can add up to 3 link buttons to the bottom of the text message.
* Each text message can contain a max of 640 characters
* Upto 3 buttons can be added to a text message

See [Text responses](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#text), for more information on building text response in your agent.
### **Cards & Carousels**
{% hint style="info" %}
**Note**: See [Generic Template Reference](https://developers.facebook.com/docs/messenger-platform/reference/templates/generic), for more information on limitations from the Facebook Messenger.
{% endhint %}
For displaying products and services and a quick summary:
* Allows for an image
* The title has an 80 character limit
* The subtitle has an 80 character limit
* Buttons is limited to 3
* Up to 5 carousel items allowed

See [Card](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#card) and [Carousel](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#carousel) response, for more information on building card and carousel response in your agent.
### **List Template**
Good for showing FAQs and items that require more text than offered in cards (80 vs 20 characters). See [ListView](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#listview) response, for more information on building ListView response in your agent.
Currently, ListView is displayed as [Carousel ](#cards-and-carousels)in the Facebook Messenger channel, since ListView is not supported in FB Messenger.
### **Quick Replies**
A very space-efficient and quick way to move through flows.
* Button title has a 20 character limit. Beyond 20 characters, the button title gets truncated.
* After a button is clicked it disappears
* You can have upto 10 quick reply buttons
* Note that the Location button in Quick replies is deprecated by Facebook. See , for more information.

See [Quick reply](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses#quick-reply) response, for more information on building a Quick reply response in your agent.
### **Persistent menu**
A **Persistent menu** allows you to specify menu options that are always available to the user. Having a persistent menu easily communicates the basic capabilities of your agent for first-time and returning users.
* Menu items are limited to 3 for the top level, and 5 items for any submenus.
* The title is limited to 30 characters
* You can have at most 3 hierarchical levels of menu\_item in total

See [Add persistent menu](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-persistent-menu), for more information.
### **Webview**
Using webviews, you can augment your agent's user experience with features that might be difficult to offer using only message bubbles.
* A good way to handle lots of text
* Ability to link to a website
* Scrolls
* Rich formatting (its a webpage)

See [WebView](https://docs.avaamo.com/user-guide/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-buttons#webview-url), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-workplace.md
# Facebook Workplace
Facebook Workplace is a work collaboration tool built from Facebook. The Workplace helps teams and organizations collaborate efficiently wherever they work. See [Integrating with Workplace](https://developers.facebook.com/docs/workplace/introduction), for more information.
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance. Note that only the web channel is enabled by default.
{% endhint %}
The agents developed on the Avaamo platform can be deployed on Facebook Workplace. In this article, the following steps are detailed:
1. [Before you begin](#before-you-begin)
2. [Integrating your Facebook Workplace bot with Avaamo agent](#integrating-your-facebook-workplace-bot-with-avaamo-agent)
3. [Testing Integration](#test-integration)
4. [Manage channel settings](#manage-channel-settings)
## Before you begin
{% hint style="success" %}
**Pre-requisite**:
* The customer requiring the deployment of Avaamo agent on Facebook Workplace has already set up a Facebook workplace account.
* Custom integration is set up in the Facebook Workplace for integrating your Facebook Workplace bot with an Avaamo agent. See [Custom Integrations](https://developers.facebook.com/docs/workplace/custom-integrations-new/), for more information.
{% endhint %}
Ensure that you get the following information from the customer before deploying the Avaamo agent on Facebook Workplace:
* **App Secret, App ID, and Access Token**: This information is available in the Admin panel of the Facebook Workplace bot when you set up a custom integration. See [Custom Integrations](https://developers.facebook.com/docs/workplace/custom-integrations-new/), for more information.

* **Page ID and Company Domain:** This information is available when you access the page that is created when you set up a custom integration. This is visible within your Workplace community. You can get the Page ID and Company Domain from the page URL:
```
https://<>.workplace.com/chat/t/<>
```
## **Integrating your Facebook Workplace bot with Avaamo agent**
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can deploy an agent to a channel after creating and building an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing**.**
{% endhint %}
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in the Facebook Workplace channel.
* Specify all the details in the pop-up page and click **Save**. See [Before you begin](#before-you-begin), for more information on how to get these details.

## Test integration
After saving the Facebook Workplace channel details in the Avaamo platform successfully, your agent is ready to be tested in the Facebook Workplace:
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Test** in the **Facebook Workplace** channel.

* This launches the Facebook page "https\://<\>.workplace.com/chat/t/<\>". Note that here Company Domain and Page ID are the details that you have specified
during the integration of your Facebook Workplace bot with Avaamo agent.
* On the Facebook page, you can test the queries corresponding to your Avaamo agent and check if you are receiving appropriate responses.
## Manage channel settings
After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirements. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/faqs.md
# Source: https://docs.avaamo.com/user-guide/llamb/regression-testing/faqs.md
# FAQ's
**1. What happens if an incorrect input file is uploaded for testing?**
An incorrect input file may contain **syntax errors, incorrect entries, or invalid data**, leading to errors and abnormal metric values in the results.
**2. What should be done if the results are showing as FAIL?**
A **FAIL** indicates that the generated response is either factually incorrect, contextually inappropriate, or not aligned with the ground truth. Further debugging is required to identify the root cause and address any underlying issues.
**3. How do you analyze the results of a regression test?**
Once the regression test is completed:
* The UI displays the total number of queries along with a breakdown of passed and failed queries. This offers a directional analysis of the uploaded file's quality.
Refer [Understanding results](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results), for complete details about this.
**4. What should be done after conducting a regression test?**
After running a regression test, [analyze the results file](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results) to identify any discrepancies or failures. If the test results do not meet expectations or fail to generate the correct responses, review the data and make necessary adjustments to [improve accuracy](https://docs.avaamo.com/user-guide/llamb/regression-testing/how-to-improve-accuracy).
**5. What do the different columns in the input and results files represent?**
Refer [Regression test file format](https://docs.avaamo.com/user-guide/llamb/regression-testing/regression-test-file-format) and [Understanding results](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results), for complete details about this.
#### **6. What happens if the input regression file does not specify any user properties, but the ingested document includes them?**
If the input regression file does not define any `user_properties`, but the ingested document is associated with specific document properties, the regression results are still generated without filtering based on those properties.
#### 7. How to test soft unhandled queries during regression testing
To verify soft unhandled responses, include the marker `` in either the `ground_truth` or `generated_answer` fields. This helps identify cases where the system gracefully aborted the stream without triggering a hard failure.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/feedback-api.md
# Feedback API
## Get feedback summary
`GET` `https://cx.avaamo.com/dashboard/bots/{{agent_id}}/feedbacks/user_feedbacks.json`
Get a summary of the total positive and negative user feedback given to an agent. If you wish to get details of each feedback, then refer to **Get feedback details**.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| agent\_id\* | integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Query Parameters
| Name | Type | Description |
| ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| utc\_offset | number | Difference in seconds from Coordinated Universal Time (UTC) for a particular place and date.
Default value is 0 implying that there is no offset from Coordinated Universal Time (UTC).
|
| from\_date | string | Date from which the required details are retrieved. Default value is the last four days from the to\_date. Specify date in dd/mm/yyyy format. |
| to\_date | string | Date to which the required details are retrieved. Default value is the current date. Specify date in dd/mm/yyyy format. |
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | string | User access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"user_feedbacks": [
{
"feedback_type": "Positive Feedback",
"count": 3,
"positive": true
},
{
"feedback_type": "Negative Feedback",
"count": 2,
"positive": false
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/dashboard/bots/20xxx/feedbacks/user_feedbacks.json?utc_offset=19800' \
--header 'Content-Type: application/json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/dashboard/bots/20xxx/feedbacks/user_feedbacks.json?utc_offset=19800',
'headers': {
'Content-Type': 'application/json',
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, user\_feedbacks array is returned with a count of positive and negative feedback:
Attribute Description Type feedback_type Indicates if the feedback is positive or negative. String count Indicates the count of positive or negative feedback. Integer positive Indicates if the user feedback is positive or negative. Boolean
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get overall feedback summary https://cx.avaamo.com/dashboard/bots/<<agent_id>>/feedbacks
/user_feedbacks.json?utc_offset=<<utc-offset-seconds>>
Get feedback summary within a specified period from_date : Specify the from date in dd/mm/yyyy format.
to_date : Specify the to date in dd/mm/yyyy format.
Example : https://cx.avaamo.com/dashboard/bots/<<agent_id>>/
feedbacks/user_feedbacks.json?from_date=01/04/2020&to_date=06/04/2020&utc_offset=<<utc-offset-seconds>>
## Get feedback details
`GET` `https://cx.avaamo.com/dashboard/bots/{{agent_id}}/feedbacks.json`
Gets details of each user feedback given to the agent. In the response, you can learn about the intent, user query, and the skill for which the feedback was given.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| agent\_id\* | integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Query Parameters
| Name | Type | Description |
| ---------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| response\_type | string | Indicates if you wish to get a detailed response for each feedback. In the detailed response, you can view the user query and the user details for which the feedback is given. Specify **detailed** to view a detailed response for each feedback. |
| since\_timetoken | number | Timestamp from which the records are fetched.
If you specify timetoken and not since\_timetoken, then the latest 5 entries up to the specified timetoken are fetched.
Specify UNIX Epoch Timestamp in microseconds.
|
| timetoken | number | Timestamp until which the records are fetched.
Default is the current timestamp.
Specify UNIX Epoch Timestamp in microseconds.
|
| page | integer | Page from which the entries must be fetched.
Default is 1.
|
| per\_page | integer | Number of entries fetched per page.
Default: 25.
Maximum: 100
|
| from\_date | String | Date from which the required details are retrieved.
Default value is the last four days from the to\_date.
Specify date in dd/mm/yyyy format.
|
| to\_date | String | Date to which the required details are retrieved.
Default value is the current date.
Specify date in dd/mm/yyyy format.
|
| message\_uuid | String | Unique identifier of the message. Refer Message API
to get the details of message uuid.
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Access-Token\* | string | User access token. You can get the user access token from the Settings -> Users and Roles page. Users must have at least view permission on the agent. |
{% tabs %}
{% tab title="200: OK " %}
```javascript
{
"current_page": 1,
"per_page": 25,
"total_entries": 8,
"total_pages": 1,
"feedbacks": [
{
"id": 115986,
"comment": "\n Oh! Can you tell me what went wrong?:\n Others\n",
"positive": false,
"node_key": "1",
"intent_type": "Q&A Intent",
"intent_name": "Price of RAM",
"created_at": 1670420497.0,
"message_uuid": "u-2xxxxxxx9-7xxe-4xx9-8xx5-7xxxxxxxxxx9",
"conversation_uuid": "exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"skill_name": "Price FAQs",
"bot_replies": null,
"user_query": "I need a RAM price",
"user": {
"display_name": "David Miller",
"id": 1997722,
"first_name": "David",
"last_name": "Miller",
"avatar": false,
"uid": "dashboard_admin_ua_test_user_xx4"
}
},
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/dashboard/bots/20xxx/feedbacks.json?page=2&per_page=55' \
--header 'Content-Type: application/json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/dashboard/bots/20xxx/feedbacks.json?page=2&per_page=55',
'headers': {
'Content-Type': 'application/json',
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the agent messages. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer feedbacks Indicates an array of feedback entries fetched from the agent. Number of entries in the array = Number specified in per_page parameter. JSON key-value pairs
#### **feedbacks**
Indicates an array of messages fetched from the agent. Each array contains the following attributes:
Attribute Description Type id Indicates a unique identifier of the feedback message. Integer comment Indicates the comments given by the user for negative feedback. String positive/negative Indicates if the user feedback is positive or negative Boolean node_key Indicates the node number for which the feedback is given.
For Q&A skill the node_key is 1. For Dialog skill node_key is <<skill_number>>.<<node_number>> String intent_type Indicates the type of intent. For Q&A skill, intent_type is "Q&A Intent".
For Dialog skill, intent_type can be entity, training phrase, custom code, or system entity. See Add user intent , for more information.
String intent_name Indicates the name of the intent for which the feedback is given. String created_at Indicates the timestamp of when the feedback was created in seconds. UNIX epoch timestamp skill_name Indicates the name of the skill. String bot_replies -> message Indicates the message agent responded with. By default, this field always shows a "null" value. See Messege API , for more details on the parameters displayed in this section. JSON key-value pairs user_query Indicates the user query for which the feedback is given. This is returned only for a detailed response. String user Indicates the details of the user interacting with the agent.
phone : Indicates an array of phone numbers of the user interacting with the agent.layer_id : Indicates a unique user identifier internally used by the Avaamo Platform.last_name : Indicates the last name of the user interacting with the agent.first_name : Indicates the first name of the user interacting with the agent.email : Indicates the email of the user interacting with the agent.This is returned only for a detailed response.
JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get feedback entries from agent using pagination page : Specify the page from which you wish to fetch records. By default, the value is 1.
per_page : Specify the number of entries per page. By default, the value is 5.
Example : https://cx.avaamo.com/dashboard/bots/<<agent_id>>/feedbacks.json&per_page=2&page=1
Here, per_page * total_pages = total_entries
Get feedback entries from agent within a specified period since_timetoken : Specify the from timestamp in epoch format such as 1569229247677821
timetoken : Specify the to timestamp in epoch format such as 1569229251418739.
Example : https://cx.avaamo.com/dashboard/bots/<<agent_id>>/feedbacks.json?since_timetoken=<<from_timetoken>>&timetoken=<<to_timetoken>
Get detailed feedback response response_type : detailed
Example : https://cx.avaamo.com/dashboard/bots/<<agent_id>>/feedbacks.json?response_type=detailed
Get feedback entries from agent using message UUID message_uuid: Specify the Unique identifier of the message such as u-2xxxxxxx9-7xxe-4xx9-8xx5-7xxxxxxxxxx9Example : https://cx.avaamo.com/dashboard/bots/<<agent_id>>/feedbacks.json?&message_uuid=<<message_uuid>>
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback.md
# User feedback
The **User feedback** page displays the feedback received by the agent from the users for the selected date range. It displays the Intent, User Comments, Feedback, and Node. This feature is used to learn and analyze the experience of the user when they are interacting with your agent.

See [Collect feedback](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/collect-feedback), for more information on understanding the concept and various ways in which you can collect feedback from the users.
**To view feedback**:
* Navigate to the **Agents** tab on the top menu.
* Search and click any agent for which you wish to view user feedback. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents#search-agents), for more information.
* In the **Agent's** page, click **Learning -> User feedback**. By default, user feedback for the last 7 days is displayed.
* Click the **Date picker** to specify a custom date range. A list of user feedback for the agent in the selected date range is displayed.

* For each intent where the feedback is collected, the following details are displayed:
* **User**: Indicates the identifier of the user who provided the feedback.
* **Step**: This is the `<>:<>` of the node in Dialog skill where the feedback is collected. For the Q\&A skill, the step is always 1. See [Flow designer](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/dialog-designer-overview), for more details on the skill key and intent key.
* **Intent**: Indicates the intent name provided in the respective skill for which the feedback is collected.
* **Intent Type**: Indicates the type of intent such as Inline, Entity, or Q\&A for which the feedback is collected.
* **Skill**: Indicates the name of the skill for which the feedback is given.
* **Positive**: Indicates if the feedback by the user is positive or negative.
* **Message**: Indicates any message submitted by the user while providing feedback.
* Click the arrow icon for the feedback where you wish to view the conversation history. You can use this to analyze the conversational flow for any troubleshooting.
* Click **Export** to download the user feedback in a CSV format. This can be used as a reference and for further analysis.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/file-upload.md
# File upload
You can add an input card with an option to upload files to your agent.
{% hint style="success" %}
**Key points**:
* You can upload any type of file, however, the maximum limit for each file is 4GB.
* You can upload images of all types and resolutions. There is no restriction on the resolution of the image.
* There is a 191-character limit for all the user-defined text fields.
* For security reasons, by default, you can upload upto 10 files in a span of 60 seconds. The number of files and the frequency or interval within which they can be uploaded is a configurable parameter. Contact Avaamo Support, for further assistance.
* File upload is not supported in the Microsoft Teams channel due to the limitations on the channel's side. See [Microsoft Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information on deploying your agent in the MS Teams channel.
{% endhint %}
## Syntax
The following is the syntax to add an upload option in the card input:
```yaml
"card": {
"inputs": [{
"type": "file/file_group",
"title": "<>",
"uuid": "<>",
*"should_validate": true/false,
*"image_only": true/false
},...]
}
* - Indicates optional parameter
… - Indicates one or more parameter
```
Attribute Description Type title Indicates the title of file upload. String type Indicates if you wish to select a single file or multiple files at a time for uploading:
file: This option allows you to select a single file file_group: This option allows you to select multiple files at a time String should_validate Indicates if the user can skip uploading a file or not. By default, the value is set to true. Boolean uuid Indicates a secure random UUID that can be used later to access the file uploaded by the user. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
File uploaded name is available in the context.last_message .
Syntax: context.last_message.<<uuid>>
String image_only Indicates if the file upload must allow uploading of only images or not. Set true to upload only images. By default, the value is false. Currently, this support is only for image file types. Boolean
## Supported file types and size
Make a note of the following points related to the supported file types and sizes in the Avaamo Platform:
* You can upload any type of file, however, the maximum limit for each file is 4GB.
* You can upload images of all types and resolutions. There is no restriction on the resolution of the image.
* For security reasons, by default, you can upload upto 10 files in a span of 60 seconds. The number of files and the frequency or interval within which they can be uploaded is a configurable parameter. Contact Avaamo Support, for further assistance.
## Examples
The following examples of file upload are listed:
* [Single file upload](#single-file-upload)
* [Upload images only](#upload-images-only)
* [Access uploaded file and send email](#access-uploaded-file-and-send-email)
* [Upload multiple files](#upload-multiple-files)
* [Making file upload optional](#making-file-upload-optional)
### **Single file upload**
The following is a sample JS to provide a file upload option:
```yaml
return {
"card": {
"inputs": [
{
"type": "file",
"title": "Upload Profile Pic",
"uuid": "2e6e7e36-657c-4390-ba06-fa80597871ae"
}
]
}
}
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` and `context.last_message.<>.name` to access the name and identifier of the file that is uploaded.
### **Upload images only**
The following is a sample JS to provide a file upload option for images only:
```yaml
return {
"card": {
"inputs": [
{
"type": "file",
"title": "Upload Profile Pic",
"uuid": "ab4a6301-8961-430f-9e09-622ce3ca5aa3",
"image_only": true
}
]
}
}
```
In the agent, the following response is displayed:

Note that when you click upload, only image file types are enabled for uploading.

You can use `context.last_message.<>.uuid` and `context.last_message.<>.name` to access the name and identifier of the file that is uploaded.
### Access the uploaded file and send an email
{% hint style="info" %}
**Note**: You can access the uploaded file only when files are not masked in the agent. See [Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for more information.
{% endhint %}
Get the **Access Token** from **Agent -> Configuration -> Settings** page:
Add the following sample JS to access the uploaded file and send it as an email attachment:
```javascript
var access_token = "UoF4VLjeq9uH0dzki3-79gclgRpf8hr9"; // agent access Token
var url = "https://cxx.avaamo.com/files/" + context.last_message.<>.uuid + ".json?size=original&access_token=" + access_token;
// here, uuid is the secure random uuid provided at the time of upload.
// See File upload syntax for more information
try {
var file_content = await (fetch(url).then(res => res.buffer()));
var email_sender = await (Email.send({
to: ["John@avaamo.com"],
from: ["admin@macpizza.com"],
subject: "Your Pizza Order",
body: "Here, is the pic of your pizza baking right now!!! Enjoy.",
attachments: [{
filename: context.last_message.<.name,
content: file_content
}]
}));
if (email_sender.status == 'SUCCESS') {
return "Email Sent";
} else {
return "Failed to send email. Kindly try again later.";
}
} catch (error) {
return "Sorry, something unexpected happened when processing your request. Please try again later.";
}
```
{% hint style="info" %}
**Note:** The URL in the sample JS provided above is deprecated and is no longer available as of the v8.2.0 release. Instead, use `context.last_message.<>.url`. Refer to the sample JS below for accessing the uploaded file and sending it as an email attachment:
```javascript
var access_token = "UoF4VLjeq9uH0dzki3-79gclgRpf8hr9"; // agent access Token
var url=context.last_message.<>.url;
// here, uuid is the secure random uuid provided at the time of upload.
// See File upload syntax for more information
try {
var file_content = await (fetch(url).then(res => res.buffer()));
var email_sender = await (Email.send({
to: ["John@avaamo.com"],
from: ["admin@macpizza.com"],
subject: "Your Pizza Order",
body: "Here, is the pic of your pizza baking right now!!! Enjoy.",
attachments: [{
filename: context.last_message.<.name,
content: file_content
}]
}));
if (email_sender.status == 'SUCCESS') {
return "Email Sent";
} else {
return "Failed to send email. Kindly try again later.";
}
} catch (error) {
return "Sorry, something unexpected happened when processing your request. Please try again later.";
}
```
{% endhint %}
### Upload multiple files
The following is a sample JS to provide upload multiple files using file upload:
```yaml
return {
"card": {
"inputs": [
{
"type": "file_group",
"title": "Upload Passport and address copy",
"uuid": "5dcf9d7e-8f72-4d3b-94dd-df502c42fbdd"
}
]
}
}
```
You can use `context.last_message.<>` and `context.last_message.<>.name` to access the name and identifier of the file that is uploaded.
### Making file upload optional
By default, when you use file upload via card, uploading a file is required. The system validates if the file is uploaded or not when the user clicks **Submit**. However, in certain cases, you can make the file upload optional.
The following is a sample JS to show how you can make file upload an optional parameter. Note that you can set "should\_validate" to "false" if you wish to make file uploading optional.
```yaml
return {
"card": {
"inputs": [
{
"type": "file",
"title": "Upload File",
"uuid": "2e6e7e36-657c-4390-ba06-fa80597871ae",
"should_validate": false
}
]
}
}
```
In the agent, you can submit the request successfully without uploading the file:

If you have uploaded a file, then you can use `context.last_message.<>` and `context.last_message.<>.name` to access the name and identifier of the file that is uploaded.
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/files.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files.md
# Files
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-1-select-the-content-source-type.md): The first step in using DataSync AI is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Upload files](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/upload-files.md)
- [Set Document Attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/confluence/step-2-configure-content-source-and-ingest-content/filter-articles.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/servicenow/step-2-configure-content-source-and-ingest-content/filter-articles.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/filter-articles.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-2-configure-content-source-and-ingest-content/filter-articles.md
# Filter articles
It displays all the folders containing articles or documents in your `ServiceNow` knowledge base, enabling you to select multiple items by checking the boxes next to them in the `By Knowledge Base` section.
* Additionally, you can use the `Advanced Filter` option to precisely filter articles by document status or workflow (such as Published, Active, or Valid to date) within the selected folders in the first step.
* You can also configure the articles or documents using an `Custom query to select the Knowledge Articles` option. Click the Toggle button in front of the `Use Custom Query` option. Contact the ServiceNow admin or Avaamo support to get the custom query URL.
{% hint style="info" %}
**Note:** If you configured `Filter Articles` with both options, the `Custom Query URL` option takes precedence.
{% endhint %}
* Click `Next`.
---
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/website/step-2-configure-content-source-and-ingest-content/filter-web-pages.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-2-configure-content-source-and-ingest-content/filter-web-pages.md
# Filter web pages
It displays all the URLs of the articles in the knowledge base or CSV file, enabling you to select multiple items by checking the boxes next to them in the `Select Sites` section. Click `Next`.
**In this section, you can:**
* Preview articles before selecting them by clicking **View**.
* Use the search bar to find and select an article if you already know its URL.
* Navigate across different pages to select article URLs.
---
# Source: https://docs.avaamo.com/user-guide/outreach/filters.md
# Filters
You can configure filters based on the column names and values in the recipient CSV such as location, age, date of birth, or gender. When a filter is associated with a campaign, the campaign is triggered to only those recipients matching the filter criteria.
**Example**: Consider you wish to trigger campaign messages to only those recipients who are above 18 years of age. In this case, you can configure a filter - "Age greater than 18 years" and associate it with a campaign.
This feature combined with the ability to configure multiple messages in a single campaign for different languages, allows you to reuse the same campaign configuration and tailor the messages to different sets of recipients as per the requirement. It helps in:
* Rapid development: You can use the same campaign and tailor the responses to different sets of recipients as per the requirement
* Providing personalized responses, say, for example, based on the location of the user or department a user belongs to.
See [Campaign - Add Message](https://docs.avaamo.com/user-guide/campaigns/create-new-campaign#add-message), for more information on how to associate filters to the campaign.
{% hint style="info" %}
**Notes**:
* See [Quick start](https://docs.avaamo.com/user-guide/outreach/quick-start), for a quick article on creating your first outreach program.
* Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/outreach/before-you-begin) before creating a new recipient list.
{% endhint %}
### Create new filter - Attribute filter
In the Avaamo Platform UI, click the **Outreach** option in the top menu, navigate to the **Filters** tab, and click **Create new filter -> Attribute Filter**. Specify the following details in the pop-up window:
Parameters Description Maximum length Filter name Indicates the name of the filter.
Provide a name that is easily identifiable to pick when you create a campaign.
50 characters Filter description Indicates the description of the filter. Use this to specify the purpose of the filter. 200 characters Filter conditions Indicates the conditions that are used to filter the recipient list.
N/A
* Note that the list of operators displayed is based on the type of data. The following are supported operators for each data type:
Data type Operators Number Greater than Less than Equal to Greater than or equal to Less than or equal to Include Text Date Greater than Less than Equal to Greater than or equal to Less than or equal to Include
* Click **Add new Condition** and select the data type to add new filters. You can add up to 50 conditions in a single filter.
* You can add multiple filters and each filter is an "AND" condition. For example: If you have added two filter conditions - one for "age" greater than 18 and another one for "country" equal to India, then only the recipients with the country as India **and** age greater than 18 are picked for delivering the campaign message.
* **Include** operator: Each filter condition also has an "include" operator that allows you to specify multiple values. In this case, the filter is applied to either of the values mentioned in the criteria. This is an "OR" condition. For example: If you have added a country filter condition with the "include" operator and specified India and the United States, then the recipients with the country as either India or the United States are picked for delivering the campaign message.
Click **Create** after specifying all the details in the **Attribute filter** pop-up window. The newly created filter is displayed in the **Filters** tab. The **Attribute filter** is indicated using icon in the **Filters** tab.
### Create new filter - Code filter
These are filters with custom JavaScript code. You can use the **Code filter** option when you wish to check for certain business logic and then apply the recipient filter condition.
In the Avaamo Platform UI, click the **Outreach** option in the top menu, navigate to the **Filters** tab, and click **Create new filter -> Code Filter**. Specify the following details in the pop-up window:
Parameters Description Maximum length Filter name Indicates the name of the filter.
Provide a name that is easily identifiable to pick when you create a campaign.
50 characters Filter description Indicates the description of the filter. Use this to specify the purpose of the filter. 200 characters JS code Indicates custom Javascript code where you specify the filter condition to match with the recipient list.
You can use the following format to specify the column name from the CSV:
headers["<<column_name>>"]
N/A
Click **Create** after specifying all the details in the **Code filter** pop-up window. The newly created filter is displayed in the **Filters** tab. The **Code filter** is indicated using icon in the **Filters** tab.
### **Search filter**
In the **Outreach -> Filters** tab, start entering the text in the **Search** text box and press the **Enter** key or click the **Search** icon. The results are filtered and displayed based on the text entered in the **Search** text box.
### Edit filter
You can edit a template from the **Outreach -> Filters** tab. Click on any filter in the **Filters** page to open the filter in edit mode. Edit the required details and click **Update**.
### Delete filter
* In the **Outreach -> Filters** tab, click three ellipse dots in the **Actions** column of the filter to view the extended menu and click **Delete.**
* Click **OK** in the confirmation message to delete the filter.
{% hint style="info" %}
**Note**: You can delete a filter only when it is not associated with any campaign.
{% endhint %}
### Example 1: Multiple filters (Age + Location)
Consider you wish to trigger a campaign message based on the location of the user and to only those recipients who are above 18 years of age.
The following example demonstrates how to configure filters for this scenario. In this example, when you associate this filter with a campaign, only those recipients above the age of 18 and from either Mumbai or Pune location are picked for delivering the campaign message:
### Example 2: Multiple filters with Language (Age + Location in English and French)
Consider you wish to trigger a campaign message based on the location of the user and to only those recipients who are above 18 years of age. Further, you wish to send an English message to recipients from the United States and a French message to recipients from Canada.
The following example demonstrates how to configure filters and campaigns for this scenario:
* Create a filter, say "Location - United States": Age > 18 and Location equals United States.
* Create another filter, say "Location - Canada": Age > 18 and Location equals Canada.
* In the Campaign -> Add Message section, you can add two messages
* One in en-US language and associate the "Location - United States" filter:
* Another one in fr-FR language and associate the "Location - Canada" filter:
Now, when the campaign is triggered, the French message is sent to all the recipients whose location is Canada and age above 18 years and the English message is sent to all the recipients whose location is United States and age above 18 years.
### Example 3: Code filter (All users with appointment date later than today)
Consider that you wish to trigger a campaign message to only those users whose appointment date is later than today.
In this scenario, you can configure filters using the Code filters as follows:
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/v5.1.x/fix-patch-releases-v5.1.x.md
# Fix patch releases (v5.1.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 5.1.x. The fix patch release contains:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
| Fix patch release | Release date |
| :---------------: | :-----------: |
| Release v5.1.1 | May 5th, 2020 |
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/v5.2.x/fix-patch-releases-v5.2.x.md
# Fix patch releases (v5.2.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 5.2.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
| Fix patch release | Release date |
| :---------------: | :-------------: |
| Release v5.2.2 | July 14th, 2020 |
| Release v5.2.1 | June 13th, 2020 |
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/v5.4.x/fix-patch-releases-v5.4.x.md
# Fix patch releases (v5.4.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 5.4.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
| Fix patch release | Release date |
| :---------------: | :----------------: |
| Release v5.4.1 | October 24th, 2020 |
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/v5.6.x/fix-patch-releases-v5.6.x.md
# Fix patch releases (v5.6.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 5.6.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
| Fix patch release | Release date |
| :---------------: | :-----------------: |
| Release v5.6.1 | February 26th, 2021 |
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/v5.7.x/fix-patch-releases-v5.7.x.md
# Fix patch releases (v5.7.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 5.7.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
| Fix patch release | Release date |
| :---------------: | :-------------: |
| Release v5.7.1 | July 24th, 2021 |
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.0.x/fix-patch-releases-v6.0.x.md
# Fix patch releases (v6.0.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 6.0.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
Fix patch release Release date Release v6.0.1 Feb 22nd, 2022
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.1.x/fix-patch-releases-v6.1.x.md
# Fix patch releases (v6.1.x)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 6.1.x. All the fix patch releases contain:
1. Critical bug fixes
2. Performance fixes
3. Minor bug fixes
Fix patch release Release date Release v6.1.1 June 7th, 2022
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.2.0/fix-patch-releases-v8.2.1.md
# Fix patch releases (v8.2.1)
This fix patch release contains critical bug fixes, performance fixes, and minor bug fixes. The following are some of the key fixes included in this release:
1. [LLaMB: Security for Citation links](#llamb-security-for-citation-links)
2. [LLaMB: Response formatting fixes](#llamb-response-formatting-fixes)
## LLaMB: Security for Citation links
* Citation links now expire 24 hours after generation, restricting access to a specific timeframe.
* Additional checks ensure links are accessible only to authenticated, authorized users.
* The citation link format now includes security tokens for validation, as detailed below:
* Old Citation Link Format:
https://llambx.avaamo.com/answers/external/document-groups/{document-group_id}/documents/{document_uuid}#page={page_no}
* New Citation Link Format:
https://cx.avaamo.com/llamb/messages/{message_uuid}/documents/{document_uuid}?lt={base64_encoded_JWT_token}&page={page_number}
{% hint style="danger" %}
**Important**: All existing citation links in the Conversation history, Query insights, and agent conversations will expire 24 hours after patch release 8.2.1. Contact Avaamo support to regain access.
{% endhint %}
See [Citation link](https://docs.avaamo.com/user-guide/llamb/citation-links), for more information.
## LLaMB: Response formatting fixes
* LLaMB responses support markdown formatting with the `Use MD Format` option, enabling rich text elements like bold, italics, and hyperlinks.
* Hyperlinks within the ingested documents are accessible through the LLaMB Responses.
{% hint style="danger" %}
**Important:**
1. The [`Use MD Format`](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/widget-configuration#use-md-format) option is available for [Web](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel), [Custom](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/custom-channel#configure-custom-channel), and, Mobile ([Android](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/android-apps) and [iOS](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/ios-apps)) channels.
2. To utilize this option, ensure you re-ingest the document before enabling it.
{% endhint %}
See [Use MD Format](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/widget-configuration#use-md-format), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.2.0/fix-patch-releases-v8.2.2.md
# Fix patch releases (v8.2.2)
This fix patch release contains critical bug fixes, performance fixes, and minor bug fixes. The following is one of the key fixes included in this release:
## LLaMB: Security for Citation links
**Authorization Expiry** for citation links now applies exclusively to non-web channels and is no longer applicable to web channels.
Refer [Citation links](https://docs.avaamo.com/user-guide/llamb/citation-links), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.1.md
# Fix patch releases (v9.0.1)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.1. These patches include:
1. Performance improvement to AI agents
2. Minor bug fixes to AI agents
| Fix patch release | Release date |
| ----------------- | -------------- |
| Release v9.0.1 | 28th June 2025 |
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.2.md
# Fix patch releases (v9.0.2)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.2. The following are some of the key fixes included in this release:
1. [JS errors page: Improved error classification](#js-errors-page-improved-error-classification)
2. [Response handling: Long responses with a disclaimer note](#response-handling-long-responses-with-a-disclaimer-note)
3. [Deprecation – Tag.append](#deprecation-tag.append)
### JS errors page: Improved error classification
* A new **“Type” column** is available in the **JS Errors page** to indicate whether it is an **Error** or a **Warning**.
* This enhancement enables developers to quickly assess the severity and nature of JavaScript issues, facilitating faster debugging and resolution.
Refer [JS errors](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/js-errors), for more information.
### Response handling: Long responses with a disclaimer note
* For very long responses, the agent now displays a **disclaimer message** at the end.
* This disclaimer appears only when the **Markdown format** is enabled in the channel. Refer [Enable Markdown Format](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/advanced#enable-markdown-format), for more information.
* This update ensures source citation links are retained even in lengthy responses, addressing the earlier issue of them being hidden.
{% hint style="info" %}
**Note:**
* The note message can be `customized` or `disabled` by requesting Avaamo support.
{% endhint %}
Example of how the disclaimer note is displayed at the end of a long response:
### Deprecation – `Tag.append`
* The `Tag.append` method is now **deprecated**. This method must be called within an `async` block, which limits its usage.
* Developers should use **`Tag.asyncAppend`**, that can be applied universally without requiring an `async` block. This method provides greater flexibility and simplifies implementation.
Refer [Add tags (JS)](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/add-tags-js), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.3.md
# Fix patch releases (v9.0.3)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.3. The following are some of the key fixes included in this release:
1. [Support for Microsoft Teams single-tenant bots ](#support-for-microsoft-teams-single-tenant-bots)
2. [Content ingestion improvements](#content-ingestion-improvements)
### **Support for Microsoft Teams single-tenant bots**
With Microsoft deprecating multi-tenant bot creation, the Avaamo platform now supports single-tenant bots for Microsoft Teams.
* All newly created bots default to a single-tenant configuration.
* Existing channels with a multi-tenant configuration continue to function, but multi-tenant Azure bot credentials cannot be used in newly created channels, as Avaamo now supports single-tenant bots by default.
* To migrate, follow the Microsoft Teams documentation or create a new single-tenant Azure app and map it to the Avaamo MS Teams channel.
### Content ingestion improvements
Introducing a new parsing mechanism that enhances content extraction across multiple file types via API. This improvement applies to newly uploaded content or files via API.
* **Markdown parsing for HTML content:** Automatically extracts additional formatting elements, such as italics and list tags, and converts them into markdown. This enhancement is applied by default from this release onward, requiring no additional parameters when you upload using the [Upload document ](https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis#upload-document-html-url-to-llamb)API.
* **Section header and hierarchy detection in PDF files:** Allows extraction of section headers, section hierarchies, and tables for better content organization. To use this, pass the parameter `"parsing_lib": "markdown"` in the [Upload file](https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis#upload-different-types-of-files-pdf-docx-pptx-xlsx-csv-html-to-llamb) API.
### **MS Teams – Control over Markdown format**
An option is now available to enable or disable Markdown formatting for LLaMB responses in the Microsoft Teams channel. You can configure this setting on the MS Teams configuration page to control whether responses are rendered in Markdown format.
Refer [Microsoft Teams (MS Teams)](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams#deploy-your-agent-to-microsoft-teams-channel), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.4.md
# Fix patch releases (v9.0.4)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.4. The following are some of the key fixes included in this release:
1. [Introducing the DataSync 2.0 (Beta)](#id-1.-introducing-the-datasync-2.0-beta)
2. [Soft unhandled – multilingual support](#id-2.-soft-unhandled-multilingual-support)
### 1. Introducing the DataSync 2.0 (Beta)
> This feature is currently in beta and intended for testing; feedback is appreciated.
The **DataSync** is designed to empower AI agents by seamlessly integrating and processing information from various content sources, including documentation, product guides, FAQs, and enterprise systems. With this capability, the agent can deliver accurate, context-aware responses grounded in the most up-to-date information.
Navigate to `Configuration>DataSync` to access.
#### Key highlights
* **Content integration**: Ingest structured and unstructured information from documents, web pages, repositories, and other sources.
* **Real-time status synchronization**: Connect with systems of record such as `SharePoint`, `ServiceNow`, `web platforms`, and `files` to ensure content is always current.
* **Flexible synchronization modes**: Choose between `AutoSync` for continuous updates or `Manual` synchronization, with execution history tracking for visibility and control. This is not applicable to content sources like `Files`.
* **Scalability:** Support a wide range of content formats and sources, enabling AI agents to expand knowledge effortlessly.
* **Scheduler or recurring option for content sources:** Automate ingestion cycles to keep knowledge up-to-date without manual intervention.
* **Execution history maintenance:** Track, review, and audit previous synchronization runs for improved transparency.
* **Pagination, search, and filter options:** Simplify navigation and management of large content repositories.
* **Ability to delete content sources:** Remove redundant or outdated sources to maintain a clean and relevant knowledge base.
* **Real-time status polling from LLaMB:** Monitor ingestion and synchronization processes with live updates.
* **Improved scalability and stability:** Handle growing data volumes efficiently while ensuring robust system performance.
DataSync lays the foundation for creating intelligent, self-sufficient AI agents that scale support, reduce manual intervention, and enhance the quality of information delivered to end-users.
### 2. Soft unhandled – multilingual support
Enhanced to ensure soft unhandled messages are returned in the user’s selected language. When a query is related to the document but does not match exact information, the message now prompts the user in the same conversation language to rephrase or ask another document-related query.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.5.md
# Fix patch releases (v9.0.5)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.5. The following are some of the key fixes included in this release:
1. [Default markdown support for new channels](#id-1.-default-markdown-support-for-new-channels)
2. [DataSync enhancements](#id-2.-datasync-enhancements)
### **1. Default markdown support for new channels**
All newly created channels include Markdown rendering enabled by default for LLaMB responses. This enhancement ensures that formatted text elements, such as bold, italics, bullet points, and hyperlinks, are rendered as intended without additional setup.
Channels created before this update remain unchanged and retain their existing Markdown configuration. Markdown settings can be manually adjusted from the channel configuration page if needed.
### 2. DataSync enhancements
This release includes several improvements to the **DataSync 2.0 (Beta)** version, enhancing usability, consistency, and data security.
**Key enhancements:**
* **Unlimited ingestion:** The rate limit has been removed — you can now ingest any number of files without restriction.
* **Improved pull/promote process:** Enhanced reliability and performance for data pull and promote operations within DataSync.
* **Dynamic attributes for ServiceNow:** Added support for dynamically pulling attributes from ServiceNow to streamline data synchronization.
* **Duplicate validation:**
* Duplicate files are not allowed.
* Duplicate job names are restricted.
* **Delete confirmation:** A Consent button has been added before deleting any ingested document in DataSync AI to prevent accidental deletions.
* **Preview URL update:** Support added for updating the `preview URL` when editing a document.
* **Improved data security:** The `View Job Details` pop-up no longer displays the user’s access token.
* **Consistent messaging:** Consent and confirmation messages have been updated to align with the platform’s design and style guidelines.
* **Product stability:** Other cosmetic updates and minor bug fixes have been implemented to enhance overall stability and performance.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/fix-patch-releases-v9.0.6.md
# Fix patch releases (v9.0.6)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.0.6. These patches include:
1. Performance improvement to AI agents
2. Minor bug fixes to AI agents
| Fix patch release | Release date |
| ----------------- | ----------------- |
| Release v9.0.6 | 27th October 2025 |
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/fix-patch-releases-v9.1.1.md
# Fix patch releases (v9.1.1)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.1.1. The following are some of the key fixes included in this release:
1. [Custom formatting instructions for LLaMB responses](#custom-formatting-instructions-for-llamb-responses)
2. [Enhanced support for multilingual document ingestion](#enhanced-support-for-multilingual-document-ingestion)
3. [Enhanced document filters and statuses in DataSync](#enhanced-document-filters-and-statuses-in-datasync)
4. [Multilingual document ingestion support for DataSync](#multilingual-document-ingestion-support-for-datasync)
5. [SSO flow improvements for Microsoft Teams](#sso-flow-improvements-for-microsoft-teams)
6. [Enhanced security validation for SMS channel](#enhanced-security-validation-for-sms-channel)
7. [Response cutoff message translation](#response-cutoff-message-translation)
8. [Improved filtering options in the JS errors page](#improved-filtering-options-in-the-js-errors-page)
9. [File transfer capture support for custom live agent integrations](#file-transfer-capture-support-for-custom-live-agent-integrations)
### Custom formatting instructions for LLaMB responses
In this release, we are introducing `Custom Formatting Instructions` for LLaMB responses. This feature allows teams to define the tone, structure, and layout of every generated response, ensuring consistent communication that aligns with organizational guidelines and specific use-case requirements.
To configure custom formatting instructions, navigate to the `Advanced settings` section within the LLaMB skill page.
Click `Edit`
After writing the message, click `Save`.
Refer [Advanced Settings](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content), for more information.
### Enhanced multilingual document ingestion support for LLaMB
In this release, multilingual document ingestion is expanded to support documents uploaded via the platform UI, previously limited to API-based ingestion.
**Key enhancements include:**
**UI-based auto-detection control:** You can now enable or disable language auto-detection for all selected documents uploaded via the UI.
**Language selection when auto-detection is off:** If you turn off auto-detection, you can manually select the document’s language from a dropdown. The dropdown displays all [languages configured](https://docs.avaamo.com/user-guide/configuration/language) for the agent, allowing accurate classification of the uploaded document.
**Header editing improvements:** For multilingual documents, the original header remains non-editable while the translated (English) header can be edited. English documents continue to behave as before.
**Original and translated view toggle:** A new toggle allows you to switch between the original and translated tables for easier review and editing.
### Enhanced document filters and statuses in DataSync
This release introduces multiple improvements to document filtering, status visibility, and ingestion transparency within the DataSync UI:
**Multi-select status filter:** A new multi-select dropdown lets users apply multiple document statuses simultaneously, enabling more flexible, efficient filtering.
**New “Others” category in top statistics:** A new `Others` tile appears alongside existing categories, helping teams quickly identify document counts that do not fall under ingestion, failed, or progressing statuses. This ensures alignment between categorized counts and the total document count. The Others category count represents the combined total of all `Skipped` and `Warning` statuses.
**Detailed status insights:** Hovering over **Warning**, **Error**, and **Skipped** statuses reveals the underlying issue or reason.
**Introducing the Skipped status:**\
The new `Skipped` status identifies documents that are intentionally ignored during the ingestion. This status includes a tooltip explaining why the content was skipped.
For example, suppose the content remains unchanged in Web, ServiceNow, or SharePoint sources between runs, whether triggered manually via Sync Now or via auto-sync. In that case, the system skips the ingestion process.
{% hint style="info" %}
**Key points:**
* URLs imported via CSV are always processed and marked as **Ingested**, and do not show **Skipped**.
* Force re-ingesting a single document from the menu overrides existing states, moving the document to **Ingested**.
{% endhint %}
### Multilingual document ingestion support for DataSync
In this release, multilingual document ingestion is added to DataSync, allowing it to process documents in any language supported by the platform. You can now upload documents or files in any language supported by the platform, expanding flexibility for global and multilingual use cases.
You can also use the **Auto Detect Language** toggle if you want the system to automatically identify the language of the uploaded document.
### SSO flow improvements for Microsoft Teams
In this release, the SSO flow for the **Microsoft Teams channel** has been enhanced as part of the transition away from the deprecated SDK and the upgrade to the new cloud adapter. These changes were necessary because Microsoft deprecated the previously used SSO process, requiring internal updates to maintain compatibility and provide a smoother authentication experience for users.
Refer [Deprecation details](https://learn.microsoft.com/en-us/azure/bot-service/what-is-new?view=azure-bot-service-4.0) from Microsoft for more information.
### Enhanced security validation for the SMS channel
In this release, an extra security layer has been added to the SMS channel to verify the authenticity of requests originating from Twilio. This enhancement improves protection against unauthorized or spoofed traffic and ensures more reliable message handling.
### Response cutoff message translation
In this release, the **Response Cutoff Message** is automatically translated based on the user’s query language. This ensures a consistent and seamless multilingual experience, allowing users to receive cutoff notifications in the same language as their interaction.
### Improved filtering options in the JS errors page
In this release, enhanced filtering capabilities have been added to the **JS errors** page. Users can now filter errors by type, such as **Warning** or **Error,** making it easier to isolate specific issues, focus on relevant problem areas, and streamline debugging and analysis.
Additionally, file exports now include **only the log results that match the currently applied filter**, ensuring clean, relevant, and targeted exports for further review or reporting.
Refer [JS errors](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/js-errors), for more information.
### **File transfer capture support for custom live agent integrations**
In this release, support for capturing file transfers in custom live agent integrations has been introduced. Previously, file transfer events were not recorded. With this enhancement, all file transfers are now fully tracked to provide complete visibility into conversation activity.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/fix-patch-releases-v9.1.2.md
# Fix patch releases (v9.1.2)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.1.2. The following are some of the key fixes included in this release:
1. [Introducing Salesforce as a content source for DataSync (Beta)](#introducing-salesforce-as-a-content-source-for-datasync-beta)
2. [Pull specific LLaMB skill changes](#pull-specific-llamb-skill-changes)
### Introducing Salesforce as a content source for DataSync (Beta)
In this release, DataSync AI now supports `Salesforce` as a content source, allowing you to bring Salesforce records directly into your agent knowledge.
{% hint style="info" %}
This feature is currently in beta and intended for testing; feedback is appreciated.
{% endhint %}
With this enhancement, DataSync seamlessly processes information from Salesforce, including cases, knowledge articles, and custom objects, alongside other supported content sources. This helps agents provide accurate, context-aware responses based on the latest data available in your Salesforce environment.
This feature extends DataSync's reach, making it easier to unify enterprise knowledge and keep your agents consistently up to date.
### Pull specific LLaMB skill changes
In this release, the LLaMB skill now supports pulling updates for **specific LLaMB skill changes** between stages. This improvement gives users greater control over stage deployments and helps prevent accidental updates to unrelated LLaMB skills.
When you add or modify an LLaMB skill during development and then initiate an update to production, the system will now display all detected changes under `Advanced Options`. You can review the list and selectively choose which updates to apply, ensuring only the intended LLaMB skill changes move to the production agent.
The changes are categorized as follows:
* **To be created**: Newly added LLaMB skills
* **To be updated**: Existing LLaMB skills that have been modified
This enhancement ensures safer, more predictable deployments and improved version management across stages.
Refer [Promote and pull updates](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/promote-and-pull-updates), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/fix-patch-releases-v9.1.3.md
# Fix patch releases (v9.1.3)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.1.3. The following are some of the key fixes included in this release:
1. [Language selection for file ingestion in DataSync](#language-selection-for-file-ingestion-in-datasync)
2. [Control masking with safelist patterns](#control-masking-with-safelist-patterns)
3. [Export agents with optional LLaMB skill data](#export-agents-with-optional-llamb-skill-data)
4. [Email notifications for failed jobs](#email-notifications-for-failed-jobs)
### Language selection for file ingestion in DataSync
In this release, we are introducing a new **Language selection** option for file-based content ingestion in DataSync. You can view this option during file ingestion. This enhancement improves content-processing accuracy, ensures better handling of non-English documents, and helps the system generate more reliable responses from ingested data.
You can select the language in the [Upload Files](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/files/step-2-configure-content-source-and-ingest-content/upload-files) step. Click the dropdown to display the languages configured for the agent.
{% hint style="info" %}
**Notes:** The language selection option is disabled when the Auto-detect toggle is enabled
{% endhint %}
You can verify the configured language after the file or document is ingested. Navigate to the individual document’s **Actions** section, click the **three-dot menu**, and select **Edit** to view the language of the ingested document content.
Refer [Files](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/files), for more information.
### Control masking with safelist patterns
In this release, we introduce `Safelist masking patterns`, which let you prevent specific words or word groups from being masked.
For example, if you configure the system to mask all numbers in queries, responses, or both, specific terms such as RoBE-19 that contain numerals can be excluded from masking.
This enhancement provides greater control and flexibility in data masking, ensuring that essential terms remain readable while sensitive information remains protected.
To add safelist masking patterns, contact `Avaamo Support` with the list of words or patterns you want to exempt from masking.
### Export agents with optional LLaMB skill data
In this release, we introduce a new checkbox in the agent export flow that lets users include or exclude LLaMB skills in the export. By default, all applicable skills are included. Users can clear the checkbox to exclude LLaMB skills from the exported agent.
{% hint style="info" %}
**Note:** This feature is enabled by default; the checkbox is selected.
{% endhint %}
This enhancement includes two scenarios:
* **Fresh export:** See the screenshot below, where LLaMB skills are excluded by clearing the checkbox.
* **Repeated export:** See the screenshot below, where LLaMB skills are excluded by clearing the checkbox.
This improvement provides greater control and improves export performance, especially for agents with large skill datasets.
Refer to [Export and import agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/export-and-import-agents), for more information.
### Email notifications for failed jobs
In this release, we introduce the **Email Notifiers** to configure email notifications for failed jobs. You can now add email addresses to receive alerts whenever a job fails for any reason.
For example, if an auto-sync is scheduled to run at a specific time and the job fails, the configured email recipients are immediately notified. This alert helps teams detect failures early, respond quickly, and minimize data sync disruptions.
**To configure email notifications:**
1. Navigate to the required job.
2. Click the three-dot menu next to the job name and select **Email Notifiers**.
3. Add up to **five email addresses**, using **+ Add** to include them one by one. Click **Save** to apply the configuration.
Refer [Email Notifiers](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/email-notifiers), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/fix-patch-releases-v9.1.4.md
# Fix patch releases (v9.1.4)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.1.4. The following are some of the key fixes included in this release:
1. [Introducing Conversational Intelligence (CI)](#introducing-conversational-intelligence-ci)
2. [Introducing Confluence as a content source for DataSync](#introducing-confluence-as-a-content-source-for-datasync)
3. [Citation links in regression test files](#citation-links-in-regression-test-files)
4. [Citation links in query insights](#citation-links-in-query-insights)
### **Introducing Conversational Intelligence (CI)**
In this release, we introduce `Conversational Intelligence (CI),` a powerful, AI-driven analytics layer that provides deep insights across digital and voice interactions. CI works seamlessly across `classic agents, AI agents, and Agent Copilot,` providing a unified, centralized way to analyze conversations at scale.
**Key points:**
* **AI-driven conversation analysis:** CI analyzes the entire conversation*,* including transcripts and call metadata, to understand context, intent, and sentiment, rather than relying on rigid conversation trees.
* **Built for modern AI conversations:** Unlike legacy tag-based systems, CI adapts naturally to fluid, non-linear AI agent conversations, making it the most effective way to analyze AI-driven interactions.
* **Centralized analytics platform:** Eliminates the need for custom tagging logic or external dashboards by providing a single analytics layer for all bots and channels.
* **Chat with your data:** Users can interact with insights using a conversational interface to ask questions and explore trends.
* **Rich insights and reporting:** Includes charts, date-based filtering, and automated weekly summary emails.
Conversational Intelligence replaces legacy tagging approaches with a smarter, scalable, AI-first analytics solution, helping teams gain accurate, actionable insights from every customer interaction.
### **Introducing Confluence as a content source for DataSync**
In this release, DataSync adds support for `Confluence` as a content source, enabling you to ingest Confluence pages and spaces directly into your knowledge base. This integration keeps agent knowledge aligned with the latest documentation, runbooks, and team updates maintained in Confluence.
By automatically syncing Confluence content, agents can deliver more accurate, up-to-date responses without manual uploads, reducing maintenance effort and improving response quality.
Refer [Confluence](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/confluence), for more information.
### **Citation links in regression test files**
In this release, we introduce **citation links in regression result files**, making it easier to trace and verify the sources used during regression testing. Each test result can now include direct citation links, allowing reviewers to quickly validate responses against their original knowledge sources.
This enhancement improves transparency, simplifies result verification, and helps teams confidently assess response accuracy during regression testing.
{% hint style="info" %}
**Note:** To enable citation links in the regression test result file, please reach out to **Avaamo Support**.
{% endhint %}
### **Citation links in query insights**
In this release, citation links are now displayed in query insights across both the `Web channel` and the `Conversation History` pages. This enhancement makes it easier to trace responses back to their original knowledge sources directly from insights, improving transparency and simplifying verification during analysis and troubleshooting.
* This is especially useful for **voice channels**, where responses are not visually inspectable during live interactions.
* Citation links help **bot developers debug and validate responses** by clearly identifying which knowledge sources were used.
* You can use citation visibility during testing and analysis, and disable it later if required for production environments.
Citation link in Web Channel:
Citation link in Conversation history:
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/fix-patch-releases-v9.1.5.md
# Fix patch releases (v9.1.5)
This article summarizes a list of fix patch releases made in the Avaamo Conversational AI Platform version 9.1.5. The following are some of the key fixes included in this release:
1. [Attribute handler support in datasync](#attribute-handler-support-in-datasync)
2. [Default prompt template for new prompt skills](#default-prompt-template-for-new-prompt-skills)
3. [Selective restore options for version comparison](#selective-restore-options-for-version-comparison)
### Attribute handler support in datasync
In this release, we are introducing `Configure Advanced Attribute Handler` support in `DataSync`, a powerful new capability that lets you dynamically assign custom attributes to documents using JavaScript.
With this enhancement, developers can write JavaScript logic that returns specific attributes during ingestion, allowing metadata such as location, category, or other fields to be calculated and applied automatically. These attributes become part of the document’s metadata and can be used for filtering, authorization, search relevance, and downstream logic in your agents.
This enhancement enhances document ingestion flexibility and provides richer control over how document metadata is created and managed during the DataSync process.
**Key highlights:**
* **Enable attribute handler:** Turn on the attribute handler in the DataSync configuration to use custom JavaScript for attribute assignment.
* **Post-ingestion attribute updates:** If attributes were not configured during ingestion, or if you need to update attributes for already ingested documents or articles, you can use the Advanced Attribute Handler. This feature allows you to apply or modify document attributes using custom JavaScript logic during a sync run.
* **Test attribute logic:** Validate the JavaScript logic and verify the updated attributes before applying them across documents during a sync operation.
* **View and export attributes:** Easily review the attributes applied to documents using the View document attributes option and export them as a `CSV file` to audit changes, troubleshoot issues, and support further analysis.
* **Custom JS for dynamic attributes:** Use JavaScript to evaluate document metadata and return attributes based on your logic (e.g., setting a location based on document number).
* **Debug and logs:** Logs from your JavaScript are visible in debug logs to help with development and troubleshooting.
* **Controlled application:** Attribute logic is executed during sync runs (Sync Now or Auto Sync), and changes take effect only after a sync. This ensures safe, predictable application of attribute logic.
* **Error handling:** If incorrect JavaScript causes an error during execution, documents with missing or invalid critical attributes will be marked in error status to prevent unintended exposure. Detailed error information is available in the JavaScript extension error logs.
### Default prompt template for new prompt skills
When you create a new Prompt Skill, a simple `default prompt` is now automatically available in the prompt editor. The default prompt includes a `sample function` to help you get started faster. The sample function connects the Knowledge Handler with the agentic agent to handle Knowledge Skill–related queries.
This enhancement reduces initial setup effort and provides clear guidance on structuring prompts and defining functions when building or configuring prompt skills.
This enhancement also creates a sample function, as shown below:
Refer [Prompt skill](https://docs.avaamo.com/user-guide/skills/prompt-skill/create-prompt-skill), for more information.
### Selective restore options for version comparison
In this release, the `Version Comparison` page has been enhanced to support `selective restoration` of changes. You can now choose which sections of a version you want to restore instead of restoring all changes.
Checkboxes are now available for the following sections if the changes are made:
* Prompt
* Function Calls
* Advanced Settings
You can select one or more sections, and the restore action applies only to those sections. This enhancement provides better control over version restoration and improves the overall version management experience.
Refer [Restore selected](https://docs.avaamo.com/user-guide/skills/prompt-skill/prompt-versions#restore-selected), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control.md
# Flow control
You can use goto\_node, goto\_intent, goto\_output, execute\_intent, and idle\_prompt functions in JS to customize the agent flow navigation. See [how-to control skill flow](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/controlling-skill-flow), for a sample scenario.
{% hint style="success" %}
**Key Points**:
* Flow control statements are applicable only to Dialog skills. You can transfer only to the Dialog skill nodes or to the main node.
* goto\_node and goto\_output are not supported in Returning User Message Handler JS block.
* goto\_node and goto\_output perform the same functionality and you can use them both interchangeably.
* goto\_intent is not supported in "custom intent" JS sections or in "pre-unhandled" intent.
* execute\_intent works only in post-processing.
* Intents that lead to disambiguation responses are not supported in execute\_intent.
* You can add upto 5 continuous iterations of flow control statements in a single execution. As a best practice, it is recommended to revisit your flow if it requires more than 5 continuous iterations of flow control statements.
{% endhint %}
### At a glance
The following table summarizes the key points of different flow control statements that can be used in JS to customize the agent flow navigation:
| Flow control | What? | Output node | Post-processing | JS intents |
| --------------------------------------------- | :-----------------------------------------------------------------------------------------------------------------------: | :---------: | :-------------: | :--------: |
| goto\_node | Displays and transfers the flow to the skill message configured at the specified intent after executing the current node. | ✅ | ✅ | ❌ |
| goto\_output | Displays and transfers the flow to the skill message configured at the specified intent after executing the current node. | ✅ | ✅ | ❌ |
| execute\_intent | Transfers the flow to the specified intent
and executes the specified intent.
| ❌ | ✅ | ❌ |
| goto\_intent
in post-processing
| Transfers the flow to the specified node and executes the current user query in the transferred node. | ❌ | ✅ | ❌ |
| goto\_intent in the output node | Transfers the flow to the specified intent and waits for the next user query to be executed at the transferred intent. | ✅ | ❌ | ❌ |
### goto\_node
Displays and transfers the flow to the skill message configured at the specified intent after executing the current node.
```javascript
goto_node('<>.<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
| Examples | Description |
| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| return goto\_node('starters'); | Displays the skill message configured at the "starters" intent and correspondingly transfers the flow. |
| return goto\_node('register\_skill.registration\_start'); | Displays the skill message configured at the "registration\_start" intent in "register\_skill" skill and correspondingly transfers the flow. |
| return goto\_node('main'); | Displays the message configured in the "Greeting skill" or main node and transfers the flow to the main node. |
### goto\_intent
goto\_intent behavior is different in the output node and post-processing. When you specify goto\_intent in the output node, you are indicating at which intent the next user query must be evaluated. When you specify goto\_intent in post-processing you are indicating at which node the current user query must be evaluated.
#### goto\_intent in output node
goto\_intent in the output node transfers the flow to the specified intent and waits for the next user query. The next user's query is evaluated at the transferred intent. This behavior is similar to the "Goto Intent" option available in the Advanced settings. See [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information.
```javascript
goto_intent('<>.<>','<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
The following lists a few examples of goto\_intent in the output node:
| Examples | Description |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------ |
| return goto\_intent('starters'); | Transfers the flow to the specified intent in the current skill. |
| return goto\_intent('register\_skill.registration\_start'); | Transfers the flow to "registration\_start" intent in "register\_skill" skill. |
| return goto\_intent('main') | Transfers the flow to the first or the main step of the agent. |
#### goto\_intent in post-processing
When the goto\_intent is specified in post-processing, the user's intent is still not completely evaluated. The current user query or the intent specified in goto\_intent (if any) is evaluated at the transferred node.
goto\_intent in post-processing transfers the flow to the specified node and executes the current user query in the transferred node (if the intent is not specified in goto\_intent). If you have specified an intent in goto\_intent, then the intent is executed at the transferred node:
* If the query in the transferred node returns true, then the response is delivered by the transferred node.
* If the query in the transferred intent returns false, then an unhandled response is delivered.
```javascript
goto_intent('<>.<>','<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
The following lists a few examples of goto\_intent in post-processing:
| Examples | Description |
| --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| return goto\_intent('starters'); | Transfers the flow to the specified intent in the current skill and executes the current user query at the transferred node. |
| return goto\_intent('register\_skill.registration\_start'); | Transfers the flow to "registration\_start" intent in "register\_skill" skill and executes the current user query at the transferred node. |
| return goto\_intent('starters', 'I want to get some starters.') | Transfers the flow to the specified intent in the current skill and executes the specified intent 'I want to get some starters.' at the transferred node. |
### goto\_output
Transfers the flow to the specified node number or main and displays the output of the node.
```javascript
goto_output('<>.<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
Examples Description return goto_output('starters'); Displays the skill message configured at the "starters" intent and correspondingly transfers the flow. return goto_output('register_skill.registration_start'); Displays the skill message configured at the "registration_start" intent in "register_skill" skill and correspondingly transfers the flow. return goto_output('main'); Displays the message configured in the "Greeting skill" or main node and transfers the flow to the main node.
### execute\_intent
Transfers the flow to the specified intent number and executes the specified intent. Since an intent can have multiple nodes, you can use execute\_intent for transferring to different nodes within an intent, based on some condition in the post-processing JavaScript.
```javascript
execute_intent('<>.<>','<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
| Examples | Description |
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| return execute\_intent(1,'order pizza'); | Transfers the flow to intent number 1 and executes 'order pizza' intent in the current skill. |
| return execute\_intent(2.3,'order pizza'); | Transfers the flow to intent number 3 in skill number 2 and executes 'order pizza' intent at 2.3 |
| return execute\_intent('main','I want to check my order status'); | Transfers the flow to the main node and executes the intent 'I want to check my order status' at the main node. |
### idle\_prompt
Indicates the response time the agent waits for the user query and post the wait period the skill message configured at the specified intent is displayed.
```javascript
idle_prompt(<>,'<>.<>')
Specify only '<>', if you wish to transfer the flow in the current skill
Specify 'main', if you wish to transfer to the main node.
```
**Example**: return idle\_prompt(10,'main');
The agent waits for 10 seconds and then transfers the flow to the main node or the "Greeting skill" and displays a message as configured at the "Greeting skill".
{% hint style="info" %}
**Note**: You can transfer the flow to a greeting node or to a node in the Dialog skill.
{% endhint %}
### Examples
The following Dialog flow is used as a reference for the examples provided in the comparison table:

The following Q\&A skill is used as a reference for the examples provided in the comparison table:

**Example 1**: Consider the execution of the following statement in the **post-processing** script of node 2:
| return goto\_node('4');
return goto\_output('4');
return goto\_intent('4','yes');
return execute\_intent('3','yes');
| return execute\_intent('3','no'); | return goto\_intent('4'); |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |  |
{% hint style="success" %}
**Key point:** Here, note the following point when "return goto\_intent('4');" statement is executed. Since the current user query is "veg" and that is not handled at node number 4, an unhandled response is returned.
{% endhint %}
**Example 2**: Consider the execution of the following statement in the **post-processing** script of node 15:
| return goto\_node('main');
return goto\_output('main');
| return execute\_intent('main','Tell me more about reward policy'); |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
**Example 3**: Consider the execution of the following statement in the **output node** of node 18:
| return goto\_node('10');
return goto\_output('10');
| return goto\_intent('10'); |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
{% hint style="success" %}
**Key point:** Here, note the following point when the "return goto\_intent('10');" statement is executed. This transfers the execution to intent number 10 and waits for the next user's input. The next user's input is evaluated at intent number 10.
{% endhint %}
**Example 4**: Consider the execution of the following statement in the **output node** of node 15:
| return goto\_node('main');return goto\_output('main'); | return goto\_intent('main'); |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| return goto\_node('main');
return goto\_output('main');
| return goto\_intent('main'); |
|  |  |
{% hint style="success" %}
**Key point:** Here, note the following point when the "return goto\_intent('main');" statement is executed. This transfers the execution to the 'main' node and waits for the next user's input. The next user's input is evaluated at 'main'.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/skills/dialog-skill/flow-designer-overview.md
# Flow designer - Overview
The **Flow designer** is an intuitive conversational modeling tool that enables you to quickly build multi-turn conversational flows using user intents and responses. The Designer provides a comprehensive set of content templates, including surveys, forms, carousels, and rich media cards, to create beautiful, engaging conversational interfaces.
Refer [Flow designer,](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/dialog-designer-overview) for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/forward-call-c-ivr-channel.md
# Forward call (C-IVR channel)
You can use `SmartCall.forward` method to forward the call to another number such as a help center number or a call center number, in case the user requires any further assistance in the C-IVR flow.
{% hint style="info" %}
**Note**: This option works if you have deployed your agent in the C-IVR channel. See the [C-IVR channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/conversational-ivr-c-ivr-phone), for more information.
{% endhint %}
```javascript
return SmartCall.forward(<>,<>);
```
* **message**: Specify any message that you wish to be read out to the user before forwarding the call to the number.
* **phoneno**: Provide the complete phone number with a country code.
Consider that you have an "Order Status" skill in your pizza agent that checks for the order status using the order number provided by the user.
* You have deployed your agent in the C-IVR channel.
* You have designed a flow, where you wish to transfer the call to an agent if requested by the user.
* You can use the following JS method to forward the call or use can use the [Call forward](https://docs.avaamo.com/user-guide/how-to/build-skills/using-dialog-designer/create-new-skill/build-skill-responses/add-skill-messages-responses#call-forward) response from the UI.
```javascript
return SmartCall.forward("Forwarding to an agent. Please wait.","+918887651234");
```
### For "**refer"** transfer mode
You can use `SmartCall.forward` method to forward the call to a SIP number when you have deployed your agents on [Genesys](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/genesys), [SIP](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/sip), [Nice InContact](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/nice-incontact) channels.
```javascript
return SmartCall.forward("<>", "<>?call_type=sip", {<>});
```
{% hint style="info" %}
**Note:**
* You must get the <\> from the customer call stack. This is the number where Avaamo Platform forwards the call.
* You must also get the details of the specific headers that must be passed in the call forward request.
{% endhint %}
**Example**: The following example illustrates a Nice InContact SIP call forward request:
```javascript
return SmartCall.forward("Please hold on! Let me transfer your call to a care specialist",
"+14003460060?call_type=sip",
{"X-NICE-CXONE-CONTACT-ID": context.x_in_contact_contact_id });
```
---
# Source: https://docs.avaamo.com/user-guide/ref/frequently-asked-questions-faqs.md
# General keynotes (FAQs)
The following lists a few generic keynotes about intent processing, training data, and regex entities.
### Intent processing
* If there are multiple Q\&A with the exact same query, then the response from the first matching skill is displayed.
* The Smalltalk response is displayed only when the user query (including punctuations) exactly matches the training data provided in the Smalltalk.
See [Intent execution sequenc](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/intent-execution-sequence)e, for more information.
### Training data
* If you want training data that must match specific and generic queries, then it is recommended to provide generic training data. **Example**: If you wish to match "I want my fund value" and "I want fund value", then it is recommended to use "I want fund value" in the training data.
* Training data must not be in all caps, as caps words are considered as stop words during processing.
### Spell correction
* The platform corrects the spelling of only words where the corrected spelling is at least 4 characters.
* Spell correction is not done for System location entities and English dictionary words.
* By default, the spell correction is not done for system entities, it can be added as custom entity values if you wish to make spell correction work.
* Spell correction identifies and corrects the phrase in the user query that is closest to the training data rather than correcting it to the best match. **Example**: Consider that you have the following data in your agent:
* Dictionary: lone
* Entity types: Loan types -> Personal loan, Housing loan
* Skill -> Get loan
* Training data -> I want Axis bank personal loan

Note that here best phrase match for "lon" is "lone". However, when the user query is "I want Axis bank personal lon" , lon gets corrected to "loan" instead of "lone", since that is closest to the training data.
* Use "Skip lemmatization" to avoid plural words of English words getting unnecessarily mapped to other entities. **Example**: AlMedia is a US City. Consider that you have pizza\_sizes entity type with Medium as one of the sizes. In the user query, "I want to order medium size pizza", both US City and pizza\_size entities are extracted, as Medium is the singular form of Media that is also a value in the US city entity type. So, if both are used in a skill and you do not want to keep deleting slots, use "Skip lemmatization" when you are creating entity type.
See [Add invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent) and [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.
---
# Source: https://docs.avaamo.com/user-guide/skills/prompt-skill/functions.md
# Functions
The `Functions` section allows you to define and configure the functions your agent can execute during customer interactions. This feature enables the agent to perform specific tasks dynamically in response to user inputs or system triggers.
### **Key Components**
**Function List:**
* Displays the list of existing functions configured for the agent.
* Click `Add New` to create a new function.
* Functions can be deleted using the trash icon.
**Name:**
Enter a unique name for the function to identify it within the system.
**Declaration:**
The Declaration defines the function contract. It tells the agent what the function is, when it should be called, and what inputs it requires.
Example declaration
```js
{
"name": "confirm_appointment",
"description": "Function to confirm that a user will be able to make it to an appointment.",
"parameters": {
"type": "object",
"properties": {
"appointment_dat_id": {
"type": "string",
"description": "Appointment DAT ID"
}
},
"required": ["appointment_dat_id"]
}
}
```
**Definition:**
The Definition contains the function's execution logic. This logic runs only after the function is invoked based on the declaration.
Example definition (corresponding to the above declaration)
```javascript
if (context.variables.authentication_status !== true) {
return {
success: false,
msg: "User not authenticated."
};
}
let MRN = await Storage.user.get("mrn_id");
if (!context.variables.appointments) {
console.log("\n fetch future appointments has not been called yet");
return {
success: false,
avm_instruction:
"Call fetch_future_appointments function first, get the list of appointments and then confirm appointment."
};
}
```
### **Usage**
* Functions enable the agent to interact with external systems, process data, or execute predefined tasks.
* Well-defined functions enhance automation and improve the efficiency of customer interactions.
* Ensure the function names and instructions are clear to avoid misinterpretation by the model.
After configuring a function, click **Save** to apply changes.
### **Use Case: Enhancing Customer Interaction with Functions in Prompts**
**Scenario: Booking a Doctor's Appointment**
An agent is designed to help users schedule doctor appointments through a conversational interface. To improve automation and efficiency, the assistant needs to integrate with an external appointment scheduling system.
**Prompt:**
If the user requests an appointment, call the function `book_appointment` with the provided details. If any detail is missing, ask the user before proceeding.
**Function Definition: `book_appointment`**
The function allows the assistant to process user requests and interact with the scheduling system dynamically.
**Function Declaration:**
{
"name": "book_appointment",
"parameters": {
"doctor_name": "string",
"date": "string",
"time": "string",
"patient_name": "string"
},
"returns": {
"confirmation_number": "string",
"status": "string"
}
}
**How the Function is Used in a Prompt:**
When a user interacts with the assistant and says:\
\NAN;*"I want to book an appointment with Dr. Smith on April 5 at 10 AM."*
The assistant processes this input and uses the function:
```plaintext
plaintextCopyEditExecuting function: book_appointment
Doctor: Dr. Smith
Date: April 5
Time: 10 AM
Patient: John Doe
```
The function interacts with the external system and returns:
```json
{
"confirmation_number": "APPT-12345",
"status": "Confirmed"
}
```
The assistant then responds:\
\NAN;*"Your appointment with Dr. Smith on April 5 at 10 AM is confirmed. Your confirmation number is APPT-12345."*
By using functions in prompts, the assistant enhances customer interactions while ensuring precise and efficient execution of tasks.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/genesys.md
# Genesys
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance. Note that only the web channel is enabled by default.
{% endhint %}
Genesys SIP Server is the Genesys software component that provides an interface between your telephony hardware and the rest of the Genesys software components in your enterprise. It translates and keeps track of events and requests that come from, and are sent to the telephony device. See [Genesys SIP](https://docs.genesys.com/Documentation/SIPS), for more information.
The agents developed on the Avaamo platform can be deployed on the Genesys channel. In this article, the following steps are detailed:
1. [ Before you begin](#before-you-begin)
2. [Deploy your agent in Genesys](#deploy-your-agent-in-genesys)
3. [Manage channel settings](#manage-channel-settings)
## Before you begin
* Get the identifier (or FQDN) of Genesys SIP. You must configure this in the channel settings. See [Deploy your agent in Genesys](#deploy-your-agent-in-genesys), for more details.
* Avaamo requires customer source IPs in order to allow traffic to Avaamo SIP. Send a request to Avaamo Support to whitelist the IP addresses.
## Deploy your agent in Genesys
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can deploy the agent to a channel after creating and building an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing**.**
{% endhint %}
**To configure a Genesys channel:**
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in Genesys Channel.
* Specify the following channel setting details:

Parameter Descriptions Name Indicates the Name used to identify the Genesys channel. Note that you can have upto 150 characters in the channel name. Identifier Indicates the identifier (or FQDN) of Genesys SIP. Languages and
Playback Voice for
Select the language and configure the voice or the persona to be used by your agent in the interactive phone conversations with the user. Each language has a different set of voice personas that you can choose from. Select the persona from the options provided in the "Playback voice for <<language>>" section:
As with any enterprise voice, audio, or video application, each region or country has its own phone number to dial. Similarly, in the Genesys channel, you choose the language of the region or country where you wish to share the configured number. If you wish to share the number in multiple regions, then set up the Genesys channel specific to each language. Note that one Genesys channel is specific to only one language. To hear the voice preview, type any text in the text area and click the play button. You can also download the voice preview if required. You can select only those languages for which the agent is configured and those that are supported in the Genesys channel. If you have switched to a language that is not supported in the Genesys channel, then the agent responds in the default language. See Add languages and Supported languages , for more information.
Live agent transfer mode Select the request mode for Live agent transfer in SIP:
invite : Initiate a dialog for establishing a call. The request is sent by a user agent client to a user agent server.refer : Ask the recipient to issue a request for the purpose of call transfer. Note that this is a default method used in the Avaamo Platform and this works for both SIP and PSTN approaches. See Smartcall.forward , for more information on how to transfer and forward the call in SIP.
Speech timeout Indicates a maximum wait time of the agent within which a user response is expected. If the user response is not received within the time-out period, then an automated message is rendered back to the user indicating that the agent is awaiting the user response. Currently, this is a standard message and cannot be customized.
The default value is 1 second. Use the up and down arrows to increase or decrease time as required.
* Click **Save** to save the Genesys channel configuration details.
* Click **Download SIP Certificate** to download a "pem" file of the SIP certificate. This must be used to configure Avaamo Platform Genesys SIP details on the customer's side of the call center stack.

* Note that Avaamo also requires customer source IPs in order to allow traffic to Avaamo SIP. Send a request to Avaamo Support to whitelist the IP addresses.
## Manage channel settings
After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirements. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-domain-entity-details.md
# Get slot details
You can get the slot details using **context.entities.<\>** from the [context](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context) object.
Consider that you wish to get the status of your pizza order. You can start by asking the order number, and then display that order number back to the user for confirmation. Consider that you have created a regular expression entity for the order number. See [Entity type with regular expression](https://docs.avaamo.com/user-guide/build-agents/add-entity-types-to-agent/example-pizza-agent#entity-type-with-regular-expression), for the complete example.
In the JS response node, you can use the **slot name** to display the order number as follows:
```markup
return "Checking the status of your order - "+ context.entities.order_number + ".
Will update you in a moment.";
```
In the agent, the following response is displayed:

{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-environment-variables.md
# Get environment variables
You can get the environment variable details using **context.<\>** from the [context](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context) object.
Consider that you wish to get the value of an environment variable "DEV\_API\_URL" in the JS code and use it for further processing. See [Define environment variables](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-environment-variables), for more information on how to configure environment variables in your agent.

In the JS response node, you can use the **environment variable name** to get the value of the defined environment variable as follows:
```markup
return context.DEV_API_URL;
```
In the agent, the following response is displayed. Note that this is just an illustration to show how environment variables can be extracted from the context object:

{% hint style="info" %}
**Note**: The environment variable name is case-sensitive. You must use the exact case as defined.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-insights.md
# Get skill conversation insights
You can get the skill conversation insights using [context.insights](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights). Typically, insights can be used for troubleshooting purposes to analyze the skill flow and to create a better user experience.
Consider that in the MacPizza agent, for user intent, the response leads to an unhandled query. You can use **context.insights** to further analyze the skill flow. The following is a sample JS to get the insight details from the context object and display on the console:
```javascript
console.log(context.insights);
```
In the agent, the following details are displayed in the console:

{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-last-message.md
# Get last message
You can get the last message of the agent using [context.last\_message](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context). You can use this to:
* Re-iterate or reconfirm the user’s intention
* Extract user’s intent from the last message and perform certain validations
{% hint style="info" %}
**Notes**:
* In the text, quick reply, card, or carousel, you can use **${context.last\_message}** to extract the last message sent by the user.
* In a JS node, you can use **context.last\_message** to extract the last message.
* You can use **context.last\_message.<\>** to access card responses in the last message of the user. See [Card](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card), for more information.
* If you have added a form element to a card response, then the system generates an element uuid that can be used in **context.last\_message.<\>**. See [Add Form Elements](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-form-elements), for more information.
{% endhint %}
Consider that you have used [context.last\_message](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context) to log the last message of the agent in the console log while ordering a pizza for debugging purposes:
```
console.log(context.last_message);
```
In the agent, the following details are displayed in the console:
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/agent-assist-widget/get-started.md
# Source: https://docs.avaamo.com/user-guide/live-agent-console/live-agent/get-started.md
# Source: https://docs.avaamo.com/user-guide/live-agent-console/supervisor/get-started.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/get-started.md
# Source: https://docs.avaamo.com/user-guide/llamb/regression-testing/get-started.md
# Source: https://docs.avaamo.com/user-guide/llamb/get-started.md
# Source: https://docs.avaamo.com/user-guide/get-started.md
# Get started
Once you have created an **AI Agent**, follow these steps to configure and build it effectively.
### [**Add Skills**](https://docs.avaamo.com/user-guide/skills)
In this step, you define the **actions** your agent should perform by adding skills. You can choose from two types of skills:
* [Prompt skill](https://docs.avaamo.com/user-guide/skills/prompt-skill) – Uses predefined prompts to generate responses.
* [Knowledge skill](https://docs.avaamo.com/user-guide/skills/knowledge-skill) – Leverages LLaMB capabilities for advanced AI-driven interactions.
### [**Configuration**](https://docs.avaamo.com/user-guide/configuration)
This step allows you to set up additional configurations to **enhance the functionality** of your AI agents. Advanced settings help fine-tune the agent's behavior and responses for a more optimized experience.
### [**Debug**](https://docs.avaamo.com/user-guide/debug)
In the **Debug** step, you review the data stored by the skill and analyze logs generated from your JavaScript code. This helps in identifying and fixing any issues in the agent's functionality.
### [**Test**](https://docs.avaamo.com/user-guide/test)
Finally, you use the **Simulator** to test your skill with different `sample queries`. This ensures that your agent behaves as expected and provides accurate responses before deployment.
You can test using either the `AI Agent` or `Classic Agent` types.\
In the `AI Agent` testing mode, a mobile screen-style widget is displayed, allowing users to interact with the agent in a conversational interface.
In the `Classic Agent` testing mode, the traditional agent widget is shown. You can click on it to start the conversation.
Refer [Test channel settings](https://docs.avaamo.com/user-guide/configuration/channels/web-enabled-by-default#test-channel-settings), for detailed information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/global-storage-api.md
# Global Storage API
## Get global storage data
`GET` `https://cx.avaamo.com/bots_api/v1/storages/{{key}}.json?bot_id={{bot_id}}`
Get the value of the specified key from the agent's global storage.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------- | ------ | ---------------------------- |
| key\* | String | Key of the storage variable. |
#### Query Parameters
| Name | Type | Description |
| ----------------------------------------- | ------- | ---------------------------------------------------------------------- |
| bot\_id\* | Integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Headers
| Name | Type | Description |
| ----------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token \* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200: OK " %}
```javascript
{
"key": "bearer_token",
"value": "jfqbu23Zi2"
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/bots_api/v1/storages/<>.json?bot_id=30xxx' \
--header 'access-token: xxxxxxe6e3aa45349dad98axxxxxxxxx'
```
{% endtab %}
{% tab title="node.js " %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/bots_api/v1/storages/<>.json?bot_id=30xxx',
'headers': {
'access-token': 'xxxxxxe6e3aa45349dad98axxxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type key Indicates the key of the storage variable. String value Indicates the value of the storage variable. String
### Example
The following table lists a sample use case with query parameters:
| Use-case | Description |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Get global storage data value of a key | key : Specify the key of the storage variable in the request.
Example : [https://cx.avaamo.com/bots\_api/v1/storages/\<\<key>>.json?bot\_id=\<\<bot\_id>>](https://cx.avaamo.com/bots_api/v1/storages/\<\<key>>.json?bot_id=\<\<bot_id>>)
|
## Set global storage data
`PUT` `https://cx.avaamo.com/bots_api/v1/storages/{{key}}.json?bot_id={{bot_id}}`
Stores key and the value in agent's global storage. This is applicable to all the users interacting with agents.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------- | ------ | ---------------------------- |
| key\* | String | Key of the storage variable. |
#### Query Parameters
| Name | Type | Description |
| ------- | ------- | ---------------------------------------------------------------------- |
| bot\_id | Integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Headers
| Name | Type | Description |
| ----------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access\_token\* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
#### Request Body
| Name | Type | Description |
| --------------------------------------- | ------ | ------------------------------ |
| value\* | String | Value of the storage variable. |
{% tabs %}
{% tab title="201: Created " %}
```javascript
{
"status": 201
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request PUT 'https://cx.avaamo.com/bots_api/v1/storages/<>.json?bot_id=30xxx' \
--header 'access-token: xxxxxxe6e3aa45349dad98axxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"value": "jfqbu23Zi2"
}'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://cx.avaamo.com/bots_api/v1/storages/<>.json?bot_id=30xxx',
'headers': {
'access-token': 'xxxxxxe6e3aa45349dad98axxxxxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"value": "jfqbu23Zi2"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Example
**Request**: The following is a sample JSON request for setting the storage variable "bearer\_token" in a global session:
1. Send a PUT request with storage key and agent identifier -
2. Pass the user access token in the Header parameter.
3. Send the payload in the request body with the storage variable value you wish to set.
```json
{
"value": "jfqbu23Zi2"
}
```
**Result**: You can view the storage variable set for the user in the **Debug -> Storage** page. See [Storage](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents#using-storage), for more information.

## Delete global storage data
`DELETE` `https://cx.avaamo.com/bots_api/v1/storages/{{key}}.json?bot_id={{bot_id}}`
Delete the storage data of the specified key from the agent's global storage.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------- | ------ | ---------------------------- |
| key\* | String | Key of the storage variable. |
#### Query Parameters
| Name | Type | Description |
| ----------------------------------------- | ------- | ---------------------------------------------------------------------- |
| bot\_id\* | Integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | String | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200: OK " %}
```
{
"status": 200
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request DELETE 'https://cx.avaamo.com/bots_api/v1/storages/<>.json?bot_id=30xxx' \
--header 'access-token: xxxxxxe6e3aa45349dad98axxxxxxxxx'
```
{% endtab %}
{% endtabs %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/graphs-and-charts.md
# Graphs & Charts
You can create chart visualizations such as Pie Chart, Bar Chart, Dial Chart using the data in your agent. The visualizations can be used in the description of cards created from JS or in webview with HTML source.
{% hint style="info" %}
**Note**: The visualizations may not render on other channels such as Facebook and Twitter.
{% endhint %}
### Dial chart
You can find the source [here](https://github.com/avaamo/bot-response-visualizations/blob/master/dial-chart.html). Modify the size of the SVG and viewBox property values, as required.
{% hint style="info" %}
**Note**: Pass one of these values to the *getChart* method \[*low*, *moderately\_low*, *moderate*, *moderately\_high*, *high*] and the pointer points to the respective part of the dial.
{% endhint %}

### Pie chart
Find the source code [here](https://github.com/avaamo/bot-response-visualizations/blob/master/pie-chart.html). The pie chart has its own legend too. The color of each slice of pie is customizable. The size of the overall pie is also customizable.

### Bar chart
Find the source [here](https://github.com/avaamo/bot-response-visualizations/blob/master/bar-chart.html). The bar chart has its own legend too. The color of each bar is customizable.

---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-filters/grounding-filters.md
# Grounding filters
Grounding filters ensure the quality, accuracy, and relevance of the generated output, and help to "ground" the models in the context of the specific use case to obtain accurate and relevant output.
### How does it work?
Grounding filters in LLaMB work on two primary metrics:
* **Answer relevancy:** This metric calculates the degree to which the generated response accurately and appropriately addresses the given input or query. It measures how well the generated answer matches the given prompt. Answers with incomplete or unnecessary information get lower scores, while more relevant answers get higher scores. The score is determined using the question, the context, and the answer.
* **Context relevancy:** Context relevancy metrics calculate the degree to which the generated response accurately addresses and aligns with the context provided by the input. It gauges the relevancy of the retrieved context, calculated based on both the question and contexts. LLaMB uses techniques like transformers and attention mechanisms to better capture and understand the context. Embeddings help the model retain and relate to contextual information effectively.
### Examples
The following example illustrates an example LLaMB agent and how grounding filters help in generating accurate responses with relevant context:
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/users-and-permissions/groups.md
# Groups
Typically, in a large organization with many users, instead of creating each individual user with the required roles, you can create groups and add users to the group. This allows you to manage and assign roles at the group level instead of managing at each user level. This feature helps in easier and efficient user management. With the Groups feature, you can:
* Manage and distribute roles at the group level instead of managing at each user level.
* Assign agent permissions to specific groups instead of assigning them to each individual user. See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
See [Users](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/users-and-permissions/users), for more information on how to create and manage users.
## How does it work?
You can use one of the following ways to manage Groups in the Avaamo Platform:
**Syncing with Azure AD groups**: In order to use this feature, you must first configure and integrate MS-Azure SSO with Avaamo Platform. See [SAML Support - MS Azure](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/identity-providers/saml-support-ms-azure), for more information on steps to integrate MS Azure with the Avaamo platform.
* After you configure and integrate MS-Azure SSO with Avaamo Platform, the users are automatically signed in to the Avaamo Platform when they are on their corporate devices and connected to the network. See [SAML Support - MS Azure](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/identity-providers/saml-support-ms-azure), for more information on steps to integrate MS Azure with the Avaamo platform.
* Once the users sign in, the groups set up in Azure AD are synced automatically as per the group's policy setup in MS-Azure AD. Signed-in users are associated with the roles as set up in the Azure AD groups and access is accordingly provided in the Avaamo Platform. See [Syncing with Azure AD groups](#syncing-with-azure-ad-groups), for more information.
This feature provides more security as it restricts user and group management only via MS-Azure AD.
**Creating and managing groups in the Avaamo Platform**: If you are not using MS-Azure AD integration with the Avaamo Platform, then you can also independently create and manage groups in the Avaamo Platform itself. See [Creating and managing groups in the Avaamo Platform](#creating-and-managing-groups-in-the-avaamo-platform) and [Agent permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
{% hint style="info" %}
**Note**: **Groups** page is available only for users with the **Settings** role. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
{% endhint %}
## Syncing with Azure AD groups
* If you have **Settings** role access, then you can view the groups as per the groups claims policy setup in MS-Azure AD in the Settings -> User & Groups -> Groups page. See [User Attribute and Claims](https://docs.avaamo.com/user-guide/how-to/identity-providers/saml-support-ms-azure#user-attributes-and-claims), for more information.

* The group object IDs are displayed in the **Group name** column. This is the same unique identifier for each group created in the MS-Azure AD application.

* Click **Edit** and update the group name as per your requirement.
{% hint style="info" %}
**Notes**:
* The **Group name** must be unique.
* When groups are synced from MS-Azure AD, certain admin-related security groups also visible in the **Groups** page. Hence, it is recommended to edit the group names for those groups that have a significance in the Avaamo Platform. This helps in easy identification.
{% endhint %}

{% hint style="success" %}
**Key Points**:
* You can now manage all the users and groups via Azure AD and it is synced when the user logs in to the Avaamo Platform Dashboard. For example, if you assign the roles for a group, then the same is applied to the user when the user logs out and logs back into the Avaamo Platform.
* Deleted users or groups in the MS-Azure AD are synced once every 40 minutes. Note that this works only when provisioning is enabled in MS-Azure AD.
* If users log out from the Avaamo dashboard, then the users are logged out from MS-Azure IDP too.
{% endhint %}
## Creating and managing groups in the Avaamo Platform
{% hint style="info" %}
**Note**: This option is provided when you wish to create and manage groups within the Avaamo Platform itself and hence available only when you are logged in to the Avaamo Platform without using MS Azure SSO.
{% endhint %}
In the **Groups** page, you view and manage all the groups in the company. You can also define roles for each group.

### Create group and add members
* In the **Groups** page, click **Create.**
* Specify the name and description of the group with the following details and click **Submit.** Note that the Group name must be unique
* **Roles**: Select the roles applicable to the group. The roles selected is associated with all the users (members) in the group. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
* **Add members**: Add a list of users to the group. As you start entering the name, a list of user names is displayed. Select the users and click **Add**. Click **Delete** in the **Actions** column, if you wish to delete the user from the group.

{% hint style="info" %}
**Note**: If a user belongs to multiple groups, then the roles applicable to a user is a union of all the roles from individual groups.
**Example**: Consider the following scenario:
* Group 1 is associated with the Development role
* Group 2 is associated with the Testing role
* User John Miller is added to Group 1 and Group 2.
Roles applicable to John Miller -> Roles from Group 1 + Roles from Group 2. Hence, John Miller has both Development and Testing role.
{% endhint %}
### Delete group
In the **Groups** page, click the **Delete** option in the **Actions** column for a group that you wish to delete**.**
* The following pop-up message is displayed. Note that deleting a group revokes all the access to the users provided through that group.

* Click OK to confirm the deletion.
### Edit group
In the **Groups** page, click **Edit** in the Actions column of the user. The **Groups** page is displayed. Edit the group details as required and click **Submit**. Note that the Group name must be unique.
## Access token for users in groups
The **User access token** is used for APIs when user authentication is required.
Click the user icon at the top-right corner of your dashboard. You can either use the access token that is already available or click **Regenerate Access Token** to generate a new one. Note that each access token is user-specific.

See [Message API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/message-api#header), for an example of user token usage.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/guidelines-and-best-practices.md
# Regression testing best practices
Users can interact with your agent in different ways. Some user queries are completely correct grammatical sentences, other user queries can be just phrases, or some user queries can be ambiguous. It is important to test if your agent is trained to handle and respond to all such user queries as desired.
This article summarizes a **few essential categories** **of queries** that you must consider when you are preparing to perform regression testing on your agent. It is recommended to have sufficient queries in all these categories to ensure that you have tested your agent with real user queries that can be used to interact with your agent.
### Overview
One of the practical ways to build regression testing is by learning how users are interacting with the agent using the Conversation history. You can take a dump of 2-3 months of data to understand the way users interact with your agent. See [Conversation history](https://docs.avaamo.com/user-guide/how-to/debug-agents#using-conversation-history), for more information. A good regression test is the one that tests the skill ability to detect all intents it is expected to handle based on the training data and at the same time does not give wrong answers for questions that it is not trained on.
If you are writing regression testing for the first time,
* Review all the best practices for creating the regression test cases. See [Regression testing best practices](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/guidelines-and-best-practices), for more details.
* Download a sample regression file format and build the regression test cases by evaluating all the best practices. See [Regression test file format](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/regression-test-file-format), for more details.
If you already have regression testing test cases,
* You can download the latest run of regression test input files. See [Download input CSV](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/..#download-input-csv), for more details.
* Review all the best practices for augmenting your test cases. See [Regression testing best practices](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/guidelines-and-best-practices), for more details.
* Build the regression test cases by evaluating all the best practices. See [Regression test file format](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/regression-test-file-format), for more details.
### Use case
For the purpose of understanding, consider a simple example with the following data:
* "Auto Loan" agent
* One Dialog skill "Buy Auto Loan" with invocation intent "I want an auto loan".
* Simple greeting message in the skill that says "Sure. I can help with auto loan."
{% hint style="info" %}
**Notes**:
* Examples for all the categories are demonstrated using an agent simulator. The same set of queries can be used for regression testing too. See [Regression test file format](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/regression-test-file-format), to learn more on how to create a CSV file with test cases.
* It is recommended to have at least 5 queries for an intent. **Example**: If there are 100 intents, then it is recommended to have 500 test queries in the regression file. It is a common practice to have more than 5 queries for each intent.
{% endhint %}
### 1. Modularize test cases
Consider creating test cases with well-defined boundaries based on your agent implementation. A few examples are listed below:
* If your agent is configured in multiple languages, then consider creating a separate regression file for each language.
* Create separate regression file for each skill. For example, for all Dynamic Q\&A skills in the agent, you can create one regression file.
* If you have external integrations, then consider creating a separate regression file with external integration. This enables faster execution of the test cases where external integration is not required.
* It is recommened to create regression file with a maximum of 50000 test cases.
### 2. Well-formed queries
These are the user queries that are completely correct grammatical sentences with proper intents. Very few users interact with the agent using well-formed queries. For example, in the "Auto Loan" agent, you can test with these variations that the users can ask:

Note that these are not the variations the agent is trained with. Here, the Platform recognizes the intent in the user query accurately and an appropriate response is displayed to the user.
### 3. Incomplete/short queries
Most of the user queries are incomplete or short queries usually is the form of two or three phrases that are abstract and not clear. For example, in the "Auto Loan" agent, you can test with these variations that the users can ask:

Note that even with minimal user query data, since the Platform is able to recognize a part of the intent, a set of options closely matching the intent is displayed.
### 4. Ambiguous queries
These are the user queries that can be either short phrases or can be complete sentences but the intent is not clear. For example, in the "Auto Loan" agent, you can test with these variations that the users can ask:

Note that even with ambiguous user queries, since the Platform is able to recognize a part of the intent, a set of options closely matching the intent is displayed.
### 5. Spelling errors
Most of the user queries also can contain spelling errors. For example, in the "Auto Loan" agent, you can test with these variations that the users can ask:

Note that as long as the Platform is able to reasonably determine the accuracy of the intent from the user query, it is not required to train the agent for all such spelling corrections, as these are automatically handled in the agent.
### 6. Long sentences
There are certain user queries that can contain very long sentences in which the intents are not directly implied or the intent gets combined with multiple sentences. For example, in the "Auto Loan" agent, you can test with these variations that the users can ask:

Note that even with such long sentences, the Platform is able to recognize the intent and an appropriate response is displayed to the user.
---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-filters/hallucination-filters.md
# Hallucination filters
A hallucination filter in LLaMB involves a mechanism designed to detect and mitigate instances where the model generates false, misleading, or fabricated information.
## How does it work?
The hallucination filter in LLaMB works by detecting and generating faithful responses to the claims made in the answer from the given context.
The generated answer is considered faithful if all the claims made can be inferred from the given context. To determine this, a set of claims from the generated answer is first identified. Each of these claims is then cross-checked with the provided context to verify whether it can be inferred from that context.
## **Post-Go-Live** phase
### Step 1 - Review and Monitor
The first 2 weeks after going live, review every thumbs-down feedback in a given 24-hour period. See [Analytics](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics) and [Query insights](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/query-insights), for more information on how to extract the analytics data.
### Step 2 - Report the observations for swift action
* Report your observation and attach an Urgency.xls file with the Jailbreak query, current response, and suggested response.
* All hallucination production scenarios are considered at the highest severity and Avaamo Support will take immediate action based on the information provided.
{% hint style="info" %}
**Note**: This is the emergency response that suppresses LLaMB-generated response instantly. This works on question similarity. There is no need to add a lot of variations, however, Avaamo Support can add variations you tested.
{% endhint %}
## Examples
The following example illustrates how the hallucination filters work in LLaMB by generating faithful and factual responses:
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/handover-protocol-integration-facebook.md
# Handover Protocol Integration- Facebook
The Facebook Messenger Platform's handover protocol enables two or more Facebook apps to participate in a conversation by passing control of the conversation between them. This feature can be used in many ways to enrich your agent experience on the Messenger. For example, this protocol makes it possible for a Page to simultaneously use one Facebook app to build an agent for handling automated responses, and another Facebook app for customer service with live agents.
#### Prerequisites
To use the handover protocol, you must assign only one app with the Primary Receiver role and at least one app the Secondary Receiver role on your Facebook Page settings.
{% hint style="info" %}
Learn how to create a Primary App on the [*https://developers.facebook.com/*](https://developers.facebook.com/)*.*
{% endhint %}
## Generate API Token
The user needs to generate an API Token to use the Handover Protocol on Facebook for Developers portal. This token is then used on the Avaamo UI to generate the Webhook URL. To generate the token:
* Login to your account on Facebook for Developers portal.
* Click on Create Page, to create a new page on your Facebook account.
* Enter the Display Name and Contact Email to Create a New App ID.
* Go to the Primary App Dashboard and under the “Add a Product ” section, click on “Set Up” under Messenger.
* On the Token Generation popup window, select the Facebook page, and generate the Page Access Token.
Copy the Page Access Token, this will be added on the Avaamo UI under the Facebook channel to generate the Webhook token.'
## Generate Webhook Token
* In the **Agent** page, navigate to the **Configuration -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in Facebook Messenger.
* On the popup window, enable the switch to Yes for Manual Configuration and Reuse Videos.
* Enter the Page Name, Page ID, and Page Access Token values from the Facebook page and app.
* Click Save.
Once you click save, it will generate the Webhook URL and Verification Token.
Copy and save the Webhook URL to setup Webhook on your Facebook app.
## Set up Webhooks
To set up the Webhooks, go to your Facebook app and under Webhooks section click on Setup Webhooks.
Select all the subscription fields, enter the Webhook URL and access token from the manual configuration on the Avaamo UI and click on Verify and Save.
Select your page from the drop-down and click on "Subscribe".

Under App Review for Messenger, add the submission of pages\_messaging.
For a Secondary app, create the secondary app on your Facebook account and follow the same steps with the secondary agent. And connect to the agent to the secondary app on the same Facebook page.

Go to your Facebook page and click on Settings then go to Messenger Platform.

Under Connected Apps, you will have primary and secondary apps. Now, click on Configure.

Select your preference for the primary and secondary app.
{% hint style="info" %}
**Note**: By default, all messages are sent to the Primary Receiver app. When control of the conversation is passed to another, the Messenger Platform will send messages from the conversation to it instead. Only one app may control the conversation at a time.
{% endhint %}
Now, from Avaamo agents we need to switch the agent's response based on user queries for the response.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/hangup-call-c-ivr-channel.md
# Hangup call (C-IVR channel)
You can use `SmartCall.hangup` method to hang up the call in the C-IVR flow with a message.
{% hint style="info" %}
**Note**: This option works if you have deployed your agent in the C-IVR channel. See the [C-IVR channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/conversational-ivr-c-ivr-phone), for more information.
{% endhint %}
```javascript
return [<>, SmartCall.hangup()];
```
Consider that you have an "Order Status" skill in your pizza agent that checks for the order status using the order number provided by the user. You have deployed your agent in the C-IVR channel. You have designed a flow, where you wish to hang up the call after reading out the status of the pizza order. You can use the following JS method to read out the message and hang up the call:
```javascript
return ['You order is on its way and will be delivered in 20 minutes. Hanging up the call now. Have a good day.',SmartCall.hangup()];
```
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/history.md
# history
Context history is an array of message history with details such as created date and time, actual message, and the sender of the message generated during the execution of the user’s intent in the agent's flow. The following is a sample JSON of history details in context object:
```yaml
"history": [
{
"created_at": 1566282974986,
"last_message": "i want to order cheese pan pizza",
"last_message_schema_identifier": "output_14",
"last_message_sent_by": "user"
}
]
```
| **Attribute** | **Description** | **Type** |
| --------------------------------- | --------------------------------------------------------------------------------- | ------------- |
| created\_at | Indicates timestamp of the message sent by the user to the agent in milliseconds. | UTC Timestamp |
| last\_message | Indicates the last message sent to the agent. | String |
| last\_message\_schema\_identifier | Indicates the node identifier of the last message. | String |
| last\_message\_sent\_by | Indicates the user who sent the last message to the agent. | String |
{% hint style="info" %}
**Note**: You can view upto the last 20 messages in the context.history object.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/llamb/regression-testing/how-to-improve-accuracy.md
# How to improve accuracy?
Ensuring that queries achieve a good correctness score is essential for validating the agent's performance. To improve results, follow these steps:
1. **If no ground truth is specified in the regression test input file:**
* The system generates a ground truth for those queries.
* Review the generated ground truths, update them to match your expected answers, and rerun the regression test.
2. **If ground truth is specified in the input file:**
* Modify the ground truth based on the expected answers and rerun the regression test.
3. **If your** [**result files**](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results) **have a status of FAIL:**
* Check if the added ground truth is present in the ingested content.
* Improve section headers to enhance content clarity and relevance. Refer [section header](https://docs.avaamo.com/user-guide/get-started/step-2-ingest-enterprise-content/view-and-edit-knowledge#sections), for complete details.
* Debug the answers by referring to the generated errors and warnings, and refine the input file before re-executing the test. Refer to errors and warnings in [Understanding results](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results), for reference.
By following these steps, you can systematically improve test results and enhance the agent's performance.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to.md
# How-to
All the scenarios are based on the MacPizza agent use case, where you are building a skill for Mac Pizza - a Quick Service Restaurant to place orders for pizzas.
## Before you begin
The following are generic steps for all the How-to topics listed in this section:
* Ensure you have met all the [pre-requisites](applewebdata://E72AA735-5E27-4FEA-9818-F9DC6DD2ACD7/@avaamo/s/avaamo/~/drafts/-LwMqtgHWkBhIW87lD6g/quick-start-tutorials/pre-requisites).
* You can build and manage dialogs (conversational flow) immediately after creating a Dialog skill. See [Create new Dialog skill](applewebdata://E72AA735-5E27-4FEA-9818-F9DC6DD2ACD7/@avaamo/s/avaamo/~/drafts/-LwMqtgHWkBhIW87lD6g/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill), for more information.
* If you wish to edit skill in an agent, then:
* Navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9ae47367-043d-436a-bab1-053a8b89e2a1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu. Search and open the required skill. See [Search skill](applewebdata://E72AA735-5E27-4FEA-9818-F9DC6DD2ACD7/@avaamo/s/avaamo/~/drafts/-LwMqtgHWkBhIW87lD6g/how-to/build-skills/manage-skill#search-skill), for more information.
{% hint style="success" %}
**Key Point**: It is recommended to have a good working knowledge of JavaScript, HTML, and CSS.
{% endhint %}
## Learn how-to
This section describes how-to customize skills with a rich set of objects and functions provided in the Avaamo Platform using certain common scenarios.
### Use Context
The following scenarios are covered to explain the usage of the context object :
* [Get user details](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/to-get-user-details)
* [Get last message](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-last-message)
* [Get entity and slot details](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-domain-entity-details)
* [Create context variables ](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-variables)
* [Create custom user properties](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/create-custom-user-properties)
* [Detect user device](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/detect-channel)
* [Switch user’s language](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/switch-users-language)
* [Transfer to live agent](https://docs.google.com/document/d/1kLeCPObAeXeon6viGnywY3_9HQxSmfs-YS-xB561Ekg/edit#heading=h.b0a7f5vp0nz8)
* [Get skill conversation insights](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/use-context/get-insights)
See [context](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context), for more information on attributes supported in the context object.
### Use Storage
The following scenarios are covered to explain the usage of the storage object :
* [Set and get global variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/using-storage#set-and-get-global-variables)
* [Set and get user variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/using-storage#set-and-get-user-variables)
See [storage](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage), for more information on attributes supported in the storage object.
### Control Skill Flow
You can control the navigation of skill flow in one of the following ways:
* [Using post processing](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/controlling-skill-flow#using-post-processing)
* [Using JS output](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/controlling-skill-flow#using-js-output)
See [Flow Control](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control), for more information on various functions supported to control skill navigation flow.
### Send Notifications
You can send SMS and email notifications to the users from skill. The following scenarios are covered:
* [Using Email](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/sending-notifications#email-notification)
* [Using SMS](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/sending-notifications#sms-notification)
### Customize Skill UI
You can programmatically customize skill UI in the following ways:
* [Build dynamic skill response](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
* [Create custom HTML web view](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/create-custom-html-web-views)
* [Define custom intents](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/define-matching-rules-using-custom-intents)
### Integrate with API
Seamlessly integrate skill response with [REST](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/integrate-with-api-1#rest-api) and [SOAP](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/integrate-with-api-1#soap-api) API using a simple fetch call.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/hybrid-sdk.md
# Hybrid SDK
Avaamo Platform is offered as a SaaS service that runs on AWS (Amazon Web Services) in multiple regions. All the conversations is through a secure, reliable, and scalable messaging infrastructure where each message is encrypted.
Typically, in business involving sensitive data such as banking and insurance or in-cases where the business has strict security measures that require the integration logic and access credentials to stay within the company network. Hence, it is required for the **Avaamo agent** to access on-premise applications and perform bi-directional interactions for providing value-added services to the user.
You can integrate with Avaamo Platform using **Hybrid SDK** that combines the performance, scale, and cost benefits of the cloud with the access control and permission limitations of enterprise data access.
{% hint style="success" %}
**Key Point**: You can clone and use this repository , to get started on Hybrid SDK integration.
{% endhint %}
### Pre-requisites
Ensure that the customer machine must be allowed to connect to the Avaamo servers via HTTPS
### How does it work?
Avaamo agents access company data. The accuracy and security of data is critical to provide a good user experience. Hence, when you are developing an agent, it is important to understand how agents can access company data.
Conventionally, the enterprise application exposes REST API/SOAP Web Services to the internet that can be consumed by the agent**.** This approach has the following limitations:
* It opens up the service/data for all kinds of internet hacking.
* Involves full IT services to open ports and set up security.
* Requires exposing unrestricted security credentials with a third party.
Avaamo’s **Hybrid SDK** eliminates these problems by providing native integration SDKs to connect your data/services to the agent. It is easy and secure, where the integration logic and access credentials stay within the company network. The following illustration depicts the overall data flow in the Hybrid SDK:
1. Avaamo SDK initiates and automatically connects to the Avaamo servers over the HTTPS connection. In this step, Avaamo agent credentials are used. You may initialize your custom logic and connect to your data/services in this step or wait for the agent requests to appear. The SDK handles the connectivity with the Avaamo Conversation engine and acts as the secure pipe to carry messages back and forth from the users.
2. The user sends a message to the agent.
3. Avaamo conversation engine that is driving the conversation with the user determines it needs to access data/service.
4. A request is passed into your integration code via the SDK. Your code connects to your enterprise's systems to fetch necessary data or trigger further actions and a response is sent back to the Conversation engine.
5. The conversation engine processes the service response and replies to the user.
This approach does not require any ports to be opened in the firewall or require you to set up a VPN. The only requirement is the machine must be allowed to connect to the Avaamo servers via HTTPS protocol. It is not even required to enable full internet access to that machine.
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/identity-providers.md
# Active Directory (AD) integrations - Identity provider
The Avaamo platform supports the Single Sign On (SSO) feature integration with SAML. It allows the users to log in with only one set of login credentials and makes it easier for users to use several different programs without having to type in several different usernames and passwords.
Security Assertion Markup Language (SAML) is an open standard for exchanging authentication and authorization data between parties, in particular, between an identity provider and a service provider.
The users can integrate the SSO with SAML support on the Avaamo UI (SP) with Microsoft Azure, G Suite, and Okta (IdP).

### Add Identity Service Provider
The user can add a new Identity Service Provider by clicking on Add New. Avaamo platform supports Microsoft Azure, Okta, and G Suite.
**Microsoft Azure** - With SAML single sign-on, Azure AD authenticates to the application by using the user's Azure AD account. Azure AD communicates the sign-on information to the application through a connection protocol.
**Okta** - To support SAML-based Single Sign-On from Okta set up an application in Okta with the details of your application (the new SAML Service Provider or “SAML SP”).
**G Suite** - The SAML-based Federated SSO article describes the SAML instance where Google is the identity provider (IdP). This group of articles describes the SAML instance where Google is the service provider (SP) and uses 3rd party identity providers.

On the **Add New** popup window:
1. Enter the **Identity Provider Name** (IdP). A unique identity provider name for your identification. This name will be displayed in the drop-down list when you are selecting an identity provider for your dashboard users while either creating a new user or editing an existing one. For example, Microsoft Azure, G-Suite, Okta, etc.
2. Enter the **App ID/ Entity ID**, this is the application configured on the Identity Service Provider.
3. Enter the **Single Sign-On URL**.
4. Enter the **Certificate Signature**, this is downloaded once the application is created. So, browse your local disk and upload the certificate.
5. Click **Sign request**, if you wish to send the Avaamo certificate and key in the SAML request.
6. Click on **Submit.**
You can edit the Identity Provider settings and also, delete an Identity Provider.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/image-aspect-ratio-facebook.md
# Image Aspect Ratio- Facebook
The preferred aspect ratio of images for social media channels is the 1:1 aspect ratio. The Avaamo platform supports the uploading of the images in a 1:1 aspect ratio to get the square images.
To upload images in the 1:1 aspect ratio on the Avaamo platform:
* In the **Dialog skill** page, click the **Implementation** tab.
* In the conversation flow tree, click **Add skill response**.
* Enable the slider button to **Yes** for upload.
* Click on the upload button and select the image.

* Select 1:1 from the drop-down list on the top. Click on Done and then, click on OK to save the image upload.
{% hint style="info" %}
**Note**: The same process can be followed to upload an image in the 1:1 aspect ratio for a carousel agent response.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills.md
# Import and Re-import skills
Instead of creating skills from scratch, you can [import](#import-skill) from any available published skills in the skill store that is closest to your business and then edit the skill as required. Further, once imported to your agent, you can also [re-import skills](#re-import-skills) from the **skill** store to bring the latest copy of the skill from the skill store. See [Manage skill store](https://docs.avaamo.com/user-guide/how-to/manage-skills-store), for more information.
{% hint style="success" %}
**Key Point**: See [Frequently asked questions (FAQs)](https://docs.avaamo.com/user-guide/manage-skills-store#frequently-asked-questions-faqs), for a list of common questions on publishing and re-publishing of skills to skill store.
{% endhint %}
### Pre-requisites
Only users with **Edit, Publish,** or **Owner** permission for the agents can import or re-import a skill from the Skill store. See [Users and Roles](https://docs.avaamo.com/user-guide/manage-platform-settings/users-and-permissions#roles-in-agent-life-cycle) and [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can import skills from the skill store immediately after creating a new agent. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent) and [Add skills to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills-to-agent), for more information.
* If you wish to edit an agent, then:
* In the Avaamo Platform UI, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing and publishing.
{% endhint %}
### Import skill
* In the **Agent** page, navigate to the **Skills** option in the left navigation menu and click **Import skill**.

* In the **Import skill** pop-up, a list of all the skills that are not already imported in the agent is displayed.
* Search and select a skill. Click **Import to Agent**.

* You can view a copy of the imported skill in the **Custom skills** section.
* **Save** your agent.
{% hint style="success" %}
**Key points**:
1. When you import a skill, an exact independent clone of the skill is created in the agent. Users with the required roles can edit the imported skill in the agent without affecting the skill in the skill store.
2. All the entity types and JS files available in the skill from the skill store are imported to the skill in the agent.
3. If you import a skill with duplicate entities and JS files, then a warning message is displayed. Click **Continue** to retain the agent copy.
4. If you have already imported a skill from the skill store, then you can re-import the skill, if required, to get the latest changes of the skill from the skill store. See [Re-Import skills](#re-import-skills), for more information.
5. When importing a skill, only translations of those languages that are supported by the agent are imported. If you wish to import the skill language that is not in the agent, then you must first add the language to the agent and then import the skill.
6. In cases where custom translation for specific sentences or text is available at both the skill level and agent level, the agent-level translation is given priority.
7. Since an imported skill language is considered only when the language is a part of the agent configuration, any node-level translations of the languages that are not a part of the agent are not imported either.
{% endhint %}
### Re-Import skill
This option is displayed only for those skills in the agent that are already imported from the skill store.

When you click **Re-import from Skill store**, the skill in your agent is completely replaced with the skill from the skill store, except for duplicate entities and JS. Note the following points on re-import:
* All the entity types and JS files available in the skill from the skill store are imported to the skill in the agent.
* If you re-import a skill with duplicate entities and JS, then a warning message is displayed. Click Continue to retain the agent copy.
* Currently, you cannot merge the local skill changes with the skill in the skill store. However, you can use the following methods to preserve your local changes:
* Use **Make a copy** to create a duplicate copy of your agent. See [Make a copy](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/make-a-copy), for more information.
* Use **Backup & Export** option to create a backup copy of your agent in your local system. Later, you can use the exported copy and **import** the same to any existing agent in any account. See [Export and import agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/export-and-import-agents), for more information.
You can use the skills from the copied agent or the imported agent to manually compare and merge.
---
# Source: https://docs.avaamo.com/user-guide/llamb/improve-user-experience-feedback-analytics.md
# Improve user experience - Feedback, Analytics
The best way to improve user experience with LLaMB is by collecting early user feedback from the domain experts and SMEs in the UAT stage itself. You can also leverage the Analytics board to draw some inference on the the usage of intents in your `LLaMB Content skill`.
This article covers the following topics that can help improve user experience with the `LLaMB Content skill`:
1. [Using user feedback ](#user-feedback)
2. [Using Analytics](#insights-from-analytics)
## User Feedback
Regularly collecting and analyzing user feedback allows for ongoing improvements and adjustments, ensuring the agent evolves in response to the user's needs.
User feedback is crucial for various reasons:
* Provides valuable insights into users' expectations.
* Highlights the areas where improvements can be made to enhance the overall user experience.
* Identifies issues, bugs, or unexpected behaviors that can be addressed promptly.
### Collecting user feedback
The suggested approach to collect feedback is to start early in the UAT phase. Gather user feedback from UAT users before deploying the agent in the live production environment. User feedback obtained during UAT varies from that collected in a production environment.
Within the UAT environment, the emphasis is on gathering detailed and accurate feedback to enhance the user experience before deploying the agent to the actual production users. The users can use the thumbs-up or thumbs-down option to provide the feedback. See [UAT](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/uat), for more information.
The following illustration depicts the feedback collected on the thumbs-down option:
After the agent is deployed in the production environment, the actual users can share the feedback using thumbs up and thumbs down options in the agent response. When the user selects the thumbs-down option, the agent collects a few details from the user that can help is fine-tuning the agent:

### Monitor user feedback
You can view the user feedback from the [Monitor -> Analytics](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics#user-feedback) page and also under [Learning -> User Feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) section.
Alternatively, you can also use the [User Feedback API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/feedback-api) to collect feedback periodically to learn and analyze the user's experience when interacting with your agent.
### Analyze feedback and improvise
When using LLaMB, the following are a few recommendations that can help incorporate user feedback and improve the overall user experience of the agent:
* Check if all the documents and URLs are ingested successfully in LLaMB without any errors. See Troubleshooting tips, for inputs on resolving errors if any.
* Isolate the problem;
1. Check if the source from where the answer is inferred in the agent does contain the expected response from the user. If not, consider updating the source.
2. If the source contains the expected response, but you are unable to get the expected behavior, check if updating the knowledge base on the `LLaMB Content skill`, can help. See [View and edit knowledge](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/view-and-edit-knowledge), for more information.
3. If the behavior persists after #1 and #2, contact Avaamo Support for further assistance.
### Insights from Analytics
The `Top LLaMB Content intents` block in the `Monitor -> Analytics` page gives you valuable insights into the top user intents responding to the user query.
It helps you learn and understand how users are interacting with your assistant. With these statistics, you can decide how and where to further improve your agent based on your business requirements.
See [Top LLaMB Content intents](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics#top-llamb-content-intents), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/improving-accuracy-in-answers-skill.md
# Improving accuracy in Answers Skill
There are some important techniques that can be used to improve the accuracy of the Answers skill.
### Appropriate parsing templates
Accuracy in Answers skill is directly related to how precisely the extraction happens. This extraction completely depends on the parsing templates that are being used. Specially in HTML pages where there are header, footers, and navigation panels, it is important to identify the main content for extraction and use the appropriate parsing template. If the available templates do not work well, it is necessary to create custom templates.
Before using a parsing template for bulk upload of documents, it is recommended to try it out with a few documents and check if the extraction works fine.
### Use APIs for bulk content upload
Whenever the volume of content to be ingested is large, such as content from CMS, it is better to use APIs to integrate with the CMS.
Using APIs for bulk content upload has the following advantages:
* Avoid the creation of parsing templates.
* Avoid the necessity to update maintain parsing templates to match the user interface - in cases where the design of the web pages changes.
* Integration with the source system using API allows the knowledge base to be updated as and when the source content is updated.
### Adding custom domain-related terms
Adding domain-related terms as synonyms to words in the uploaded content. Sometimes, the answers skill may not be able to extract responses because terms and verbiages in the content might not be domain-specific. Adding domain-related terms as synonyms can improve accuracy. For examples, using synonyms like card, chip or processor when the content is about CPUs, the system can extract the relevant information easily.
### Using disambiguation strategies
Disambiguation is the ability of the agent to distinguish between similar responses based on the context of a chat conversation. For example: The security policy for an organization may be different based on region. When an agent is able to perform disambiguation, the agent can categorize security policies based on regions - thereby improving accuracy in the chat conversation.
You can disambiguate using:
* Attributes: See [Defining attributes for documents or URLs](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/manage-avaamo-answers-1/perform-common-actions#defining-attributes-for-documents-or-urls)
* Acronyms: See [Disambiguation](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/configure-answers-skill#disambiguation)
* Training data: See [Disambiguation](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/configure-answers-skill#disambiguation)
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking.md
# Information masking
Typically, in certain domains such as Banking, Healthcare, and Finance, a user’s interaction with the agent can capture sensitive details such as the user’s identification number, policy number, email (to name a few). Therefore, it is critical to audit the data and protect data privacy.
This article explains the process of masking PII/PHI/GDPR compliance data within the Avaamo Conversational AI system. Information masking in the Avaamo Platform can be configured at two levels:
* [Masking user properties](#masking-user-properties): This masks all the user information details such as email, first name, last name, SSN in all the agent's conversations. User properties, often used to store and reuse user-specific information like Social Security Numbers (SSNs), phone numbers, and email addresses, are also subject to masking. When such data is set using `User.setProperty()`, it is immediately masked if marked as sensitive. Once masked, these values are no longer accessible within the agent’s context, nor are they visible in logs or analytics, helping maintain strict privacy standards and regulatory compliance.
* [Masking agent responses](#masking-agent-responses): This masks all the agent's responses for a node in the conversation flow. Additionally, you can also enable masking of all the user-uploaded files. After masking, the uploaded files cannot be accessed in the Avaamo Platform, as they are physically deleted from the Platform.
* **User Query Masking**\
The Avaamo Platform automatically masks sensitive information in the user's messages before processing. This includes details identified through system-recognized entities such as names (`person`), dates (`date`), and predefined user properties like `first_name`. By applying user query masking, the platform ensures that personal or identifiable information is masked, preventing it from being stored or displayed in its original form.
* **Agent Response Masking**\
Agent responses can also contain sensitive information, especially when they echo or use dynamic content related to user input. The platform masks agent responses using the same entity recognition logic—covering entities like `person` or `date`—and also masks any user properties referenced in the response. This includes not only text responses but also data presented in files and forms shared by the agent, ensuring comprehensive coverage of potential data exposure points.
## Key points
{% hint style="danger" %}
**Note:** Masking purges the data, making it unrecoverable. The removed PII/ePHI data cannot be restored.
{% endhint %}
1. Contact Avaamo Support to configure masking for your agent. See [Before you begin](#before-you-begin), for more information.
2. When you enable masking for an agent, the information is masked as per the masking configuration details across all the pages such as agent insights, conversation history, and query insights where the information can be viewed. See [Masking toggle](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings#enable-information-masking) in the Configuration -> Settings page, for more information on how to enable or disable masking for an agent.
3. If you have deployed your agent in C-IVR or Phone channel and masking is enabled, then the audio files from the user responses are not available in the conversation history, since it can contain PII data.
4. If you wish not to record the live agent interactions between users and live agents, then you can disable it using the `Save conversations` toggle button on the `Configuration -> Live agent` page. This feature is particularly useful for organizations handling sensitive data, offering them flexibility to align with internal data governance policies and regulatory requirements. See [Configure live agent](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent/pre-built-live-agent#configure-live-agent), for more information.
5. Masking is always performed only on the information that resides on the Avaamo platform. All data sent to integrations—such as live agent interactions, custom channel interactions, or Microsoft Teams channel interactions—remains within the respective integration platforms and is subject to the data handling policies and rules of those third-party platforms. Avaamo does not have control over or the ability to mask this data.
6. [Storage variables](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage) are not masked. As a best practice, it is recommended to clear out all sensitive storage variable information after using it during agent development itself.
7. Currently, information masking is not supported for [Universal agents](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/universal-agent). This implies that if you have a Universal agent with masking enabled for member agents, then even though the responses are masked in the member agents, the same responses remain unmasked in the Universal agent.
8. If you update the masking configuration details, then masking the newly set-up fields is done for the new messages. If you wish to mask the newly set up fields in the previous messages of the conversation, then contact Avaamo Support for further assistance.
## Default masking behavior for new agents
All newly created agents will have data masking enabled by default to better protect Personally Identifiable Information (PII) and ensure compliance with data privacy regulations, right out of the box.
**What’s masked by default**:
{% hint style="success" %}
**Key points:**
1. Real-time masking is enabled by default, so any personal information in both your messages and the agent’s replies is automatically masked to keep your data safe.
2. Masking support for `non-English` conversations is currently under continuous evaluation.
{% endhint %}
By default, the following personal information is automatically masked in real-time:
* Date (example: date of birth)
* email
* person
* phone
* SSN
* first\_name
* last\_name
* ip\_address
* Any user-uploaded files
## Before you begin
The following illustration depicts the data masking process flow:
.png?alt=media\&token=c1a7e430-5ad2-4dd3-a490-f9c04a68f478)
You must provide the following information to Avaamo Support to configure masking:
1. Provide the agent details such as the agent name and the agent identifier.
2. Provide a list of fields in the agent that must be masked in messages.
3. Provide a list of user attributes such as first name, last name, and other custom user properties, that must be masked.
4. By default, when masking is enabled, all the PII data in agent and user messages are masked in the conversation. This masks all the sensitive user information as per your requirement, and such data is not stored in the Avaamo Platform.
## Masking user properties
You can configure to mask user information details such as email, first name, last name, and SSN in all the agents' conversations. When you enable masking for an agent, the information is masked as per the masking configuration details across all the pages, such as agent insights, conversation history, and query insights, where the information can be viewed.
### Fields to Mask
By default, masking is enabled for certain fields. If you need to mask additional fields, use the table to specify the fields that should be masked in the Avaamo user interface to ensure compliance and maintain confidentiality.
| Section | Field | Value / Notes |
| ------------------------------ | ---------------------------------- | ------------------------------------------------------- |
| Agent and Instance Details | Agent ID | |
| | Instance | |
| | | |
| Entities Containing PII | Default masked system entities | date, email, person, phone, ssn |
| | Additional entities (if any) | |
| | | |
| User Attributes Containing PII | Default masked user attributes | first\_name, last\_name, email, phone, ssn, ip\_address |
| | Additional attributes / exceptions | |
| | | |
| Custom Use Cases | Use case description | |
| | Masking requirement | |
| | | |
| Masking Trigger (default) | Real-Time Masking | Enabled |
| | File Masking | Enabled |
| | Response Node Masking | Enabled |
| | | |
| Data Retention Period | Retention Duration | |
### Test masking
After the configuration is completed, you can test the user message masking from your agent. Consider that you wish to mask the following:
* **User email**: My email is . In the agent, click the eye icon to check query insights.

Similarly, you can verify the masked details in the conversation history and query insights:

* **User's first name and last name when sent in custom channel**: Consider that in the custom channel, the user's first name is sent in the user properties:
```javascript
{
"channel_uuid": "f33b3814-1535-4e21-807f-a1d2b77585af",
"locale": "en-US",
"user": {
"first_name": "Williamson",
"last_name": "Smith",
"uuid": "9ac15843-151d-47fb-8b3d-930b89ce797e"
},
"message": {
"text": "hello"
}
}
```
In the **Conversation history** page, you can see that the `first_name` and `last_name`in the user conversation is masked,

## Masking agent responses
The Avaamo platform offers **masking agent responses** to protect sensitive information such as PII (Personally Identifiable Information) during agent interactions. This functionality ensures that only sensitive data is masked, while the rest of the response remains visible for clarity and debugging.
The system identifies and masks only the portions of the agent response that contain sensitive data. The non-sensitive content is left unmasked, allowing teams to review and understand the flow of the conversation without exposing private information.
{% hint style="info" %}
**Notes**:
* This behavior is `enabled by default` for all agents created after the feature rollout. For agents created prior, bot developers can manually enable masking from the [Agent Settings page](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings#enable-information-masking), or contact Avaamo Support for assistance.
* If the agent response contains sensitive PII data such as name, account number, or password, then it is recommended to mask the agent responses to protect user privacy.
{% endhint %}
In the **Conversation history** page, you can view that the agent responses are masked. Note that even the original file is masked as **masked.png**. When you click **masked.png**, the original file is no longer available in the Avaamo Platform and cannot be accessed:

Similarly, you can also verify the masked details from the **Query insights** page.
## Frequently Asked Questions (FAQs)
### 1. Can masking be reverted?
Once masked, the original unmasked data is not available anywhere in the Avaamo Platform. Hence, masking cannot be reverted.
### 2. How is the PII (Personally identifiable information) data masked if my agent is deployed in the C-IVR channel?
If you have deployed your agent in the C-IVR or Phone channel and masking is enabled, then the audio files from the user responses are not available in the conversation history, since they can contain PII data.
### **3. What happens to previous data when masking is enabled after a debugging period is over?**
If masking is enabled after a debugging period, all previously generated data that was unmasked due to masking being disabled will be masked. The platform applies masking to this data, ensuring it aligns with the current configuration.
### 4. If I disable masking, then will all the previous data get unmasked?
Once masked, the data cannot be retrieved back. At a later point in time, if you choose to disable masking, then all the previous data will still remain masked and will not get unmasked. However, going forward, the conversations after you disable masking will remain unmasked.
### 5. How to audit if all the data has been masked or not?
Avaamo Platform maintains a log of each record that is masked. Contact Avaamo Support for more details before you plan to audit.
### 6. I cannot see the Debug logs option. Why is that?
You can enable or disable the **Debug Logs** option from the **Settings** section in the agent's configuration. Refer [Enable Debug Log](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings), for more information.
### 7. Some of the user names are not getting masked in the user messages. What do I do now?
Avaamo Platform covers the masking of the most commonly used names. However, if you do find certain names that are not getting masked, you can consider one of the following approaches:
1. Create a custom entity with all such names and share the custom entity with Avaamo Support. Avaamo will then enable masking for the custom entity. Configuring masking is a one-time activity and you can continue to add names in the custom entity and all such names will get masked after masking has been set up.
2. Periodically share a list of such names with Avaamo Support and we can continuously improve name entity recognition.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/insights.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights.md
# insights
Context insights indicate how the user’s intent was analyzed and matched in the agent flow. You can use this information to debug agents. The following is a sample JSON of insights details in context object:
```javascript
{
"analyzed_document": "I am very excited today I want to order veg cheese pizza",
"document": "I am very excited today I want to order veg cheese pizza",
"domain_ids": [
41948
],
"entities": [
{
"entity": "pizza_types",
"entity_type": "pizza_types",
"entity_value": "veg",
"domain_key": "bot_inline_domain_497ba7c2-5677-42f2-940d-616c688357c5",
"value": "veg",
"current_value": "veg",
"index": 43,
"derived_parent": true,
"parent_entity_key": null,
"custom_entity_type": true
},
{
"entity": "pizza_toppings",
"entity_type": "pizza_toppings",
"entity_value": "cheese",
"domain_key": "bot_inline_domain_497ba7c2-5677-42f2-940d-616c688357c5",
"value": "cheese",
"current_value": "cheese",
"index": 43,
"parent_entity_key": "pizza_types",
"custom_entity_type": true
}
],
"featured_tokens": [
"i",
"am",
"very",
"excite",
"today",
"i",
"want",
"to",
"order",
"veg",
"cheese",
"pizza"
],
"featured_tokens_lemma_map": {
"am": "am",
"cheese": "cheese",
"excited": "excite",
"i": "i",
"order": "order",
"pizza": "pizza",
"to": "to",
"today": "today",
"veg": "veg",
"very": "very",
"want": "want"
},
"id": null,
"lemma": "i am very excite today i want to order veg cheese pizza",
"negation": false,
"original_document": "I am very excited today I want to order veg cheese pizza",
"pos": [
[
"i",
"NN"
],
[
"am",
"VBP"
],
[
"very",
"RB"
],
[
"excited",
"JJ"
],
[
"today",
"NN"
],
[
"i",
"VBP"
],
[
"want",
"VBP"
],
[
"to",
"TO"
],
[
"order",
"NN"
],
[
"veg",
"NNS"
],
[
"cheese",
"JJ"
],
[
"pizza",
"NN"
]
],
"sentiment": "neutral",
"tone": "Surprise",
"raw_document": "I am very excited today I want to order veg cheese pizza",
"bow_normalized_document_with_stopwords": "i very excite datetime want order veg randomA pizza",
"bow_normalized_document": "excite datetime want order veg randomA pizza",
"bow_words": [
"want",
"veg",
"randoma",
"pizza",
"order",
"excite",
"datetime"
],
"normalized_document": "excite datetime want order veg randomA pizza",
"featured_normalized_tokens": "excite datetime want order veg randomA pizza",
"normalized_tokens": "excite datetime want order veg randomA pizza",
"multiIntentEligible": false,
"bow_score": 1,
"entities_already_processed": true,
"intent": "node_intent_node_1",
"intent_name": "Test",
"skill_name": "Test",
"score": 1,
"es_score": 23.346571,
"confidence_score": 0,
"training_datum_id": 1386989,
"intent_id": 212186,
"intent_type": "INLINE::INTENT",
"bot_key": "1",
"skill_key": "1",
"intent_key": "3",
"matching_document": "I want to order veg cheese pizza",
"second_best_result": null,
"detected_language": "en-US",
"original_text": "I am very excited today I want to order veg cheese pizza",
"is_transaction": false
}
```
Attribute Description Type analyzed_document Indicates the original user intent being analyzed. String document Indicates the actual intent in the agent flow that is used to analyze the user query. String entities Indicates an array of entities used to analyze the user’s intent. An array of JSON key-value pairs. featured_tokens Indicates an array of lemma tokens generated from the user’s intent.
Here, tokens are characters separated by spaces that provide a convenient logical separation of phrases/sentences into words.
Array featured_tokens_lemma_map Indicates the mapping between each token and lemma token from the user’s intent.
This indicates how each token is converted to a lemma token.
Example: Ordering in lemma token is order.
Array negation Indicates if the user’s intent included negation words. Example: I do not want to order cheese pan pizza. In this case, negation is set to true. Boolean original_document Indicates the original user intent being analyzed. String pos Indicates parts of speech (pos) from the user’s intent.
See Part-of-speech tagging , for more information.
Array tone Indicates the tone of the user query such as anger, fear, happy.
See Tone and sentiment , for more information.
String sentiment Indicates the sentiment in the user query such as Positive, Negative, Neutral.
See Tone and sentiment , for more information.
String raw_document Indicates the original user intent being analyzed. String new_normalized_document Indicates the user intent after being normalized. String new_normalized_document_query Indicates the user’s intent after removing the stopwords such as I, am, want, etc. String normalized_tokens Indicates the list of tokens from the user’s intent after normalization. String entities_already_processed Indicates if the entities are processed or not. Boolean intent Indicates the name of the intent used while analyzing the user’s query. String training_datum_id Indicates the training of the intent used while analyzing the user’s query. Integer intent_id Indicates a unique identifier of the intent. Integer intent_name Indicates the name of the intent used while analyzing the user’s query. String intent_type Indicates the type of intent such as Inline, System intents, Knowledge Packs (Smalltalk and Q&A) String skill_key Indicates unique key of the skill. String intent_key Indicates the unique key of the intent. String second_best_result Indicates the next best result obtained while analyzing the user’s intent, if any String detected_language Indicates the language detected while analyzing the user’s intent. String knowledge_pack_id Indicates the identifier of the knowledge pack, if any, used to analyze the user’s intent. String raw_utterance Indicates the "as-is" utterances of the user's speech in the IVR channels.
Note that these are the exact spoken utterances without any modifications such as removing noise, filtering words, or modifying anything in the user's speech.
String
{% hint style="info" %}
**Note**: All the parameters in the context->insights object other than those listed in the table above are for internal usage only. For example, multiIntentEligible, es\_score, confidence\_score and other such parameters not listed above on the table are for internal usage only.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/install-agent-assist-extension.md
# Install Agent Assist extension
The `Avaamo Agent Assist Browser Apps` offer a convenient way for users to access the Agent Assist Widget directly through web browsers. These apps eliminate the need to embed the widget into existing customer portals, which is the traditional deployment method.
Avaamo provides these browser apps as a `Chrome Extension` and an `Edge Addon`, allowing users to easily access the Agent Assist Widget. The extensions are published in the Chrome Web Store and Microsoft Edge Addons and are regularly updated and maintained by Avaamo with new features and patches.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites.](https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/before-you-begin)
{% endhint %}
### Install Agent Assist extension in **Chrome**
Example to Install Agent assist extension in Chrome browser:
1. Open the Chrome browser.
2. Visit the [Chrome Web Store](https://chromewebstore.google.com/) and search for "`Avaamo Agent Assist`"
3. Click `Add to Chrome` at the top right of the page.
4. Once installed, the extension is available in the `Manage Extensions` section of Chrome.
### **Launch the Avaamo Agent Assist Chrome Extension:**
After installing the extension, you can pin it to your browser for easy access. The extension automatically detects when you are on a tab with `Salesforce` or `ServiceNow` web applications and displays the Agent Assist launch icon.
To launch the `Agent Assist Widget`, follow these steps:
1. Open your `Salesforce` or `ServiceNow` web application in Chrome.
2. Click on the `Agent Assist icon`**,** which is visible in the browser's bottom right corner.
This opens the widget, enabling you to access all the Agent Assist features. Now you can [Login to the Agent assist widget](https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/login-to-avaamo-agent-assist).
{% hint style="info" %}
**Note:** The extension only activates when you are on tabs where `Salesforce` or `ServiceNow` web apps are actively open.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/instructions.md
# Instructions
**Instructions** define how user input should trigger a specific conversation path. Instead of relying on example utterances alone, instructions let developers and designers describe intent conditions in clear, human-readable statements that the system evaluates via natural language understanding.
Instructions replace or complement traditional training phrases by providing the system with intent guidelines that guide its decision on when to invoke a dialogue flow or node.
#### What are the instructions
Instructions are declarative **intent conditions** written in natural language that describe when a flow or specific node should be triggered.
Unlike rigid training phrase lists, instructions are evaluated dynamically by the conversational engine to determine the appropriate invocation, enabling flexible intent matching across diverse user expressions.
### How to use instructions?
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can build and manage dialogs (conversational flow) immediately after creating a Dialog skill. See [Create new Dialog skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill), for more information.
* If you wish to edit skills in an agent, then:
* Navigate to the Agents tab in the top menu. Search and open the required agent.
See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* In the Agent page, navigate to the Skills option in the left navigation menu. Search and open the required skill.
* The quality of the intents and their training determines the agent's accuracy in understanding user queries. See [Design skill](https://docs.avaamo.com/user-guide/how-to/design-skill#intent-and-training-phrases), for more information on intent training guidelines.
{% endhint %}
* In the **Dialog skill** page, click **Edit** to unlock the skill
* Click the **Implementation** option in the left navigation pane. A dialog flow tree is displayed.
* Add user intents by creating a new node in one of the following ways:
* Click the **plus (+)** icon to add a new user intent and skill response in the node below the current node.
* Click the **fork** icon to add a new user intent and skill response as a forked branch to the current node.

* Click the red call-out bubble above "Add agent Response" to add an Intent and specify the following details:

Parameters Description Maximum length Intent name Indicates the name of the intent.
Each intent name must be unique within the skill.
192
characters
Intent key Indicates the internal primary key used in the Avaamo Platform for uniquely identifying the intent name.
By default, a key is automatically generated for you. Click Edit to update the key to any user-friendly identifier. Note that the intent key must be unique within the skill.
Supported characters: Alphanumeric and underscore
It is recommended that the key is of at least 3 characters. As you type, the key is automatically converted to Snake Case. See Snake Case , for more information. You can use this in any JS code customizations (Flow control) , regression testing , and query insights for getting a closer look at the user conversations with the agent.
Intent type Indicates the type of user intent. Select Instructions . N/A Custom intent handler In the instruction text field, enter a natural language description of when this intent should be triggered. N/A
* Click **Save**.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1.md
# Integrate
- [REST and SOAP API](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/rest-and-soap-api.md)
- [Hybrid SDK](/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/integrate-with-api-1/hybrid-sdk.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/intent-detection-and-routing.md
# Intent detection and routing
Universal agents detect the intent and route the conversation to the appropriate member that can fulfill the user’s request in the best possible way. It leverages the training imparted to the individual members for intent detection and hence no duplication of training is required. This provides a seamless experience to the user.
Agent routes requests to the appropriate member agent for simple Q\&A or multi-turn conversations, renders member responses inline, and also manages the conversation context. See [Context management](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/context-management), for more information.
{% hint style="success" %}
**Key point**: When you are in the transactional flow with a member agent and a user query is posted, then
* The user query is routed to the current member agent first for intent detection.
* If the user's intent does not match the current member agent's intent, only then it is routed to the rest of the member agents for further intent matching.
* If the conversation is already in a transactional flow and a query results in disambiguation, then the disambiguation options also are within the context of the member agent that is currently in the transactional flow. This setup allows the Universal agent to keep the conversation within the context of a member agent when there are shared intents between member agents. See [Disambiguation](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/disambiguation), for more information.
{% endhint %}
The following illustration depicts an "Acme Enterprise" Universal agent linked with independent virtual agents such as - Acme HR, Acme IT, and Acme Finance.

Each agent is trained independently. For example, the Acme HR agent has a Q\&A skill with intents and responses.

When a user query such as "When is the bonus paid this year?" is posted to the Acme Enterprise Universal agent, the Universal agent routes the user's intent to the appropriate member agent, Acme HR in this case, and renders the response in the Acme Enterprise assistant itself.

---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/intent-execution-sequence.md
# Intent execution sequence
When a user posts a query to an agent, the agent understands and classifies the input and then selects an appropriate skill to engage with the user. This article explains the **priority of intent execution** at the agent level and at the dialog skill level. Further, in the dialog skill, it illustrates post-processing and skill response flow.
## **At agent level**
Avaamo Platform evaluates all the intents and the intent with the best possible match is considered. There are three skills considered during intent execution - Dialog, Q\&A, and Smalltalk. Further, a Dialog skill can be invoked using Custom Code or Training Phrases. You can also create Pre-Unhandled Dialog skills. See [Add invocation intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-invocation-intent), for more information.
The following is the priority of the intent execution at the agent level:

### **Key points**
* At any point during the intent execution, when the user query does not match with intent, then the agent responds with a selection of closest intent options, which is referred to as disambiguation.
* If there are multiple Q\&A with the exact same query, then the response from the first matching skill is displayed.
* If you add Smalltalk questions in Q\&A skill, then intent matching is affected. Hence, it is recommended not to use Smalltalk questions in the Q\&A skill. See [Skills](https://docs.avaamo.com/user-guide/overview-and-concepts/skills), to learn more about different types of skills and their purpose.
### Order of execution of custom code intents at **the** agent level
At the agent level, for the skills with custom code as intent type at invocation intent, the order of execution is the same as the order of the creation of respective skills. \
Example:
* Skill A with custom code invocation intent - Created on 12th Dec 2021
* Skill B with custom code invocation intent - Created on 13th Dec 2021
In the above scenario, Skill A's custom code executes first and then followed by Skill B. However, you have the flexibility to define the weightage in the JS code as per your business requirement. You can assign weightage with any number between 0 and 1, for example, 0.2, 0.5. The custom code with the highest weightage is considered.
**Example**: Consider that you can have two Dialog skills with pre-unhandled intent. One that invokes another skill in your agent to get the response and another with your business website search. Based on the response received from each one of these, you can infer, assign weightage, and return weightage. The custom code with the highest weightage is considered.
### **Switching between single-turn and multi-turn conversations**
Dynamic Q\&A, Smalltalk, and a Dialog skill with a single node, and Answers are referred to as **single-turn conversations**. These are one-off questions and answers.
Dialog skill with multiple nodes and flows that requires back and forth agent user conversation to accomplish a particular task are referred to as **multi-turn conversations**.
In an agent-user interaction, it is quite common for a user to ask one-off questions or queries in between a Dialog multi-turn conversation. In such cases, the response if available for the one-off questions or queries is displayed. Post the response, when a user query is again posted, the conversation resumes from the node where it switched in the Dialog multi-turn conversation. This continues until a leaf node is reached in the Dialog skill.
**Example 1**:
Dialog skill 1:

Dialog skill 2:

Consider the following agent-user interaction,
1. User query -> "I want to find a doctor"
2. Dialog skill 1 is invoked and the control is now at node 1.1
3. User query -> "I want to refill my prescription"
4. Dialog skill 2 is invoked and the control is now at node 2.1
5. User query -> "Check for primary care physician in Boston area"
6. Conversation resumes at node 1.3 in Dialog skill 1

**Example 2**:
Dialog skill 1:

Dynamic Q\&A skill:

Consider the following agent-user interaction,
1. User query -> "I want to find a doctor"
2. Dialog skill 1 is invoked and the control is now at node 1.1
3. User query -> "What are the symptoms of flu?"
4. Dynamic Q\&A is invoked and the response from Q\&A is displayed.
5. User query -> "Check for primary care physician in Boston area"
6. Conversation resumes at node 1.3 in Dialog skill 1

## **At Dialog skill level**
In a Dialog skill, you can add the following types of intent for a node in the flow - Training Phrase, Entity from Invocation Intent, System Intent, or Custom Code. See [Add user intent](applewebdata://74CCEB77-913D-409C-9C05-3B021CA2A30A/@avaamo/s/v5/~/drafts/-LzKmdbdxTA2YT4BO1xi/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.
If a Dialog skill is invoked at the agent level, then the Avaamo Platform executes the intent in the following priority within the Dialog skill:
{% hint style="info" %}
**Note:** This order of intent execution is applicable for nodes at the same level.
{% endhint %}

{% hint style="success" %}
**Key Point**: At any point during the intent execution, when the user query does not match with intent, then the agent responds with a selection of closest intent options, which is referred to as disambiguation.
{% endhint %}
## Post-Processing and skill response execution
In a dialog skill, during intent matching, you can add a post-processing script that is executed after the intent is invoked, and before displaying the skill response. In the post-processing script, you can also include certain flow control statements such as "goto\_node" that allows you to navigate to different nodes in the dialog flow. See [Build skill responses using script and code](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill), for more information.
The following illustration depicts the post-processing and skill response execution flow:

{% hint style="info" %}
**Note**: Post-processing is where the intent execution still continues after matching the invocation intent; hence, when post-processing is enabled at the invocation intent, the entity skipping is no longer relevant and not evaluated.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/intents.md
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/intents.md
# Intents and Training Data
An **intent** is an action in the user query that indicates what the user wishes to do.
As you build your agent and skills, you must train the agent to understand the user queries. Intents and training data are the basic building blocks of training your agent.
The quality of the intents and their training determines the quality of the agent's accuracy in understanding the user queries. Creating the right number of intents with the right number of training data samples for each intent is essential for a good user experience.
### Intent
In simple terms, the intent is a user's intention to act on something. For example, consider the following sentences about weather details:
```
Show me yesterday's weather.
How cold will it be tonight in Boston?
```
Here, all sentences are related to the same intent "Find Weather" expressed in different ways. Now, consider another example with the following user queries about insurance claims:
```
I met with an accident. Can you help me create a new claim?
I want to report a claim.
Would you help me with a new claim?
```
All sentences are related to the same intent "Report claim" expressed in different ways.
{% hint style="success" %}
**Key Points**:
* A single skill can understand and respond to one or multiple user intents. **Example**: A "Reset password" Dialog skill that responds to only one intent of steps required to reset password or a Q\&A skill that can comprise of multiple questions and responses.
* As a best practice, it is recommended to name your intents with a combination of a verb and a noun that helps to identify the action and the object on which the action is performed. **Example**: Order Pizza, Find weather, Report claim.
{% endhint %}
### Training data
For an agent to respond to user queries, each intent must be trained with specific sentences that are used as representative phrases for user queries. This set of sentences is referred to as the **Training data set**.
{% hint style="success" %}
**Key Points**:
* Training data are not user queries. User queries are queries posted by the user to the agent. Training data is a set of sentences that are used to train the intent for responding to user queries.
* Training data are also referred to as Training phrases or Training utterances.
{% endhint %}
**Example**: The following table lists a few examples of intent with training phrases:
Intent Training Phrases Order Pizza I want to order veg cheese pizza with French Fries. Find weather I want to check Boston's weather tomorrow. Report a new claim I want to report a claim for policy number 08765434546.
{% hint style="success" %}
**Key Points**:
* An intent represents a specific named action identified by its training data.
* See [Intent and training phrases](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill#intent-and-training-phrases), to learn about the recommended best practices.
{% endhint %}
### Types of Intent
The following lists different types of intents that can be specified in the Avaamo Platform:
Intent Type Description Training Phrases These are the inline user intents (utterances or phrases) in the conversation flow.
Example : I want to order pizza, I want to order a large cheese pizza.
Entity These are intents with entities .
Example : Consider that in the Order Pizza skill, the first message asks the user for the type of pizza (veg or non-veg). In return, you can specify an intent with these entities to process the user response and proceed further in the conversation flow.
System Intent
These are the system intents with pre-defined training phrases already available in the platform.
Example : Consider that you wish to respond to the user's frustration by transferring to a live agent or via collecting feedback. You can create a user intent with frustration system intent and add a skill response to transfer to a live agent.
Custom Code
These are intents with custom JavaScript code.
Example : You can create a custom intent with a regular expression to match the pizza order number entered by the user. Alternatively, you can also create an entity with a regular expression.
Pre-unhandled You can define the pre-unhandled intents for the agent to give users a few more options and help with the query instead of just responding with an unhandled intent. Unhandled By default, for all the user queries that do not get matched to any predefined intents in the agent, the agent has a node within the flow to respond to the user's query with statements like -
"I am sorry I do not understand." "I am sorry. I don't have an answer for that."
These classify as unhandled queries as ideally, the user's query goes unanswered.
See [Add user intent](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent), for more information.
{% hint style="info" %}
**Note**: The quality of the intents and their training determines the quality of the agent's accuracy in understanding the user queries. See [Design skill](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill), for more information on intent training guidelines.
{% endhint %}
### Disambiguation
When a user intent does not match a specific intent, the agent responds with a selection of closest intent options, referred to as a disambiguation intent. If the user selects and responds with one of the options, the query is successful else it is categorized as a failed disambiguation query.

Here, we have queried "order". The agent has responded with the intents that support "order". This is categorized as disambiguation. If you select one of the above options, the query is a successful disambiguation query and if you select "none of these" then it is a failed disambiguation query.
{% hint style="info" %}
**Notes**:
* The top 5 closest disambiguations is displayed to the user.
* Smalltalk does not participate in disambiguation.
{% endhint %}
### Wild card
You can add a wild card for the agent to avoid responding with unhandled intent. These wild card intents are saved with no training data. **Example**: In scenarios, where you are validating certain user input, you can handle invalid inputs in a wild card. In the wild card, you can, for example, navigate to specific nodes in the flow. If you are not using a wild card, then the invalid inputs go to an unhandled node. The wild card allows developers to have better flow control for handling such cases.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/intro-outro-messages.md
# Intro Outro Messages
Intro Outro messages are friendly messages that you would want the agent to display before and after answering a question. The purpose of these messages is to make the conversation experience engaging and pleasant with the user.
For example, when asked a question, you can configure the agent to say something like "Sure, I can help you with that" before answering the question.

### Intro Messages
Use Intro messages to configure friendly messages to be displayed before the actual answer or response is displayed to the user's question. Examples of intro messages can be:
* I can assist you with that.
* Let me look that up for you.

### Outro Messages
Use Outro messages to configure friendly messages to be displayed after the actual answer or response is displayed to the user's question. Examples of outro messages can be:
* I hope this helped.
* Is there anything else that i can help you with?
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/introduce-agent-get-started.md
# Get started screen
The **Get Started** message is displayed when a user interacts with the agent for the first time. The message is designed to help introduce and describe your agent as well as provide branding opportunities for first-time users. This message is not displayed for returning users. This is an optional configuration.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can configure an agent immediately after creating an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
{% endhint %}
There are two panels on the **Get Started** page, the right panel is a preview of how the configuration is displayed in your agent and the left panel is where you can configure details.
**To configure the Getting started message**:
* In the **Agent** page, navigate to the **Configure -> Get started screen** option in the left navigation menu.
* Move the slider to **Yes** to **Enable** the feature.
* Specify the following details:
* **Showcase image**: You can upload an image such as your brand image or company banner in the getting started message using the showcase image. Move the slider to **Yes** to **Enable** the feature.
* Note that the optimal size of the image is 720 x 560px.
* Select **Show the welcome message as a notification**, to display the welcome message as a notification pop-up. Note that this is displayed for all users and not only returning users.
* **Show agent name and description**: Select this option if you wish to display the agent name and description in the **Get started screen.**
* **Show agent avatar:** Select this option if you wish to display the agent avatar in the **Get started screen.**
* **Welcome message**: Enter a welcome message for the first-time users of the agent. Use this to specify the company name, tagline, or any such information to describe your agent. This also provides a notification sound, when the agent is loaded.
* **Disclaimer**: Enter the disclaimer title and description, if any. Use this to specify and company disclaimers in your agent for first-time users.

{% hint style="info" %}
**Note:** The notification sound is activated when the agent is loaded for the first time. However after the page is reloaded, it is activated, only when the user interacts with any part of the webpage where the agent widget is deployed.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.0/introducing-advanced-agent.md
# Introducing "Advanced agent"
In this release, a new agent called the **`Advanced Agent`** has been introduced.
In its fundamental nature, an `Advanced agent` achieves the "true" objective of a "Conversational Assistant" by involving the user in a dialogue closely resembling human interaction.
The `Advanced Agent` uses our next-generation inference engine to provide a better user experience. It takes on a personalized approach, understanding nuances in the conversation, transforming interactions from a robotic demeanor to a more pleasurable and "conversational" experience for the user.
To the developers, this translates to **`a significant reduction in the amount of training data`** needed for the agent to comprehend user queries. You only have to train your agent with minimal meaningful user queries. The `Advanced agent` is capable of comprehending numerous nuances and variations in user queries.
An `Advanced agent`, hence, stands out as distinctly superior, more intelligent, and more personalized compared to a `Standard agent`. The following illustrations depict a sample comparison of training data between a `Standard agent` and an `Advanced agent`:
| Standard agent | Advanced agent |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| | |
Here's a quick sneak peek at the `Advanced agent` in the v8.0.0 release:
{% hint style="info" %}
**Notes**:
* `Advanced agent` is enabled on demand. Contact Avaamo Support with your use case to enable this feature for your account. Note that the `Advanced agent` is included as part of the base platform and does not require an additional license fee.
* All the existing Standard agents before v8.0.0 continue to remain as-is. If you wish to migrate from a Standard agent to an Advanced agent, see [Migrating to Advanced agent](#migrating-to-advanced-agent), for more information.
{% endhint %}
## Key features
### **Human-like conversation**
Advanced agent responses are not limited to simple one-word responses but can include detailed explanations, descriptions, or discussions, depending on the complexity of the question. It makes your agent more intuitive and user-friendly, simulating human-like interactions.
### **Deep semantic understanding**
Advanced agents can comprehend the meaning of language beyond surface-level syntax by understanding the context, and relationships between words, and grasping the nuances of language semantics. This implies a massive reduction in the amount of training data required by the agent to understand the user query.
The following illustration demonstrates how an `Advanced agent` is capable of understanding different nuances and variations of "Create an incident" training data when compared to a `Standard agent`:
**Advanced agent**:
**Standard agent:**
### **Conversational memory**
An `Advanced agent` can remember and maintain context throughout a conversation. This enables the system to understand references, callbacks, and evolving topics within the dialogue.

## How does it work?
Creating an `Advanced agent` is similar to creating a `Standard agent` and most of the functionalities available in the `Standard agent` are also available in the `Advanced agent`.
See [Advanced agent](https://docs.avaamo.com/user-guide/how-to/build-agents/create-advanced-agent), for more information.
## Migrating to Advanced agent
* Currently migrating from a `Standard agent` to an `Advanced agent` is a manual process. Contact your dedicated Customer Success Manager for further assistance.
* Importing a Standard agent into an Advanced agent is not supported.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/introducing-ai-agents.md
# Introducing "AI Agents"
The `AI Agent` is a next-generation agent built to power highly intelligent and dynamic voice or text-based conversations. With advanced context awareness and adaptive response capabilities, AI Agents elevate query handling and user engagement—delivering interactions that feel more natural, intuitive, and human-like than ever before.
With AI agents a new type of skill - `Prompt skills` is also introduced in this release. Powered by prompt skills, these agents are designed to understand, reason, and act – independently and effectively.
There is no need for extensive training, as required with Classic agents. Instead, you can define all instructions using the [Prompt Skill](https://docs.avaamo.com/user-guide/skills/prompt-skill), significantly reducing the time needed to build a skill. Along with prompts, you can build complex scenarios using built-in functions, and customized functions.
You can create multiple prompt skills, and the agent can seamlessly redirect interactions from one skill to another based on user queries, ensuring a smooth and dynamic conversation flow.
## Sneak peek
Here's a quick sneak peek at the AI agent:
{% hint style="info" %}
**Note**: AI agent is enabled on demand. Contact your dedicated Customer Success Manager for further assistance.
{% endhint %}
On the home page, an `AI Agent` can be easily identified and distinguished from other agents by its unique icon, which includes a small logo within it.
This article outlines the [key features](#key-features) of AI agents and the [next steps](#next-steps) to leverage these agents in the Avaamo Conversational AI Platform.
## Key features
### **Natural and dynamic conversations**
Unlike traditional structured flows, an AI agent enables real-time, human-like interactions with flexibility in conversation order, emotional intelligence, and natural responsiveness to user inputs.
The examples below demonstrate how the AI agent embodies these qualities, offering a more dynamic experience compared to the Classic agent (formerly known as the Standard agent).
| AI agent flow | Classic agent |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | |
### Autonomous decision-making
The AI Agent can make decisions based on predefined goals and contextual data without human intervention. It dynamically adjusts its actions based on real-time inputs and past interactions.
The examples below illustrate how the AI agent adapts its actions based on real-time inputs and makes intelligent decisions aligned with predefined goals.
| Example 1 | Example 2 |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | |
### Seamless Skill Transfer
The AI agent can seamlessly transfer conversations between different skills while maintaining context, ensuring a smooth and uninterrupted user experience. Using predefined functions, the agent intelligently hands off tasks — for example, moving from general assistance to specialized hotel booking.
This capability allows the AI agent to manage complex workflows efficiently, guiding users through multiple services without manual intervention or loss of conversation flow.
### **Multimodal Interaction**
The AI Agent supports `voice and text-based interactions`, providing users with a seamless conversational experience.
* **Voice Interaction:** Offers a human-like conversation experience, making interactions more natural and engaging.
* **Text Interaction:** Provides structured responses in a chat format, ensuring clarity and consistency.
### **Smart Integration with LLaMB**
The AI agent integrates seamlessly with LLaMB to enable smooth context transfer and adaptive automation. This integration allows the agent to carry forward user context across interactions and leverage LLaMB's advanced capabilities to automate responses and actions dynamically. As a result, users experience more accurate, relevant, and efficient assistance, even as conversations shift across topics or tasks.
### **Context-aware responses**
The AI Agent dynamically adapts to user inputs using predefined `prompt skills`, eliminating the need for a fixed question-answer sequence.
Users can **edit or change their inputs at any moment** without restarting the conversation.
For example, while booking a flight, if a user mistakenly enters the wrong **destination**, they can **correct it mid-conversation** without restarting the process.
### **Enhanced query handling**
The AI Agent efficiently manages **multi-turn and complex queries**, allowing seamless transitions between different tasks.
It switches between prompt skills effortlessly to answer related questions.
For example, if a user is booking a flight but suddenly wants to check their past booking details, they can do so without disrupting the current flow—simply by asking about past bookings.
### **Comprehensive conversation logging**
The system records complete conversation history, including user-agent interactions, function calls with parameters, transcripts, and corresponding audio recordings for reference.
### **Cost efficiency - Build agents faster**
AI agents are cost-efficient, require no training, and eliminate the need for complex dialog flows. They enable faster development and quick iteration, allowing teams to experiment and refine results easily through prompt adjustments.
### **No-Code/Low-Code**
Prompts enable non-technical users to interact with AI systems effectively, eliminating the need to write code.
### **Fluid Conversation**
AI agents maintain natural, flowing conversations without sounding robotic. They understand context across turns, enabling users to speak freely without rigid commands.
### **Follow-On**
Agents can ask for and remember key follow-up information—like your location or preferred provider—right after initial intent is captured, helping personalize and complete the task.
### **Switch Topic Mid-Conversation**
Users can change topics on the conversation—for example, asking about a service or trying a demo before booking an appointment. The agent can seamlessly switch focus without losing the overall context.
### **Agent Callback**
When the AI agent can not resolve an issue, it can collect necessary details and schedule a callback from a human agent, ensuring continuity and a smooth handoff.
### **Interruption**
Users can interrupt the AI agent mid-response (e.g., “Actually, never mind”) and the agent stops and adjusts based on the new input, instead of continuing its scripted response.
### **Silence**
AI agents can handle user silence smartly, either pausing to wait for input or gently prompting the user to resume the interaction after a certain time.
### **Try to break it**
Even if users try to confuse or “break” the agent with odd inputs or edge cases, the agent follows enterprise guardrails to stay on task, stay secure, and avoid hallucinations or inappropriate responses.
### **Detect Frustration**
By picking up signals like repeated inputs, negative language, or abrupt changes in tone, the AI can detect user frustration and adapt by simplifying, escalating, or offering human support.
## Next steps
* Understand what is required in the [Before you begin](https://docs.avaamo.com/user-guide/ai-agent/before-you-begin) section.
* Start by creating a new [AI agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent).
* You are now ready to [get started](https://docs.avaamo.com/user-guide/get-started) by exploring AI agents in the Avaamo Conversational AI Platform.
Refer [AI Agent](https://docs.avaamo.com/user-guide/ai-agent), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/introducing-knowledge-skill-2.0.md
# Introducing Knowledge skill 2.0
The `Knowledge skill` is a core capability of the Avaamo Conversational AI Platform, designed to empower AI agents to access, process, and deliver information from multiple content sources accurately, efficiently, and at scale.
{% hint style="info" %}
**Note:** For organizations with **DataSync enabled**, all newly created Knowledge Skills continue to point to the DataSync UI for streamlined content management.
{% endhint %}
### What is a Knowledge skill?
The Knowledge skill allows AI agents to seamlessly ingest and interact with content from diverse sources, including:
* Product documentation
* User manuals and guides
* FAQs and help articles
* Enterprise knowledge systems
This integration ensures AI agents deliver context-aware, up-to-date, and accurate responses, reducing manual intervention and enhancing the overall quality of user interactions.
### Getting started with Knowledge skill
1. Navigate to the `Agent` page in the Avaamo platform.
2. Select `Skills` from the left navigation menu.
3. Click `Add skill`.
4. On the `Skill Builder` page, choose the `Knowledge skill`.
6. Select your `content source` and begin ingesting your documents.
Refer Content sources, for more information.
### Key highlights of Knowledge skill
Building on the foundation of `DataSync`, Knowledge Skill includes robust features for content integration, synchronization, execution history, error handling, and scalability. In addition, it introduces these key differentiators:
#### 1. Flat knowledge structure
Unlike LLaMB, which relied on separate document groups, Knowledge Skill ingests all content into a single unified skill. This simplifies organization, search, and retrieval, making knowledge management straightforward and scalable.
#### **2. Centralized view for content and ingestion management**
The new Knowledge tab provides a unified location within each skill to manage all content-related operations. It consolidates content sources, ingestion history, and synchronization details, providing users with a clear, organized view of the knowledge associated with that specific skill. This improves accessibility, simplifies monitoring, and enhances overall management efficiency.
Refer [View and edit knowledge](https://docs.avaamo.com/user-guide/skills/knowledge-skill/view-and-edit-knowledge), for more information.
#### **3. Monitor synchronization progress instantly**
Knowledge Skill 2.0 offers real-time synchronization status updates from LLaMB, enabling users to track the progress and completion of sync operations without delay. This ensures greater visibility into the synchronization process and helps in promptly identifying any issues.
#### **4. Pull specific knowledge skill changes**
As part of **Knowledge Skill 2.0**, you can now pull updates for particular changes made to knowledge skills between stages. This improvement gives users greater control over stage deployments and prevents unintended updates to unrelated knowledge skills.
For example, when you add or modify a knowledge skill during development and plan to update it in production, the system displays a list of the added or modified skills under `Advanced Options`. From this list, you can select the specific changes to apply, ensuring that only the chosen updates are reflected in the production agent.
#### **5. Ability to view a single document:**
Users can preview or inspect individual records within the Knowledge Skill 2.0 interface for quick review and validation.
### Benefits of using the Knowledge skill
* **Intelligent AI agents:** Deliver accurate, context-aware responses consistently.
* **Simplified knowledge management:** Single, unified structure for all content.
* **Scalable operations:** Efficient handling of large volumes of content with full execution history and error tracking.
* **Enhanced user experience:** Provides reliable, timely information, improving engagement and trust.
### Next steps
* Understand what is required in the [Before you begin](https://docs.avaamo.com/user-guide/ai-agent/before-you-begin) section.
* Start by creating a new [AI agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent).
* You are now ready to [get started](https://docs.avaamo.com/user-guide/get-started) by exploring AI agents in the Avaamo Conversational AI Platform.
Refer [Knowledge skill](https://docs.avaamo.com/user-guide/skills/knowledge-skill), for more information.
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v7.0.0/introducing-live-agent-console.md
# Introducing Live agent console
The version v7.0 brings a new generation **Avaamo Live Agent Console**. The new and enhanced live agent is a comprehensive package that enables our contact center system to deliver an enhanced customer experience with seamless live-agent interaction, thereby improving customer satisfaction.
At the core of this product lies the primary objective of enabling live agents to operate with greater intelligence, speed, and effectiveness, enhancing their overall performance.
## Key features
This section broadly describes some of the key features of the new `Live agent console`. See [Live agent console - Quick Overview](https://docs.avaamo.com/user-guide/live-agent-console/overview#live-agent-console-quick-overview), for a more detailed list of main features in the `Live agent console`.
### **Guided navigation and workflow**
The new `Live agent console` is a rich, engaging, and refreshed interface to manage the complete workflow of live agent interactions. The interface enhances engagement and facilitates efficient workflow management for live agents during customer interactions.
Within the console, live agents have the ability to simultaneously view multiple requests and effortlessly accept new chat requests through an intuitive and user-friendly interface. The following illustration showcases several essential features of the Live agent console, empowering live agents to efficiently manage customer conversations:
See [Live agent](https://docs.avaamo.com/user-guide/live-agent-console/live-agent), for more information.
### **Quick response composer**
Quick responses play a vital role in a live agent system, offering numerous benefits that improve the efficiency and effectiveness of customer support. It helps to streamline live agent interactions, boost productivity, and help customers receive timely, accurate, and consistent responses from knowledgeable agents.
Supervisors can use the Live agent console workflow to create a collection of standardized responses or templates for recurring inquiries. In the given instance, you can observe a compilation of pre-defined responses created by a Supervisor specifically for the repetitive responses required for a healthcare agent. See [Quick responses](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/quick-responses), for more information.
Live agents can utilize quick responses as-is or rephrase them to provide improved and precise responses that contribute to an enhanced customer experience. A live agent can access the set of all the quick responses just by typing # in the message text box:
See [Use quick responses](https://docs.avaamo.com/user-guide/live-agent-console/live-agent/use-quick-responses), for more information on how live agents can leverage the quick responses created in the system.
### **Collaborate, Contribute, and Resolve**
Enable efficient team collaboration and issue resolution by utilizing the Live Agent console to create teams based on their expertise. Through this console, live agents can seamlessly transfer requests to appropriate teams within the organization that possess the necessary skills and knowledge to address the specific request. This collaborative approach promotes the effective utilization of team members' skills, leading to faster issue resolution.
With teams, you can maximize the potential of diverse teams within the organization to ensure proper and efficient issue resolution.
The following example demonstrates a scenario where a live agent, upon reviewing the conversation history, recognizes that the query can be better addressed by another team. Consequently, the live agent decides to transfer the request to a more suitable team even without initiating a conversation with the user.
In this demonstration, observe the process of a live agent seamlessly transferring an ongoing conversation with a user to another team within the organization. This showcases the ability of a live agent to initiate a request transfer during an active conversation, ensuring smooth and efficient communication between teams.
* See [Teams](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/teams), for more information on how Supervisors can create teams in your organization.
* See [Transfer to another team](https://docs.avaamo.com/user-guide/live-agent-console/live-agent/transfer-to-another-team), for more information on how live agents can transfer requests to teams within the organization.
### View reports to gain insights
Reports enable Supervisors to view real-time customer wait time and queue status. This provides valuable insights into traffic patterns and workload, allowing them to optimize ticket routing and create specialized teams with specific skill sets, ultimately enhancing customer satisfaction.
For instance, Supervisors can leverage the traffic data to develop standardized responses or establish and manage routing rules. In the following example, Supervisors can assess the current traffic usage, including metrics such as wait time, and make informed decisions to update routing rules or explore alternative methods to enhance the overall customer experience.
* See [Reports](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/reports), for more information.
* See [Advanced configurations](https://docs.avaamo.com/user-guide/live-agent-console/advanced-configurations), for more information on setting up routing rules.
### Omnichannel experience
Avaamo Conversational AI Platform has the capability to deploy agents in various channels such as Mobile Channels (iOS and Android), MS Teams, Facebook, and Custom Channels.
The new Live agent console provides an omnichannel experience to the live agents interacting with the users, which implies, that although users can interact with the Live agent via different channels where the agent is deployed, all the conversations irrespective of the channel used by the user are seamlessly delivered to the Live agent console.
## Get started
Contact Avaamo Support to get started and enable the new Live agent console for your account. See [Live agent](https://docs.avaamo.com/user-guide/live-agent-console/overview), for complete product information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/introducing-llamb-content-regression-testing.md
# Introducing "LLaMB Content Regression Testing"
In this release, a new feature `LLaMB Content Regression Testing` has been introduced for LLaMB. Previously available only for other skills, this functionality has now been extended to include LLaMB-specific skills.
Regression testing is a tool for verifying that an agent's responses are accurate and consistent with previous versions. It helps ensure that queries and their corresponding responses remain correct, even as the underlying models and AI tools evolve.
The goal of regression testing is to ensure that query responses remain consistent over time, providing users with confidence in the agent’s performance and reliability.
To access LLaMB regression testing, go to the `Agent` page and click `Test > LLaMB Regression` in the left navigation menu.
{% hint style="info" %}
**Note:** The LLaMB Regression Test option is visible only if the agent is configured with an `LLaMB` content skill.
{% endhint %}
## How to use it?
The steps to set up regression, execute it, and download the results remain similar to those of classic agents; however, the regression test file format for preparing the input file and analyzing the results differs in LLaMB. See [LLaMB regression testing](https://docs.avaamo.com/user-guide/llamb/regression-testing), for more information.
### Step 1: Prepare regression test input file
A regression test file contains a set of questions, the actual answer to each question, which is the ground truth, and any user properties specific to that answer.
{% hint style="success" %}
**Key point:** Collaborate with Subject Matter Experts to build a regression test file in the Discovery phase itself.
{% endhint %}
The following is a sample regression test input file. See [Regression test file format](https://docs.avaamo.com/user-guide/llamb/regression-testing/regression-test-file-format), for more information.
### Step 2: Run the regression test
Running LLaMB remains the same as running regression for classic agents. See [Run regression test](https://docs.avaamo.com/user-guide/llamb/regression-testing/run-regression-test), for more information.
### Step 3: Analyze the results and improvise
You can analyse the results after the run by downloading the file, which includes details of the pass/fail statistics for each query.
The following is a sample regression test input file. See [Understanding results](https://docs.avaamo.com/user-guide/llamb/regression-testing/understanding-results), for more information.
Next step is to improve your accuracy. See [How to improve accuracy?](https://docs.avaamo.com/user-guide/llamb/regression-testing/how-to-improve-accuracy) for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.0/introducing-llamb.md
# Introducing LLaMB
The Avaamo Conversational AI Platform introduces a new product **`LLaMB - Large Language Model for Business`** in the `Atlas 8` release.
LLaMB is a new low-code framework for building powerful end-user generative AI agents in the enterprise safely, securely, and fast. LLaMB provides tools to eliminate hallucinations, integrate enterprise systems, and support any LLM ([Large Language Model](https://en.wikipedia.org/wiki/Large_language_model)) of your choice.
It utilizes LLM technology to offer inherently personalized and summarized results while maintaining the required level of security and compliance for enterprises. It is a practical and secure approach to deploying LLMs in the enterprise, thereby enhancing the knowledge search experience for both employees and customers.
Here's a quick sneak peek at LLaMB:
This article outlines the key features of LLaMB and the next steps to leverage LLaMB product offering in the Avaamo Conversational AI Platform.
{% hint style="info" %}
**Note**: LLaMB is enabled on demand. Contact your dedicated Customer Success Manager for further assistance.
{% endhint %}
## Key features
### Conversation completeness - Full Sentences and Complete Answers
The LLaMB responses are precise and complete sentences, a similar answer you might expect when communicating with another person in a regular conversation. The responses are not limited to simple one-word responses but can include detailed explanations, descriptions, or discussions, depending on the complexity of the question. It makes your agent more intuitive and user-friendly, simulating human-like interactions.
The following is an illustration to depict how LLaMB can generate natural language answers, close to a human conversation:

* **Natural input:** Users can input queries, commands, or prompts in a conversational style, using natural language rather than adhering to a specific syntax or format. Similarly, LLaMB can understand the context of the conversation and provide complete answers in a way that mirrors natural human conversation.
* **Auto-waiting message:** While LLaMB is waiting to gather and collect information from verified sources, it informs users on the same and engages users in a conversation that feels comfortable and familiar.
* **Generated precise answer:** LLaMB excels in providing precise and context-specific answer summarization and comprehension. Leveraging on the vast amount of data that is already ingested and trained in the knowledge base, LLaMB can understand and grasp the meaning of the input provided to it and generate appropriate and relevant summarized responses.
* **Source attribution**: All responses from LLaMB are provided with a source reference, indicating precisely the source from which the answers are derived. This means that only verified content references fed to LLaMB are used for providing responses, resulting in accurate, trustworthy, and secure inferred answers.
### Rich Rendering of Tabular Content
LLaMB provides the capability to comprehend information within intricate tables, deducing responses to user queries directly from the table's content. Unlike merely identifying and highlighting answers within the table, LLaMB goes beyond interpreting the user's query, extracting pertinent information, and providing a summarized response. This nuanced approach ensures that LLaMB not only locates answers within the table but also comprehends the user's query contextually, delivering a concise summary of the relevant information.
The following is an illustration to depict how LLaMB can generate nuanced city/role-based answers from tabular content:
* Each response from the LLaMB content includes a link to `in-line source` from where the response is derived.
* LLaMB can auto-parse complex source tables.
* No configuration or training is required to parse tables in LLaMB.
### Fluid conversations - Natural language answers
"Fluid conversations" is a phrase to describe a conversation that flows easily and naturally. LLaMB generates natural language answers to user queries that are coherent, contextually appropriate, and that is easily understandable by a person. LLaMB engages users in dialogue that closely mimics human conversation, hence enhancing user experience by making interactions more intuitive and enjoyable.
The following is an illustration to depict how LLaMB can generate natural language answers, close to a human conversation:

* **Coreference resolution:** LLaMB can identify and link expressions in a text that refer to the same entity in a multi-turn conversation, hence, the responses are more accurate and coherent allowing the conversation to flow naturally.
* **Human-like conversation**: LLaMB responses are not limited to simple one-word responses but can include detailed explanations, descriptions, or discussions, depending on the complexity of the question. It makes your agent more intuitive and user-friendly, simulating human-like interactions.
* **Deep semantic understanding**: LLaMB can comprehend the meaning of language beyond surface-level syntax by understanding the context, and relationships between words, and grasping the nuances of language semantics.
* **Conversational memory**: LLaMB can remember and maintain context throughout a conversation. This enables the system to understand references, callbacks, and evolving topics within the dialogue.
### Trust and Secure
LLM APIs are readily available for everyone's use. The primary concern when it comes to enterprise applications is "Trust and Security". Raw Model LLM APIs when piped directly into the enterprise are vulnerable to adversarial attacks.
LLaMB comes with all the key building blocks required to build and deploy enterprise LLM applications safely and securely. The following are key focus areas that help in building trust and security within enterprises when using LLaMB:
**Ownership and Control**: With LLaMB, you have the complete and absolute ownership of the data. This means that you own and control what data is ingested to LLaMB and this internally controls how the responses are presented to the users. LLaMB uses only the content ingested to generate answers. The answers are "generated" implying that LLaMB does not engage in learning from your usage. Each interaction is treated as an independent prompt, and the LLaMB doesn't retain information from prior messages in the conversation.
**Security**: With LLaMB, all the content you feed and the agent you build and deploy is via the Avaamo Conversational AI Platform. The platform combines enterprise-grade security features with rigorous compliance with industry standards to ensure your data is always protected and secure. See [Security at Avaamo](https://avaamo.ai/conversational-ai-security/) for more information on the compliances and security regulations list. The trust and security layer.
### Easy ingestion pipeline: No more parsing templates!
LLaMB can process PDF files seamlessly, eliminating the need for any preprocessing or parsing templates. For HTML content, the requirement for parsing templates has been drastically simplified.
This implies that the sole prerequisite before utilizing LLaMB is to have the content readily available. Once the content is prepared, the straightforward process involves enabling LLaMB, ingesting the content, and witnessing the seamless transformation without any additional complexities.
The following is an illustration to depict how LLaMB can generate nuanced city/role-based answers from multiple tabular content:
* **Multi-source summarization**: LLaMB can infer and summarize the content from multiple sources, say, for example, from multiple tables by understanding the context of the user's query, infer, and summarize precisely with appropriate contextual responses.
* **Deep coreference resolution:** LLaMB can map context and co-reference from multiple sources based on the context in the user's query, summarize the results, and provide a comprehensive response to the user.
* LLaMB can parse complex tables without the need for any pre-processing utility
* **Multiple source attribution**: All responses from LLaMB are provided with a source reference, indicating precisely the source from which the answers are derived. If multiple sources of content are used for inferring answers, then multiple source attribution is provided. This means that only verified content references fed to LLaMB are used for providing responses, resulting in accurate, trustworthy, and secure inferred answers.
See [Parsing templates](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/parsing-templates), for more information.
### Soft unhandled (Active redirect)
LLaMB provides the capability to gracefully redirect users when faced with unhandled responses, a feature known as `Soft Unhandled`.
In instances where the agent fails to comprehend a user query, it defaults to an unhandled intent response, stating, "*I am sorry. I don't have an answer for that.*" The `Soft Unhandled` feature maintains the acknowledgment of the agent's inability to provide an answer but does so with a courteous and polished response. This feature aims to enhance user interaction by:
* Creating a pleasant user experience during interactions.
* Establishing a soft and reassuring tone in the agent's response.
* Conveying the impression that, although unable to address certain queries, the agent is still actively assisting with those it can answer.
| Soft Unhandled | Unhandled |
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|  |  |
See [Soft unhandled](https://docs.avaamo.com/user-guide/llamb/soft-unhandled-active-redirect), for more information.
## Next steps
1. Start by understanding [key terms](https://docs.avaamo.com/user-guide/llamb/key-terms) in the LLaMB product.
2. Understand what is required in the [Before you begin](https://docs.avaamo.com/user-guide/llamb/before-you-begin) section.
3. You are now ready to [get started](https://docs.avaamo.com/user-guide/llamb/get-started) by exploring LLaMB in the Avaamo Conversational AI Platform.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.0/introducing-mercury-theme.md
# Introducing "Mercury" theme
In the `Atlas 8` release, a new refreshed theme **`Mercury`** for web channels has been introduced. The primary styling components of the `Mercury` theme offers a cleaner, bright display of user inputs and agent responses, provides streaming responses, and aids in a better user experience.
Here's a quick demo of the `Mercury` theme:
## Key features
* **Streaming responses:** `Mercury` theme renders streaming responses through the typing animation to the user, eliminating idle waiting time. Streaming is intuitive, especially when there is a delay in agent response. It creates an impression to the user that the agent is responding and helps in actively engaging the user in the conversation flow.
* **Wider agent widget:** `Mercury` theme has a wider agent widget and provides more text area to display the agent response. For short responses, this can avoid scrolling to read answers.
* **Enhanced readability:** A clean UI in the `Mercury` theme with an enhanced white-tone usage, makes the theme look brighter and cleaner (less cluttered), thus enhancing readability when compared to the other themes.
* **Stop generating answers:** Users can stop generating answers in the `Mercury` theme. This helps the users to pause generating text in an ongoing conversation intermittently. This feature provides flexibility to the users in controlling the flow of interaction, allowing users to gather additional information, process intermediate results, or make decisions based on previous responses. To continue generating responses, users can just post queries back to the agent.
## User Feedback
One of the significant improvements in the `Mercury` theme is the feedback collected from the users on the thumbs-down option for a response.
The thumbs-down pop-up screen in the `Mercury` theme has been enhanced with specific options that allow the users to provide detailed descriptions of how the response can be fine-tuned to get the expected behavior. The open-ended responses allow users to provide a detailed description of the selected option in the pop-up screen.
In the `Mercury` theme, the feedback collected at the UAT stage aims towards collecting more specific details since UAT users are subject matter experts and testers within the account who are more aware of the agent and what is built into it when compared to the production users. Hence, the feedback collected at the UAT stage can be instrumental in fine-tuning the agent.
## How to use it?
`Mercury` is the default theme for all newly created agents and newly created web channels in the Avaamo Conversational AI Platform.
If not enabled for your agent, you can navigate to the `Agent -> Channels` page and click `View` on the Web Channel. In the `Channels -> Theme` section, click the `Agent theme` dropdown to choose the `Mercury` theme based on your styling requirements. For [LLaMB](https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.0/introducing-llamb), `Mercury` is the recommended theme.
See [Theme](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/theme), for more information.
---
# Source: https://docs.avaamo.com/user-guide/release-notes/v7.0.0/introducing-outreach.md
# Introducing Outreach
In this release, a new product - **Outreach** has been introduced.
**Outreach** is an AI-based proactive Customer and Employee Communication Platform that proactively contacts and converses with users/ patients/ customers/ employees.
It empowers you to focus on high-value and automation-ready use cases in your enterprise. Outreach enables enterprises to broadcast messages and reach wider audiences in channels of their choice.
For example, you can set up a vaccination drive outreach campaign program and send invitations out to all the contacts to avail service. Such campaign programs help healthcare providers to communicate with their communities and patients in a targeted and efficient way.
Avaamo platform provides out-of-the-box features to set up an outreach campaign program. A few key features are listed in this article.
## Key features
### AI-guided campaigns for complete automation
`Outreach` allows you to empower your campaign with AI and make it conversational. You can now link your campaign with agents or assistants in the Avaamo Conversational AI Platform and make your campaign powerful with two-way communication. Recipients receiving the campaign message can converse back in the same channel and in the same campaign to complete the entire flow.
Not limited to the verticals, the table here shows different use cases and automation across Healthcare, Employee service, and Customer care:
| Healthcare | Employee Service | Customer care |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Appointment Reminder Vaccination reminder Reschedule Preventive care reminder Education Self-care
| Password updates Outage alerts Onboarding training Benefits renewal Certificate reminders Wellness campaigns
| Offers and Promotions Subscription reminders Scheduled maintenance Order updates
|
### Self-serviceable "Campaign Composer"
Outreach comes with a Self-serviceable "Campaign Composer" that allows users to quickly set up a campaign in a guided, easy-to-use user interface. You can build and configure campaigns using the Campaign Composer with just 3 steps - Configure, Add Message, and Activate.
The "Campaign Composer" offers different scheduling options for you to send a campaign message immediately or schedule at a predefined agreed time or with a recurring option.
### Send campaign via any enterprise channel
Outreach enables enterprises to broadcast messages and reach wider audiences in channels of their choice. It comes with a set of built-in channels that are out-of-the-box -> SMS, MS Teams, C-IVR, and Custom channel.
By configuring your campaigns via the custom channel, you can now send campaign messages via any enterprise channel and are not limited only to channels such as SMS, C-IVR, or MS Teams. This widens the reach of the campaigns to a larger set of audience and better adoption of the Outreach campaign programs.
### Build a custom dashboard using Outreach APIs as per business needs
As a part of the Outreach Campaign release, the Avaamo Conversational AI Platform has introduced a few new Outreach APIs. You can use these APIs for reporting and debugging purposes. You can leverage these APIs to build a custom dashboard and integrate it with other downstream systems, gain insights, and improve the growing business needs.
The following are new APIs introduced as a part of the Outreach:
* [Outreach Insights API](https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/outreach-insights-api)
* [Outreach Changelog API](https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/outreach-changelog-api)
* [SMS Opt status API](https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/sms-opt-status-api)
## Get started
Contact Avaamo Support to get started and enable the new Outreach for your account. See [Outreach](https://docs.avaamo.com/user-guide/outreach/overview), for complete information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.1.0/introducing-the-datasync-2.0.md
# Introducing the DataSync 2.0
**DataSync 2.0** is a robust content integration and synchronization capability within the Avaamo Conversational AI Platform, designed to empower agents by seamlessly ingesting, processing, and managing information from multiple content sources. This ensures that agents deliver accurate, context-aware, and up-to-date responses.
## Key Highlights of DataSync 2.0
### Comprehensive life cycle management
DataSync 2.0 now supports the complete agent life cycle, from content ingestion and synchronization to updates and deletion. This enhancement ensures smooth and efficient management of all content sources throughout the agent’s operation.
With this capability, you can:
* **Ingest** content from multiple sources such as files, websites, or enterprise connectors.
* **Synchronize** content automatically or manually to keep your agent’s knowledge up to date.
* **Update** existing content sources without recreating jobs, enabling incremental updates.
* **Delete** outdated or irrelevant content sources when no longer needed.
This end-to-end life-cycle support streamlines content management, reduces manual effort, and ensures your agent always operates with the most up-to-date, accurate data.
### Keep your data updated with scheduled syncs
The scheduler option allows you to set up automatic, recurring synchronization for supported content sources. By defining a preferred schedule, you can ensure that your content is updated regularly without manual intervention. This feature helps maintain data consistency and ensures that all ingested information remains current across the platform.
Refer [Auto Sync](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/auto-sync), for more information.
### Manual synchronization with one click
The manual sync option enables users to initiate synchronization for any content source with a single click. This provides an easy and efficient way to refresh content on demand without waiting for scheduled syncs. It ensures that the latest updates from your connected sources are immediately reflected, keeping your data current and consistent across the platform.
Refer [Sync Now](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/sync-now), for more information.
### Access detailed logs of previous sync executions
DataSync now keeps a detailed record of all synchronization executions, allowing users to view and analyze previous runs. This helps track sync activity, review results, and diagnose issues quickly. Maintaining an execution history provides better visibility, greater accountability, and easier troubleshooting across all supported content sources.
Refer [View job version history](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/view-job-version-history), for more information.
### Efficient navigation for large document collections
Pagination support enhances the user experience when working with large document collections. Instead of loading all documents at once, DataSync now divides them into smaller, manageable pages. This improves navigation, reduces load time, and ensures smoother performance when browsing or managing extensive content sources.
### Effortless content discovery across sources
The dynamic search option allows users to locate specific documents within individual content sources quickly. You can search using document names, partial matches, or even parts of the document URL. This feature streamlines content discovery, helping users efficiently find and manage the information they need within large datasets.
### **View synchronization results by status**
The filter-by-status feature enables users to list documents or articles by ingestion status, such as "Ingested," "Error," or "In Progress." This functionality helps users quickly identify problem areas, track ingestion progress, and manage content more efficiently.
### **Remove outdated or unused content sources**
Users can now delete any outdated or unused content source directly from the DataSync interface. This feature helps maintain a clean and organized workspace by allowing you to remove unnecessary or redundant data sources easily.
Refer [Delete job](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/delete-job), for more information.
### **Enhanced performance for large-scale operations**
This release strengthens the system’s ability to manage large ingestion and synchronization workloads more efficiently. Improved scalability and stability ensure consistent performance, faster processing, and greater reliability even under heavy operational demands.
### Actions available for an ingested document
**Ability to update the preview URL:** Users can now modify a document's preview URL after ingestion, ensuring accurate content verification and updated linking.
**Ability to update attributes after ingestion:** The attributes or metadata of ingested documents can be edited at any time, offering greater flexibility in managing document details.
**Ability to delete a single document:** You can remove individual documents without deleting the entire content source, keeping data organized and precise.
**Ability to re-ingest a single document:** Specific documents can be re-synced independently to refresh content without running a complete synchronization job.
Refer [Actions](https://docs.avaamo.com/user-guide/datasync-ai/content-sources/common-actions/actions), for more information.
### **Easily upload multiple documents at once**
The Files content source now supports bulk uploads, allowing users to add multiple documents in a single action. This enhancement simplifies large-scale ingestion and saves time when managing extensive document collections.
### **Add new files to an existing Files content source**
Users can now upload additional files to an already created Files content source. This capability supports incremental updates, enabling content expansion or modification without recreating jobs.
## Why Use DataSync 2.0?
DataSync 2.0 provides a **production-ready foundation** for creating intelligent, self-sufficient AI agents that:
* Deliver accurate and context-aware responses
* Reduce manual intervention and operational overhead
* Scale knowledge efficiently across multiple content sources, including **web platforms** and **files**
* Ensure secure, reliable, and high-quality knowledge delivery to end users
## Next steps
1. Understand what is required in the [Before you begin](https://docs.avaamo.com/user-guide/datasync-ai/before-you-begin) section.
2. Refer [DataSync AI](https://docs.avaamo.com/user-guide/datasync-ai), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v8.0/introducing-uat-in-web-channel.md
# Introducing "UAT" in Web channel
In the `Atlas 8` release, a new feature **`UAT`** has been introduced in the web channels.
It allows you to set up a pre-defined set of test queries to perform User acceptance testing (UAT) on the agents before deploying the agent in production. This is a crucial step in the agent's life cycle to ensure that the agent meets user requirements, functions correctly in a real-world setting, and provides a high level of quality and satisfaction.
Here's a quick demo of the `UAT` feature:
### Key benefits
The following are some of the key benefits of performing UAT on agents:
* **Validation of requirements**: UAT helps to gather user feedback from UAT users before deploying the agent in the live production environment. Hence it helps to validate that the system aligns with the intended functionality outlined in the initial requirements.
* **Quality Assurance:** UAT helps to identify defects, bugs, or discrepancies that may have been overlooked during earlier stages of testing. It helps to ensure a higher level of quality before the agent is made available to a wider audience.
* **Cost-effective:** Identifying and fixing issues during the UAT phase is generally more cost-effective than addressing them after the agent has been deployed in the production environment.
* **Accelerates agent deployment**: When you iteratively add more functionality to your agent, the UAT queries can serve as a good test bed to perform quick end-to-end testing of the agents before deploying the agents to production.
* **Collecting effective feedback**: UAT helps to collect feedback from the testers who are subject matter experts with more experience in mimicking the exact production scenarios and hence is a valuable source of information to further improve your agent.
### Who should use UAT?
UAT feature is exclusively built for user acceptance testers who are subject matter experts and are aware of the agent functionality. Testers can use the UAT feature to set up the required test queries, perform UAT on the agent, and provide required feedback.
Developers can then view the feedback provided during UAT testing from the [Monitor -> Analytics](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics#user-feedback) page and also under the [Learning -> User Feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) section. Alternatively, developers can also use the [User Feedback API](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/feedback-api) to collect feedback periodically to learn and analyze the experience of the user when they are interacting with your agent.
### Before UAT
* Identify the `categories` of the testing areas. Here, a category can be used to classify your UAT queries into different groups, based on functionalities, modules, or use cases.
* Evaluate what must be accomplished at the end of UAT testing for each category. Have a list of UAT queries that closely mimic the production use cases for each category.
### How does it work?
In the `Channels -> UAT` section, you can add test queries for each category. Here, a category can be used to classify your UAT queries into different groups, based on the say, functionalities, modules, or use cases. `Categories` helps to ensure complete coverage of your test cases.
After configuring the UAT with categories and test queries, you can test the queries using the `View` option in the `Channels -> UAT` section.
In the UAT testing page, the instructions and categories are displayed on the left side of the page. The agent is displayed towards the right. Click the category and corresponding queries to test in the agent widget.
See [UAT](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/uat), for more information.
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/introducing-voice-usage.md
# Introducing "Voice Usage"
In this release, a new usage report `Voice Usage` has been introduced in the `Settings` section.
This page helps you to track the anticipated voice billing usage associated with the company’s license configuration. It allows you to track monthly incoming and outgoing calls on your account and export usage reports for further analysis.
Click your `Profile` icon at the top-right corner, navigate to `Settings -> Usage Reports` to access the `Voice Usage` option.
{% hint style="info" %}
**Note:** This page is available only for users with the `Settings` role. See [Roles and Permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
{% endhint %}
See [Voice Usage](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/voice-usage), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/webinars/introduction-to-v5.0-and-answers.md
# Introduction to v5.0 and Answers
This is a deep-dive webinar on the Agent life cycle and Agent Permissions. This is the agenda for the webinar:
* Introduction to 5.0
* Avaamo Answers
* Agent
* Skills
* Dialog Skill
* Q\&A Skill
* Smalltalk Skill
* Agent capabilities
* Access control and Permissions
* Life cycle management
* Skill Store
* Company Skills
* Avaamo Skills
* Migration from v4.0 to 5.0
## Presentation
{% file src="" %}
Introduction to v5.0 and Answers
{% endfile %}
## Video
{% embed url="" %}
## Useful links
* [What's new in Avaamo Conversational AI Platform v5.0?](https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/whats-new)
* [Release notes v5.0](https://docs.avaamo.com/user-guide/release-notes/v5.0-to-v5.8.x-releases/release-notes)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/ios-apps.md
# iOS
You can deploy the agents built on the Avaamo Platform into your iOS channel to facilitate easy communication with iOS mobile users. This helps to clearly distinguish and monitor the user interactions from the iOS channel separately. See [Channels in Analytics](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics), for more information.
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance. Note that only the web channel is enabled by default.
{% endhint %}
### Channel settings
{% hint style="success" %}
**Key points**:
* All the properties, parameters, and callback functions as applicable for the web channel are also available for the iOS channel. See [Web channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel), for more information.
* After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirements. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
* You can also deploy your agent on multiple instances of the iOS channel similar to the web channel. See [Deploy in multiple web channel instances](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deploy-and-test-web-channel), for more information.
{% endhint %}
The following lists a few properties that distinguish web channel from iOS channel:
* **Advanced -> iOS page URL:** Indicates the page where the agent is deployed for iOS mobile users. See [Suggested steps to deploy](#suggested-steps-to-deploy), for more information on this feature can be useful.

Properties Description iOS page URL Indicates the page where the agent is deployed for iOS mobile users. Embed code Script that must be embedded in the iOS apps to render the agent. Note that this URL is different from the web channel URL.
* **Deployment -> Copy your embed code**: Script that must be embedded in the iOS channel to render the agent. Note that this URL is different from the web channel URL. See [Suggested steps to deploy](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/android-apps#suggested-steps-to-deploy), for more information on this feature can be useful.

### Suggested steps to deploy
Consider that you have a website where you are required to deploy your agent. You wish to monitor the user interactions from the web channel and iOS channel separately for analytics. You can deploy your agent in both the channels as follows:
* Create a blank page that has the same base URL as the website. **Example**: If your website is " ", then you can create a blank page with "".
* In the iOS channel page, specify the URL "" in the **iOS page URL**.
* Deploy your agent in the page "" using the **Embed code** in the iOS channel.
* Test your agent from any iOS device such as an iPhone or iPad to verify the implementation.
* In the main website " " source, include the script tag with the following code:
```javascript
```
The following is a detailed script that checks if the device is iOS and launches the agent URL accordingly:
```javascript
var device = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
if(device){
var AvaamoChatBot = function(t) {
function o(t, o) {
var n = document.createElement("script");
n.setAttribute("src", t), n.onload = o, document.body.appendChild(n)
}
return this.options = t || {}, this.load = function(t) {
o(this.options.url, function() {
window.Avaamo.addFrame(), t && "function" == typeof(t) && t(window.Avaamo)
})
}, this
};
var bot_url = <>;
var custom_property = '';
var url = bot_url + "&custom_properties[userdata]=usernotlogged";
var chatBox = new AvaamoChatBot({
url: url
});
chatBox.load(function (avaamo) {
avaamo.onChatBoxClose = function () {
window.Avaamo.sendMessage("#clear");
}
});
}
else{
var AvaamoChatBot = function(t) {
function o(t, o) {
var n = document.createElement("script");
n.setAttribute("src", t), n.onload = o, document.body.appendChild(n)
}
return this.options = t || {}, this.load = function(t) {
o(this.options.url, function() {
window.Avaamo.addFrame(), t && "function" == typeof(t) && t(window.Avaamo)
})
}, this
};
var bot_url = <>;
var custom_property = '';
var url = bot_url + "&custom_properties[userdata]=usernotlogged";
var chatBox = new AvaamoChatBot({
url: url
});
chatBox.load(function (avaamo) {
avaamo.onChatBoxClose = function () {
window.Avaamo.sendMessage("#clear");
}
});
}
```
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/js-errors.md
# JS errors
In case you have included JavaScript code in your agent, you can check for script errors (if any) in the **JS errors** page. Here, you can view errors related to SSML, live agent, channel, Regex entities, and JS errors across nodes. The link to the **JS errors** page is under **Debug** on the left navigation pane.
Details provided about each of the errors in the list:
* **Type:** Indicates whether the JavaScript execution resulted in an Error or a Warning.
* **Message**: Indicates the message in the skill at the point of error.
* **Step**: Indicates the node number in the flow that caused the error.
* **Sender**: Indicates the details of the user or agent who sent the message.
* **Time**: Indicates the time the error was created, as per the system time.
* **JS error**: Indicates the details of the JS error.
Using the details displayed in the **JS errors** page, you can correct the JS errors in the conversation flow.
### Filter JS errors
**To filter the JS errors based on a date range**:
You can filter the error list to view only errors that occurred within a specific date range, up to 90 days.
{% hint style="info" %}
**Note**: By default, errors that occurred in the last 30 days are displayed in the JS errors page.
{% endhint %}
1. Click on the date selection box to select a date range.
2. The first three options allow you to select errors for the last 30 days, the previous 15 days, or the current date. The fourth option, which is a custom range, allows you to select errors for a date range that you specify.
3. To select errors for a custom date range, select the **Custom Range** option. In the calendar window, click on the start date of the date range. Then drag the mouse (do not click and drag; simply drag) to the end date of the date range, and click it. You have selected the date range. Finally, click **Apply**.

The total number of errors for the agent is displayed at the top of the page. However, only 25 errors are listed per page. Use pagination to navigate and view other errors.
{% hint style="info" %}
**Notes**:
* You can use the **Clear All** option to clear all JS errors.
* The error messages are sorted in descending order by error creation time.
* All errors get displayed only when the specific cases are triggered in the conversation flow with a user query. For example, Regex entity error is displayed only when you use the entity in the conversation flow and it gets triggered in the conversation flow.
{% endhint %}
**Filtering JS errors by type:**
You can filter the JS error list to view only **Errors** or only **Warnings**.\
To apply the filter, click the dropdown and select the desired error type, **Error** or **Warning**.
### Export JS errors to a CSV file
Using the **Export** option, you can download all the errors on the current page and other pages to a single CSV file. This can be used as a reference and for further analysis.

**To export JS errors to a CSV file**:
1. You can first filter the required data using the date range. See [Filter JS errors based on date range](#filter-js-errors-based-on-a-date-range), for more information.
2. Click **Export.** A copy of the error file is downloaded to your local machine. Note that the **Time** for each error in the downloaded CSV file is in UTC timezone.
3. File exports include only the log results that match the currently applied filter.
---
# Source: https://docs.avaamo.com/user-guide/configuration/js-files.md
# JS files
You can create and add JavaScript files to the agent from the `Configuration -> Add JS files` option. This feature is used to enhance the functionality of the agent.
Refer [JS files](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-js-files), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/keeping-content-updated.md
# Keeping content updated
If Answers skill is integrated with a content source or a CMS, there are two ways to keep the knowledge base updated whenever there are changes in the source content:
* If you use webhooks to integrate with your content source, the webhooks updates the Answers skill knowledge base whenever the source content is updated.
* Cron jobs can be configured to run periodically to look through the indexes or sitemaps of the content source to identify the content that has been updated and subsequently update the Answers skill knowledge base. Detailed information on how to configure cron jobs is available within the document parsing utility.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/key-terms.md
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-filters/key-terms.md
# Source: https://docs.avaamo.com/user-guide/llamb/key-terms.md
# Key terms
This article introduces a few key terms specific to the LLaMB product in the Avaamo Conversational AI Platform:
* **LLaMB**: `LLaMB - Large Language Model for Business` is an exclusive product offering from the Avaamo Conversational AI Platform to harness the power of enterprise content coupled with Generative AI in your agents. It is a full stack, low code toolset to build, deploy, and maintain LLM ([Large Language Model](https://en.wikipedia.org/wiki/Large_language_model)) applications at enterprise scale. See [Overview - Key features](https://docs.avaamo.com/user-guide/llamb/overview-key-features), for more information on LLaMB.
* **Generations**: An agent can either respond to users by referencing a previously stored answer (in its cache), or by using an LLM. Only the LLM-based responses count towards your generation quota. Generations are displayed in the `LLaMB -> Usage` page at the account level. See [Generation Usage](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage#generation-usage), for more information.
* **Cached responses**: For faster results and better efficiency the responses generated by LLaMB are cached. If a user asks the same or similar query, then instead of generating a response from LLM, the cached response is displayed to the user. See [Generation Usage](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage#generation-usage), for more information.
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/agent-assist-widget/ai-assist-view/knowledge-assist.md
# Knowledge Assist
The `Knowledge Assist` tool allows you to manually ask any query at any time during or after a call, giving you the ability to search the entire knowledge repository from a single screen within the widget. This feature empowers you to quickly find relevant information outside of the automated recommendations.
The information retrieved through `Knowledge Assist` is presented similarly to the `Recommendations View`. You receive a summarized answer generated from one or more knowledge articles, along with references to the source articles. Additionally, you have the option to provide feedback on the accuracy and quality of the provided information.
For example, if a user asks about the terms and conditions regarding maternity leave, the agent can go to the Knowledge Assist tab, enter the query, and obtain an accurate response.
This feature provides agents with prompt answers during live calls, using a knowledge base built with the LLaMB in the Avaamo platform. This is populated with structured content, making recommendations both efficient and relevant. Refer [Before you begin](https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/before-you-begin), for more information.
---
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill.md
# Knowledge skill
- [Create knowledge skill](/user-guide/skills/knowledge-skill/create-knowledge-skill.md)
- [Add content to knowledge skill](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill.md)
- [Before you begin](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/before-you-begin.md)
- [SharePoint](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint.md)
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-1-select-the-content-source-type.md): The first step in using DataSync AI is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Select sites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content/select-sites.md)
- [Preview artifacts](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content/preview-artifacts.md)
- [Set document attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [ServiceNow](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow.md)
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-1-select-the-content-source-type.md): The first step is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter articles](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-2-configure-content-source-and-ingest-content/filter-articles.md)
- [Set Document Attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Website](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website.md)
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-1-select-the-content-source-type.md): The first step in using DataSync AI is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter web pages](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-2-configure-content-source-and-ingest-content/filter-web-pages.md)
- [Set document attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Files](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files.md)
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-1-select-the-content-source-type.md): The first step in using DataSync AI is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Upload files](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/upload-files.md)
- [Set Document Attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Confluence](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence.md)
- [Pre-requisites](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/pre-requisites.md)
- [Step 1: Select the content source type](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-1-select-the-content-source-type.md): The first step is to choose the type of content source from which information must be gathered or accessed.
- [Step 2: Configure content source and ingest content](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content.md)
- [Configure connection](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/configure-connection.md)
- [Filter articles](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/filter-articles.md)
- [Set Document Attributes](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/step-2-configure-content-source-and-ingest-content/set-document-attributes.md)
- [Testing and validation](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/testing-and-validation.md)
- [Common actions](/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/common-actions.md)
- [View and edit knowledge](/user-guide/skills/knowledge-skill/view-and-edit-knowledge.md)
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/language-pack.md
# Language pack
Typically, in any global business, it is a necessity to design and build assistants or agents that can interact with the users in their local language. The Avaamo platform provides multilingual support for agent development in different languages, with English (en-US) as the default language.
In the Avaamo Platform, you can add multiple languages to the agent, so that the agent can respond in different languages as per your business requirement both in text and voice.
## How does it work?
Adding a language to your agent is a simple three-step process:
* [Step 1: Configure or add languages in your agent](#step-1-configure-or-add-languages-in-your-agent)
* [Step 2: Customize translations](#step-2-customize-translations)
* [Step 3: Test your agent](#step-3-test-your-agent)
{% hint style="success" %}
**Key Point**: Agent conversation starts with one language and continues in the same language. If you wish to change the language of the agent response, say, based on the user's request or response, then you can identify and switch the language in your agent.
See [Step 3: Test your agent](#step-3-test-your-agent), for more information.
{% endhint %}
### Step 1: Configure or add languages in your agent
The first step is to add languages to your agent in the **Agent -> Configuration -> Languages** page. Consider that in your Pizza agent, you wish to add the French language to your agent.
* In the **Agent page**, navigate to the **Configuration -> Language** tab option in the left navigation menu.
* Click **Add languages** and select the **French** language from the dropdown.
* Click **Save** to save the agent language configurations.

* When you add a language, all the agent responses are automatically translated into the corresponding language. **Example**: In the Pizza agent, you can check the translated response of the Greeting skill.
* Click the **Greetings skill**.
* In the skill response, change the language to French (fr-FR). You can view the translated response of the greetings message.

See [Add languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-languages) for more information on how to add and manage languages in your agent.
### Step 2: Customize translations
You can add custom translations to the response based on your requirement. Custom translation can be added in the following ways:
Where? When? Agent -> Configuration -> Languages page Use this to provide translations for all sentences and texts used by the agent. Examples: text used in skills, persistent menu, live agent, etc. Note that in all the cases, node-level translation has the highest priority. This implies that if you have the same translated text at the agent and the node-level, then the node-level translated response is displayed. Skill responses
Consider that you wish to customize the greeting message in your Pizza agent. The default greeting message in English is "Welcome to MacPizza. How can I help you today?" and this is translated to "Bienvenue à MacPizza. Comment puis-je vous aider aujourd'hui?". You wish to customize to "Bonjour, bienvenue chez MacPizza. Comment puis-je vous aider aujourd'hui?."
* In the **Agent page**, navigate to the **Configuration -> Language** tab.
* Click **Add translation** to enter the English text and corresponding translated text.

{% hint style="info" %}
**Note**: To customize the response of the Greeting skill, instead of adding the custom translation in the **Agent -> Configuration -> Languages** page, you can add the same in the Greeting skill response. See [Language-specific responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/skill-message-window-overview#language-specific-responses), for more information.
{% endhint %}
### Step 3: Test your agent
You can use the **Language.switch** command to switch the language as required. Note that you can only switch to those languages that are configured in your agent. See [Language.switch](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch), for more information.
Consider that in your Pizza agent, based on certain criteria you wish to switch language to French.
* Add a JS node in the Greeting message and switch the language as required - `Language.switch('fr-FR');`

* Click OK.
* Click **Save** to save your agent
* Test your agent using the **Agent simulator** from the bottom-right corner. You can now view the custom-translated greeting message in French.

## Skip translation
When an agent is multi-lingual, then there can be scenarios, where even though the user is asking the question is a specific language say, French, you still want the agent to respond back in English for certain responses. This can be achieved using the **Skip translation** option available in the response pop-up window.
**Example**: Consider the following scenario,
* You have added the French language to the agent.
* In the response pop-up window, you checked the **Skip translation** option for French language response.
* Now, when the user asks the question in French matching this intent, then the response is displayed in English.

## Supported languages
Avaamo platform supports 110+ languages in the web channel such as French, Arabic, Chinese, Polish, and many more. See [Web - supported languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-supported-languages), for a complete list
---
# Source: https://docs.avaamo.com/user-guide/configuration/language.md
# Language
You can add multiple languages to the agent so that the agent can respond in different languages. The translated text of the language is used in the agent response based on the detected language of the agent.
Refer [Language](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-languages), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch.md
# Language.switch
**Syntax**:
Language.switch('<\>');
**Example**:
Language.switch('fr-FR');
{% hint style="info" %}
**Notes**:
* You can only switch to those languages that are configured in your agent. See [Add languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-languages), for more information.
* The Language code must be according to IETF language tag standards. Example: en-US, fr-FR, hi-IN
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement.md
# Learning - Continuous Improvement
- [Overview](/user-guide/how-to/build-agents/learning-continuous-improvement/overview.md)
- [User feedback](/user-guide/how-to/build-agents/learning-continuous-improvement/feedback.md)
- [Query analyzer (Deprecated)](/user-guide/how-to/build-agents/learning-continuous-improvement/query-analyzer-deprecated.md)
- [Agent diagnostics (Deprecated)](/user-guide/how-to/build-agents/learning-continuous-improvement/agent-diagnostics-deprecated.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/list-view.md
# ListView response (Javascript)
You can add a customized list view using JavaScript in an agent's response.
{% hint style="info" %}
**Notes**:
* There is a 191 character limit for all the user-defined text fields.
* If the agent response contains sensitive PII data such as name, account number, password, then it is recommended to mask the agent responses to protect user privacy. See [Agent response masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking#masking-agent-responses), for more information.
{% endhint %}
### Syntax
Broadly, the following is the syntax to add a customized list view:
```yaml
"list_view": {
*"top_element_style": "<>",
"items": [{
"title": "<>",
*"subtitle": "<>",
*"image_path": "<>",
"links": [{
<>
},...]
},...]
}
* - Indicates optional parameter
… - Indicates one or more parameter
```
Attribute Description Type top_element_style Indicates the style type for the list view. Supported values - Large, Compact.
Default value is Large.
String items Indicates the array of items in the list view. You can add upto 50 items to the list. Each item contains the following details:
title: Title of the item subtitle: Sub-title of the item image_path: Image used for the item. You can add an image similar to the way you add an image to a card. See Card Images , for more information. links: An array of customized card links such as Post Message, Web Page, Deep Link, and Web View. Array links Indicates an array of customized list view links such as Post Message, Web Page, Deep Link, and Web View.
All the link types supported for card links are available in the list view also. See Card Links , for more information.
An array of JSON key-value pairs.
### Example
The following is a sample JS for list view:
```yaml
return [{
"list_view": {
"top_element_style": "compact",
"items": [{
"title": "Coke",
"subtitle": "All Chilled",
"links": [{
"type": "post_message",
"title": "Get a pack of 5",
"value": "coke"
}]
},
{
"title": "Coffee",
"subtitle": "Cold",
"links": [{
"type": "post_message",
"title": "Buy one get one",
"value": "coffee"
}]
}
]
}
}];
```
In the agent, the following response is displayed:

---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/live-agent-console-rest-apis/live-agent-changelog-api.md
# Live Agent Changelog API
## Get live agent changelog
`GET` `https://cx.avaamo.com/api/v1/cap/change_logs.json`
Captures all the configuration changes performed by the live agent (such as live agent status updates) and the supervisors (such as configuration changes in Teams, Routing rules, or Quick responses).
Note that the live agent change log API captures only configuration changes in the Live agent console. See [Live Sessions ](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/live-sessions)and [Reports](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/reports) page to view transactional changes in the Live agent console such as incoming chat requests, wait time, and conversation duration.
#### Query Parameters
| Name | Type | Description |
| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| start\_time | number | Timestamp from which the records are fetched.
If you specify timetoken and not end\_time, then the latest 5 entries up to the specified timetoken are fetched.
Specify UNIX Epoch Timestamp in milliseconds.
|
| end\_time | number | Timestamp until which the records are fetched. Default is the current timestamp.
Specify UNIX Epoch Timestamp in milliseconds.
|
| page | integer | Page from which the entries must be fetched. Default: 1
|
| per\_page | integer | Number of entries fetched per page. Default: 25 Maximum value: 100
|
| actions | String | Actions in an live agent for which you wish to get changelog.
Supported values are: update, create, destroy
By default, all actions are considered. You can also specify multiple resources in a comma-separated list.
Example: actions=update,create
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| access-token\* | string | User access token. Both live agents and supervisors can access the changelogs.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
|
{% tabs %}
{% tab title="200 Sample Reponse" %}
{% code overflow="wrap" %}
```json
{
"current_page": 1,
"per_page": 1,
"total_entries": 3,
"total_pages": 3,
"time_token": 1699347493.7744794,
"entries": [
{
"id": 2202442,
"resource": {
"id": 739,
"type": "User"
},
"action": "update",
"changelog": "Donna Miller updated User Donna Miller status from 'offline' to 'active",
"timestamp": 1699264790,
"dashboard_user": {
"id": 739,
"display_name": "Donna Miller",
"email": "donna@avaamo.com"
}
}
]
}
```
{% endcode %}
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v1/cap/change_logs.json?per_page=1' \
--header 'Content-Type: application/json' \
--header 'access-token: xxxxxxxxx9a34a44a838af10fxxxxxxx'
```
{% endcode %}
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v2/outreach/change_logs?per_page=1',
'headers': {
'Content-Type': 'application/json',
'access-token': 'xxxxxxxxx9a34a44a838af10fxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample response of a successful API request:
```json
{
"current_page": 1,
"per_page": 1,
"total_entries": 3,
"total_pages": 3,
"time_token": 1699347493.7744794,
"entries": [
{
"id": 2202442,
"resource": {
"id": 739,
"type": "User"
},
"action": "update",
"changelog": "Donna Miller updated User Donna Miller status from 'offline' to 'active",
"timestamp": 1699264790,
"dashboard_user": {
"id": 739,
"display_name": "Donna Miller",
"email": "donna@avaamo.com"
}
}
]
}
```
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the live agent changelog. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned in seconds. UNIX epoch timestamp entries Indicates an array of change logs fetched from the live agent. Number of entries in the array = Number specified in per_page parameter. JSON key-value pairs
#### entries
Indicates an array of change logs fetched from the campaign. Each array contains the following attributes:
Attribute Description Type id Indicates a unique identifier for the changelog entry. Integer resource -> id Indicates a unique identifier of the resource for which the changelog is listed such as the live agent identifier, Teams identifier, Routing rule identifier, or Quick response identifier. Integer resource -> type Indicates the type of resource for which the changelog is applicable. String action Indicates the action such as create, update, destroy for which the changelogs are retrieved. String changelog Indicates the actual change that occurred for this entry.
This is a user-friendly description to help you identify the type of change..
String timestamp Indicates the timestamp of when the changelog was created in seconds.
This is the timestamp when the changes for the campaign are persistent in the database.
UNIX epoch timestamp dashboard_user -> id Indicates the identifier of the user who is the modifier of the resource. Integer dashboard_user -> display_name Indicates the display name of the user who is the modifier of the resource. String dashboard_user -> email Indicates the email of the user who is the modifier of the resource. String
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get changelogs within a specified period start_time: Specify the from timestamp in epoch format such as 1579149424 end_time: Specify the to timestamp in epoch format such as 1579149436 Example : https://cx.avaamo.com/api/v1/cap/change_logs.json?start_time=1579149424&end_time=1579149436
Get changelogs using pagination page: Specify the page from which you wish to fetch records. By default, the value is 1. per_page: Specify the number of entries per page. By default, the value is 25. Example :
https://cx.avaamo.com/api/v1/cap/change_logs.json?page=5&per_page=2
Here, per_page * total_pages = total_entries
Get changelogs of all updated campaign records within a specified period start_time: Specify the from timestamp in epoch format such as 1579149424 end_time: Specify the to timestamp in epoch format such as 1579149436 action: Specify update Example : https://cx.avaamo.com/api/v1/cap/change_logs.json?start_time=1579149424&end_time=1579149436&actions=update
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/live-agent-console-rest-apis.md
# Live agent console - REST APIs
- [Live Agent Changelog API](/user-guide/live-agent-console/live-agent-console-rest-apis/live-agent-changelog-api.md)
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/live-agent/live-agent-translation.md
# Live agent translation
{% hint style="info" %}
**Pre-requisite:** The supervisor must ensure the **Enable Live Agent Translation** option is enabled for the live agents. See [Live Agents](https://docs.avaamo.com/user-guide/supervisor/live-agents#enable-translation-for-live-agents), for more information.
{% endhint %}
Avaamo Platform provides the capability to build virtual assistants in 100+ languages such as French, Arabic, Chinese, Polish, and many more. This enables the users to converse with the virtual assistant in their local language making the experience more personal and enriching. See [Web - supported languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-supported-languages) and [Language pack](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/language-pack), for more information.
Now, consider a case where a user conversing with the virtual assistant in a local language, wishes to connect to a live agent. Ideally, the users must be connected to a live agent who understands the same local language for an effective conversation. This process can have many challenges:
* **Cost and Maintenance:** You need a team of live agents proficient in various languages supported by the virtual assistant. With the `Live agent translation` feature, customers, and agents can communicate in their preferred languages in real-time. This feature enables businesses to serve a diverse customer base without requiring agents to be fluent in every language, optimizing staffing and reducing the risk of miscommunication.
* **Operational efficiency**: In the live agent system, specific routing rules must be considered to detect the user's language and then route to the live agent.
With `Live agent translation` feature capability in the `Avaamo Live agent` console, all the above challenges are eliminated. This feature offers robust translation capabilities to facilitate seamless communication between users and live agents. It eliminates the need for language-specific live agents.
{% hint style="info" %}
**Note:** All end-user messages are translated into English only. `en-US` is the only language supported for Live agents.
{% endhint %}
### How it works?
This feature enables smooth translation between the users and the live agents.
Users can continue to converse with the virtual assistant in their local language, however, during the conversation with the virtual assistant, when users connect to a live agent, the user messages are automatically translated from the user's local language to English and from English back to the user's local language. This ensures a smooth and effective conversation experience.
* **End user to Live agent:** When an end user communicates with a live agent, the responses are automatically translated into English. This ensures that live agents can understand and respond to inquiries regardless of the original language used by the virtual assistants.
* **Live Agent to the End User:** Similarly, when a live agent responds to the end user, the message is translated back into the user's conversation language in the virtual assistant.
**Example of Live agent translation:**
Consider a user is conversing with a virtual assistant in French.
1. **User Initiates Conversation**: The user starts a conversation with a virtual assistant in French.
2. **Transfer to Live Agent**: The conversation is transferred to a live agent who communicates in English.
3. **Translation of User Messages**:
* The system translates messages from the user, written in French, into English.
* These translated messages are then displayed to the live agent.
4. **Agent's Response Translation**:
* The live agent responds in English.
* The system translates the agent's response into French.
5. **User Receives Response**: The translated response in French is sent back to the user, ensuring clear and effective communication.
Live agents can review language translations by clicking "**View Translation**." This action displays a dialogue box showing the translated text and the source language from which the translation is being made.
Agents can review translated messages before sending them to the end user. By clicking "**Show Translated Text**," the translated message appears in a dialog box. You can also use a keyboard shortcut **Ctrl+U** for this option.
This feature allows live agents to see the virtual agents' languages and manually verify the translation if they are familiar with it.
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/live-agent.md
# Source: https://docs.avaamo.com/user-guide/configuration/live-agent.md
# Live agent
- [Pre-built live agent](/user-guide/configuration/live-agent/pre-built-live-agent.md)
- [Custom live agent](/user-guide/configuration/live-agent/custom-live-agent.md)
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/supervisor/live-agents.md
# Live agents
The `Live Agents` page enables real-time tracking of live agent availability for supervisors within the account. Supervisors can also override the live agent status if required.
This functionality allows supervisors to monitor the number of active, away, or offline live agents. By utilizing this information, supervisors can make informed decisions to optimize customer experiences by adjusting configurations based on the availability of live agents. For example, if an agent is marked as "away" or "offline", supervisors can adjust the configurations, reducing wait times and improving efficiency. See [Advanced Configurations](https://docs.avaamo.com/user-guide/live-agent-console/advanced-configurations), for more information.
### **View live agents**
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Analytics and Reporting icon -> Live Agents` page in the left navigation pane of the Supervisor interface to view the real-time status of all live agents.
* By default, the page displays active live agents first, followed by agents who are currently away, and finally, those who are offline. Within each status category, the agents are listed in descending order based on their creation time, which implies that the last created live agent appears first in the list.
Each row contains the following information:
* Live agent name
* Current live agent status: Active agents are denoted by a green dot, an orange dot indicates the agent is away, and gray represents offline status.
* Teams: Number of teams the live agent is associated with. Hover over the number to see the list of teams.
* Live agent email
* Actions: This section allows you to modify or override the current live agent status. See [Change live agent status](#change-live-agent-status), for more information.
### Change live agent status
Supervisors have the authority to override or modify the live agent status, providing them with the capability to address situations where a live agent may not be available, such as being on sick leave, but has not updated their status accordingly. This functionality is crucial to prevent instances where the live agent appears online while being unavailable, which could lead to a suboptimal customer experience.
**To change the live agent status**:
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Analytics and Reporting icon -> Live Agents` page in the left navigation pane of the Supervisor interface to view the real-time status of all live agents.
* Search the live agent for which you wish to change the status. See [Search live agent](#search-live-agent), for more information.
* Click the Actions icon and select the required status to update the live agent status. See [Set live agent status](https://docs.avaamo.com/user-guide/live-agent-console/live-agent/set-live-agent-status), for more information on live agent status and what they mean.
{% hint style="info" %}
**Note**: Modifying the status from Active to Offline has implications on concurrency settings. See [Advanced configurations](https://docs.avaamo.com/user-guide/live-agent-console/advanced-configurations), for more information.
{% endhint %}
### Search live agent
You can search for live agents using the search icon in the `Live Agents` page. To search the live agents, enter the desired text in the Search text box and press enter.
### Filter live agent by status
You can filter live agents by status using the status dropdown in the `Live Agents` page. Select the required status to filter and view the results.
### Enable translation for Live agents
Supervisors can enable or disable the live agent translation feature for live agents. This selective enablement is beneficial when live agents are trained in multiple languages, allowing them to effectively handle queries from end users. See [Live Agent Translation](https://docs.avaamo.com/user-guide/live-agent-console/live-agent/live-agent-translation), for more information.
This process helps supervisors manage the translation feature based on the specific language skills of their agents.
**To enable translation for live agents:**
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Analytics and Reporting icon -> Live Agents` page in the left navigation pane of the Supervisor interface to view the real-time status of all live agents.
* Click the Actions icon and choose either `Enable Live Agent Translation` or `Disable Live Agent Translation`**.** You can verify the status of the live agent translation in the `Enable Live Agent Translation` column.
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/supervisor/live-sessions.md
# Live sessions
Live Sessions enable supervisors to monitor real-time information on the customer wait time and conversation duration of all the active and queued chat requests within the company. This provides valuable insights into traffic patterns and workload, allowing them to optimize chat routing and create specialized teams with specific skill sets, ultimately enhancing customer satisfaction.
For instance, Supervisors can leverage the traffic data to develop standardized responses or establish and manage routing rules. In the following example, Supervisors can assess the current traffic usage, including metrics such as wait time, and make informed decisions to update routing rules or explore alternative methods to enhance the overall customer experience. See [Advanced Configurations](https://docs.avaamo.com/user-guide/live-agent-console/advanced-configurations), for more information.
Some of the key benefits of the Live Sessions page include the following but not limited to:
* **Resource Allocation**: Supervisors can use the timer to allocate resources effectively. They can adjust agent workloads using certain advanced configurations based on the time spent on each conversation. See [Advanced configurations](https://docs.avaamo.com/user-guide/live-agent-console/advanced-configurations), for more information.
* **Agent Performance Evaluation**: The timer can be used to assess agent performance. If an agent consistently takes longer to resolve issues than their peers, it may signal a need for additional training or support.
* **Queuing and Routing**: The timer can also help in queuing and routing decisions. If a chat is taking too long, supervisors can use routing rules and make adjustments in the queue to reduce wait times. See [Rule-based routing](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/rule-based-routing), for more information.
{% hint style="success" %}
**Key Point**: If you require to access historical data of Live Agent chat interactions for analytical or reporting purposes rather than real-time information, then see [Reports](https://docs.avaamo.com/user-guide/live-agent-console/supervisor/reports) page for detailed information and insights.
{% endhint %}
### View real-time data
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Analytics and Reporting icon -> Live Sessions` page in the left navigation pane of the Supervisor interface to view real-time live agent reports in your organization.
* By default, in the **Live Sessions** page, all the queued requests are displayed first, followed by the active requests:
* Within queued requests, the requests are displayed in the descending order of wait time which implies that the request with the maximum wait time is displayed first.
* Within active requests, the requests are displayed in the descending order of conversation duration which implies that the request with the maximum conversation duration is displayed first.
* Note only active and queued conversations are displayed in the **Live Sessions** page.
* Each row is a chat request by the user and in the `Live Sessions` page, you can view the following details about each chat conversation:
* **Conversations status**: Indicates the current status of the conversation.
* **Queued**: The conversation that is yet to be accepted by a live agent.
* **Active**: The ongoing conversation between live agent and user.
* **User name**: Indicates the end user with whom the live agent is/was interacting.
* **Live agent name**: Indicates the name of the live agent conversing with the user.
* **Wait time**: Indicates the time the request was in the queue before a live agent accepted the request.
* The **Live Sessions** page displays real-time information on the customer wait time for each chat, which is kept updated every second.
* The wait time becomes static when a live agent accepts a chat and starts chatting with the user.
* When the request is transferred to another team, the wait time is reset with a new entry in the `Live Sessions` page, and the original conversation status is marked as ended. Note that you can view only queued and active conversations on the page.
* **Conversation duration**: Indicates the amount of time the current live agent is/was having a conversation with the user until the chat is terminated or transferred by the live agent to another team.
* The **Live Sessions** page displays real-time information on the conversation duration for each chat, which is kept updated every second.
* When the request is transferred to another team, the conversation duration is reset with a new entry in the `Live Sessions` page and the original conversation status is marked as ended.
* The page displays live, real-time information on conversation durations, continuously updating every second.
* **Channel**: Indicates the channel used by the user to converse with a live agent.
* **Team**: Indicates the team the request was routed to.
* **Agent**: Indicates the agent (bot) name.
* Click the **Refresh** button to view the latest real-time status of the conversations in your organization.
### Refresh notifications
When the **Live Sessions** page remains open in a browser tab, Supervisors receive a browser tab refresh notification for any new chat requests received or updates to the conversation status for the existing chat requests.
In the **Live Session** page, a refresh notification is displayed, enabling supervisors to refresh the page as needed.
---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-faqs.md
# LLaMB FAQs
This article lists a few frequently asked questions about LLaMB:
### 1. How is LLaMB different from existing Answer skills?
At the surface level, although, both (LLaMB and Answers skill) appear to leverage and tap into the existing knowledge base and deliver answers sourced from enterprise content; however, unlike Answers, LLaMB extends much beyond the mere ingestion and delivery of answers from enterprise content.
LLaMB is an exclusive product offering from `Atlas 8` onwards in the Avaamo Conversational AI Platform to harness the power of enterprise content coupled with Generative AI in your agents.
It is a full stack, low code toolset to build, deploy, and maintain LLM ([Large Language Model](https://en.wikipedia.org/wiki/Large_language_model)) applications at enterprise scale.
Many key features in LLaMB help in generating inherently personalized and summarized results while maintaining the required level of security and compliance for enterprises. It is a practical and secure approach to deploying LLMs in the enterprise, thereby enhancing the knowledge search experience for both employees and customers. See [Overview - Key features](https://docs.avaamo.com/user-guide/llamb/overview-key-features), for more information.
### 2. How does LLaMB handle hallucinations with Generative responses?
No Hallucination!
By carefully managing the content sources and documents provided to LLaMB, you can leverage the "best of both worlds" approach. This means that only verified content references are fed to LLaMB, resulting in accurate, trustworthy, and secure inferred answers.
### 3. How to trust the answers from LLaMB?
The primary concern when it comes to enterprise applications is "Trust and Security". Raw Model APIs when piped directly into the enterprise are very vulnerable. Moreover, these models are subject to adversarial attacks such as prompt injection.
With LLaMB, you have complete and absolute ownership of the data. This means that you own and control what data is ingested to LLaMB and this internally controls how the responses are presented to the users. LLaMB uses only the content ingested to generate answers.
### 4. How secure is my content in LLaMB?
With LLaMB, all the content you feed and the agent you build and deploy is via the Avaamo Conversational AI Platform. The platform combines enterprise-grade security features with rigorous compliance with industry standards to ensure your data is always protected and secure. See [Security at Avaamo](https://avaamo.ai/conversational-ai-security/) for more information on the compliances and security regulations list. The trust and security layer
### 5. Does LLaMB auto-learn from the previous responses?
No, each interaction is treated as an independent prompt, and the LLaMB doesn't retain information from prior messages in the conversation. The answers are "generated" implying that LLaMB does not engage in learning from your usage. This enables you to have complete ownership and control on the responses provided to the user.
### 6. How to migrate from Answers to LLaMB?
* Create an LLaMB skill. See [Create LLaMB skill](https://docs.avaamo.com/user-guide/llamb/get-started/step-1-create-llamb-content-skill), for more information.
* Ingest the required content. See [Ingest enterprise content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content), for more information.
* For bulk ingestion, you can leverage [Content Ingestion API](https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis). You can also upload multiple documents at a time from the UI. See [Upload content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/upload-content), for more information.
* Disable the Answers skill
* Test with the LLaMB skill. See [Test agent](https://docs.avaamo.com/user-guide/llamb/get-started/step-3-test-your-agent), for more information.
### 7. Can Answers and LLaMB co-exist?
It is not recommended to have Answers and LLaMB skills both enabled in the same agent as the knowledge-base content between Answers and LLaMB can overlap. Overlapping the same knowledge content can lead to confusion and unpleasant user experience.
### 8. What are the types of files I can load in LLaMB?
You can ingest the following types of documents in the `LLaMB Content` skill:
* URL - Publicly accessible HTML content
* CSV (Comma-separated values)
* Microsoft Word document (docx)
* Microsft Powerpoint (pptx)
* Microsoft Excel (xlsx)
* HTML documents (html)
See [Upload content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/upload-content), for more information.
### 9. Can LLaMB parse tables?
Yes, it can parse and generate summarized, coherent, and contextually appropriate responses. See [Rich Rendering of Tabular Content](https://docs.avaamo.com/user-guide/overview-key-features#rich-rendering-of-tabular-content), for more information.
### 10. What languages are supported in LLaMB?
Currently, you can ingest content only in the en-US language in the `LLaMB Content skill`. However, user inputs and agent responses can be in multiple languages. Refer [Supported language](https://docs.avaamo.com/user-guide/before-you-begin#id-4.-supported-language), for more information.
### 11. What should I do when the Generation quota is reached?
Contact Avaamo Support, for immediate assistance. It is recommended to contact Avaamo Support when the generation quota hits 75% of usage for prompt action. See [Usage analytics](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage), for more information.
### 12. How long are the responses Cached?
For faster results and better efficiency, the responses generated by LLaMB are cached. Once a response is cached, it is always available for future use as per the [data retention policy ](https://docs.avaamo.com/user-guide/ref/data-retention)and not deleted from the cache until then. This helps in optimizing the generation cost. See [Usage analytics](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage), for more information.
### 13. Can I configure cached response duration?
Currently, Once a response is cached, it is always available for future use as per the [data retention policy ](https://docs.avaamo.com/user-guide/ref/data-retention)and not deleted from the cache until then.
### 14. Is there any limit on the number of URLs or PDF sizes?
There is no limit on the number of URLs that can be uploaded using the `LLaMB Content` skill. Further, you can upload multiple PDF documents and each PDF document can be more than 1000 pages. See [Upload Content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/upload-content), for more information.
### 15. Will LLaMB search text present on images?
No. Currently, this feature is not supported.
### 16. How to improve the user experience with LLaMB ?
Currently, there are two primary ways to analyze the user experience and further improve your agent:
* [Using user feedback ](https://docs.avaamo.com/user-guide/improve-user-experience-feedback-analytics#user-feedback)
* [Using Analytics](https://docs.avaamo.com/user-guide/improve-user-experience-feedback-analytics#insights-from-analytics)
### 17. Can I extract Usage analytics data from any API?
Currently, there is no API available to extract Usage analytics data. See [Usage](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage), for more information.
### 21. Can LLaMB perform computation operations?
Currently, there is no support for any computation operations in LLaMB.
### 22. Can you test LLaMB using Regression testing?
Yes, You can test LLaMB content using Regression testing. Refer [Regression Testing](https://docs.avaamo.com/user-guide/llamb/regression-testing), for more information.
### 23. What channels can LLaMB be deployed on?
LLaMB can be deployed in the following channels:
* [Web](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel)
* [Android](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/android-apps)
* [iOS](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/ios-apps)
* [MS Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams)
**24. Are there any elements always shown in English, irrespective of the user’s language?**\
Yes. The following elements are expected to appear in English, regardless of the user’s language settings:
* Acronyms
* Digits
* Document name
* Citation links
---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-filters.md
# LLaMB Filters
- [Overview](/user-guide/llamb/llamb-filters/overview.md)
- [Key terms](/user-guide/llamb/llamb-filters/key-terms.md)
- [Social filters](/user-guide/llamb/llamb-filters/social-filters.md)
- [Grounding filters](/user-guide/llamb/llamb-filters/grounding-filters.md)
- [Brand protection filters](/user-guide/llamb/llamb-filters/brand-protection-filters.md)
- [Hallucination filters](/user-guide/llamb/llamb-filters/hallucination-filters.md)
---
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis.md
# LLaMB REST APIs
- [Content ingestion APIs](/user-guide/llamb/llamb-rest-apis/content-ingestion-apis.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage.md
# LLaMB Usage
`LLaMB’s Usage` feature provides real-time insights into how LLaMB is being utilized in your account. In the Avaamo Platform UI, click `Profile Icon>Settings>Usage reports>LLaMB usage` to access the `Usage` page.
{% hint style="info" %}
**Note**: The data displayed in the `Usage` page is at the account level, meaning that LLaMB usage of any agent in the Avaamo Conversational AI Platform under the account using a [`LLaMB content skill`](https://docs.avaamo.com/user-guide/llamb/get-started/step-1-create-llamb-content-skill) is consolidated and displayed in this page.
{% endhint %}
## Pre-requisites
* Ensure that you have met all the general prerequisites. See [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites), for more information.
* All users who can access the `Dashboard` can view all the sections of the `Usage` page, except for the `Limit threshold notification` section. This section is only accessible to users with the `Settings` role because configuring email threshold notifications is restricted and requires careful handling. See [Roles and Permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
## How to use it?
LLaMB license for an account is based on "Generations". An agent can either respond to users by referencing a previously stored answer (in its cache), or by using an LLM. Only the LLM-based responses count towards your generation quota.
Hence, the primary purpose of the `Usage` page is to understand the "Generations" and to set up a list of users to receive alerts daily or when a specific generation quota is reached. This enables the developers/users to take appropriate action when the generation quota is reached or nearly reaching the threshold.
See [Generation usage](#generation-usage) and [Limit threshold notifications](#limit-threshold-notifications), for more information.
### LLaMB usage
At the top, you can view `LLaMB usage` , which represents the total count of all the LLaMB responses (generated or cached) across all the agents with the [LLaMB content skill](https://docs.avaamo.com/user-guide/llamb/get-started/step-1-create-llamb-content-skill) in the current account.
### Generation usage
LLaMB license is based on generations and the total number of generations is configured for an account based on the license details. In this section, you can view the following details:
**Generation usage**: Shows the count of utilized generations at the account level out of the total available generations.
**Date range**: By default, the generation usage for a week (7 days) from the current date is displayed.
* Click the date range to select different date options as per your requirements.
* You can also view the Generation usage for Yesterday, Today, Last 7 Days, Last 30 Days, and Last 180 Days.
* Click `Custom range` to pick your custom date range by selecting the start and end dates. You can view up to 6 months of usage in this section.
### Export usage report
You can now easily export your LLaMB usage data using `Export usage report` for better tracking and analysis.
* Get a CSV report of your LLaMB usage, including regression testing details
* Use it to analyze trends, optimize usage, and make data-driven decisions
Following are the different columns available in the exported LLaMB usage CSV file.
* **Created By**: The name of the user who created the report.
* **Environment**: The environment where the response was generated.
* **Agent Type**: The type of agent (Standard or Advanced).
* **Agent ID**: The unique identifier of the agent.
* **Agent Name**: The name of the agent that generated the response.
* **Agent Creation Date (UTC)**: The date when the agent was created, in UTC
* **LLaMB Query Generations**: The total number of LLaMB-generated responses for the `first-time answers` when queries are asked.
* **LLaMB Regression Generations**: The total number of LLaMB-generated responses for the `first-time answers` during `regression testing`.
* **Cached Responses (Query + Regression)**: The total number of `cached` LLaMB responses, including both `queries and regression tests.`
* **Generated Responses (Query + Regression)**: The sum of `LLaMB Query Generations` and `LLaMB Regression Generations.`
* **Total Responses (Cached + Generated)**: The sum of `Cached Responses (Query + Regression)` and `Generated Responses (Query + Regression`**)**.
## Use case to understand LLaMB Usage
To understand the different components in the LLaMB Usage section, consider a `Travel assistant` where you have ingested a few travel policy documents in your LLaMB Content skill,
* **LLaMB responses**: This is the sum of `Generations + Cached responses` for the specified date range.
* **Generations**: Total number of generated LLaMB responses in the specified date range. If the user is asking a question on travel policy and this is the first time the answers are being generated by LLaMB, then it necessitates the use of LLM. This is counted as a generation.
* **Cached responses**: Total number of cached responses in the specified date range. For faster results and better efficiency, the responses generated by LLaMB are cached. If a user asks the same or similar query, then instead of generating a response from LLM, the cached response is displayed to the user. In the `Travel assistant`, if the user is asking the same or similar question on travel policy that is already generated, then the cached response is displayed.
* If the retrieved context is the same, and the query has only a slight variation, a cached response is used. For example, if there is a similar query and the articles/documents matched are the same as any of the earlier responses, then the system uses a cached response.
* Once a response is cached, it is always available for future use as per the [data retention policy ](https://docs.avaamo.com/user-guide/ref/data-retention)and not deleted from the cache until then. This helps in optimizing the generation cost.
* **Performance gain**: This represents the growth in generation capacity resulting from caching and is computed by dividing the number of cache responses by the number of generations.
* **Usage over time**: A graphical representation of the LLaMB usage for the account in the specified data range.
## Limit threshold notifications
In this section, you can set up a list of users to receive alerts daily or when specific generation limits are reached. You can add multiple users per notification.
* You can set up notifications to receive daily alerts or when the generation quota has reached 50%, 75%, or 90% of usage.
{% hint style="info" %}
**Notes**:
* To prevent inbox clutter, notifications for specific generation quota alerts are sent only once upon reaching the threshold except when the threshold is reached 100%. If the generation quota has reached 75%, then only the 75% generation quota alert is sent to the users, 50% generation quota alert, in this case, is not triggered again.
* When the generation quota reaches 100%, the notification is sent to all the users configured to receive notifications for different threshold limits on a daily recurring basis until the generation quota limit is increased.
* If you prefer to receive recurring alerts, you can configure the `Daily` alert settings.
{% endhint %}
* For each trigger, specify the required email IDs for whom the notifications must be sent and press `Enter`. You can provide any number of email IDs to receive the generation quota notification; presently, there are no limitations on the quantity.
* When the required generation quota is reached, the notification alert email is sent to the configured users.
* When 90% or 100% generation quota is reached, warning messages are displayed in the `Usage` page allowing the users to take any further required actions.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/llamb.md
# LLaMB
**`LLaMB - Large Language Model for Business`** is an exclusive product offering from the Avaamo Conversational AI Platform to harness the power of enterprise content coupled with Generative AI in your agents.
LLaMB is a new low-code framework for building powerful end-user generative AI agents in the enterprise safely, securely, and fast. LLaMB provides tools to eliminate hallucinations, integrate enterprise systems, and support any LLM ([Large Language Model](https://en.wikipedia.org/wiki/Large_language_model)) of your choice.
LLaMB utilizes LLM technology to offer inherently personalized and summarized results while maintaining the required level of security and compliance for enterprises. It is a practical and secure approach to deploying LLMs in the enterprise, thereby enhancing the knowledge search experience for both employees and customers.
Here's a quick sneak peek at LLaMB:
This article outlines the key features of LLaMB and the next steps to leverage LLaMB product offering in the Avaamo Conversational AI Platform.
Refer [LLaMB](https://docs.avaamo.com/user-guide/llamb), for detailed information.
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/login-to-avaamo-agent-assist.md
# Login to Avaamo Agent Assist
You can log into the Agent Assist widget using the agent's registered email address. These methods ensure secure access to the widget.
1. [Enterprise Login](#enterprise-login)
2. [Login with Email](#login-with-email)
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites.](https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/before-you-begin)
{% endhint %}
## Enterprise Login
1. Launch the widget and select `Enterprise Login`.
2. Enter the agent's registered email address in the field and click `Submit`. Ensure the email matches the one used during agent onboarding. Refer [Agent Assist account,](https://docs.avaamo.com/user-guide/avaamo-agent-assist/before-you-begin#agent-assist-account) for more information.
3. The system redirects the agent to the SAML/OAuth SSO login page, where the agent logs in using their enterprise credentials.
4. After logging in, the Agent Assist widget landing screen shows the last attended conversation, allowing the agent to resume or review it easily.
## Login with Email
1. After launching the widget, select `Login with Email`.
2. Enter the agents `email address` in the provided field. Click `Get OTP`. Ensure that the email address matches the one used during agent onboarding. Refer [Agent Assist account,](https://docs.avaamo.com/user-guide/avaamo-agent-assist/before-you-begin#agent-assist-account) for more information.
3. Agent receives an `One-Time Password (OTP)` in their email inbox.
4. Enter the OTP in the widget to log in. Click `Verify`
5. When logged in, the Agent Assist widget landing screen shows the last attended conversation, enabling agents to easily resume or review
## **How to Log Out**
To log out of the `Agent Assist` widget, click on the `Logout` button in the left-side navigation menu. After logging out, it redirects to the login screen, where agent can log in again if needed.
## **Widget Customizations**
**Can I collapse the widget?**\
Yes, an agent can collapse and reopen the widget at any time, and the state of the current call remains intact within the widget.
**Can I move the widget?**\
Yes, an agent can reposition the widget and icon by clicking and dragging to any location within the browser window.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/make-a-copy.md
# Make a copy
You can make a copy of your agent using the **Make a copy** option. When you copy an agent an exact clone of the agent is created.
{% hint style="info" %}
**Notes**:
* This option is available only when you have at-least edit permission on the agent.
* This option is available only in the Development stage of the agent life-cycle.
* When you "Make a copy" of an agent, the cloned or copied agent is independent and does not have any references to the skills from the original agent. All copies of the skills in the cloned agent are independent copies.
{% endhint %}

**Make a copy** feature is useful in parallel development, where multiple developers can work on a single agent simultaneously. Avaamo suggests the approach of each developer having their copy of the agent when they have to develop and collaborate on a single agent. See [Best practices - Parallel Development](https://docs.avaamo.com/user-guide/ref/best-practices-parallel-development), for more information.
### How does it work?

* In the **Agents** page, click three ellipse dots in the **Actions** column of the agent to view the extended menu and click **Make a Copy.**
* Click **OK** in the confirmation message.
* An exact copy of the agent with the name **"**Copy of <\>" is created in the **Agents** tab.
### What agent details are not copied?
The following lists the items or configurations that are not copied from the original (source) to the copied (target) agent:
* Channel configuration
* Permissions
* Notification settings and Personas
* Environment variables
* Details available in Debug, Test, Monitor, and Learning
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents.md
# Manage agents
- [Promote and pull updates](/user-guide/how-to/build-agents/manage-agents/promote-and-pull-updates.md)
- [Make a copy](/user-guide/how-to/build-agents/manage-agents/make-a-copy.md)
- [Export and import agents](/user-guide/how-to/build-agents/manage-agents/export-and-import-agents.md)
- [Activity monitor](/user-guide/how-to/build-agents/manage-agents/activity-monitor.md)
- [Other common actions](/user-guide/how-to/build-agents/manage-agents/other-common-actions.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1.md
# Build and manage Answers skill
- [Create Document Groups](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/create-document-groups.md): Categorize and manage your content using document groups.
- [Upload Content](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/add-document-or-url-1.md): Create a knowledge base by extracting content from PPTs, Docs, PDF, HTML, Excel or CSV files, or any externally accessible URL.
- [Tabular answering](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/tabular-answering.md)
- [Multilingual answering](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/multilingual-answering.md)
- [Content ingestion](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/content-ingestion.md)
- [View and edit knowledge](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/view-and-edit-knowledge.md): View the extracted content (sections, entities, acronyms, vocabulary) to fine-tune and edit the knowledge base.
- [Perform common actions](/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/perform-common-actions.md): Retrain, edit the uploaded documents or URLs, or delete the documents or URLs from the Answers skill.
---
# Source: https://docs.avaamo.com/user-guide/outreach/campaigns/manage-campaigns.md
# Manage campaigns
In the **Outreach ->** **Campaigns** tab, you can edit, delete, test, activate, and deactivate campaigns based on the role you have in the Campaign settings. See [Campaign settings](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions#campaign-settings), for more information.
### Search campaign
In the **Outreach -> Campaigns** tab, start entering the text in the **Search** text box and press the **Enter** key or click the **Search** icon. The results are filtered and displayed based on the text entered in the **Search** text box.
You can also search for the active and inactive campaigns from the dropdown next to the **Create new campaign** button.
### View campaign
In the **Outreach ->** **Campaigns** page, click three ellipse dots in the **Actions** column of the campaign to view the extended menu and click **View** to view the current campaign details.
### Edit campaign
* In the **Outreach ->** **Campaigns** page, click three ellipse dots in the **Actions** column of the campaign to view the extended menu and click **Edit.**
* The **Edit campaign** pop-up window is displayed with all the campaign details. You can edit the details and click **Update** to save the details.
### Delete campaign
* In the **Outreach ->** **Campaigns** tab, click three ellipse dots in the **Actions** column of the campaign to view the extended menu and click **Delete.**
* Click **Delete** in the confirmation message to delete the campaign.
{% hint style="info" %}
**Note**: It is recommended to use caution before deleting a campaign as the delete action cannot be undone.
{% endhint %}
### Test your campaign
This feature allows you to test the campaign with a list of a few test recipients before launching the campaign to a wider audience. See [Test campaign](https://docs.avaamo.com/user-guide/outreach/campaigns/test-campaign), for more information.
### Activate and Deactivate campaign
Deactivating a campaign is useful when you wish to retain the settings of the campaign and wish to not use it or activate it at the moment.
* In the **Outreach ->** **Campaigns** tab, click three ellipse dots in the **Actions** column of the campaign to view the extended menu and click **Deactivate.** Note that this option is displayed only for active campaigns. If a campaign is already deactivated, then you can use the **Activate** option to bring it back to an active state based on your requirement.
* Click **Deactivate** in the confirmation message to deactivate the agent.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings.md
# Manage channel settings
This article lists certain common actions you can perform after configuring a channel:
* [View and edit channel settings](#view-and-edit)
* [Disconnect a channel](#disconnect)
* [Delete a channel](#delete)
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* After creating and building an agent, you can deploy the agent to a channel. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing
{% endhint %}
In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
### View and Edit
The following steps describe how to view and edit channel settings:
1. On the **Channels** page, click **View** on the channel you wish to edit.
2. Channel Settings as configured are displayed. Edit the channel settings as required and click **Save** to save the channel settings.
### Disconnect
The following steps describe how to disconnect an agent deployed on a channel:
* On the Channels page, click **Disconnect** in the Channel.
* An alert message is displayed. Click **OK**.
* The agent is disconnected and no longer deployed on the corresponding channel. However, note that the configured channel is still available on the Channels page and you can click **Connect** to re-deploy the agent back on the corresponding channel if required.
{% hint style="info" %}
**Note**: Disconnecting the channel also invalidates its end-point URL. Hence, disconnecting a channel must be done with caution, as the end-point URL if used in any other integrations also gets invalidated.
{% endhint %}
### Delete
The following steps describe how to delete custom channel settings:
* On the Channels page, click **Delete** in the Custom Channel.
* An alert message is displayed. Click **OK**.
* The configured channel is no longer available on the **Channels** page; hence, the agent is no longer deployed on the corresponding channel.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/manage-entity-type.md
# Manage entity type
In the **Entities** page, you can [edit](#edit-entity-type) or [delete](#delete-entity-type) an entity type, as required.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add values to entity types immediately after creating an entity type. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information.
* If you wish to edit an entity type in an agent, then:
* Navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
* In the **Agent** page, navigate to the **Entity types** option in the left navigation menu and open the required entity type.
{% endhint %}
###
### Edit entity type

* In the **Entity type** page, click the **edit** icon next to the entity type name at the top.
* In the **Entity type** pop-up, edit the details as required and click **Update**. See **Parameters** table in [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information.
### Delete entity type

* In the **Entities** page, click **Delete** in the **Actions** columns for the entity type, you wish to delete.
* Click **OK** in the confirmation message. The entity type is deleted in the **Entities** page.
{% hint style="info" %}
**Notes**:
* You can delete an entity only if the entity is not used in any agent skills.
* If you wish to delete a parent entity type, then you must first delete all the child entity types it is linked to and then delete the parent entity type.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/manage-entity-types.md
# Manage entity values
In the **Entities** page, you can manage entity values and its alternate values for an entity type, using the following actions:
* [Add](#add)
* [Edit](#edit)
* [Delete](#delete)
* [Export](#export)
* [Import](#import)

{% hint style="success" %}
**Key points**:
* You can also right-click and open the entity types in a new browser tab or window. This reduces the number of clicks and helps you to work with your skills parallelly as you view or modify the entity types.
* There is no limit on the number of values in an entity type. However, you can manage only upto 10,000 entity values in the UI. If you have an entity with more than 10,000 values, then it is recommended to export entity values to a CSV file from the UI, perform operations (edit or add values) in the exported file and then import the entity values back to the agent.
{% endhint %}
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can add values to entity types immediately after creating an entity type. See [Add new entity type](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/add-new-entity-type), for more information.
* If you wish to edit an entity type in an agent, then:
* Navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing.
* In the **Agent** page, navigate to the **Entity types** option in the left navigation menu. Search and open the required entity type. See [Search entity types](#search-entity-types), for more information.
{% endhint %}
## Add
* In the **Entities** page, enter the entity value and click **Add.**
* For each entity value, enter an alternate value in the **Alternate value** text box and click **Add**. **Examples**: San Francisco: SF and New York: NYC | The Big Apple.
* If you have selected a parent entity type, then specify the corresponding parent entity value.
* If you are creating an entity type with a regular expression, then specify the required regular expression and check the **Regular expression** option.
### Regex entity (Key-points)
Note the following key points on regex entities:
* Identify a pattern for your regular expression that has defined boundaries. If a regular expression pattern is very generic without any boundaries, then it can result in unintended entity extraction from the user query. Hence, this can result in incorrect matches. Few examples of regular expression entity without boundaries:
* A regex pattern that matches any word with 5 letters.
* A regex pattern that matches any set of characters with hyphens.
* Verify if the regular expression is valid.
* Check if the regular expression contains any special character in your regex.
* Regex entity is extracted only from the first capture group as an entity value. Example:
```
Pattern: more\sthan\s(\d+)\s*(?:sq ft|square feet|sqft)
Input String: villas more than 3400 sq ft
Full Match: more than 3400 sq ft
Group 1: 3400
Extracted entity: 3400
```
* Multiple occurrences of the same is also extracted from the training sentences.
* If there is more than one regex in the entity and if more than one regex pattern matches, then the first matched pattern is considered.
* Regex entity values are case-insensitive.
* Only those regex patterns that work with JavaScript is supported.
* Use the non-capturing group (?:pattern) when you need to repeat a grouping but do not need to use the captured value that comes from a traditional (capturing) group. Example:
```
Scenario: To match any number followed by Rs.
Here since the purpose is to capture number, you can put
"Rs" in a non-capturing group
Suggested Pattern: (\d+)\s*(?:Rs)
```
* Avoid catastrophic backtracking. See [Exponential backtracking](https://en.wikipedia.org/wiki/ReDoS#Exponential_backtracking), for more information.
## Edit
In the **Entities** page, click the entity value you wish to edit. Update the entity value, remove or add alternate values as required.
## Delete
You can delete an entity value from an entity type using the delete icon next to the entity value row. Alternatively, you can delete all the entity values of an entity type in the agent, if they are no longer required.
* In the **Entities** page, click **Clear all** option.
* An alert message is displayed. Click **Clear** in the alert message to clear all the entities.
* Click **Save.**
## Export and Import entity values

### Export
* In the **Entities** page, click the **Export** option.
* A CSV file is downloaded with entity values and its alternate values. You can edit this CSV file and import the values back to the platform.
**Example 1**: Entity with values (No parent entity)
**types**
| value | alternative-1 | alternative-2 |
| ------- | -------------- | ------------- |
| non-veg | non-vegetarian | |
| veg | vegan | vegetarian |
**Example 2**: Entity with values linked to the parent entity, Here, pizza\_types is a parent entity type of pizza\_toppings.
**toppings**
| types | value |
| ------- | --------- |
| non-veg | chicken |
| veg | onion |
| non-veg | pepperoni |
| veg | tomato |
### Import
* In the **Entities** page, click the **Import values** option.
* In the **Import** pop-up, click **Browse** to browse a CSV file with entity values. In the CSV file, the first column contains the name of the entity value and the consecutive columns include alternate values. You can also click **Download Sample CSV**, for a sample file.
* Click **Submit** to load all the entities to the agent. Import automatically saves the entity values.
{% hint style="info" %}
**Notes**:
* You cannot import a duplicate entity value. An error message is displayed, when you try to save the entity type.
* When you import entity values to an entity type in an agent, the entity type key must match. Additionally, when you import entity values with a parent entity type, then the entity type key and all the parent entity values must match.
* You can import upto 100000 entity values. If you wish to import more than 100000 entity values, then contact Avaamo Support.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/manage-member-agents.md
# Manage member agents
In the **Agents** -> **Member agents** section, you can perform the following actions for each Member agent as per your requirement:
* [View member agent](#view-member-agent)
* [View member details](#view-member-details)
* [Delete](#delete-member-agent)
* [Disable](#disable-member-agent)

{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can perform all these actions immediately after adding member agents to the Universal agent. See [Create universal agent](https://docs.avaamo.com/user-guide/how-to/build-agents/overview-get-started#create-a-universal-agent) and [Add member agents](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/add-member-agents), for more information.
* If you wish to edit an agent, then:
* In the Avaamo Platform UI, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents/other-common-actions#search-agents), for more information.
* Click **Edit** to unlock the agent before editing and publishing.
{% endhint %}
### View member agent
Since a Universal agent is a "group of individual member agents", during Universal agent development it is helpful if the user can view the member agent implementation.
{% hint style="info" %}
**Note**: Viewing the member agent is based on the permissions provided to the user at the member agent level. See[ roles and permission](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions#agent-permissions) for information on permissions.
{% endhint %}
1. Click the 3 dots in the box of the member agent that you wish to open.
2. Select **View member agent**. The member agent opens in a separate tab if the user has sufficient permissions, else the unauthorized message is displayed.
### View member details
The basic details of the member agent such as UUID, owner, and member agent access token can be viewed:
1. Click the 3 dots in the box of the member agent - whose basic details you wish to view.
2. Select **View member details**. A pop-up box with the details of the member agent is displayed.

### Delete member agent
You can delete a member agent from the Universal agent if it is no longer required.
* Click the 3 dots in the box of the member agent that you wish to delete.
* Select **Delete** and provide confirmation in the pop-up**.** The member agent is deleted from the Universal agent. To add the deleted member agent back, you must provide the member agent's UUID and access token. See [add member agents](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/add-member-agents) for more information.
### Disable member agent
You can disable a member agent from the Universal agent as required. When you disable a member agent, the Universal agent does not use the member agent to respond to queries. When any user query is posted to the Universal agent with a disabled member agent, a corresponding error message is displayed in the JS error indicating the same. See [JS errors](https://docs.avaamo.com/user-guide/how-to/debug-agents#using-js-errors), for more information.
**To disable a member agent**:
* Click the 3 dots in the box of the member agent that you wish to disable.
* Select **Disable** and provide confirmation in the pop-up**.** The member agent is disabled from the Universal agent. You can always enable a disabled member agent at any time by clicking the 3 dots in the box of the member agent and selecting **Enable.**
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-platform-settings.md
# Manage settings
- [Users & Groups](/user-guide/how-to/manage-platform-settings/users-and-permissions.md)
- [Users](/user-guide/how-to/manage-platform-settings/users-and-permissions/users.md)
- [Groups](/user-guide/how-to/manage-platform-settings/users-and-permissions/groups.md)
- [Usage Reports](/user-guide/how-to/manage-platform-settings/usage-reports.md)
- [LLaMB Usage](/user-guide/how-to/manage-platform-settings/usage-reports/llamb-usage.md)
- [SMS Usage](/user-guide/how-to/manage-platform-settings/usage-reports/sms-usage.md)
- [Voice Usage](/user-guide/how-to/manage-platform-settings/usage-reports/voice-usage.md)
- [Privacy](/user-guide/how-to/manage-platform-settings/privacy.md)
- [Active Directory (AD) integrations - Identity provider](/user-guide/how-to/manage-platform-settings/identity-providers.md)
- [SAML Support- G Suite](/user-guide/how-to/manage-platform-settings/identity-providers/saml-support-g-suite.md)
- [SAML Support - MS Azure](/user-guide/how-to/manage-platform-settings/identity-providers/saml-support-ms-azure.md)
- [SAML Support - Okta](/user-guide/how-to/manage-platform-settings/identity-providers/saml-support-okta.md)
- [Security policy](/user-guide/how-to/manage-platform-settings/security-policy.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill.md
# Manage skills
- [Import and Re-import skills](/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills.md): Publish or re-import skills to agent from skill store
- [Publish and Re-publish skills](/user-guide/how-to/build-skills/manage-skill/publish-skill-to-skills-store.md): Publish or re-publish skills from agent to skill store
- [Other common actions](/user-guide/how-to/build-skills/manage-skill/perform-common-actions.md): Learn how-to enable, disable, and delete agent skills.
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-skills-store.md
# Manage skill store
Typically, an enterprise comprises of multiple agents, where each agent is a product on its own that helps users accomplish certain tasks. **Example**: Consider a finance company that handles three products - mutual funds, insurance, and home loans. Correspondingly, for each of these products company can build agents - "Mutual Fund agent", "Insurance Policy agent", and a "Home Loan agent".
Based on the business requirements, you can build different types of skills in each of your agents. Frequently, the functionality required for some of the skills across agents can be similar. The skills developed in one agent can be re-used in other agents within a company to accelerate the agent development process. Such re-usable skills can be published to **skill store**. See [Publish to skill store](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/publish-skill-to-skills-store), for more information. Once published, you can re-use the skills by importing the skill from skill store to the agent for quickly developing agents, instead of building skills from scratch. See[ Import skill from skill store](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills), for more information.
**Example**: Considering the finance company agents - "Mutual Fund agent", "Insurance Policy agent", and a "Home Loan agent", paying a premium requires a similar set of training data, entities, and JavaScript code across all these agents. You can develop a skill "Premium Payment" once in "Mutual Fund agent", publish to skill store, import to "Insurance Policy agent" or "Home Loan agent", and with minimal or no changes re-use in the other agents.
The following is an illustration of how publishing skills and importing skills work in the Avaamo Platform:

Hence, **skill store** is a centralized repository of all the published skills across different categories. In the Avaamo Platform UI, click the **Skill store** option in the top menu to view all skills in skill store:

## Skills in skill store
There are two groups of skills in the skill store:
* **Avaamo skills**: Collection of various in-built skills across certain pre-defined categories already available in the skill store such as Travel, Healthcare, and ServiceDesk. These are pre-trained skills curated and managed by Avaamo. These skills are not specific to a company and available to all the users using the Avaamo Platform.

* **Company skills**: When you are developing an agent, based on the functionality of the skill, you can choose to publish the skill to the skill store. These skills are specific to your company and available only to the users within the company.

The following table summarizes the key differences between Avaamo skills and Company skills:
| Avaamo skills | Company skills |
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Collection of various in-built skills already available in the skill store across certain pre-defined categories. | Collection of all published skills available in your company skills across certain user-defined categories |
| Curated and managed by Avaamo | Curated and managed by people within your company |
| Cannot publish skills to Avaamo skill store | People within your company with appropriate roles and permissions can publish to the company skill store. See [Publish to skill store](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/publish-skill-to-skills-store), for more information. |
|
Not specific to a company and available to all the users using the Avaamo Platform.
|
Specific to a company and available only to the users within the company.
|
{% hint style="success" %}
**Key Points**:
* Before publishing skills to skill store, consider editing the category name in your **Company skills** based on your business model. Click the category in the **Company skills** to edit the category name. See [Publish to skill store](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/publish-skill-to-skills-store), for more information.
* Click **+ New category** to add additional categories.
* Only users with the **Settings** role can edit the category name. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
{% endhint %}
Click any skill in the skill store, to view the entities, JavaScript files, and document links included in the skill at the time of publishing the skill.
## Search skills in skill store
You can search for skills in the Skill store by using the skill name or skill description provided at the time of publishing the skill. Additionally, each published skill also includes a skill version and sample training data of the skill that helps to identify the purpose of the skill.

{% hint style="success" %}
**Key Points**:
* To aid better search, it is recommended to provide the skill name, description, and intents in a short descriptive way to completely understand what the skill does. This helps to easily search for the required skill in the skill store. See Design skills for more information on some examples and best practices.
* Skill names are not unique.
{% endhint %}
* In the Avaamo Platform UI, click the **Skill store** option in the top menu.
* Navigate to the specific category in **Avaamo skills** or **Company skills** in the left navigation menu.
* By default, all the skills in the skill store within a category are displayed in descending order of the last updated timestamp.
* Search for specific skills in the skill store using the skill name or skill description. All the skills in the skill store that contains the search keyword in either the skill name or skill description are displayed.
## Delete skill from skill store
If a skill is no longer required in the skill store, you can delete the skill from the skill store using the **Delete** option and later publish the skill again from the agent as required.
{% hint style="info" %}
**Note:** Only users with the **Settings** role can delete the skill from the Skill store. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
{% endhint %}
## Frequently asked questions (FAQs)
The following lists a few commonly asked FAQs about skill store, import, and publish:
### 1. Can all types of skills be published?
Yes, all skills - Dialog, Dynamic Q\&A, Smalltalk, and Answers, can be published to the Skill store.
### 2. I have made some changes to my skill. What happens when I re-import it?
When you re-import a skill from the skill store, the skill in your agent is completely replaced with the skill from the skill store, except for duplicate entities and JS. Hence, all your local skills changes are overwritten. See [Re-import skill](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills), for more information.
### 3. How can I preserve the local changes in imported skills?
Currently, you can use the following methods to preserve your local changes:
* Use **Make a copy** to create a duplicate copy of your agent. See [Make a copy](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/make-a-copy), for more information.
* Use the **Backup & Export** option to create a backup copy of your agent in your local system. Later, you can use the exported copy and **import** the same to any existing agent in any account.
See [Export and import agents](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/export-and-import-agents), for more information.
You can use the skills from the copied agent or the imported agent to manually compare and merge.
### 4. Can I merge my local skill changes with an updated version of the skill in the skill store?
Currently, you cannot merge the local skill changes with the updated version of the skill in the skill store. When you re-import a skill from the skill store, the skill in your agent is completely replaced with the skill from the skill store, except for duplicate entities and JS. Hence, all your local skills changes are overwritten. See [Re-import skill](https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/import-and-re-import-skills), for more information.
### 5. Can I publish a skill that was imported from the skill store?
Yes. If you have appropriate permissions, you can publish a skill imported from the skill store. See [Roles and permissions](applewebdata://CC4E2907-AF33-493E-836D-F82990C2FC5E/@avaamo/s/avaamo/~/drafts/-M5k7GHD45QIIzLybGMd/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
### 6. Can I publish multiple versions of skills to the skill store?
No. Only one version of skill published from an agent is available in the skill store.
### 7. Are there any best practices for publishing skills to skill store?
Yes, there are a few best practices that you can follow for publishing a skill to skill store. See [Best practices](https://docs.avaamo.com/user-guide/build-skills/manage-skill/publish-skill-to-skills-store#best-practices), to learn more.
### 8. Can I revert a published skill to the skill store?
You cannot revert a published skill in the skill store. However, a user with the **Settings** role can delete the skill from the skill store and the skill can be published again. See [Delete skill from skill store](#delete-skill-from-skill-store), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/manage-web-channel.md
# Manage web channel
After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirement. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
You can also deploy your agent through multiple web channels simultaneously. See [Deploy in multiple web channel instances](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/deploy-and-test-web-channel), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/mask-message-api.md
# Mask message API
### Mask user messages and agent responses
`PUT` `https://cx.avaamo.com/dashboard/conversations/{{conversation_uuid}}/mask_messages.json`
Masks the user messages in the specified user conversation (for new conversation) from the beginning till the date as per the agent masking configuration details. To mask Personally Identifiable Information (PII) within a specific time range, you can include the `since_timetoken` and `timetoken` parameters in the API request.
Masks the agent's response in the specified user conversation from the date masking is enabled for the response node.
#### Path Parameters
Name Type Description conversation_uuid* String User conversation identifier. You can get the conversation uuid from the Conversation History URL. You can get the conversation identifier from the Conversation history URL or from the Get Messages API.
#### Query Parameters
Name Type Description since_timetoken number Timestamp from which the messages should be masked. Specify in UNIX Epoch Timestamp in seconds. timetoken number Timestamp until which the messages should be masked. Specify in UNIX Epoch Timestamp in seconds.
{% hint style="info" %}
**Note**:
Users can also pass either or both parameters (`since_timetoken` or `timetoken`).
* If only `since_timetoken` is specified, the system uses the latest message's timestamp as the `timetoken`.
* If only `timetoken` is provided, the system uses the agent creation timestamp as the `since_timetoken`.
{% endhint %}
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Access-Token\* | string | The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least edit permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"success": true
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**The key points**:
* See [Mask response in Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings), for more information on how to enable masking for a response node.
* When you enable masking for a node with file masking, all the uploaded files are physically deleted from the Platform and cannot be accessed.
* You can check the Conversation history to view the masked messages. See [Conversation history](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents#using-conversation-history), for more information.
* See [Information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking), for more details.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request PUT 'https://cx.avaamo.com/dashboard/conversations/xxxxxxae172c539696ff6f4f67xxxxxx/mask_messages.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://cx.avaamo.com/dashboard/conversations/xxxxxxae172c539696ff6f4f67xxxxxx/mask_messages.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
#### Examples
The following table lists a sample use case with query parameters:
Use-case Query Parameter Mask messages within a specified period since_timetoken: Specify the starting timestamp in seconds in UNIX Epoch format.
timetoken : Specify the ending timestamp in seconds in UNIX Epoch format.
Example : https://cx.avaamo.com/dashboard/conversations/{{conversation_uuid}}/mask_messages.json?since_timetoken=1720604526&timetoken=1736502126
---
# Source: https://docs.avaamo.com/user-guide/intelligent-virtual-assistant-platform/master.md
# Intelligent Virtual Assistant Platform
**The Avaamo IVA Platform** is a cloud platform that automates the Conversational AI lifecycle. It provides an end-to-end framework for rapidly designing, developing, testing, and deploying enterprise agents into different applications or channels. Learn how to use the Avaamo Platform with our Quick Starts, Tutorials, and Samples.
New to Avaamo Conversational AI Platform? Get an understanding of the platform and a quick overview of important concepts.
* [About Avaamo Conversational AI Platform](https://docs.avaamo.com/user-guide/overview-and-concepts/about-avaamo-platform)
* [Key Concepts ](https://docs.avaamo.com/user-guide/overview-and-concepts/quick-summary)
### Quick Start Steps
Start building agents using quick tutorials and quick start. Get an overview of the Avaamo Dashboard and some key concepts:
### Next Steps
Get an in-depth step-by-step understanding of how-to:
---
# Source: https://docs.avaamo.com/user-guide/recent-releases/release-notes-v9.0.0/meet-aura-your-smart-support-agent.md
# Meet "Aura" - your smart support agent
The `Aura` is an AI-powered assistant designed to deliver immediate, accurate, and contextual first-level support.
It empowers agent developers and business teams by providing instant resolutions to common queries, significantly reducing dependency on other teams.
Powered by [LLaMB](https://docs.avaamo.com/user-guide/llamb/get-started), Aura taps into Avaamo’s documentation and internal knowledge base to bring you the right information quickly. By leveraging the latest advancements in natural language processing and contextual AI, the Aura ensures 24/7 availability and high accuracy across a wide range of support scenarios.
Here's a quick sneak peek at the Aura:
### Key objectives
* **Enhance self-service experience:** Aura agent enables users to resolve their queries independently, fostering confidence and improving overall satisfaction.
* **Accelerate resolution time:** Aura agent helps users find solutions quickly without waiting for human intervention by providing real-time, context-aware answers.
* **Improve Operational Efficiency:** Solution engineers can focus on complex cases as Aura efficiently manages repetitive and straightforward inquiries.
### Aura for everyone
* **Developers:** Instantly access documentation, integration guides, and troubleshooting steps while building or maintaining agents.
* **Business Teams:** Obtain quick clarifications on agent functionalities, configurations, and operational best practices.
* **Solution engineers:** Retrieve validated solutions to frequent queries, reducing resolution time for recurring issues.
### Conversation with Aura
Aura is your built-in AI assistant, accessible to all logged-in users across the platform. No matter where you are in the dashboard, just click the `Aura` icon to open the chat window and start interacting.\
Use Aura to get instant help, find answers to your questions, or receive guidance—right when you need it.
**Example questions you can ask Aura:**
* *What channels can LLaMB be deployed on?*
* *How do I get my SharePoint content into Avaamo LLaMB ?*
* *If the content is updated in ServiceNow after ingestion in Avaamo LLaMB, then does it automatically update in the agent?*
### How to use Aura
1. Navigate to the **Avaamo Dashboard**.
2. Locate and click the **Aura logo** on the top sidebar. This appears on any section of the Avaamo dashboard.
3. It redirects you to Aura's landing page, which displays a set of predefined questions.
3. To ask a question, type your query in the input field at the bottom of the page and press **Enter** or click the **Send** button.
4. Aura responds with an answer relevant to your query.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/message-api.md
# Message API
## Post agent messages
`POST` `https://cx.avaamo.com/bots_api/v1/messages.json`
Post messages to the agent. Typically, this API is used when you wish to post agent responses for notifications, summary, and important product or service announcements.
#### Headers
Name Type Description access-token* string The user access token. You can get the user access token from the Settings -> Users page. See Users or Groups , for more information
User must have at least edit permission on the agent. See Permissions , for more information
#### Request Body
Name Type Description message* string The message you wish to post to the agent. This can be any message as supported by the channel. conversation -> uuid* string Unique identifier of the conversation for which the message is posted. You can get the conversation uuid from the Conversation History URL bot_id* integer Unique identifier of the agent. You can get the agent identifier from the agent URL. force_locale string The locale used to override the locale of the agent.
{% tabs %}
{% tab title="200 " %}
```javascript
{
"success": true
}
```
{% endtab %}
{% endtabs %}
{% hint style="success" %}
**Key point**: See [Supported agent responses](applewebdata://E3416F10-9D83-4DB7-B173-CC5D7BD95AFE/@avaamo/s/avaamo/~/drafts/-M8iZKLHjv_ONgUq4a3a/v/dev/how-to/build-agents/configure-agents/deploy/custom-channel#supported-agent-responses) in the Custom channel, for more information on WhatsApp-compatible responses.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request POST 'https://cx.avaamo.com/bots_api/v1/messages.json' \
--header 'Content-Type: application/json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: text/plain' \
--data-raw '{
"message": "Sample message",
"conversation": {
"uuid": "xxxxxx8253e65aa02bfd02fd86xxxxxx"
},
"bot_id": 2xxx,
"force_locale": "en"
}'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://cx.avaamo.com/bots_api/v1/messages.json',
'headers': {
'Content-Type': ['application/json', 'text/plain'],
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx'
},
body: "{\n \"message\": \"Sample message\",\n \"conversation\": {\n \"uuid\": \"xxxxxx8253e65aa02bfd02fd86xxxxxx\"\n },\n \"bot_id\": 2xxx,\n \"force_locale\": \"en\"\n}"
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Examples
#### **Scenario 1**: Post a **simple message**
**Request**: The following is a sample JSON request for posting a simple message to the agent:
```yaml
{
"message": "Sample message",
"conversation": {
"uuid": "xxxxxx8253e65aa02bfd02fd86xxxxxx"
},
"bot_id": 2xxx,
"force_locale": "en"
}
```
The message as sent in the request is posted to the agent. You can also view the same message in the conversation for which the message is posted:
#### 
#### **Scenario 2**: Post a list of promotional items
**Request**: The following is a sample JSON request for posting a list of promotional items to the agent:
```yaml
{
"message": {
"list_view": {
"top_element_style": "compact",
"items": [
{
"title": "Coke",
"subtitle": "All Chilled",
"links": [
{
"type": "post_message",
"title": "Get a pack of 5",
"value": "coke"
}
]
},
{
"title": "Coffee",
"subtitle": "Cold",
"links": [
{
"type": "post_message",
"title": "Buy one get one",
"content": "coffee"
}
]
}
]
}
},
"conversation": {
"uuid": "1faa40c8253e65aa02bfd02fd8643d35"
},
"bot_id": 2154,
"force_locale": "en"
}
```
The following response is displayed in the agent:

**Scenario 3**: Post a feedback message
**Request**: The following is a sample JSON request for posting a feedback message to the agent:
```yaml
{
"message": {
"card": {
"inputs": [
{
"title": "How was our service?",
"type": "data_capture",
"uuid": "comments"
}
]
}
},
"conversation": {
"uuid": "xxxxxx8253e65aa02bfd02fd86xxxxxx"
},
"bot_id": 2xxx,
"force_locale": "en"
}
```
## Get agent messages
`GET` `https://cx.avaamo.com/v1/messages.json`
Gets all messages from the agent. This API just gets the latest messages from the agent and not specific to any user conversation.
#### Query Parameters
Name Type Description device_info boolean Indicates if the device details must be returned in the response or not. The default value is false. since_timetoken number Timestamp from which the records are fetched. If you specify timetoken and not since_timetoken, then the latest 5 entries up to the specified timetoken are fetched. Specify in UNIX Epoch Timestamp in microseconds. timetoken number Timestamp until which the records are fetched. The default value is the current timestamp. Specify in UNIX Epoch Timestamp in microseconds. page integer Page from which the entries must be fetched.
The default value is 1.
per_page integer The number of entries fetched per page.
The default value is 25.
Maximum value: 100
#### Headers
Name Type Description access-token* string The agent access token. You can get the agent access token from the Agent -> Settings page. See Agent Authentication Keys , for more information
{% tabs %}
{% tab title="200 Consider that you wish to get the latest message from the agent. Use GET method and specify the URL . The following is a sample JSON response returned:" %}
```javascript
{
"current_page": 1,
"per_page": 1,
"total_entries": 4371,
"total_pages": 4371,
"time_token": 1569219802.3621287,
"entries": [
{
"uuid": "dc3c4ebd-e0b0-4bd9-a79d-09114e286358",
"content": "Hi, your order number is V5678.",
"content_type": "text",
"created_at": 1569216722.51246,
"user": {
"first_name": "Mac Pizza Agent",
"last_name": "",
"layer_id": "fe8ee61c-f039-4cdc-8986-5bebec9edf08",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 5713616
},
"timetoken": 1569216722502878,
"external_source": null,
"device_uuid": "b05fde04-2242-419b-bf12-49f79e5f9d74",
"request_message_uuid": "14b92488-a3b4-4a10-9384-dd80f425f4f3",
"sequence": "1/1",
"custom_properties": {},
"agent_message_uuid": null,
"read_acks": [
{
"read_at": 1569216722,
"user": {
"first_name": "John",
"last_name": "C",
"layer_id": "dashboard_admin_test_user_696",
"email": null,
"phone": null,
"avatar": false,
"avatar_updated_at": null,
"avaamo_id": 5713625
}
}
],
"attachments": [],
"conversation": {
"uuid": "1faa40c8253e65aa02bfd02fd8643d35",
"mode": false,
"display_name": "Mac Pizza Agent,John",
"locale": "en-GB"
}
}
]
}
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/v1/messages.json?per_page=1' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/v1/messages.json?per_page=1',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the agent messages. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages. Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp entries Indicates an array of messages fetched from the agent. The number of entries in the array = Number specified in the per_page parameter. JSON key-value pairs
#### **entries**
Indicates an array of messages fetched from the agent. Each array contains the following attributes:
Attribute Description Type uuid Indicates a unique identifier of the message. String content Indicates the content of the message. String content_type Indicates the type of content such as text, ListView, card, quick_reply. String created_at Indicates the timestamp of when the message was created in seconds. UNIX epoch timestamp user Indicates the details of the user interacting with the agent. See User details , for more information. JSON key-value pairs timetoken Indicates the created timestamp of the message in milliseconds. UNIX epoch timestamp device_uuid Indicates a unique identifier of the device from which the agent is being used. String request_message_uuid Indicates a unique identifier of the request message. String sequence Indicates the sequence of the agent response message. There can be multiple responses for a user query, each identified with the request_message_uuid and sequence. Note that the request_message_uuid is the same for each agent response. <<message_sequence>>/<<total message> custom_properties Indicates any additional user properties in the fetched message.
Example :
"custom_properties": {
"employee_id":12345,
"dept": "quality"
},
JSON key-value pairs read_acks Indicates the details of when the message was read and acknowledged.
read_at : Indicates the read timestamp of the message in UNIX epoch format.user : Indicates the details of the user who acknowledged the message. An array of JSON key-value pairs attachments Indicates an array of attachments that is fetched from the agent message. JSON key-value pairs conversation Indicates the conversation details of the message:
uuid : Indicates a unique identifier of the conversation.display_name : Indicates display name of the conversation in the following format: <<Agent Display Name>>, <<User First Name>>.locale : Indicates the locale used in the agent conversation.JSON key-value pairs
#### User details
The following user details are available in each message response of the Get Message API:
Attribute Description Type phone Indicates an array of phone numbers of the user interacting with the agent. An array of JSON key-value pairs last_name Indicates the last name of the user interacting with the agent. String first_name Indicates the first name of the user interacting with the agent. String email Indicates the email of the user interacting with the agent. String layer_id Indicates an internal unique user identifier used by the Avaamo Platform. String avaamo_id Indicates the unique identifier of the user interacting with the agent. You can use this user identifier to further get custom properties, if any, from the agent. See Custom properties API , for more information. Integer user_agent, os_name, zone_offset,
utc_offset, time_zone
Indicates the device details from where the agent is accessed.
Note that the device details are tracked at the user level and not at the message level. So, if the same user is accessing the agent from different devices, then the latest device details is returned in the messages.
The device details are returned only when the device_info = true in the GET message request.
user_agent : Indicates the browser’s user agent, applicable only for the web channel.os_name : Indicates the operating system of the device with which the user interacted with the agent.zone_offset : Indicates the time zone offset from GMT for the user.utc_offset : Indicates the time zone offset from UTC for the user.time_zone : Indicates the time zone of the user who accessed the agent.JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get the latest message from the agent per_page : Specify 1 to get the latest message.
Example : https://cx.avaamo.com/v1/messages.json?per_page=1
Get messages from the agent within a specified period since_timetoken : Specify the "from" timestamp in epoch format such as 1569229247677821
timetoken : Specify the "to" timestamp in epoch format such as 1569229251418739.
Example : https://cx.avaamo.com/v1/messages.json?since_timetoken=1569229247677821&timetoken=1569229251418739
Get messages from the agent using pagination page : Specify the page from which you wish to fetch records.
per_page : Specify the number of entries per page. y default, the value is 5.
Example : https://cx.avaamo.com/v1/messages.json?page=5&per_page=2
Get the latest message with device details from agent per_page : Specify 1 to get the latest message.
device_info : Set to true
Example : https://cx.avaamo.com/v1/messages.json?per_page=1&device_info=true
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/message-insights.md
# Message insights
## Get query insights by message ID
`GET` `https://cx.avaamo.com/api/v1/agents/{{agent_id}}/query_insights/{{message_id}}.json`
Get a closer look at the insights of the message.
#### Path Parameters
Name Type Description agent_id* integer Agent identifier. You can get the agent identifier from the agent URL. message_id* alphanumeric Message identifier. You can get the message identifier from any other API response. For example, Message UUID in the custom channel response.
#### Headers
Name Type Description access-token* string User access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information
{% tabs %}
{% tab title="200 " %}
{% code overflow="wrap" %}
```json
{
"insight": {
"intent_type": "INLINE::INTENT",
"skill_name": "Macpizza Order",
"skill_key": "macpizza_order",
"intent_name": "Macpizza Order",
"intent_key": "pizza_toppings",
"node_key": "macpizza_order.pizza_toppings",
"original_text": "I want to order veg cheese pizza",
"document": "I want to order veg cheese pizza",
"entities": [
{
"entity": "pizza_toppings",
"entity_type": "pizza_toppings",
"entity_value": "cheese",
"domain_key": "bot_inline_domain_bee25dca-3b9f-46eb-a456",
"value": "cheese",
"current_value": "cheese",
"index": 20,
"parent_entity_key": "pizza_types",
"custom_entity_type": true
}
],
"negation": false,
"sentiment": "neutral",
"tone": "",
"detected_language": "English(en-US)",
"second_best_result": null,
"matching_document": "I want to order veg cheese pizza"
}
}
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location 'https://cx.avaamo.com/api/v1/agents/30xxx/query_insights/77851a10-xxxx-xxxx-xxxx-a1c16f4904ad.json' \
--header 'access-token: 8cexxxxxxxxxxxxxxx47ccd9e60f3bd5'
```
{% endcode %}
{% endtab %}
{% tab title="node.js" %}
{% code overflow="wrap" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v1/agents/30xxx/query_insights/777851a10-xxxx-xxxx-xxxx-a1c16f4904ad.json',
'headers': {
'access-token': '8cexxxxxxxxxxxxxxx47ccd9e60f3bd5'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
```json
{
"insight": {
"intent_type": "INLINE::INTENT",
"skill_name": "Macpizza Order",
"skill_key": "macpizza_order",
"intent_name": "Macpizza Order",
"intent_key": "pizza_toppings",
"node_key": "macpizza_order.pizza_toppings",
"original_text": "I want to order veg cheese pizza",
"document": "I want to order veg cheese pizza",
"entities": [
{
"entity": "pizza_toppings",
"entity_type": "pizza_toppings",
"entity_value": "cheese",
"domain_key": "bot_inline_domain_bee25dca-3b9f-46eb-a456",
"value": "cheese",
"current_value": "cheese",
"index": 20,
"parent_entity_key": "pizza_types",
"custom_entity_type": true
}
],
"negation": false,
"sentiment": "neutral",
"tone": "",
"detected_language": "English(en-US)",
"second_best_result": null,
"matching_document": "I want to order veg cheese pizza"
}
}
```
Attribute Description Type insight See insights , for more information on each attribute. Integer
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get message insights for an agent agent_id : Specify the agent identifier
message_id : Specify the message identifier for which you wish to view the insights.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/analytics-api/messages.md
# Messages
## Get agent messages
`GET` `https://cx.avaamo.com/bots/analytics/{{agent_id}}/messages.json`
Gets a list of messages from the agent within a specified period of time.
#### Path Parameters
Name Type Description agent_id* integer Agent identifier. You can get the agent identifier from the agent URL.
#### Query Parameters
Name Type Description per_page number The number of entries fetched per page. Default value: 25 Maximum value: 100 page number Page from which the entries must be fetched. Default value: 1 from_timetoken number Timestamp from which the records are fetched.
Default value is last three days from the specified to_timetoken value.
Specify UNIX Epoch Timestamp.
to_timetoken number Timestamp until which the records are fetched.
Default is the current timestamp.
Specify UNIX Epoch Timestamp.
#### Headers
Name Type Description access-token* string The user access token.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
{% tabs %}
{% tab title="200 Successful request" %}
```json
{
"current_page": 1,
"per_page": 1,
"total_entries": 8,
"total_pages": 8,
"time_token": 1716811116.983583,
"entries": [
{
"message_uuid": "e00a9d28-xxxx-4350-xxxx-389c395afec5",
"score": 1.0,
"content": "",
"intent_type": "JS::INTENT",
"channel_name": "web",
"created_at": 1716811065.0,
"user": {
"first_name": "David",
"layer_id": "06c7beb3-9bf8-xxxx-xxxx-745e5431053d"
},
"intent_name": "custom code"
}
]
}
```
{% endtab %}
{% tab title="422: Unprocessable Entity Unprocessable entity -> to\_date is before from\_date" %}
```javascript
{
"error": "To Date cannot be before From Date"
}
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/bots/analytics/20xxx/messages.json' \
--header 'Content-Type: application/json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/bots/analytics/20xxx/messages.json',
'headers': {
'Content-Type': 'application/json',
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the agent messages. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp entries Indicates an array of user sessions fetched from the agent. The number of entries in the array = Number specified in the per_page parameter. Each array contains the following details of each user session:
message_uuid: Unique message identifier. content: Content of the message. intent_type: Type of intent such as system, inline, KnowledgePack channel_name: Channel of communication created_at: Timestamp at which the message was created in seconds. This is in Unix epoch timestamp format. first_name: If the user information is collected, then first_name indicates the first name of the user corresponding to the message, or else it is displayed as "You". See Collect user information , for more details. layer_id: Unique identifier for each user. intent_name: Name of the intent corresponding to the message. JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get agent messages in a specified period of time from_date : Specify the from date in dd/mm/yyyy format.
to_date : Specify the to date in dd/mm/yyyy format.
Example : https://cx.avaamo.com/bots/analytics/<<agent_id>>/messages.json?from_date=01/04/2020&to_date=06/04/2020&utc_offset=<<utc-offset-sec
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams.md
# Source: https://docs.avaamo.com/user-guide/configuration/channels/microsoft-teams-ms-teams.md
# Microsoft Teams (MS Teams)
**Microsoft Teams** is a proprietary business communication platform developed by [Microsoft](https://en.wikipedia.org/wiki/Microsoft), as part of the [Microsoft 365](https://en.wikipedia.org/wiki/Microsoft_365) family of products. Microsoft Teams is a chat-based collaboration platform that includes document sharing, online meetings, and numerous other valuable features for business communications.
The agents developed on the Avaamo platform can be deployed on the Microsoft Teams channel.
Refer [Microsoft Teams (MS Teams)](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/microsoft-teams-send-api.md
# Microsoft Teams Send API
{% hint style="success" %}
**Pre-requisite**: You must have an agent with the MS Teams channel configured. See [MS Teams channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information.
{% endhint %}
## Outbound API to send a message from the MS Teams channel to the user
`POST` `https://cx.avaamo.com/teams/{{channel_uuid}}/send.json`
#### Path Parameters
| Name | Type | Description |
| ------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| channel\_uuid | String | Unique channel identifier generated by the Platform when the MS Teams channel is configured.
This helps to identify the source of the request when an message is sent to the user using this API. See MS Teams channel , for more information.
|
#### Request Body
| Name | Type | Description |
| ----------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| email | String | Valid user email to whom the message is sent.
Required, if custom user authentication is not enabled in the MS Teams channel.
If custom user authentication is enabled, then you must return email , message, along with uuid in the User authentication handler block. This provides flexibility to the developers to authenticate the users and then return the email to whom the message must be sent. See User authentication handler , for more information.
|
| <\> | JSON key-value pairs | Any custom parameters such as the first name, last name, and employee id can be included in the body payload as per the requirement.
These parameters are available in context.params.<\> and can be used for authenticating the users in the User authentication handler when custom user authentication is enabled in the MS Teams channel. See User authentication handler , for more information.
|
| message -> text | String | Valid message sent to the user vi MS Teams channel.
Either a text message or a CustomTeamsMessage is
required, if custom user authentication is not enabled in the MS Teams channel.
If custom user authentication is enabled, then you must return email , message, along with uuid in the User authentication handler block. This provides flexibility to the developers to authenticate the users and then return the email to whom the message must be sent. See User authentication handler , for more information.
|
| message -> CustomTeamsMessage | JSON | MS Teams custom payload.
Either a text message or a CustomTeamsMessage is
required, if custom user authentication is not enabled in the MS Teams channel.
If custom user authentication is enabled, then you must return email , message, along with uuid in the User authentication handler block. This provides flexibility to the developers to authenticate the users and then return the email to whom the message must be sent. See User authentication handler , for more information.
|
{% tabs %}
{% tab title="200: OK Successful request. " %}
```javascript
{
"success": true
}
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: After a successful request, a conversation is established and can be tracked using `email` from the Conversation history page. See [Conversation history](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents/conversation-history), for more information.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```bash
curl -X POST \
http://cx.avaamo.com/teams/62b783fb-86e0-xxxx-b8f0-2144xxxxxxxxx/send.json \
-H 'content-type: application/json' \
-d '{
"first_name": "John",
"last_name": "Jacob",
"emp_id": "1234",
"email": "jacob.john@abc.com",
"message": {
"text": "Your message goes here."
}
}'
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Examples
**Request**: The following is a sample JSON request for posting a simple message to the user:
```json
{
"first_name": "John",
"last_name": "Jacob",
"emp_id": "1234",
"email": "jacob.john@abc.com",
"message": {
"text": "Your message goes here."
}
}
```
**Request**: The following is a sample JSON request for posting a custom teams message to the user:
```json
{
"first_name": "John",
"last_name": "Jacob",
"emp_id": "1234",
"email": "jacob.john@abc.com",
"message": {
"CustomTeamsMessage": {
<>
}
}
}
```
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze.md
# Monitor agents
- [Analytics](/user-guide/how-to/build-agents/monitor-and-analyze/analytics.md)
- [Analytics - Universal agent](/user-guide/how-to/build-agents/monitor-and-analyze/analytics-universal-agent.md)
- [SMS Gateway Analytics](/user-guide/how-to/build-agents/monitor-and-analyze/sms-gateway-analytics.md)
- [User journey](/user-guide/how-to/build-agents/monitor-and-analyze/user-journey.md)
- [Query insights](/user-guide/how-to/build-agents/monitor-and-analyze/query-insights.md)
---
# Source: https://docs.avaamo.com/user-guide/monitor.md
# Monitor
- [Analytics](/user-guide/monitor/analytics.md)
- [Query insights](/user-guide/monitor/query-insights.md)
---
# Source: https://docs.avaamo.com/user-guide/llamb/multi-language-support.md
# Multi-language support
### Multi-language support in LLaMB responses
LLaMB enables seamless, real-time conversations in multiple languages, enhancing the user experience across diverse regions. With real-time streaming translation, LLaMB supports all languages available in the Avaamo Conversational AI Platform.
Users can interact with the agent in any supported language, and the agent will respond in the same language, even if the original content is authored in English. This eliminates the need to maintain separate content for each language, simplifying content management while ensuring a natural and fluid conversation flow.
By leveraging this capability, organizations can effortlessly expand their global reach, providing a consistent and localized experience for users worldwide.
Below is a sneak peek of LLaMB’s multi-language support in action. You can see how responses are generated in the respective languages when the same question is asked in English (en-US) and French (fr-FR).
Follow these steps to enable and test multilingual support in your LLaMB agent:
1. **Ingest content in English:** Prepare and ingest your documents in English. Document ingestion currently supports only the `en-US` locale. Refer [Ingest enterprise content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content), for more information.
2. **Enable markdown format:** Ensure that the Markdown format is enabled for your agent in the channel configuration. Refer [Enable markdown format](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/advanced#enable-markdown-format), for more information.
3. **Add languages to your agent**
* Navigate to `Configuration > Language`.
* Click `Add Languages`.
* Select the desired language(s) from the dropdown list.
* Click `Save`. Refer [Languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-languages), for more information.
4. **Test multilingual capability in simulator**
* Open the [Simulator](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/simulator).
* Initially, ask a question in English — you will receive responses in English.
* To switch the language, use the command:\
`#switch_lang ` *For example: `#switch_lang fr-FR` to switch to French.*
* After switching, ask a question in the selected language. The agent will respond in the same language.
### Support for multilingual document ingestion
LLaMB supports multilingual document ingestion, allowing you to upload, train, and query documents in multiple languages. This capability improves accessibility, accuracy, and global usability by enabling the system to process content and respond in the user’s selected conversation language.
LLaMB can automatically detect a document's language during ingestion, eliminating the need to specify it in the request payload manually. This reduces errors, speeds up processing, and ensures more reliable handling of non-English content.
{% hint style="info" %}
**Note:** Automatic language detection is available only for API-based document ingestion.
{% endhint %}
If you provide a language parameter during ingestion, LLaMB uses that language for extraction. If no language is provided, LLaMB automatically identifies the document’s language and processes it accordingly. Refer [Upload content](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/upload-content) and [Content ingestion APIs](https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis), for more information.
If no language is specified, LLaMB detects the document’s language during ingestion.
```javascript
curl --location 'https://c6.avaamo.com/llamb-content-skill/content-ingestion/upload-file' \
--header 'access-token: 238c2e50cxxxxae0def75b223' \
--form 'source=@"/Users/Downloads/swedish-document.pdf"' \
--form 'document_group_id="9xx5"' \
--form 'type="pdf"'
```
If you provide a language code, LLaMB uses the specified language and does not perform auto-detection.
```javascript
curl --location 'https://c6.avaamo.com/llamb-content-skill/content-ingestion/upload-file' \
--header 'access-token: 238c2e50cxxxxae0def75b223' \
--form 'source=@"/Users/Downloads/swedish-document.pdf"' \
--form 'document_group_id="9xx5"' \
--form 'type="pdf"' \
--form 'language="es-ES"'
```
### Key points
* **Language-aware ingestion:** You can specify the document’s language by passing the appropriate language code (for example, `es-ES`, `fr-FR`, `sv-SE`) during ingestion.
* **Agent configuration:** Add or configure the target language in the agent settings before ingestion to ensure proper processing and response handling.
* **Comprehensive file support:** Multilingual ingestion works with all supported document types, including PDF, Word, Excel, PowerPoint, CSV, and HTML.
* **Cross-language querying:** LLaMB can understand and respond to queries in English, the document’s original language, or any other supported non-English language, depending on the user's selected conversation language.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/multi-line-text.md
# Multi-line text
You can add a multi-line input card in the skill response.
### Syntax
The following is the syntax to add a multi-line text in the card input:
{% hint style="info" %}
**Notes**:
* There is a 191-character limit for all the user-defined text fields except `data_capture` field. You can specify upto 60000 characters in the `data_capture` field.
* **hint** attribute is not supported in the Microsoft Teams channel due to the limitations on the channel's side. See [Microsoft Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information on deploying your agent in the MS Teams channel.
{% endhint %}
```yaml
"card": {
"inputs": [{
"type": "data_capture",
"title": "<>",
*"should_validate": true/false,
*"hint": "<>",
*"default_value": "<>",
"uuid": "<>"
},...]
}
* - Indicates optional parameter
… - Indicates one or more parameter
```
Attribute Description Type title Indicates the title of the text field. String should_validate Indicates if the user can skip entering values for the field or not before submitting. By default, the value is set to true. Boolean hint Indicates a sample hint for the user to enter the value in the field. This is displayed in the input field before the user enters a value. String default_value Indicates the default value displayed in the text field when rendered to the user. String uuid Indicates a secure random UUID that can be used later to get the text entered by the user. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
Option selected by the user is available in the context.last_message.
Syntax: context.last_message.<<uuid>>
String
### Example
The following is a sample JS to provide a multi-line text field in card input with hint text:
```yaml
return[{
"card": {
"inputs": [
{
"type": "data_capture",
"title": "How was our service?",
"uuid": "a4615857-c2f7-4586-b4b0-f771683fcb1a"
"hint": "xxx@yyy.com"
}
]
}
}]
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` to get the text entered by the user.
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/multilingual-answering.md
# Multilingual answering
Typically, in any global business, it is a necessity to design and build assistants or agents that can interact with the users in their local language. The Avaamo platform provides multilingual support for agent development in different languages, with English (en-US) as the default language. Users can converse with your agent in any local language and expect responses to be in the same local language.
This helps in:
* Providing a wider reach of your agents. Makes agents more accessible to a broader scope of users.
* Providing more personal experience with your agents since interacting in the local language is more natural and relatable.
Regardless of the language in which any information is stored in the knowledge base, the Answers skill can use the information to reply in the language that the user is conversing in. For example, consider that a user is conversing in Spanish with an Avaamo agent. The user asks for information that is stored in English in the knowledge base. The agent is capable of translating the information to Spanish and responding.
Hence, documents and content uploaded in any language can be used for answering queries.
### What is Multilingual answering?
You can use Avaamo Answers to ingest content in any of the [Avaamo-supported languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-supported-languages) and provide responses to user queries from the content available in the user's preferred language. See [Add Document or URL](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/add-document-or-url-1), for more information.
The following illustration depicts how Avaamo answers can provide responses to a user query in the local language from the ingested document in the corresponding language:
### 
### How to use it?
* You must first add the language of the document you wish to upload to your agent. See [Add languages](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-languages), for more information on adding languages to your agent.

* After the content is ingested, a knowledge base is created. See [View and edit knowledge](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/view-and-edit-knowledge), for more information.

* You can now ask queries in the local language, say Spanish in this use case, and get the agent's response in Spanish. Note that if you ask a query in say English, the agent response in English is displayed.
{% hint style="info" %}
**Note**: To switch from one language to another when conversing with the agent, the user has to type the command `#switch_lang language-code.`See [Language.switch](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch) and [Skill commands](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands)
{% endhint %}

### Key points
Avaamo Platform allows you to customize the translated responses of the agent in the **Configuration -> Language** tab. Currently, this cannot be used for customizing the translated response of the agent for the Answers skill.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/nice-incontact.md
# Nice InContact
{% hint style="info" %}
**Note**: You can connect to a channel only if it is enabled for your account or company. If you wish to enable a channel, then contact Avaamo Support for further assistance. Note that only web channel is enabled by default.
{% endhint %}
The agents developed on the Avaamo platform can be deployed on the **Nice InContact** channel. In this article, the following steps are detailed:
1. [ Before you begin](#before-you-begin)
2. [Deploy your agent in Nice InContact](#deploy-your-agent-in-nice-incontact)
3. [Manage channel settings](#manage-channel-settings)
## Before you begin
* Get the identifier (or FQDN) of Nice InContact SIP. You must configure this in the channel settings. See [Deploy your agent in Nice InContact](#deploy-your-agent-in-nice-incontact), for more details.
* Avaamo requires customer source IPs in order to allow traffic to Avaamo SIP. Send a request to Avaamo Support to whitelist the IP addresses.
## Deploy your agent in Nice InContact
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can deploy the agent to a channel after creating and building an agent. See [Create agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills), for more information.
* If you wish to edit an agent, then:
* In the **Avaamo Platform UI**, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](applewebdata://9AE47367-043D-436A-BAB1-053A8B89E2A1/@avaamo/s/avaamo/~/edit/drafts/-Lsoojy2kKRX1KXPWAZ2/how-to/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing**.**
{% endhint %}
**To configure a Nice inContact channel:**
* In the **Agent** page, navigate to the **Configure -> Channels** option in the left navigation menu.
* On the Channels page, click **Connect** in **Nice inContact** Channel.
* Specify the following channel setting details:

Parameter Descriptions Name Indicates the Name used to identify the Nice InContact channel. Note that you can have upto 150 characters in the channel name. Identifier Indicates the identifier (or FQDN) of Nice InContact SIP. Languages and
Playback Voice for
Select the language and configure the voice or the persona to be used by your agent in the interactive phone conversations with the user. Each language has a different set of voice personas that you can choose from. Select the persona from the options provided in the "Playback voice for <<language>>" section:
As with any enterprise voice, audio, or video application, each region or country has its own phone number to dial. Similarly, in the Nice InContact channel, you choose the language of the region or country where you wish to share the configured number. If you wish to share the number in multiple regions, then set up the Nice InContact channel specific to each language. Note that one Nice InContact channel is specific to only one language. To hear the voice preview, type any text in the text area and click the play button. You can also download the voice preview if required. You can select only those languages for which the agent is configured and those that are supported in the Nice InContact channel. If you have switched to a language that is not supported in the Nice InContact channel, then the agent responds in the default language. See Add languages and Supported languages , for more information.
Live agent transfer mode Select the request mode for Live agent transfer in SIP:
invite : Initiate a dialog for establishing a call. The request is sent by a user agent client to a user agent server.refer : Ask the recipient to issue a request for the purpose of call transfer. Note that this is a default method used in the Avaamo Platform and this works for both SIP and PSTN approaches. See Smartcall.forward , for more information on how to transfer and forward the call in SIP.
Speech timeout Indicates a maximum wait time of the agent within which a user response is expected. If the user response is not received within the time-out period, then an automated message is rendered back to the user indicating that the agent is awaiting the user response. Currently, this is a standard message and cannot be customized.
The default value is 1 second. Use the up and down arrows to increase or decrease time as required.
* Click **Save** to save the SIP channel configuration details.
* Click **Download SIP Certificate** to download a "pem" file of the SIP certificate. This must be used to configure Avaamo Platform Nice InContact SIP details on the customer's side of the call center stack.

* Note that Avaamo also requires customer source IPs in order to allow traffic to Avaamo SIP. Send a request to Avaamo Support to whitelist the IP addresses.
## Manage channel settings
After you configure the channel settings, you can view, edit, disconnect and delete the channel settings as per your requirements. See [Manage channel settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/manage-channel-settings), for more information.
---
# Source: https://docs.avaamo.com/user-guide/outreach/campaigns/opting-out-of-campaign.md
# Opting out of campaign
Although campaigns allow you to reach to a wider set of audience, not all campaign messages are welcome by the recipients. Some consider it an invasion of privacy or others may not be just interested in receiving any such message to their number.
Avaamo respects recipient's privacy and allows recipients to opt-out of receiving messages from the Avaamo platform to their number.
### Opting out
If a recipient no longer wishes to receive messages to a number, then the recipient can simply reply to the campaign message with any one of the following words to unsubscribe:
* STOP
* END
* QUIT
* CANCEL
* UNSUBSCRIBE
* STOPALL
When a recipient unsubscribes, then the campaign message is not sent. In the **Test campaign** pop-up, the following message for the corresponding recipient:
A similar message is also displayed in the CSV file when you download a campaign message history report from the **Campaign Statistics** page. See [Campaign Statistics](https://docs.avaamo.com/user-guide/outreach/campaign-statistics), for more information.
### Opting in
To opt back in to receive messages from an unsubscribed number, the number that replied with STOP must send one of these keywords to start receiving messages back:
* START
* YES
* UNSTOP
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/other-common-actions.md
# Other common actions
In the **Agents** tab, you can search, delete, and view agents based on the roles and permissions assigned to you on the agent. See [Roles and permission](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions)s, for more information.

### Search agents
You can search for agents using the search icon available at each stage of the agent life cycle. In the **Agents** tab, start entering the text in the **Search** text box. The results are filtered and displayed as you enter the text.
### Delete agent
In the **Agents** page, click three ellipse dots in the **Actions** column of the agent to view the extended menu and click **Delete.** Click **Delete** in the confirmation message to delete the agent. Note that this action cannot be undone.
{% hint style="info" %}
**Notes**:
* It is recommended to use this option with caution because when you force unlock an agent all the unsaved changes made by the other user are lost.
* In order to use this option, you must at least have edit permission on the agent.
* You can delete an agent only when it is not locked by any other user.
{% endhint %}
### View agent
In the **Agents** tab, click three ellipse dots in the Actions column of the agent to view the extended menu and click **View.** The details of the agent are displayed in the **Agent** page.
### Force unlock
You can use the **Force unlock** option when you wish to edit an agent that is locked by another user. In the **Agents** page, click the **lock** button. A message is displayed to force unlock the agent. Click **OK** to force unlock the agent.

{% hint style="info" %}
**Notes**:
* It is recommended to use this option with caution because when you force unlock an agent, all the unsaved changes made by the other user are lost.
* In order to use this option, you must at least have edit permission on the agent.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/outreach-changelog-api.md
# Outreach Changelog API
## Get outreach changelog
`GET` `https://cx.avaamo.com/api/v2/outreach/change_logs.json`
Outreach campaigns go through several changes by different users in their life cycles. You can use the Outreach Changelog API to get a list of changes made to all the campaigns of an account.
#### Query Parameters
Name Type Description start_time number Timestamp from which the records are fetched.
If you specify timetoken and not end_time, then the latest 5 entries up to the specified timetoken are fetched.
Specify UNIX Epoch Timestamp in milliseconds.
end_time number Timestamp until which the records are fetched. Default is the current timestamp.
Specify UNIX Epoch Timestamp in milliseconds.
page integer Page from which the entries must be fetched. Default: 1 per_page integer Number of entries fetched per page. Default: 25 Maximum value: 100 actions String Actions in an campaign for which you wish to get changelog.
Supported values are: update, create, destroy
By default, all actions are considered. You can also specify multiple resources in a comma-separated list.
Example: actions=update,create
#### Headers
Name Type Description access-token* string User access token. This API gets the changelog of all the campaigns from the account the user is associated with.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
Users must have at least view permission on the campaign. See Permissions , for more information.
{% tabs %}
{% tab title="200 Consider that you wish to get the latest change log from the agent. Use GET method and specify the URL <\>\&per\_page=1. The following is a sample JSON response returned:" %}
```javascript
{
"current_page": 1,
"per_page": 1,
"total_entries": 1916,
"total_pages": 1916,
"time_token": 1676971459.482645,
"entries": [
{
"id": 1707596,
"resource": {
"id": 30,
"type": "Outreach::Template"
},
"action": "create",
"changelog": "John Miller created template 'Vaccination test template'",
"timestamp": 1676967911,
"dashboard_user": {
"id": 368,
"display_name": "John Miller",
"email": "john@mycompany.com"
}
}
]
}
```
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Note**: For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
{% endhint %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v2/outreach/change_logs?per_page=1' \
--header 'Content-Type: application/json' \
--header 'access-token: xxxxxxxxx9a34a44a838af10fxxxxxxx'
```
{% endcode %}
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v2/outreach/change_logs?per_page=1',
'headers': {
'Content-Type': 'application/json',
'access-token': 'xxxxxxxxx9a34a44a838af10fxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample response of a successful API request:
```json
{
"current_page": 1,
"per_page": 1,
"total_entries": 1916,
"total_pages": 1916,
"time_token": 1676971459.482645,
"entries": [
{
"id": 1707596,
"resource": {
"id": 30,
"type": "Outreach::Template"
},
"action": "create",
"changelog": "John Miller created template 'Vaccination test template'",
"timestamp": 1676967911,
"dashboard_user": {
"id": 368,
"display_name": "John Miller",
"email": "john@mycompany.com"
}
}
]
}
```
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the campaign changelog. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned in seconds. UNIX epoch timestamp entries Indicates an array of change logs fetched from the campaign. Number of entries in the array = Number specified in per_page parameter. JSON key-value pairs
#### entries
Indicates an array of change logs fetched from the campaign. Each array contains the following attributes:
Attribute Description Type id Indicates a unique identifier for the changelog entry. Integer resource -> id Indicates a unique identifier of the resource for which the changelog is listed such as the campaign identifier, recipient list identifier, filter identifier, or template identifier. Integer resource -> type Indicates the type of resource for which the changelog is applicable. String action Indicates the action such as create, update, destroy for which the changelogs are retrieved. String changelog Indicates the actual change that occurred for this entry.
This is a user-friendly description to help you identify the type of change..
String timestamp Indicates the timestamp of when the changelog was created in seconds.
This is the timestamp when the changes for the campaign are persistent in the database.
UNIX epoch timestamp dashboard_user -> id Indicates the identifier of the user who is the modifier of the resource. Integer dashboard_user -> display_name Indicates the display name of the user who is the modifier of the resource. String dashboard_user -> email Indicates the email of the user who is the modifier of the resource. String
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get changelogs within a specified period start_time: Specify the from timestamp in epoch format such as 1579149424 end_time: Specify the to timestamp in epoch format such as 1579149436 Example : https://cx.avaamo.com/api/v2/outreach/change_logs.json?start_time=1579149424&end_time=1579149436
Get changelogs using pagination page: Specify the page from which you wish to fetch records. By default, the value is 1. per_page: Specify the number of entries per page. By default, the value is 5. Example :
https://cx.avaamo.com/api/v2/outreach/change_logs.json?page=5&per_page=2
Here, per_page * total_pages = total_entries
Get changelogs of all updated campaign records within a specified period start_time: Specify the from timestamp in epoch format such as 1579149424 end_time: Specify the to timestamp in epoch format such as 1579149436 action: Specify update Example : https://cx.avaamo.com/api/v2/outreach/change_logs.json?start_time=1579149424&end_time=1579149436&actions=update
---
# Source: https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis/outreach-insights-api.md
# Outreach insights API
## Get campaign insights
`GET` `https://cx.avaamo.com/api/v2/campaigns/insights`
Get a closer look at the user conversations with the campaign. You can use this API for debugging and reporting purposes. See [Campaigns](https://docs.avaamo.com/user-guide/outreach/campaigns), for more information.
#### Query Parameters
Name Type Description conversation_uuid String Conversation identifier of the communication between campaign and the recipient. Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
You can get the conversation identifier from the Conversation history URL or from the Get Messages API of the agent that is linked to the campaign.
Example: conversation_uuid=17xxxxxxxx
delivery_channel array Channel in which the campaign message was delivered. Possible values: sms, voice, ms_teams
Example:
delivery_channel=sms
start_time number Timestamp from which the records are fetched.
The default value is the last three days from the specified end_time value.
Specify in UNIX Epoch Timestamp.
The Outreach Insights API allows you to retrieve data for the last 6 months. If the start_time specified in the data request exceeds this 6-month limit, the system automatically adjusts start_time to the maximum allowable range of the past 6 months.
end_time number Timestamp until which the records are fetched. The default value is the current timestamp.
Specify in UNIX Epoch Timestamp in milliseconds.
page integer Page from which the entries must be fetched. Default: 1. per_page integer Number of entries fetched per page. Default: 25 Maximum value: 100 language String Language of the campaign message. See Language-specific messages , for more information.
Example 1:
language[]=en-US
Example 2:
language[]=en-US&language[]=hi-IN
message_uuid String Message identifier in the campaign conversation. Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
You can get the message identifier from the API response itself or from the Get Messages API of the agent that is linked to the campaign.
Example: message_uuid=bc12xxxxxxxx
execution_id integer Identifier of a campaign run. You can get the execution_id from the API response itself.
Example: execution_id=2x
campaign_id integer Campaign identifier. You can get the campaign identifier from the campaign URL.
Example 1: campaign_id=17x
Example 2: campaign_id=13x, 45x
to_phone String The recipient's phone number to which the campaign message was sent.
Valid for SMS and Voice campaigns. Ensure that the value is URL encoded.
Example: to_phone=222xxx5678
from_phone String The phone number from which the campaign message was sent to the recipients.
Valid for SMS and Voice campaigns. Ensure that the value is URL encoded.
Example: from_phone=444666xxxx
filter_id integer Filter identifier that was applied for delivering the campaign message. You can specify multiple filters using a comma-separated list.
You can get the filter identifier from the campaign filter URL. See Filters , for more information.
Example 1: filter_id=5x
Example 2: filter_id=5x,2x
agent_id integer Agent identifier. Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
You can get the agent identifier from the agent URL.
Example: agent_id=17x
response_set_id integer Response set identifier that was picked for delivering the campaign message. You can get the response set identifier from the API response itself. See Response sets , for more information.
Example: response_set_id=17x
delivery_status String Delivery status of the campaign message. Possible values: sent, failed, skipped, delivered, undelivered.
See Campaign delivery status , for more information.
delivery_status[]=failed
channel_id integer Channel identifier. You must specify
delivery_channel query parameter to use channel_id in the query parameter.
You can get the response set identifier from the API response itself. Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
Example: channel_id=5xx
to_email String The recipient's email to which the campaign message was sent.
Valid for MS Teams campaign. Ensure that the value is URL encoded.
Example: to_email=john%40avaamo.com%0A
recipient_uuid String Unique identifier for each recipient. For multi-message campaign, the recipient_uuid remains the same for each message in the multi-message list when sent to the same recipient. You can get the recipient_uuid from the API response itself.
Example: recipient_uuid=bc12xxxxxxx
user[<<user_properties>>] Array User properties such as first name, last nameExample 1: user[first_name]=Mike
Example 2: user[last_name]=Bob
Example 3: user[first_name]=Mike&user[last_name]=Bob
error_code String Indicates the code for the error that occurred when delivering the campaign message to the corresponding recipient. You can get the error_code from the API response itself. Example: error_code=AVM01, AVM02
#### Headers
Name Type Description access-token* String The user access token. This API gets the insights of all the campaigns from the account the user is associated with.
You can get the user access token from the Settings -> Users page. See Users or Groups , for more information.
{% tabs %}
{% tab title="200 Successful request" %}
{% code overflow="wrap" %}
```json
{
"current_page": 1,
"per_page": 25,
"total_entries": 2,
"total_pages": 1,
"time_token": 1689593442.8405523,
"entries": [
{
"id": 1382620,
"recipient_uuid": "8eb0dxxx-xxxx-xxxx-xxxx-xxx0db5b6fb5",
"delivery_status": "failed",
"message_uuid": null,
"created_at": 1751450792,
"content": "If you are having any references, feel free to forward this message.",
"conversation_uuid": null,
"language": "en-US",
"user": {
"id": "1373",
"last_name": "Smith",
"first_name": "Jake",
"phone": "72) 913-6939",
"acct_bal": "$0.00",
"age": "72",
"job_id": "Z1479217",
"dob": "03/16/1967"
},
"error": "Could not place call due to technical error.",
"error_code": "AVM1015",
"execution": {
"id": 2980,
"created_at": 1751450376
},
"delivery_channel": "voice",
"from_phone": "+18507905180",
"filters": [],
"response_set": {
"id": 1384,
"name": null
},
"campaign": {
"id": 780,
"name": "CIVR7"
},
"to_phone": "729136939"
},
"user": {
"phone": "+918971115555",
"email": "john@avaamo.com",
"first_name": "John",
"last_name": "Miller"
},
"campaign": {
"id": 511,
"name": "Sparsh Healthcare Multi Message Campaign"
},
"to_phone": "+918971115555"
},
{
"id": 8685,
"recipient_uuid": "f8adcxxx-xxxx-xxxx-xxxx-xxx734ac348e",
"delivery_status": "delivered",
"message_uuid": null,
"created_at": 1689592018,
"content": "The Sparsh care center is organizing a free Flu vaccination drive on October 1st and October 2nd from 10 AM to 6 PM. Visit your nearest Sparsh Care Center to get vaccinated. \n",
"conversation_uuid": null,
"language": "en-US",
"execution": {
"id": 1708,
"created_at": 1689592016
},
"delivery_channel": "sms",
"from_phone": "+18507905180",
"filters": [],
"response_set": {
"id": 997,
"name": null
},
"user": {
"phone": "+918971115555",
"email": "John@avaamo.com",
"first_name": "John",
"last_name": "Miller"
},
"campaign": {
"id": 511,
"name": "Sparsh Healthcare Multi Message Campaign"
},
"to_phone": "+918971115555"
}
]
}
```
{% endcode %}
{% endtab %}
{% endtabs %}
{% hint style="info" %}
**Notes**:
* For optimal API performance, the recommended time duration for fetching data from any of the REST APIs that support a date range or time period is 7 days.
* You can retrieve data from the Outreach Insights API for up to the past 6 months from the current date of access.
* If the same user appears in multiple campaigns with the same primary header, the insights override the attributes from different CSV files, showing the most recent attributes in the latest insights.
{% endhint %}
### Campaign delivery status
Note the following campaign delivery status mapping for each channel:
Status Description Applicable channels Sent Request has been initiated successfully. SMS
C-IVR
MS Teams
Custom channel
Failed The recipient is filtered out or failed to send the request to the recipient since the email or phone number was not available.
For C-IVR, failed status is returned even when the user declines the call.
Check the Error status of the corresponding record for more information.
SMS
C-IVR
MS Teams
Custom channel
Pending Status is pending when the recipient was engaged in another call at the same time when the campaign was triggered. The campaign message is later updated to Delivered, Undelivered, Failed when the recipient line is again available for usage.
C-IVR
Delivered The message is successfully delivered to the recipient SMS
C-IVR
Custom channel
Undelivered Unable to deliver the message to the recipient.
Check the Error status of the corresponding record for more information.
SMS
C-IVR
Custom channel
Queued Received the request, but the recipient is waiting in queue to process it. MS Teams Installed Triggered the installation of the MS teams app to the recipient, waiting to send the campaign message. MS Teams
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location 'https://cx.avaamo.com/api/v2/campaigns/insights' \
--header 'Content-Type: application/json' \
--header 'access-token: xxxxxxxxx4d14acba2fb2ccxxxxxxxxx'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v2/campaigns/insights',
'headers': {
'Content-Type': 'application/json',
'access-token': 'xxxxxxxxx4d14acba2fb2ccxxxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
The following is a sample response of a successful Outreach insights API request:
{% code overflow="wrap" %}
```json
{
"current_page": 1,
"per_page": 25,
"total_entries": 2,
"total_pages": 1,
"time_token": 1751971354.0004876,
"entries": [
{
"id": 1382614,
"recipient_uuid": "917c7xxx-xxxx-xxxx-xxxx-xxx21754d1b7",
"delivery_status": "failed",
"message_uuid": null,
"created_at": 1750851657,
"content": "Hi nobody here, I'm your point of contact.\n",
"conversation_uuid": null,
"language": "en-US",
"user": {
"phone": "1234567890",
"email": "someone@somewhere.com",
"first_name": "nobody",
"last_name": "here"
},
"error": "'To' number +91123456XXXX cannot be a landline",
"error_code": null,
"execution": {
"id": 2978,
"created_at": 1750851339
},
"delivery_channel": "sms",
"from_phone": "+18507905180",
"filters": [],
"response_set": {
"id": 1394,
"name": null
},
"campaign": {
"id": 832,
"name": "multi message test 2"
},
"to_phone": "+911234567890"
},
{
"id": 1382615,
"recipient_uuid": "917c79d0-5a0a-41fb-b1ad-1a021754d1b7",
"delivery_status": "failed",
"message_uuid": null,
"created_at": 1750851657,
"content": "\nReach out to me for any queries.",
"conversation_uuid": null,
"language": "en-US",
"user": {
"phone": "1234567890",
"email": "someone@somewhere.com",
"first_name": "nobody",
"last_name": "here"
},
"error": "'To' number +91123456XXXX cannot be a landline",
"error_code": null,
"execution": {
"id": 2978,
"created_at": 1750851339
},
"delivery_channel": "sms",
"from_phone": "+18507905180",
"filters": [],
"response_set": {
"id": 1394,
"name": null
},
"campaign": {
"id": 832,
"name": "multi message test 2"
},
"to_phone": "+911234567890"
}
]
}
```
{% endcode %}
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of intent entries in the response. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp entries Indicates an array of insights fetched across all the campaigns of an account.
Number of entries in the array = Number specified in per_page parameter.
JSON key-value pairs
#### entries
Indicates an array of insights fetched across all the campaigns of an account. Each array contains the following attributes:
Attribute Description Type id Indicates an identifier of each insight entry. This is for internal purposes only. Integer recipient_uuid Unique identifier for each recipient. For multi-message campaign, the recipient_uuid remains the same for each message in the multi-message list when sent to the same recipient. String delivery_status Indicates the delivery status of the campaign message. Possible values: sent, failed, skipped, delivered, undelivered.
See Campaign delivery status , for more information.
String to_phone Indicates the recipient's phone number to which the campaign message was sent.
Valid and returned only for SMS and Voice campaigns.
String to_email Indicates the recipient's email to which the campaign message was sent.
Valid and returned only for MS Teams campaign.
String language Indicates the language of the campaign message. See Language-specific messages , for more information. String execution Indicates the identifier of a campaign run. Integer delivery_channel Indicates the channel in which the campaign message was delivered. Possible values: sms, voice, ms_teams String from_phone Indicates the phone number from which the campaign message was sent to the recipients.
Valid for SMS and Voice campaigns. from_phone is null for MS Teams campaigns.
String filters Indicates an array of filters that were applied for delivering the campaign message. Each filter array contains the identifier, the name of the filter, and if the filter was matched or not.
See Filters , for more information.
Array of JSON key-value pairs response_set Indicates the response set that was picked for delivering the campaign message. The response set contains the identifier and name of the response set.
See Response sets , for more information.
JSON key-value pairs created_at Indicates the timestamp of when the insight was created in seconds. UNIX epoch timestamp user Indicates any additional user properties fetched in the campaign insights.
Example :
"user": {
"phone": " 1 972 913 xxx",
"email": "john.miller@avaamo.com", "first_name": "John",
"last_name": "Miller"
}
JSON key-value pairs content Indicates the content of the campaign message. String conversation_uuid Indicates the conversation identifier of the communication between the campaign and the recipient.
Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
String message_uuid Indicates the message identifier in the campaign conversation. A conversation can have multiple messages and each message has an identifier to uniquely identify the message in the conversation.
Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
String campaign Indicates the campaign details such as the identifier and name of the campaign. JSON key-value pairs agent Indicates the agent details such as the identifier, name, and channel details of the agent.
Valid when the campaign is linked to an agent for two-way communication. See Link to Avaamo agent , for more information.
JSON key-value pairs error Indicates the error that occurred when delivering the campaign message to the corresponding recipient. This is available only when the delivery_status is either failed or skipped. String error_code Indicates the code for the error that occurred when delivering the campaign message to the corresponding recipient. String
### Examples
The following table lists a few sample use cases with query parameters:
Use case Query parameter Get insights of campaigns using multiple campaign IDs https://cx.avaamo.com/api/v2/campaigns/insights?campaign_id=12xx,56xxGet insights specific to a channel and delivery status https://cx.avaamo.com/api/v2/campaigns/insights?delivery_channel=ms_teams&delivery_status=failedGet insights using user properties https://cx.avaamo.com/api/v2/campaigns/insights?campaign_id=6xx, 6xx&user[first_name]=Mike&user[last_name]=BobGet insights using error codes https://cx.avaamo.com/api/v2/campaigns/insights?error_code=AVM1015, AVM1010, AVM1001
---
# Source: https://docs.avaamo.com/user-guide/outreach/outreach-rest-apis.md
# Outreach - REST APIs
- [Outreach insights API](/user-guide/outreach/outreach-rest-apis/outreach-insights-api.md): Insights across all the campaigns of an account. Use this API for debugging and reporting purposes.
- [Outreach Changelog API](/user-guide/outreach/outreach-rest-apis/outreach-changelog-api.md)
- [SMS Opt status API](/user-guide/outreach/outreach-rest-apis/sms-opt-status-api.md): Opt SMS status of the recipient numbers that have explicitly opted-in or opted-out across all the campaigns of an account
- [Status Callback URL (Outreach Custom Channel)](/user-guide/outreach/outreach-rest-apis/status-callback-url-outreach-custom-channel.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/overview-get-started.md
# Overview - Get started
{% hint style="info" %}
**Note**: You can create Universal agents only if it is enabled in your account. Contact Avaamo Support for further assistance.
{% endhint %}
In simple terms, a **Universal agent** is a "group of agents" that handles tasks of multiple agents in a single conversational flow. It can integrate and connect with independent virtual agents to route, filter, and provide real-time responses.
The primary feature of a Universal agent is the ability to have "one" agent across multiple departments in an Enterprise organization. Typically, large enterprises can have multiple departments, each with its own individual agents catering to different aspects of the organization. Since all agents are a part of the same organization, by integrating these into a Universal agent, you are providing a seamless and pleasant experience to the users.
The following illustration depicts an "Acme Enterprise" Universal agent linked with independent virtual agents such as - Acme HR, Acme IT, and Acme Finance. Each department can continue to build these agents independently. The user can just use one agent - the "Acme Enterprise" agent for all the queries across different departments:

### How does it work - Quick Overview?
Each agent linked to the Universal agents is referred to as a **Member agent**. When a user query is posted to a Universal agent, it routes the user’s intent to the appropriate **Member agent** for simple Q\&A or multi-turn conversations, renders member responses inline, and also manages the conversation context.
The main purpose of a Universal agent is to centralize agent interaction across multiple departments, domains, or sectors. Users can use one agent to find responses to queries that span multiple sectors.
On the home page, the Universal agent can be identified and differentiated from other agents as the icon for the Universal agent has a soft shadow extending from it.

### Create a Universal agent
{% hint style="info" %}
**Note**: Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
{% endhint %}
* In the Avaamo Platform UI, click the **Agents** option in the top menu, navigate to the **Development** tab, and select **Universal Agent** under **Create**.
* Specify the **Agent name**, **Agent description,** and **Agent avatar** for the Universal agent. Refer [Create a new agent ](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills)for more information on these fields.

### Open or view a Universal agent
Any newly created Universal agent is displayed on the **Agents** page. You can open or view a Universal agent by either clicking on the agent name, or clicking on the 3 dots under **Actions** for the Universal agent and selecting **View**.
### Delete a Universal agent
{% hint style="info" %}
**Notes**:
* It is recommended to use this option with caution because when you force unlock an agent all the unsaved changes made by the other user is lost.
* In order to use this option, you must at least have edit permission on the agent.
{% endhint %}
1. On the **Agents** page, click the 3 dots under **Actions** for the universal agent that you want to delete.
2. Select **Delete**. The agent is deleted and a confirmation box notifying you of the successful deletion of the agent is displayed.

### Make a copy of a Universal Agent
You can make a copy of your Universal agent using the **Make a copy** option. When you copy an agent, an exact clone of the Universal agent is created. This is similar to the **Make a copy** option available for independent agents. See [Make a copy](https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/make-a-copy), for more information.

You can always rename a Universal agent's copy by opening the agent and clicking the pencil icon (edit icon) next to the Universal agent's name.
### Skill in a Universal agent
A newly created universal agent has the **Greetings,** **Unhandled** and **Smalltalk** skills in it by default. You can configure this skill as required. See [Built-in skills](https://docs.avaamo.com/user-guide/how-to/add-skills-to-agent#built-in-skills), for more information.
{% hint style="info" %}
**Note:** Currently, the Frustration built-in skill is not available in the Universal agent. Frustration built-in skill requires configuring live agent option which is currently available only in the individual member agents.
{% endhint %}
Besides the **Greetings, Unhandled** and **Smalltalk** skills, you cannot create any other skill as the purpose of the universal agent is to combine and centralize the tasks of multiple agents. Hence, instead of the option to add skills, you have the option to add member agents. See [Add member agents](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent/add-member-agents) for more information.

### Configure Universal agents
The following options are available for configuration in Universal agents:
* **Channels**: Currently, you can deploy a Universal agent only on a Web, Android, or iOS channel. See [Configure web channel](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/configure-web-channel) for more information.
* **Permissions:** The procedure to manage access and permission remains the same as applicable for any regular agent. See [Add permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
* **Persistent menu:** The procedure to add a persistent menu remains the same as applicable for any regular agent. See [Persistent menu](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-persistent-menu), for more information.
* **Settings:** See [Define settings](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-settings) to understand how to manage general settings for your Universal agent.
* Note that `Max question repeat count` and `options in Advanced settings` are available only in the Member agents. These options are very specific on how individual agents prefer to handle the flow and hence are relevant only to the Member agents. This also provides better flexibility as it allows the member agents to handle these settings independently.
* The **Dispatcher handler** option is available only for Universal agents. In this handler, you can provide a script that is called before probing the member agents. For example, you can use this handler for setting up conditions before probing the member agents. See [Dispatch handler](https://docs.avaamo.com/user-guide/how-to/configure-agents/define-settings#dispatch-handler), for more information.
### Connecting to a live agent
When the user requests to talk to a live agent, links to the live agent for each member agent are displayed. The user can select which member's live agent the user wants to talk to.

{% hint style="info" %}
**Notes**:
* The skill command `#end agent` is not applicable to Universal agents, since the live agent interactions are handled by individual member agents. See [Skill commands](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands), for more information.
* A Live agent interaction in the Universal agents is an explicit action. It requires users to choose which live agent in the available member agents they wish to connect with. Hence, the live agent transfer rules such as "Silent switch" and "Switch to live agent for unhandled queries" are not applicable in the live agent interactions of a Universal agent. See [Live agent transfer rules](https://docs.avaamo.com/user-guide/how-to/configure-agents/switch-to-live-agent/pre-built-live-agent#live-agent-transfer-rules), for more information.
{% endhint %}
### Debug Universal agents
All the options available to debug agents such as JS errors, Debug log, Storage, and Conversation history are available in the Universal agents too. See [Debug agents](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents), for more information.
{% hint style="info" %}
**Notes:**
* When a query is posted to a Universal agent, then the conversation is recorded in the Conversation history of the Universal agent and in the corresponding member agent from where the response is received.
* JS errors, Debug logs, and Storage pages display details relevant only to the Universal agent.
{% endhint %}
### Test Universal agents
You can test Universal agents using the Simulator and using Regression testing. Regression testing in Universal agents allows you to test queries with its member agents.
* See [Agent simulator](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/simulator), for more information.
* See [Regression testing in Universal agents](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing-universal-agents), for more information on the format that you can use to test Universal agents.
### Monitor Universal agent
The **Monitor -> Analytics** page in the Universal agent provides a unified analytics dashboard for monitoring the usage across the member agents along with the total queries, unhandled queries, and disambiguations. See [Analytics in Universal agents](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/analytics-universal-agent), for more information.

### Key points
* Currently, Universal agents do not participate in Agent life cycle stages.
* Currently, Universal agents can be deployed on the Web, iOS, and Android channels.
* Only supports conversation in the English language.
* Currently, [information masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking) is not supported in Universal agents. This implies that if you have a Universal agent with masking enabled for member agents, then even though the responses are masked in the member agents, the same responses remain unmasked in the Universal agent.
* You can also use `context.memberAgents` to get a list of all enabled member agents. The returned object is an array and you can use this information in any JS block of the Universal agent to get the member key and member name:
```json
"memberAgents": [
{
"key": "home_loan",
"name": "Home Loan"
},
{
"key": "education",
"name": "Educational Loan Virtual Agent"
},
{
"key": "personal",
"name": "Personal Home Loan Agent"
},
{
"key": "vehicle",
"name": "Vehicle Loan"
}
]
```
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/avaamo-agent-assist/overview-key-features.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/overview-key-features.md
# Source: https://docs.avaamo.com/user-guide/llamb/overview-key-features.md
# Source: https://docs.avaamo.com/user-guide/ai-agent/overview-key-features.md
# Overview - Key features
The `AI Agent` is a next-generation agent built to power highly intelligent and dynamic voice or text-based conversations. With advanced context awareness and adaptive response capabilities, AI Agents elevate query handling and user engagement—delivering interactions that feel more natural, intuitive, and human-like than ever before.
With AI agents a new type of skill - `Prompt skills` is also introduced in this release. Powered by prompt skills, these agents are designed to understand, reason, and act – independently and effectively.
There is no need for extensive training, as required with Classic agents. Instead, you can define all instructions using the [Prompt Skill](https://docs.avaamo.com/user-guide/skills/prompt-skill), significantly reducing the time needed to build a skill. Along with prompts, you can build complex scenarios using built-in functions, and customized functions.
You can create multiple prompt skills, and the agent can seamlessly redirect interactions from one skill to another based on user queries, ensuring a smooth and dynamic conversation flow.
## Sneak peek
Here's a quick sneak peek at the AI agent:
{% hint style="info" %}
**Note**: AI agent is enabled on demand. Contact your dedicated Customer Success Manager for further assistance.
{% endhint %}
On the home page, an `AI Agent` can be easily identified and distinguished from other agents by its unique icon, which includes a small logo within it.
This article outlines the [key features](#key-features) of AI agents and the [next steps](#next-steps) to leverage these agents in the Avaamo Conversational AI Platform.
## Key features
### **Natural and dynamic conversations**
Unlike traditional structured flows, an AI agent enables real-time, human-like interactions with flexibility in conversation order, emotional intelligence, and natural responsiveness to user inputs.
The examples below demonstrate how the AI agent embodies these qualities, offering a more dynamic experience compared to the Classic agent (formerly known as the Standard agent).
| AI agent flow | Classic agent |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | |
### Autonomous decision-making
The AI Agent can make decisions based on predefined goals and contextual data without human intervention. It dynamically adjusts its actions based on real-time inputs and past interactions.
The examples below illustrate how the AI agent adapts its actions based on real-time inputs and makes intelligent decisions aligned with predefined goals.
| Example 1 | Example 2 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | |
### Seamless Skill Transfer
The AI agent can seamlessly transfer conversations between different skills while maintaining context, ensuring a smooth and uninterrupted user experience. Using predefined functions, the agent intelligently hands off tasks — for example, moving from general assistance to specialized hotel booking.
This capability allows the AI agent to manage complex workflows efficiently, guiding users through multiple services without manual intervention or loss of conversation flow.
### **Multimodal Interaction**
The AI Agent supports `voice and text-based interactions`, providing users with a seamless conversational experience.
* **Voice Interaction:** Offers a human-like conversation experience, making interactions more natural and engaging.
* **Text Interaction:** Provides structured responses in a chat format, ensuring clarity and consistency.
### **Smart Integration with LLaMB**
The AI agent integrates seamlessly with LLaMB to enable smooth context transfer and adaptive automation. This integration allows the agent to carry forward user context across interactions and leverage LLaMB's advanced capabilities to automate responses and actions dynamically. As a result, users experience more accurate, relevant, and efficient assistance, even as conversations shift across topics or tasks.
### **Context-aware responses**
The AI Agent dynamically adapts to user inputs using predefined `prompt skills`, eliminating the need for a fixed question-answer sequence.
Users can **edit or change their inputs at any moment** without restarting the conversation.
For example, while booking a flight, if a user mistakenly enters the wrong **destination**, they can **correct it mid-conversation** without restarting the process.
### **Enhanced query handling**
The AI Agent efficiently manages **multi-turn and complex queries**, allowing seamless transitions between different tasks.
It switches between prompt skills effortlessly to answer related questions.
For example, if a user is booking a flight but suddenly wants to check their past booking details, they can do so without disrupting the current flow—simply by asking about past bookings.
### **Comprehensive conversation logging**
The system records complete conversation history, including user-agent interactions, function calls with parameters, transcripts, and corresponding audio recordings for reference.
### **Cost efficiency - Build agents faster**
AI agents are cost-efficient, require no training, and eliminate the need for complex dialog flows. They enable faster development and quick iteration, allowing teams to experiment and refine results easily through prompt adjustments.
### **No-Code/Low-Code**
Prompts enable non-technical users to interact with AI systems effectively, eliminating the need to write code.
### **Fluid Conversation**
AI agents maintain natural, flowing conversations without sounding robotic. They understand context across turns, enabling users to speak freely without rigid commands.
### **Follow-On**
Agents can ask for and remember key follow-up information—like your location or preferred provider—right after initial intent is captured, helping personalize and complete the task.
### **Switch Topic Mid-Conversation**
Users can change topics on the conversation—for example, asking about a service or trying a demo before booking an appointment. The agent can seamlessly switch focus without losing the overall context.
### **Agent Callback**
When the AI agent can not resolve an issue, it can collect necessary details and schedule a callback from a human agent, ensuring continuity and a smooth handoff.
### **Interruption**
Users can interrupt the AI agent mid-response (e.g., “Actually, never mind”) and the agent stops and adjusts based on the new input, instead of continuing its scripted response.
### **Silence**
AI agents can handle user silence smartly, either pausing to wait for input or gently prompting the user to resume the interaction after a certain time.
### **Try to break it**
Even if users try to confuse or “break” the agent with odd inputs or edge cases, the agent follows enterprise guardrails to stay on task, stay secure, and avoid hallucinations or inappropriate responses.
### **Detect Frustration**
By picking up signals like repeated inputs, negative language, or abrupt changes in tone, the AI can detect user frustration and adapt by simplifying, escalating, or offering human support.
## Next steps
* Understand what is required in the [Before you begin](https://docs.avaamo.com/user-guide/ai-agent/before-you-begin) section.
* Start by creating a new [AI agent](https://docs.avaamo.com/user-guide/ai-agent/create-an-ai-agent).
* You are now ready to [get started](https://docs.avaamo.com/user-guide/get-started) by exploring AI agents in the Avaamo Conversational AI Platform.
Refer [AI Agent](https://docs.avaamo.com/user-guide/ai-agent), for more information.
---
# Source: https://docs.avaamo.com/user-guide/outreach/overview.md
# Source: https://docs.avaamo.com/user-guide/live-agent-console/overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/web-channel/overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/overview.md
# Source: https://docs.avaamo.com/user-guide/llamb/llamb-filters/overview.md
# Overview
Avaamo's LLaMB is a new low-code framework designed to enable the safe, secure, and rapid development of powerful generative AI agents for enterprise use. Leveraging large language model (LLM) technology, LLaMB delivers personalized and summarized results while ensuring the necessary levels of security and compliance for enterprise applications. It provides a practical and secure solution for deploying LLMs, enhancing knowledge search experiences for both employees and customers.
However, implementing LLaMB introduces substantial challenges such as,
* Data security
* Mitigating prompt injection attacks, where malicious inputs manipulate the model into generating harmful outputs.
* Instances of jailbreaks, where users bypass safety mechanisms to elicit inappropriate or dangerous responses from the AI, further expose system vulnerabilities.
* Safeguarding against the disclosure of sensitive information and managing the generation of insecure or biased outputs are critical concerns.
This section details the filters and tools in LLaMB that provide robust and comprehensive safeguards essential for enterprise-grade LLM applications:
Social filters Detect and filter harmful content in both user prompts and generated outputs in the following categories Racism Hate Violence Self-harm Sexual harassment Discrimination Drugs social-filters Grounding filters Ensures the quality, accuracy, and relevance of the generated output, and helps to "ground" the models in the context of the specific use-case to obtain accurate and relevant output. grounding-filters Brand Protection filters Protect your brand, and ensure that your content is safely and ethically used.
Brand Awareness Business taxonomy
brand-protection-filters Hallucination filters Eliminate hallucinations and help in the detection and correction of fabricated or false content generated by the model. hallucination-filters
By integrating these rigorous input validation, continuous monitoring, and strict data privacy measures, LLaMB offers a secure and efficient approach to enterprise AI deployment.
---
# Source: https://docs.avaamo.com/user-guide/ref/parallel-development-qa-and-smalltalk-faqs.md
# Parallel development (QA & Smalltalk) FAQs
The following lists a few frequently asked questions about parallel development in Q\&A and Smalltalk skills.
### 1. What are some of the recommended best practices?
The following lists a few best practices to consider:
* **Adding and editing Q\&A** - Multiple developers can add or edit questions and answers simultaneously in the same Q\&A or Smalltalk skill, encouraging faster development of the skill. As a best design practice, it is recommended to distribute a set of intents among developers, so that it is easy to maintain and manage and results in seamless collaboration.
* **Adding languages** - Multiple developers can add and save language packs simultaneously in the Q\&A skill. Each language pack can be saved independently. As a best practice, it is recommended that individual developers work on a single language pack independently. It helps to easily manage and maintain language packs.
### 2. Can I edit Dialog skill, when another user is editing a Q\&A skill simultaneously?
Yes, they can. One developer can unlock the agent and edit the Dialog skill, while the other developer works on the Q\&A. Editing Q\&A skills required lock only at each intent level.
### 3. Can I import Q\&A using CSV, when another user is editing a Q\&A intent in the same skill?
No, you cannot. You can import only when all of the existing questions and answers in the Q\&A skill are unlocked.
### 4. Can I delete all (Clear) Q\&A, when another user is editing a Q\&A intent in the same skill?
No, you cannot. You can clear all the Q\&A only when all of the existing questions and answers in the Q\&A skill are unlocked
### 5. Can I publish a Q\&A skill, when another user is editing a Q\&A intent of the same skill?
Yes, you can. At the point of publishing, whatever is saved in the Q\&A skill, is published to the Skill store.
### 6. Can I import/re-import other skills from the skill store, when another user is editing a Q\&A intent?
Yes, you can. One developer can unlock the agent and import other skills, while the other developer works on the Q\&A. Editing Q\&A skills required lock only at each intent level. The same holds good for publish/re-publish as well.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/parsing-templates.md
# Source: https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/parsing-templates.md
# Parsing templates
{% hint style="info" %}
**Note**: Parsing template is required only when uploading content to LLaMB via URL.
{% endhint %}
Parsing templates serve the purpose of extracting chunks of content from uploaded information, enabling the creation or updating of a document group's knowledge base.
LLaMB can process PDF files seamlessly, eliminating the need for any preprocessing or parsing templates. For HTML content, the requirement for parsing templates has been drastically simplified. In this article, you can learn how to build custom parsing templates to ingest HTML content based on your requirements.
### Overview
Open the `LLaMB content skill` and click `Parsing templates` in the left navigation. A list of all the inbuilt parsing templates is displayed. These are non-editable templates that can only be viewed for quick reference.
Name Description ID Database ID for this template. You can use this identifier in the Content Ingestion APIs -> parsing_template_id parameter to upload documents or files.
Note that the parsing template identifier can vary based on the instance. When using the parsing template identifier in the APIs, for example, in the Content Ingestion API, pick the parsing template identifier relevant to your instance. See Content Ingestion APIs , for more information.
File Name Name of the template File Type The file type for which this parsing template can be used when uploading. Last Updated The date on which this template was last uploaded. Actions Only the View action is available.
### Create a custom parsing template
In addition to the parsing templates provided by Avaamo, you can create new custom templates to ingest HTML content based on your requirements. Click **Add New** to add your template.
Provide the following details in the **Create Parsing Template** dialog box.
* **Name:** Name of the custom template.
* **Key:** Unique key for the template.
* **File type:** Choose a file type from the given options. Currently, this applies only to URLs.
* **Template JSON:** The JSON file or template that will be used for parsing.
{% hint style="info" %}
**Notes**:
* Creating a custom parsing template is use-case-specific. Contact Avaamo Support, for further assistance.
* After you save the custom parsing template, a unique identifier is generated by the platform to identify the parsing template. You can use this identifier in the `Content Ingestion APIs -> parsing_template_id` parameter to upload documents or files. See [Content Ingestion APIs](https://docs.avaamo.com/user-guide/llamb/llamb-rest-apis/content-ingestion-apis), for more information.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-1-creating-my-agent.md
# Part 1: Creating my agent
- [Chapter 1: Getting started](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started.md)
- [Exercise 1.1: Cloning a sample agent](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.1-cloning-a-sample-agent.md)
- [Exercise 1.2: Asking questions to the agent](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.2-asking-questions-to-the-agent.md)
- [Exercise 1.3: Changing agent avatar and name](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.3-changing-agent-avatar-and-name.md)
- [Exercise 1.4: Changing welcome message](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.4-changing-welcome-message.md)
- [Exercise 1.5: Entity types](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.6-entity-types.md)
- [Exercise 1.6: Deploying your agent to a web page](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-1-getting-started/exercise-1.6-deploying-your-agent-to-a-web-page.md)
- [Chapter 2: Building an Answers skill (Deprecated)](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill.md)
- [Exercise 2.1: Create an Answers skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.1-create-an-answers-skill.md)
- [Exercise 2.2: Uploading a document](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.2-uploading-a-document.md)
- [Exercise 2.3: Examining Answers knowledge base](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.3-examining-answers-knowledge-base.md)
- [Exercise 2.4: Building an Answers Skill from a URL](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.4-building-an-answers-skill-from-a-url.md)
- [Exercise 2.5: Training the knowledge models](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-2-building-an-answers-skill/exercise-2.5-training-your-skill-and-training-the-knowledge-models.md)
- [Chapter 3: Building a Q\&A skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill.md)
- [Exercise 3.1: Train the Skill with Questions and Answer Pairs](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.1-create-a-q-and-a-skill.md)
- [Exercise 3.2: Adding Variations to Question and Answer Pairs](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.2-add-questions-and-answers.md)
- [Exercise 3.3: Configuring User Feedback](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.3-configuring-user-feedback.md)
- [Exercise 3.4: Adding an Introductory Message to Q\&A Skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.4-adding-an-introductory-message-to-q-and-a-skill.md)
- [Exercise 3.5: Adding an Outro Message to your Q\&A Skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-3-building-a-q-and-a-skill/exercise-3.5-adding-an-outro-message-to-your-q-and-a-skill.md)
- [Chapter 4: Building a Smalltalk skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill.md)
- [Exercise 4.1: Default Smalltalk skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.1-default-smalltalk-skill.md)
- [Exercise 4.2: Creating a Smalltalk skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.2-creating-a-smalltalk-skill.md)
- [Exercise 4.3: Adding variations to your Smalltalk questions](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.3-adding-variations-to-your-smalltalk-questions.md)
- [Exercise 4.4: Train Q\&A pairs with variations](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.4-train-q-and-a-pairs-with-variations.md)
- [Exercise 4.5: Test Smalltalk in your agent](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-4-building-a-smalltalk-skill/exercise-4.5-test-smalltalk-in-your-agent.md)
- [Chapter 5: Building a Dialog skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill.md)
- [Exercise 5.1: Creating a Dialog skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.1-creating-a-dialog-skill.md)
- [Exercise 5.2: Creating a conversation flow](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.2-creating-a-conversation-flow.md)
- [Exercise 5.3: Capturing data from a conversation](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.3-capturing-data-from-a-conversation.md)
- [Exercise 5.4: Adding a JavaScript](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.4-adding-a-javascript.md)
- [Exercise 5.5: Test the Dialog skill](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.4-test-the-dialog-skill.md)
- [Exercise 5.6: Deploy your Agent on a Web Channel](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-5-building-a-dialog-skill/exercise-5.5-deploy-your-agent-on-a-web-channel.md)
- [Chapter 6: Agent analytics](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics.md)
- [Exercise 6.1: Analytics Dashboard](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.1-analytics-dashboard.md)
- [Exercise 6.2: User Journey Display](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.2-user-journey-display.md)
- [Exercise 6.3: Query Insights](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.3-query-insights.md)
- [Exercise 6.4: Monitoring User Feedback](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-6-agent-analytics/exercise-6.4-monitoring-user-feedback.md)
- [Chapter 7: Channels](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels.md)
- [Exercise 7.1: Configuring an agent in a web page](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.1-configuring-an-agent-in-a-web-page.md)
- [Exercise 7.2: Configuring a SMS Channel](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.2-configuring-a-sms-channel.md)
- [Exercise 7.3: Configuring a Facebook Messenger Channel](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-7-channels/exercise-7.3-configuring-a-facebook-messenger-channel.md)
- [Chapter 8: Live agent integration](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-8-live-agent-integration.md)
- [Exercise 8.1: Invoking a Live Agent](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-8-live-agent-integration/exercise-8.1-invoking-a-live-agent.md)
- [Exercise 8.2: Avaamo Live Agent Console](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-8-live-agent-integration/exercise-8.2-avaamo-live-agent-console.md)
- [Chapter 9: Language support](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-9-language-support.md)
- [Exercise 9.1: Adding a Language to an Agent](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-9-language-support/exercise-9.1-adding-a-language-to-an-agent.md)
- [Exercise 9.2: Overriding Default Language Translation](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-9-language-support/exercise-9.2-overriding-default-language-translation.md)
- [Chapter 10: Life-cycle management and agent permission](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-10-life-cycle-management-and-agent-permission.md)
- [Exercise 10.1: Understanding Life-Cycle Management](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-10-life-cycle-management-and-agent-permission/exercise-10.1-understanding-life-cycle-management.md)
- [Exercise 10.2: Understand Agent Permission](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-10-life-cycle-management-and-agent-permission/exercise-10.2-understand-agent-permission.md)
- [Chapter 11: Skill Store](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store.md)
- [Exercise 11.1: Avaamo Skill store](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.1-avaamo-skill-store.md)
- [Exercise 11.2: Company Skill Store](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.2-company-skill-store.md)
- [Exercise 11.3: Creating new categories in the skill store](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.3-creating-new-categories-in-the-skill-store.md)
- [Exercise 11.4: Adding Skills to the Company skill store](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.4-adding-skills-to-the-company-skill-store.md)
- [Exercise 11.5: Updating a published skill to a new version](/user-guide/tutorials-and-exercises/part-1-creating-my-agent/chapter-11-skill-store/exercise-11.5-updating-a-published-skill-to-a-new-version.md)
---
# Source: https://docs.avaamo.com/user-guide/tutorials-and-exercises/part-3-advanced-topics.md
# Part 2: Advanced topics
- [Chapter 12: Debugging Tools](/user-guide/tutorials-and-exercises/part-3-advanced-topics/chapter-22-debugging-tools.md)
- [Chapter 13: Programming](/user-guide/tutorials-and-exercises/part-3-advanced-topics/chapter-23-programming.md)
- [Chapter 14: APIs](/user-guide/tutorials-and-exercises/part-3-advanced-topics/chapter-24-apis.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/perform-common-actions.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-q-and-a-designer/build-and-manage-q-and-a-skill/perform-common-actions.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/manage-avaamo-answers-1/perform-common-actions.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/build-and-manage-smalltalk-skill/perform-common-actions.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/build-and-manage-dynamic-q-and-a-skill/perform-common-actions.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/perform-common-actions.md
# Perform common actions
You can perform the following actions in the skill flow editor:

{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can build and manage dialogs (conversational flow) immediately after creating a Dialog Skill. See [Create new Dialog skill](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-dialog-skill), for more information.
* If you wish to edit skills in an agent, then:
* Navigate to the Agents tab in the top menu. Search and open the required agent.
See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* In the **Agent** page, navigate to the Skills option in the left navigation menu. Search and open the required skill.
{% endhint %}
## Edit Dialog skill
You can edit the skill to update the skill name and description as required.

* In the **Dialog skill** page, click **Edit** to unlock the skill.
* Click the **pencil icon** at the top-left corner next to the skill name.
* Edit the skill details.
{% hint style="info" %}
**Note**: By default, the skill key is non-editable. Click **Edit** to edit the skill key. It is recommended to edit the skill key with caution. If you update the skill key and if the key is used say in JS code or in regression testing, then you must update the skill key manually.
{% endhint %}
* Click **Update** and click **Save** to save the skill details.
## Edit intents and responses
You can edit the intents and responses of a Dialog skill.
* In the **Dialog Skill** page, click **Edit** to unlock the skill
* Click the **Implementation** option in the left navigation pane. A dialog flow tree is displayed.
* Click the intent that you wish to edit. Edit the intent details as required and click **Save**.
{% hint style="info" %}
**Note**: By default, the **Intent key** is non-editable. Click **Edit** to edit the Intent key. It is recommended to edit the Intent key with caution. If you update the Intent key and if the key is used say in JS code or in regression testing, then you must update the Intent key manually.
{% endhint %}
* Click the skill message that you wish to edit. Edit the [Prompt details](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses) and [Advanced settings](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/advanced-settings) as required and click **Save**. See [Build skill responses](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses), for more information.on
## Move nodes in the flow
In the dialog skill flow editor, **right-click** on any of the nodes to perform the following actions:
Actions Description Copy Copies a single node or the entire branch within the same dialog flow or between agents. See Copy node between agents , for more information. Move left Moves the node to its left in the dialog flow. This is not enabled for the left-most node in the dialog flow and for the first node or the root node in the flow. Move right Moves the node to its right in the dialog flow. This is not enabled for the right-most node in the dialog flow and for the first node or the root node in the flow. Delete Deletes either a single node or the entire branch and for the first node or the root node in the flow. This is not enabled for the first node or the root node in the flow. Paste Paste a copied node either to a new node or to an existing node. This is enabled only when you have a node that is copied. This is not enabled for the first node or the root node in the flow.
## Copy node between Dialog skills of agents
You can copy a single node or the entire branch from the Dialog skill of one agent to the Dialog skill of another agent.
* Navigate to the Agent -> Dialog skill -> Implementation page of the agent from which you wish to copy the node. Right-click the node and click **Copy**. Choose if you wish to copy a single node or the entire branch from the agent.
* Navigate to the Agent -> Dialog skill -> Implementation page of the agent to which you wish to copy the node or branch. Right-click the node where you wish to copy and click **Paste**. The following prompt is displayed:
* Click in the area and press either CMD/CTRL + V. The following message is displayed:
* Click **Paste** to complete the copy-paste of a single node or entire branch between agents
## Search, View, and Print
In the dialog skill flow editor, you can use the options provided at the right side of the editor to search, view, and print the flow.
### Search nodes
Click the **Search** icon on the right side of the editor. Start typing the intent name or the intent key that you wish to search. As you type, the results are filtered and displayed in the search.

Select the required node. The corresponding node is highlighted in the flow:

### Other actions
You can also perform the following actions
Actions Description Search Search for the nodes in the dialog flow. Zoom-in and Zoom-out Use + and - icons to zoom in and zoom out respectively. Maximize and Restore Use this to view the dialog flow in full screen and to restore it back to the normal view. Print Use this to print the dialog flow.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions.md
# Source: https://docs.avaamo.com/user-guide/configuration/permissions.md
# Permissions
By default, when you create an agent, you are the **owner** of the agent. Additionally, when a user promotes an agent that the user is automatically the owner of the agent in the promoted stage. As an owner of the agent, you can assign permissions to different people within your company for your agent as required. This allows different users to participate and collaborate in each stage of the agent life-cycle.
There are four types of permissions available for an agent:
* **View**: Users can only view the agent but cannot edit the agent. Note that anyone with at-least view permission on the agent can submit the Unhandled query analyzer job.
* **Edit**: Users can view and edit the agent.
* **Publish**: Users can view agents, edit agents, and publish skills from the agent to the skills store.
* **Owner**: Full access to the agent. Users can view agents, edit agents, publish skills from the agent to the Skill store, and edit agent permissions.

Refer [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
---
# Source: https://docs.avaamo.com/user-guide/configuration/persistent-menu.md
# Persistent menu
A `Persistent menu` lets you specify menu options that remain available to the user. A persistent menu clearly communicates your agent's core capabilities to both first-time and returning users. This is an optional configuration.
Refer [Persistent menu](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-persistent-menu), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/facebook-channel/persona-configuration.md
# Persona Configuration
The Facebook channel integration on the Avaamo platform supports creating new and fun **Personas** for your agent, deployed on your Facebook page. Personas are like the different avatars that you can assign to your agent.
#### **Prerequisites**
Let us create a fun persona for our agent, ensure you have the following:
* Admin access to your Facebook page.
* Images that need to be used as agent avatars.
* Access to the agent to configure personas.
{% hint style="info" %}
**Note**: This persona concept is available only on the Facebook channel.
{% endhint %}
## Configure Persona on Avaamo Platform
You would need to configure the persona for the agent on the Avaamo platform by using javascript code or by selecting the persona option under agent skill's responses.
### Javascript Code
To add Facebook persona feature to your agent using the javascript code, follow the steps below:
* In the **Agent** -> **Configuration -> JS files** tab, click **Add new**.
* Specify the name of the JS file and click **Create**.
* A new empty JS file is created. In the **Scripts** page, click the JS file and add the code as required.
```
if(!Storage.global.get("Jerry")){
let Jerry = await(Facebook.findOrCreatePersona({name: "Jerry", profile_picture_url: "https://i.pinimg.com/originals/c0/16/7f/c0167fe13c1217112025cc41ae20abfc.jpg"}));
Storage.global.set("Jerry", Jerry.id);
}
```
* Click Save.
* In the **Agent** -> **Skills** tab select the required skill.
* In the **Dialog skill** page, click the **Implementation** tab.
* Click on the intent and on the user intent window, enable the switch to **Yes** for post-processing.

* For the Post-processing Script enter the javascript code.
```
Facebook.switchPersona(Storage.global.get("Tom"));
```
* Click on Save to add the javascript code to the agent flow.
### Persona Button
To add the Facebook persona feature to your agent using the persona button, follow the steps below:
* In the **Configuration -> Settings** tab, click on **Add New** in Persona section.
* Enter the name of the persona and upload a persona avatar.
* Click on the dialog designer tab and click on the skill response where you want to add the persona feature. Click on the plus icon and select **Switch Persona** from the list.

* On the right panel, under persona, select the persona you want your skill to switch.

## Agent on Facebook
When the agent is deployed on the Facebook channel, the persona will be available to the end-user.\
When the end-user query matches with the ‘User Intent’, then the responding agent persona avatar will change as per the persona configured.
---
# Source: https://docs.avaamo.com/user-guide/how-to/plan-your-development-process-agent-life-cycle.md
# Plan your development process (Agent life cycle)
Typically, any agent goes through different stages in its life cycle from inception to production - Development, Testing, Staging, and Production. You can leverage the Avaamo Platform to iteratively design and build agents through all these different stages of the life cycle followed in any enterprise product development. This approach enables:
* **Structured release management process**: You can develop, test, stage, and then deploy the agents in different environments within the Avaamo Conversation AI Platform. Based on your roles and permission, you can promote an agent from one stage to another in its life cycle. When an agent is promoted, an exact clone of the agent is created in the promoted environment. Users with the required roles can work on the agent in the promoted environment without affecting the agent in other stages. See [Stages in agent lifecycle](#stages-in-agent-life-cycle), for more information.
* **Different teams to participate and collaborate:** This approach also allows different teams to participate and collaborate in different stages of the agent life cycle. See [Roles in the agent life cycle](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions#roles-in-agent-life-cycle), for more information on how to assign the required roles and permissions for users in different stages of an agent life cycle.
The following illustration depicts the life cycle of an agent in the Avaamo Platform:

See [How does it work?](#how-does-it-work) to understand the completed workflow of an agent life cycle.
## Stages in the agent life cycle
The agent life cycle is comprised of various stages in which an agent is deployed and executed within the Avaamo Conversation AI Platform:
* **Development**: This is the environment in which the development team originally develops
the agents, skills, and configurations around agents.
* **Testing:** This is the environment in which the testing team perform either manual testing or
automated checks using a tool like regression testing to test and certify the functionality (new and changed) of the agents and skills.
* **Staging**: This is an environment for testing that exactly resembles a production environment. It seeks to mirror an actual production environment as closely as possible and may connect to other production services, using production or other pre-production integrations system configurations.
* **Production**: The production environment is also known as live, as it is the environment that users directly interact with. Deploying agents to production is the most sensitive step and mostly done by very specific teams with access to a production system where the Avaamo agent is integrated. A production environment includes sensitive access information with which agents are integrated such as API access token of other production systems, system username password of other production systems.
## How does it work?
Broadly, the following lists a typical workflow in an agent life cycle:
{% hint style="info" %}
**Note**: See [Design agents](https://docs.avaamo.com/user-guide/how-to/build-agents/design-agents), for more information on best practices for building agents in the Avaamo Platform.
{% endhint %}
### Create users and roles
Identify a team of people responsible for working in different stages of an agent's life cycle. Create users and assign required roles to collaborate and participate in different stages such as Development, Testing, Staging, and Production. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.

### **Development**
The following illustration depicts a typical workflow of an agent in the development stage:

* Gather all the requirements for developing an agent. Start and plan from a small definitive set of requirements.
* Developers can start designing the agent by learning all the best practices. See [Design agents](https://docs.avaamo.com/user-guide/how-to/build-agents/design-agents), for more information.
* Build the agent either from scratch or by importing from sample agents. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent), for more information.
* Developers must ensure to test their agents incrementally using Simulator. See [Simulator](https://docs.avaamo.com/user-guide/build-agents/test-agents#simulator), for more information.
* Developers can use debugging tools such as Debug logs, JSErrors, or Conversation history to analyze and fix defects. See [Debug agents](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents), for more information. Individual skills can also be debugged using insights and logs provided at the skill level.
* Once the first iteration of development is completed, the developer notifies a tester and provides at least view permission for the agent to the tester. See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
{% hint style="success" %}
**Key points (Development)**:
* Involve only Developers during agent development.
* Perform unit testing at each stage as you develop agents.
{% endhint %}
### **Testing**
The following illustration depicts a typical workflow of an agent in the testing stage:

* The tester promotes the agent from development to testing stage,
* A tester can use manual checks or automated checks tools such as Regression testing to test the agents. See [Regression Testing](https://docs.avaamo.com/user-guide/build-agents/test-agents#regression-testing), for more information.
* During testing, testers communicate with the developers to fix issues and defects. The developer fixes these issues in the development stage that can be pulled by the tester using the **Pull updates** option. See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.


* Once the testing is completed and certified, the tester notifies a staging user and provides at least view permission for the agent to the staging user.
{% hint style="success" %}
**Key points (Testing)**:
* Involve only Testers in the Testing phase.
* Perform thorough regression testing on your agents.
{% endhint %}
### **Staging**
The following illustration depicts a typical workflow of an agent in staging:
* The staging user promotes the agent from testing to the staging stage.
* During staging, a staging user may connect to other production services, using production or other pre-production integrations system configurations.
* Similar to the testing stage, the staging user communicates with the developers to fix issues and defects. The developer fixes these issues in the development stage that can be pulled into testing and then staging using the Pull updates option. See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.


* Once the staging environment is stable, the staging user tester notifies a production user and provides at least view permission for the agent to the production user.
{% hint style="success" %}
**Key points (Staging)**:
* The staging environment must be an exact replica of your production environment.
* Perform thorough testing on your agent before moving to production.
{% endhint %}
### **Production**
The following illustration depicts a typical workflow of an agent in production:
* The production user promotes the agent from staging to the production stage.
* This is where the agent is live, as it is the environment that users directly interact with.
* Any defects or issues that require hotfixes can be implemented in the production environment itself. However, a production user must ensure to communicate the same to the developer working on the same agent in the development environment. This ensures that the changes are implemented in the development instance and any pull's from the development does not overwrite the changes to the production hot-fixes.
* If there are any major changes required, then it is recommended that the agent goes through the complete cycle beginning from the development stage.


Improvements and enhancements to an agent is an iterative process and the cycle from development to production continues. Avaamo Platform provides several tools and roles to monitor the performance of the agents. These can be used to continuously improve the agent to provide a better user experience. See [Monitor agents](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze), for more information.
{% hint style="success" %}
**Key points (Production)**:
* Do not perform any testing or debugging in the production environment.
* Do not perform any load or regression testing in the production environment. Such testing must be done in the staging or testing environment.
{% endhint %}
## Key points
It is recommended to make a note of the following key points applicable to the agent life cycle:
* An agent can be promoted from one stage to another only once. Once promoted, you cannot revert the operation. However, you can delete the promoted agent and promote it again from its previous stage.
* When an agent is promoted to the next stage,
* The user who promoted the agent is the owner of the agent in the promoted stage. As an owner of the agent, the owner can also add other team members as required.
* The first step as an owner of the agent in any stage is to configure the agent with variables specific to the environment. See [Define environment variables](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-environment-variables), for more information.
* An exact clone of the agent is created in the promoted environment. Users with the required roles can work on the agent in the promoted environment without affecting the agent in other stages.
* The user in the promoted environment can use the Pull updates option available for each promoted agent to pull the updates from the previous stage.
* Note that not all agent details are promoted or pulled from one stage to another when you promote or pull updates. See [What are not promoted or pulled?](https://docs.avaamo.com/user-guide/build-agents/manage-agents/promote-and-pull-updates#what-are-not-promoted-or-pulled) for more information.
* Currently, all the notification process between stages is outside the scope of the platform and must be handled externally.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/polls.md
# Polls
You can add an input card with an option to poll to capture the opinion or vote of the users interacting with the skill.
## Syntax
The following is the syntax to add a poll response:
{% hint style="info" %}
**Notes**:
* There is a 191-character limit for all the user-defined text fields.
* If you are using custom feedback, then for each option in the Polls you must specify the UUID. Currently, in the Custom feedback JS code, it is recommended to use user-friendly identifiers for UUIDs instead of a random-generated number in the "Options" object as it helps you to identify the message in the [User feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) page. See [Example 3: Custom feedback](#custom-feedback), for a sample code. Also see [Custom feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/custom-feedback), for more information.
{% endhint %}
```yaml
"card": {
"inputs": [{
"type": "poll",
"title": "<>",
*"default_value": "<>",
*"should_validate": true/false,
"uuid": "<>",
"options": [{
*"uuid": "<>",
"option": "<>"
},...]
}]
}
* - Indicates optional parameter
… - Indicates one or more parameter
```
Attribute Description Type Attribute Description Type title Indicates the title of the poll. String default_value Indicates the default value selected in the poll when rendered to the user. You must specify the uuid value from the options in the default value.
Note that this is an optional attribute.
String should_validate Indicates if the user can skip entering values for the field or not. By default, the value is set to true . Boolean uuid Indicates a secure random UUID that can be used later to get the text entered by the user. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
File uploaded name is available in the context.last_message .
Syntax: context.last_message.<<uuid>>
String options Indicates an array of options in the poll. If you wish to specify the default value, then specify the following in each array element:
uuid : Indicates a secure random UUID that can be used to specify the default_value. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
option : Value of the optionAn array of JSON key-value pairs
## **Examples**
### Polls without default value
The following is a sample code to illustrate how to use Polls in cards without providing any default value:
```yaml
return [{
"card": {
"inputs": [
{
"type": "poll",
"title": "How was our service?",
"uuid": "52837223-a60d-4e8e-9a90-c92e40f70fe9",
"options": [
"Good",
"Very Good",
"OK",
"Need to improve"
]
}
]
}
}]
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` to get the option selected by the user.
### Polls with default values
The following is a sample code to illustrate how to use Polls in cards with a default value:
```yaml
return [{
"card": {
"inputs": [
{
"type": "poll",
"title": "How was our service?",
"default_value": "0090a567-8351-4ef4-b5db-e10b0ce83114",
"uuid": "52837223-a60d-4e8e-9a90-c92e40f70fe9",
"options": [
{
"uuid": "bd52ff4b-f5ea-4403-8134-b32abea16464",
"option": "Very Good"
},
{
"uuid": "0090a567-8351-4ef4-b5db-e10b0ce83114",
"option": "Good"
},
{
"uuid": "7d09b083-12ca-4696-8093-38f7db21efdd",
"option": "OK"
},
{
"uuid": "cd81194d-dea0-466d-92e4-151d435490ed",
"option": "Need to improve"
}
]
}
]
}
}]
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` to get the option selected by the user.
### Custom feedback
The following is a sample code to illustrate how to use Polls in Custom feedback. Note that here, it is recommended to use user-friendly identifiers for UUIDs instead of a random-generated number in the "Options" object as it helps you to identify the message in the [User feedback](https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/feedback) page.
```javascript
return {
"notification_message": "Thank you for your valuable feedback. We hope to see you next time.",
"card": {
"inputs": [
{
"type": "poll",
"title": "How was our service?",
"default_value": "0090a567-8351-4ef4-b5db-e10b0ce83114",
"uuid": "52837223-a60d-4e8e-9a90-c92e40f70fe9",
"options": [
{
"uuid": "Very Good",
"option": "Very Good"
},
{
"uuid": "Good",
"option": "Good"
},
{
"uuid": "OK",
"option": "OK"
},
{
"uuid": "Need to improve",
"option": "Need to improve"
}
]
}
]
}
}
```
You can use `context.last_message.<>` to get the option selected by the user.
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent/pre-built-live-agent.md
# Source: https://docs.avaamo.com/user-guide/configuration/live-agent/pre-built-live-agent.md
# Pre-built live agent
The Avaamo platform supports integration with a **live agent** for scenarios when there is a need for human intervention. If the user requests it, the agent senses dissatisfaction, frustration, or anger, or the agent has defined transfer intents, the conversation seamlessly transfers to a human agent system, such as Live Agent or Zendesk.
Refer [Pre-built live agent](https://docs.avaamo.com/user-guide/configuration/live-agent/pre-built-live-agent), for more information.
---
# Source: https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/confluence/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/files/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/website/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/servicenow/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/datasync-ai/content-sources/sharepoint/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/confluence/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/files/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/website/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/servicenow/pre-requisites.md
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/pre-requisites.md
# Pre-requisites
You can ingest SharePoint content into your Knowledge skill seamlessly using the SharePoint connector. This integration enables you to use the selected resources directly from SharePoint to train your agent effectively.
Ensure that the following pre-requisites are met before creating a `SharePoint` connector**:**
1. Ensure that you complete all the necessary actions outlined in the [Before you begin](https://docs.avaamo.com/user-guide/datasync-ai/before-you-begin) section.
2. **Content source authorization details:** Ensure you have all necessary authorization details prepared for your content sources. Your SharePoint admin must provide you with the following information for each source:
* SharePoint Tenant Name
* SharePoint Tenant ID
* OAuth Client ID
* OAuth Client Secret
---
# Source: https://docs.avaamo.com/user-guide/skills/knowledge-skill/add-content-to-knowledge-skill/sharepoint/step-2-configure-content-source-and-ingest-content/preview-artifacts.md
# Preview artifacts
Here, you can view all documents, pages, and lists available from the folders you selected in the last step. You have the option to preview them before making your selection, ensuring they meet your specific needs.
Select the documents, pages, and lists by clicking the checkbox next to the file name. Click `Next`.
**In this section, you can:**
* Preview articles before selecting them by clicking **View**.
* Navigate across different pages to select articles.
---
# Source: https://docs.avaamo.com/user-guide/how-to/manage-platform-settings/privacy.md
# Privacy
You can set your Agent's Personally Identifiable Information (PII) settings in the `Privacy` page.
To access the privacy settings:
1. Click on your profile icon and select **Settings**.
2. Navigate to the **Privacy** section.
You can configure two predefined intents available in every agent, allowing users to gain insights into their stored PII data

You can view the default system PII entities under the `Default system PII entities` tab, which lists all the system entities that are masked by default.
You can request the PII data under the `PII data request` tab.
1. Click `Request` to export user queries containing PII data. You can specify the list of users for whom this request applies, fill in all the required details, and click `Submit`.
2. Click `Request` to delete user queries containing PII data. Fill in all the required details, then click `Submit`**.**
---
# Source: https://docs.avaamo.com/user-guide/quick-start-tutorials/product-overview.md
# Product overview
Broadly, the following are the primary components in the Avaamo Platform:
{% embed url="" %}
* [Agent](https://docs.avaamo.com/user-guide/how-to/build-agents): Agent acts as a container and includes everything you require to build an enterprise agent.
* [Skills](https://docs.avaamo.com/user-guide/how-to/build-skills): Add different types of skills to the agent such as Answers, Dynamic Q\&A, Smalltalk, and Dialog.
* [Entity types](https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent): Add entity types to the agent that helps to identify and extract the named collection of similar objects from the user intents.
* [Configuration](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents): Add getting started message, persistent menu, define environment variables, switch to live agent, and configure to deploy in different channels.
* [Debug](https://docs.avaamo.com/user-guide/how-to/build-agents/debug-agents): Use JS Errors, Logs, Agent Storage, and Conversation History to debug Agents.
* [Test](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents): Use Simulator and Regression Testing to test agents.
* [Monitor](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze): Analyze agent performance using Analytics, User Journey, Query Insights, and User Feedback.
* [Skills store](https://docs.avaamo.com/user-guide/how-to/manage-skills-store): A centralized collection of all the published skills across different categories. Skills developed in one agent can be published to the skill store and re-used in other agents within a company to accelerate the agent development process.
* [Avaamo skills](https://docs.avaamo.com/user-guide/how-to/manage-skills-store#avaamo-skills): Collection of various in-built skills across certain pre-defined categories already available in the skills store. These skills are not specific to a company and available to all the users using the Avaamo Platform.
* [Company skills](https://docs.avaamo.com/user-guide/how-to/manage-skills-store#company-skills): In addition, when you are developing an agent, based on the functionality of the skill, you can choose to publish the skill to your company skills store. These skills are specific to a company and available only to the users within the company.
* [Agent Console](https://docs.avaamo.com/user-guide/how-to/agent-console): Avaamo platform supports integration with a live agent for scenarios, where there is a need for human intervention. If the user requests or if the agent senses dissatisfaction, frustration, anger, or if the agent has defined intents for transfer, it seamlessly transfers the conversation to a human agent system such as Avaamo Live Agent Or Zendesk. Agent Console is an interface of Avaamo live agent console for live agent interaction with users.
* [Settings](https://docs.avaamo.com/user-guide/how-to/manage-platform-settings): Add users and roles, manage privacy settings, and manage all the Identity Providers that support Single Sign-On (SSO) authentication for the dashboard.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/manage-agents/promote-and-pull-updates.md
# Promote and pull updates
As the agent goes through different stages in its life cycle, you can promote agents from one stage to another using the **Promote** option. See [Promote an agent](#promote-an-agent), for more information.
Similarly, when you make certain changes in the previous stage of the life cycle, you use the **Pull updates** option to pull the updates from the previous stage to the current stage. See [Pull updates](#pull-updates), for more information.
{% hint style="info" %}
**Notes**:
* See [Plan your development process (Agent life cycle)](https://docs.avaamo.com/user-guide/how-to/plan-your-development-process-agent-life-cycle), for more information
* Promote and Pull updates options are specific to the roles and permissions defined for each user. See [Roles and permissions](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/understand-roles-and-permissions), for more information.
{% endhint %}

### Promote an agent

* In the **Agents** page, click the **Stage** tab (Development, Testing, Staging) from where you wish to promote the agent.
* Click three ellipse dots in the **Actions** column of the agent to view the extended menu and click **Promote.**
* If there are users editing the agent, then the following message with a list of the users and the module being edited by the user is displayed. You can review the current changes in progress and decide to either cancel promoting or click **Next** to continue promoting the agent to the next stage.
* The following pop-up message is displayed. Type **accept** in the confirmation message box and click **Accept** to complete promoting the agent from the current stage to the next stage. Click **Cancel** if you wish to decline the changes and not proceed with the promotion.

* When an agent is promoted to the next stage,
* The user who promoted the agent is the agent's owner in the promoted stage. As the agent's owner, you can also add other team members as needed.
* The first step as an owner of the agent in any stage is to configure the agent with variables specific to the environment. See [Define environment variables](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/define-environment-variables), for more information.
* An exact clone of the agent is created in the promoted environment. Users with the required roles can work on the agent in the promoted environment without affecting the agent in other stages.
{% hint style="info" %}
**Note**: An agent can be promoted from one stage to another only once. Once promoted, you cannot revert the operation. However, you can delete the promoted agent and promote it again from its previous stage.
{% endhint %}
### Pull updates
* In the **Agents** page, click the tab (Testing, Staging, Production) from where you wish to pull updates to the agent.
* Click three ellipse dots in the **Actions** column of the agent to view the extended menu and click **Pull updates.**

* If users are editing the agent, a message with a list of users and the module being edited by each user is displayed. You can review the current changes in progress and decide to either cancel pulling the updates or click **Next** to continue to pulling updates from the previous stage.
* The **Pulling updates** pop-up window is displayed. In this window, you can view a high-level summary of the agent changes that will be pulled from the previous stage to the current stage.

* Each update is categorized as Created, Updated, or Deleted - to help you easily identify the type of change. Against each category, you can view a count of the updates made.
* For [AI agents](https://docs.avaamo.com/user-guide/ai-agent), the [Advanced Options](#advanced-options) section allows you to select from a list of added or modified knowledge skills to pull specific updates.
* Click **Download CSV** to download a detailed summary of the updates in CSV format. This helps you to analyze the changes further.
* After verifying all changes, type accept in the confirmation message box, then click Accept to complete pulling updates from the previous stage to the current stage.
* Click **Cancel** to decline the changes and not proceed with pull updates.
{% hint style="success" %}
**Key points**:
* Currently, changes in the following Configuration pages are not displayed in the **Pull updates** window: Settings, Channel, Live chat agent, Persistent menu, and Custom feedback.
* The Pull Updates window provides a summary of changes in the agent between two environments. However, if you wish to audit in-depth details, you can refer to the [Changelog API - V2](https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/change-log-apis/changelog-api-v2).
* When you pull changes from the source stage to the current stage, the Auto Sync settings are **not** pulled. For example**,** If you change the Auto Sync option in the source stage and pull it into the current stage, the current stage’s Auto Sync configuration remains unchanged.
{% endhint %}
### Advanced options
The `Advanced Options` section provides a detailed list of all added or modified LLaMB content. From this list, you can choose exactly which updates you want to pull, giving you more control over the update process.
The changes are categorized as follows:
* **To be created**: Newly added LLaMB skills
* **To be updated**: Existing LLaMB skills that have been modified
All checkboxes in this section are selected by default during knowledge skill pull updates, reducing manual effort.
### What is not promoted or pulled?
The following lists the items or configurations that are not promoted or pulled from the source to the target agent:
* The agent's name and description are used primarily to identify the agent at a specific stage.
* Channel configuration
* Permissions
* Notification settings and Personas
* Details available in Debug, Test, Monitor, and Learning
* Only the following Live agent Automated messages are pulled:
* Switch to Live Agent Message
* Switch to Agent Message
* Working hours
* Callback messages
{% hint style="info" %}
**Notes**:
* A few items, such as environment variables and web channel configurations, are promoted only the first time, as this helps progress faster through the agent life-cycle stages, rather than recreating them manually. In subsequent pulls, as it can overwrite existing data, certain items may not be pulled from the previous stage.
* When the updates are pulled, for those items that are promoted or pulled from one stage to another, the changes from source agents are copied and overwritten into the target agent.
* For the items or configurations that are not promoted or pulled, the changes in the target agent are retained.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/skills/prompt-skill.md
# Prompt skill
- [Create prompt skill](/user-guide/skills/prompt-skill/create-prompt-skill.md)
- [Add prompt](/user-guide/skills/prompt-skill/add-prompt.md)
- [Prompt Versions](/user-guide/skills/prompt-skill/prompt-versions.md)
- [Functions](/user-guide/skills/prompt-skill/functions.md)
- [Advanced Settings](/user-guide/skills/prompt-skill/advanced-settings.md)
- [Debug Log](/user-guide/skills/prompt-skill/debug-log.md)
---
# Source: https://docs.avaamo.com/user-guide/skills/prompt-skill/prompt-versions.md
# Prompt Versions
Prompt versioning helps you track, compare, and restore changes made to a prompt skill over time. Each update to a prompt skill is automatically saved as a new version, allowing you to safely iterate and roll back when needed.
### Version history overview
The first time a prompt skill is added and saved, `version 1` is created. A new version is created whenever you `save changes` to any of the following sections in a prompt skill:
* Prompt content
* Functions
* Advanced settings
[Version comparison](#version-comparison) becomes available once a second version exists.
**To create a new version:**
1. Open the agent and navigate to the `Prompt skill`.
2. Make changes to one or more sections:
* Prompt
* Functions
* Advanced settings
3. Click **Save**.
A new version is created and added to the version history.
### Version details and history
When a version is created, you can view the following details at a glance:
* The `latest version` always appears at the top of the version list.
* Each version includes these details:
* `Clone of`: Indicates the version from which the current version was generated.
* `Created by:`: Displays the name of the user who created the version.
* `Last modified`**:** Shows the date and time when the version was created.
* `Restored from`**:** Indicates the version from which the current version was restored.
* You can click [View](#version-comparison) to see the details of a specific version.
* Click [Restore](#restoring-a-previous-version) to apply the changes from the selected version to the latest version.
* Versions are displayed with pagination:
* Up to 10 versions per page
* Up to 100 most recent versions are retained
### Version comparison
You can compare changes between any two versions to understand what was updated. This helps identify updates across prompt text, functions, and advanced settings.
**To compare versions:**
1. Open the `Prompt Versions` section of the prompt skill.
2. Click on `View` to open the selected prompt skill version.
2. Select any two versions from the comparison dropdown.
3. View the changes side by side.
Change in the prompt:
Change in the function calls:
Change in the Advanced settings:
4. You can use `Expand all` or `Collapse all` to view or hide all change details at once.
5. You can view the changes on the right side of each section with clear labels indicating whether a section is `Unchanged` or `Modified`.
6. If you expand a section marked as Modified, you can see exactly what changed between the two versions, whether content was `added` or `removed`. For changes in the Prompt section, the comparison also highlights the exact locations where the updates occurred.
### Restore selected
You can now selectively restore specific sections instead of restoring all changes at once.
Each section includes a checkbox to control what is restored. On the Version Comparison page, the following sections include selectable checkboxes:
* Prompt
* Function Calls
* Advanced Settings
Select one or more sections using the corresponding `checkboxes`. Click `Restore Selected`.
In the confirmation window, click `Yes, restore` to continue. The selected version is restored and saved as the latest version. Click `Cancel` to exit without restoring the version.
### Restoring a previous version
You can restore a prompt skill to an earlier version using the **Restore** option. This allows you to safely roll back changes while keeping a clear version history.
**How restoration works**
* Restoring a version reverts the prompt skill to the selected version, including the `prompt`, `functions`, and `advanced settings`.
* When a restore is performed, a new version is automatically created. This version includes a note indicating the previous version from which it was restored.
* Restoring a version brings back all changes captured in that version at once.
* If a version contains changes in only one section (for example, advanced settings), restoring that version updates only that section, as the other sections were unchanged.
* The latest version, including restored versions, always appears at the top of the version list.
**To restore a version:**
1. Open the `Prompt Versions` section of the prompt skill.
2. Select the version you want to restore. Click `Restore`.
3. In the confirmation window, click `Yes, restore` to continue. The selected version is restored and saved as the latest version. Click `Cancel` to exit without restoring the version.
### Pull and Promote behavior
* Prompt versioning is supported in all stages: Development, Testing, Staging, and Production.
* When an agent is `promoted` from one stage to another, the version history is not carried over. The promoted agent starts with a fresh version history, beginning from the copied state.
* When you `pull` updates from one stage to another, a `new version` is created in the target stage that reflects the pulled changes.
### Export and import behavior
* Version history is `not included` when exporting an agent.
* Only the latest prompt version is exported.
* When an agent is imported, versioning starts fresh from the imported state.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/manage-skill/publish-skill-to-skills-store.md
# Publish and Re-publish skills
Based on the business requirements, you can build different types of skills in each of your agents. Frequently, the functionality required for some of the skills across agents can be similar. The skills developed in one agent can be re-used in other agents within a company to accelerate the agent development process. Such re-usable skills can be published to **skill store**. See [Manage skill store](https://docs.avaamo.com/user-guide/how-to/manage-skills-store), for more information.
{% hint style="success" %}
**Key Points**:
* See [Best practices](#best-practices) that you can follow for publishing a skill to skill store.
* See [Frequently asked questions (FAQs)](https://docs.avaamo.com/user-guide/manage-skills-store#frequently-asked-questions-faqs), for a list of common questions on publishing and re-publishing.
{% endhint %}
### Pre-requisites
Only **Development** role users and with **Publish** or **Owner** permission for the agents can publish, re-publish skill to skill store. See [Users and Roles](https://docs.avaamo.com/user-guide/manage-platform-settings/users-and-permissions#roles-in-agent-life-cycle) and [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information.
{% hint style="info" %}
**Notes**:
* Ensure you have met all the [pre-requisites](https://docs.avaamo.com/user-guide/quick-start-tutorials/pre-requisites).
* You can publish skills to skill store immediately after creating skills in the agent. See [Create agent](https://docs.avaamo.com/user-guide/quick-start-tutorials/create-an-agent) and [Add skills to agent](https://docs.avaamo.com/user-guide/how-to/build-agents/add-skills-to-agent), for more information.
* If you wish to edit an agent, then:
* In the Avaamo Platform UI, navigate to the **Agents** tab in the top menu. Search and open the required agent. See [Search agents](https://docs.avaamo.com/user-guide/build-agents/manage-agents#search-agents), for more information.
* Click **Edit** to unlock the agent before editing and publishing.
{% endhint %}
### Publish skill
To re-use the skill across multiple agents in your account, you can publish skills to skill store:
* In the **Agent -> Skills** page, click **Publish to skill store** in the overflow menu icon for the skill you wish to publish.
* In the **Publish skill -> Skill details**, specify the following details that help to identify the skill in the skill store:
| Fields | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Skill name | The skill name is automatically populated from the current name of the skill. This is the name that is used to identify the skill in the skill store. However, you can also change the name, if required. Use a combination of verb + noun to name your skill. **Example**: Instead of naming the skill as "ResetPassword", consider adding a noun, "ResetPassword - AWS". |
| Description | The description is automatically populated from the current description of the skill. However, you can also change the description, if required. Keep the description succinct and short while mentioning the purpose of the skill. |
| Things you can say | List the top three queries the skill can respond to. This must help to easily demonstrate the understanding capability of the skill. |
| Category | Select the category under which you wish to publish the skill in the skill store. Before publishing skills to skill store, consider editing the category name in your **Company skills** based on your business model. Click the category in the **Company skills** to edit the category name. See [Manage skill store](https://docs.avaamo.com/user-guide/how-to/manage-skills-store), for more information. |
| Version | Specify the version of the skill. It is recommended that you increment the version as you publish successive versions of skill to skill store. Note that only one version of the skill is retained in the skill store.
You can also communicate the availability of the new version to the developers. Currently, this communication is manual, there is no automatic notification to developers when a skill is re-published with a new version.
|
| Document link | Any external document link that contains more details about the skill. You can use this to explain the skill details that the developers can learn about before importing the skill from the skill store. |
| What's new | Briefly describe new changes or updates to the skill before publishing or re-publishing. This helps developers to understand the changes if they wish to re-import a skill from skill store to their agent. |
* In the **Publish skill -> Entity types**, a list of all the entity types in the agent is displayed. The entities used in the skill is automatically selected and displayed to you. Additionally, you can select the other entity types as required before publishing your skill.
* In the **Publish skill -> Javascript**, a list of all the JS files used by the agent is displayed. You can select the ones used by your skill before publishing. See [Add JS files](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/add-js-files), for more information.
* Click **Publish**. The skill is now published to the company skill store under the selected category.
{% hint style="success" %}
**Key Points**:
* The skills published in the skill store are independent clones with all required data needed for it.
* You can only publish to the skill store under your **Company skills**. You cannot publish to **Avaamo skills**.
* Currently, Answers skill cannot be published to skill store.
{% endhint %}
### Republish skill
After you publish the skill to the Skill store, you can continue to work on the skill independently in your agent and later re-publish the skills again to the skill store.
{% hint style="success" %}
**Key points**:
* Republishing a skill from an agent is a complete replacement of that skill in the skill store. Only one version of the skill published from an agent is available in the skill store.
* There is no restriction on the number of times you can re-publish a skill from an agent to the skill store.
{% endhint %}
* In the **Agent -> Skills** page, click **Re-publish to skill store** in the overflow menu icon for the skill you wish to re-publish.
* In the **Publish** skill pop-up, specify the details required for publishing. See [How to publish?](#how-to-publish) for more information.
### Best practices
The following lists a few best practices that you can follow for publishing a skill to skill store:
* When you start designing an agent, consider defining the functionality of the agent in well-defined tasks. For each specific task, you can build skills and choose to publish the skill to your company skill store for re-usability. See [Design skills](https://docs.avaamo.com/user-guide/how-to/build-skills/design-skill), for more information.
* When you start creating skills, the name the skill in such a way that helps you easily identify the skill and its functionality. Use a combination of verb + noun to name your skill. **Example**: Instead of naming the skill as "ResetPassword", consider adding a noun, "ResetPassword - AWS".
* When you publish a skill, ensure that in **Things you can say** section, you list the top three queries the skill can respond to. This must help to easily demonstrate the understanding capability of the skill.
* Increment the version as you publish successive versions of skill to skill store. You can also communicate the availability of the new version to the developers.
* Maintain a document with the skill details and update the document as and when you re-publish the skill with a new version. Currently, this communication is manual, there is no automatic notification to developers when a new skill version is re-published with a new version.
* You cannot revert a published skill in the skill store. However, a user with the **Settings** role can delete the skill from the skill store and the skill can be published again. See [Delete skill from skill store](https://docs.avaamo.com/user-guide/manage-skills-store#delete-skill-from-skill-store), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/q-and-a-intents.md
# Q\&A intents
## Get Q\&A intents
`GET` `https://cx.avaamo.com/api/v1/agents/{{agent_id}}/intents/qna.json`
Get a list of all the Q\&A intents from the agent.
#### Path Parameters
| Name | Type | Description |
| ------------------------------------------- | ------- | ---------------------------------------------------------------------- |
| agent\_id\* | integer | Agent identifier. You can get the agent identifier from the agent URL. |
#### Query Parameters
| Name | Type | Description |
| --------- | ------- | -------------------------------------------------------------------------------- |
| page | integer | Page from which the entries must be fetched. Default: 1
|
| per\_page | integer | Number of entries fetched per page. Default: 25 Maximum value: 100
|
#### Headers
| Name | Type | Description |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| access-token\* | string | User access token. You can get the user access token from the Settings -> Users and Roles page. See Users or Groups , for more information.
Users must have at least view permission on the agent. See Permissions , for more information.
|
{% tabs %}
{% tab title="200 " %}
```javascript
{
"current_page": 1,
"per_page": 1,
"total_entries": 3,
"total_pages": 3,
"time_token": 1590483068.2610612,
"intents": [
{
"id": 185260,
"name": "store",
"created_at": 1590390904.0,
"updated_at": 1590390904.0,
"skill": {
"id": 17826,
"name": "MacPizza FAQs",
"type": "knowledge",
"source_id": 5493,
"created_at": 1590390904.0,
"updated_at": 1590390909.0,
"status": "complete"
},
"training_data": [
{
"id": 1161932,
"created_at": 1590390904.0,
"value": "where is your store?",
"slots": []
},
{
"id": 1161933,
"created_at": 1590390904.0,
"value": "do you have any branches?",
"slots": []
}
]
}
]
}
```
{% endtab %}
{% endtabs %}
### Code request snippets
{% tabs %}
{% tab title="cURL" %}
```javascript
curl --location --request GET 'https://cx.avaamo.com/api/v1/agents/20xxx/intents/qna.json' \
--header 'Access-Token: xxxxxx8d9952499ea466fc007dxxxxxx' \
--header 'Content-Type: application/json'
```
{% endtab %}
{% tab title="node.js" %}
```javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cx.avaamo.com/api/v1/agents/20xxx/intents/qna.json',
'headers': {
'Access-Token': 'xxxxxx8d9952499ea466fc007dxxxxxx',
'Content-Type': 'application/json'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
```
{% endtab %}
{% endtabs %}
### Response attributes
In the response, the following attributes are returned:
Attribute Description Type current_page Indicates the page from which the entries are fetched. Integer per_page Indicates the number of entries fetched per page. Integer total_entries Indicates the total number of entries in the response. Integer total_pages Indicates the total number of pages calculated using per_page. Note that total_entries = per_page * total_pages Integer time_token Indicates the timestamp at which the API response is returned. UNIX epoch timestamp intents Indicates an array of Q&A intents from the agent. Number of entries in the array = Number specified in per_page parameter.
Each intent entry contains the following details:
JSON key-value pairs
### Examples
The following table lists a few sample use cases with query parameters:
Use-case Query Parameter Get Q&A intents from agent using pagination page : Specify the page from which you wish to fetch records.
per_page : Specify the number of entries per page.
Example : https://cx.avaamo.com/api/v1/agents/<<agent_id>>/intents/qna.json per_page=2&page=5
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/learning-continuous-improvement/query-analyzer-deprecated.md
# Query analyzer (Deprecated)
An agent receives and responds to voluminous amounts of queries. These agent responses are pre-defined with intents and entities in your agent and your agent is trained to respond to the user queries.
However, a few queries go unhandled as the agent cannot map them to the predefined intents. By default, for all the user queries that do not get matched to any predefined intents in the agent, the agent has a node within the flow to respond to the user's query with statements like -
*"I am sorry I do not understand."*\
*"I am sorry. I don't have an answer for that."*
These classify as unhandled queries as ideally, the user query goes unanswered.
In certain other cases, when a user's intent does not match a specific intent, the agent responds with a selection of closest intent options, referred to as a disambiguation intent.
In a few others, the agent might respond to the user query but not with the expected results.
Overall, in order to improve the accuracy and experience with the agent, it is critical to analyze all these queries and continually improve the agent training data.
## What is QA?
The Query Analyzer tool can go through all of the end-user queries and provide suggestions to improve the training data of the agent. The purpose of QA is to:
1. Find out the queries that can be used to train existing intents
2. Find out the queries that can be used to create new skills or intents
3. Find out the words or phrases which can be used to improve entity values
4. Find out the words or phrases which can be used to create new entity types
## Why is QA required?
As the agent grows in volume, it is very difficult to analyze the user queries manually and understand why these user queries went unhandled or disambiguation. This effort is tremendous and time-consuming.
QA helps us to accelerate, learn and improve the agent training data by not only analyzing all the queries but also suggesting the required changes in the agent to further improve the accuracy of the agent.
## When to run QA?
It is recommended to run QA in the following scenarios:
1. After Go-live or in the Staging and Production environments.
2. It is recommended that you wait for a good round of testing to complete before running QA.
3. After an agent is in production, it is recommended to wait for at least a week and then run QA.
4. It is not recommended to run QA in Development and Testing environment.
## Enabling QA
Contact Avaamo Support to enable QA for your agent.
## Running QA
{% hint style="info" %}
**Note**: Anyone with at-least view permission on the agent can submit a QA job. See [Permissions](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/permissions), for more information. This is useful in production agents, as typically only read-only permissions are provided to the business users. It helps them to run the QA job to analyze the queries and further improvise the user experience with the agent.
{% endhint %}
You can run QA from the **Agent ->** **Learning -> Query analyzer** page.
* Navigate to the **Agents** tab on the top menu.
* Search and click any agent for which you wish to view user feedback. See [Search agents](https://docs.avaamo.com/user-guide/how-to/manage-agents#search-agents), for more information.
* In the **Agent's** page, click **Learning -> Query analyzer** and select the following parameters:
* Start date: Select or specify the start date in dd/mm/yyyy format. By default, the Start date is one month before the current date. The Start date can be upto 6 months before the end date.
* End date: Select or specify the start date in dd/mm/yyyy format. By default, this is the current date.
* Types of queries to analyze: Select the types of queries you wish to analyze. By default, Unhandled and Pre-Unhandled are selected.

* Click **Submit job**. A background job is submitted that run all the selected type of user queries in the specified date range. Note that based on the volume of data, the background job may take upto a few minutes to display the results.
* As the job progress, you can view the status in the **Job Pipeline**.
* Click **Cancel Job**, if you wish to cancel the submitted job.
* When the job is completed, the results analyzed are displayed in the respective sections. See [Understanding results](#understanding-results), for more information.
### Understanding results
After the job is completed, the results are displayed in the respective sections. You can learn these results and analyze further on how to further improve your agents.
* Click **Re-run Job** if you wish to perform a fresh run of the QA job.
* Click **Export Job** if you wish to export all the job results into a CSV file. You can also click **Export** from the specific sections. This export the queries and the intent types in a CSV format.
* Intent types are classified as follows:
* **Junk**: Queries that are recognized by the system as not holding any intent/entity. A few examples are listed below:
* Gibberish queries
* One word or less than 5 chars
* Command queries, eg reset, #clear
* Only numbers, no words query
* When language is not detected as English: If translation or language pack is enabled, then the translated queries are also used. If the translated query is not available but a different language is detected, then it is not used and is classified as Junk.
* **Unclassified**: Queries that do not fall under any existing intent, and are not asked frequently enough to have a new intent.
* **Handled**: Queries that match existing intents if asked again.
* **Duplicate**: If the same query occurs repeatedly, one utterance is maintained for the pipeline and the rest are marked as duplicates.
* **Smalltalk**: Casual conversation such as Greetings and wishes.
### Summary
In the **Summary** tab, the following details are displayed:
* Analyzed Date Range: Indicates the date range for which the current QA job was run.
* Last run of job: Indicates the date of the last QA job.
* Total queries analyzed: Indicates the total number of user queries analyzed by the QA job for the selected date range.
* Queries classified in Existing Intents: Indicates the list of queries where you can enhance training data for existing dialog and QnA intents from unhandled queries
* Matched Queries: Indicates a list of all other queries that are Handled.
* Queries Classified in New Intents: Indicates the list of queries for which you can create new intents to improve accuracy.
* Other Queries: Indicates a list of all other queries that are Junk, Unclassified, Duplicate, or Smalltalk.
* Click **Export** in each block to export the queries and the intent types in a CSV format. You can use this to further analyze and check if training data can be further improvised.
### Existing intents
In the **Existing intents** tab, you can view a list of queries where you can enhance training data for existing dialog and QnA intents from unhandled queries in the existing intents.
You can click on each intent and view the recommended list where the training data can be enhanced.
### New intents
In the **New intents** tab, you can view a list of queries for which you can create new intents to improve accuracy.
You can click on each intent and view the recommended list where new training data can be created.
## Validating and testing
After you make all the required changes in the agent, you can validate the same by running Regression testing for the newly implemented changes in the agent. You can check if such queries still result in unhandled responses or if the accuracy of the agent has improved. See [Regression testing](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/agent-api/query-insights.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/query-insights.md
# Source: https://docs.avaamo.com/user-guide/monitor/query-insights.md
# Query insights
The query insights feature helps gives you a closer look into the conversations that users have with your agent. You can also use the insights to search and export the data for these words/phrases.
Refer [Query insights](https://docs.avaamo.com/user-guide/how-to/build-agents/monitor-and-analyze/query-insights), for more information.
---
# Source: https://docs.avaamo.com/user-guide/ref/avaamo-platform-api-documentation/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/add-entity-types-to-agent/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-avaamo-answers-1/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-smalltalk/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/dynamic-q-and-a/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/quick-overview.md
# Source: https://docs.avaamo.com/user-guide/skills/dialog-skill/quick-overview.md
# Quick overview
The Dialog skill in AI agents enables you to build agents that behave `deterministically` while still retaining `agentic flexibility`. It combines the structured reliability of dialog flows with the intelligence and spontaneity of AI-driven prompts, making it suitable for complex, real-world conversational scenarios.
### How does dialog skill works
A dialog skill is built using two key components:
1. **Prompt skill (orchestrator)**\
Acts as the entry point for every conversation. It decides `which dialog flow to invoke` based on user input.
2. **Dialog skills (flows)**\
Handle structured conversations such as ordering, tracking, or support flows. These follow deterministic dialog logic similar to classic dialog skills.
**Conversation flow**
1. User message is first handled by the **prompt skill**.
2. The prompt (orchestrator) identifies the intent using instructions.
3. A function call transfers control to the relevant **dialog skill**.
4. Subsequent messages are handled by that dialog flow.
5. If the dialog skill cannot handle a message, control returns to the orchestrator.
### Key concepts in dialog skill
#### Instructions (replacing training data)
Flow skill replaces rigid training data with **instructions**.
* Instructions define *when* a dialog flow should be invoked.
* They are flexible and expressive (for example, “invoke this flow if the user chooses any non-veg item”).
* This removes the need to maintain long lists of sample utterances.
Refer [Instructions](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/add-user-intent/instructions), for more information.
#### Agentic text
Flow skill contains a new response type called **Agentic Text**.
* Instead of static responses, the agent uses instructions to generate responses dynamically.
* Example:\
\NAN;*“Ask the user what size of pizza they want.”*
This enables more natural, less repetitive conversations.
Refer [Agentic text](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-skill-messages-responses#agentic-text), for more information.
#### Entity definition
Entity handling in the dialog skill is simplified and more flexible.
Entities can be defined in one of the following ways:
**Entity**
* Define an entity with a name and a description.
* The description is passed to the LLM to extract the entity value from user input.
Example:
Name: *pizza\_type*
Description: *This is the size of the pizza, which can be small, medium, or large*
**Entity extraction script**
* Use a **JavaScript (JS) block** to extract entities.
{% hint style="info" %}
**Note:** If provided, the extraction script takes precedence over name and description.
{% endhint %}
Refer [Invocation](https://docs.avaamo.com/user-guide/skills/dialog-skill/add-invocation), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/quick-reply.md
# Quick Reply response (Javascript)
You can use a quick reply to add an acknowledgment to the user’s questions or responses.
{% hint style="info" %}
**Notes**:
* There is a 191-character limit for all the user-defined text fields.
* **Date Picker** link for Quick Reply is not supported in the Microsoft Teams channel due to the limitations on the channel's side. See [Microsoft Teams](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/deploy/microsoft-teams-ms-teams), for more information on deploying your agent in the MS Teams channel.
* If the agent response contains sensitive PII data such as name, account number, password, then it is recommended to mask the agent responses to protect user privacy. See [Agent response masking](https://docs.avaamo.com/user-guide/overview-and-concepts/advanced-concepts/information-masking#masking-agent-responses), for more information.
{% endhint %}
## Syntax
The following is the syntax to add a quick reply response:
```yaml
quick_reply: {
"content": "<>",
"links": [
{
"title": "<>",
"type": "<>",
"value": "<>",
*"format": "<>"
*"minDate": "<>",
*"maxDate": "<>"
*"hidden_content": "<>"
},...
]
}
* - Indicates optional parameter
… - Indicates one or more parameter
```
Attribute Description Type content Indicates the message content of the quick reply response. String links Indicates an array of links in the quick reply response. Each array contains:
An Array of JSON key-value pairs
## Examples
### Post message
The following is a sample JS to post a message in Quick reply:
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Would you like help with any of the following?",
"links": [{
"title": "Placing an order",
"type": "post_message",
"value": "Just mention type of pizza with your toppings and you are good to go."
},
{
"title": "Kids Menu",
"type": "post_message",
"value": "All our menu items are customizable for kids."
},
{
"title": "Others",
"type": "post_message",
"value": "We will connect with a customer service representative."
}
]
}
}]
```
{% endcode %}
In the agent, the following response is displayed with the provided quick reply links:

### Date picker
Use the following format to provide a date picker in a quick reply response. Here, `date_format` is any date format that you wish to display in the agent.
```javascript
return {
quick_reply: {
"content": "Pick a delivery date",
"links": [{
"title": "Delivery date",
"type": "date",
"format": "DD/MM/YYYY"
}]
}
}
```
In the agent, the following response is displayed with a date picker link button:

{% hint style="danger" %}
**Deprecated**: You can also use`avaamo:#app/datepicker/messages/new?format=<>`, for providing a date picker in the Quick reply response.
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Pick a delivery date",
"links": [{
"title": "Delivery date",
"type": "deeplink",
"value": "avaamo:#app/datepicker/messages/new?format=DD/MM/YYYY"
}]
}
}]
```
{% endcode %}
However, using `deeplink in the type parameter` and `specifying the URL in the value parameter` is deprecated from the v6.4.0 release onwards. See [Deprecation notice](https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.4.x/release-notes-v6.4.0#deprecation-notice), for more information.
{% endhint %}
### Date picker with Min and Max dates
Use the following format to provide a date picker in a quick reply response. Here, `date_format` is any date format that you wish to display in the agent.
```javascript
return {
quick_reply: {
"content": "Pick a delivery date",
"links": [{
"title": "Delivery dates",
"type": "date",
"format": "YYYY-DD-MM",
"minDate": "2022-25-04",
"maxDate": "2022-30-04"
},
{
"title": "Registration",
"type": "post_message",
"value": "I want to order register at MacPizza."
},
{
"title": "Order pizza",
"type": "post_message",
"value": "I want to order a pizza."
}
]
}
}
```
{% hint style="danger" %}
**Deprecated**: You can also use`avaamo:#app/datepicker/messages/new?format=<>&minDate=<>&maxDate=<>`, for providing a date picker in the Quick reply response.
return [{
quick_reply: {
"content": "Ok sure. Pick a delivery date",
"links": [{
"title": "Delivery date",
"type": "deeplink",
"value": "avaamo:#app/datepicker/messages/new?format=DD-MM-YYYY&minDate=1650877346000&maxDate=165130934600"
}]
}
}]
However, using `deeplink in the type parameter` and `specifying the URL in the value parameter` is deprecated from the v6.4.0 release onwards. See [Deprecation notice](https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.4.x/release-notes-v6.4.0#deprecation-notice), for more information.
{% endhint %}
### Goto node
Use `#goto_node_<>.<>`in the `hidden_content` parameter of the quick reply JS to navigate to a specific node in the flow.
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Would you like help with any of the following?",
"links": [
{
"title": "Just starters for now",
"type": "post_message",
"value": "Get starters",
"hidden_content": "#goto_node_macpizza_order.starters"
},
{
"title": "Registration",
"type": "post_message",
"value": "I want to order register at MacPizza."
},
{
"title": "Order pizza",
"type": "post_message",
"value": "I want to order a pizza."
}
]
}
}]
```
{% endcode %}
In the agent, the following response is displayed. When you click the Get Starters link button, it navigates to the corresponding goto node as specified in the quick reply JS:

Click the `Just starters for now` button to navigate to the starter node directly:

{% hint style="danger" %}
**Deprecated**: You can also `use avaamo:#messages/hidden/%23goto_node_>.<>/new/<>,`for navigation to a different node in the conversation flow.
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Would you like help with any of the following?",
"links": [{
"title": "Just starters for now",
"type": "deeplink",
"value": "avaamo:#messages/hidden/%23goto_node_order.starters/ new/Getstarters "
}]
}
}]
```
{% endcode %}
However, using `deeplink in the type parameter` and `specifying the URL in the value parameter` is deprecated from the v6.4.0 release onwards. See [Deprecation notice](https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.4.x/release-notes-v6.4.0#deprecation-notice), for more information.
{% endhint %}
### Start over
Use `start over`in the `hidden_content` parameter of the quick reply JS to reset the current conversation and displays the greeting message. Note that this does not create a new conversation UUID.
**Example**: The following is a sample JS to use a "Start over" in a quick reply:
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Confirm your order?",
"links": [{
"title": "Wrong order",
"type": "post_message",
"value": "Wrong order start again",
"hidden_content": "start over"
},
{
"title": "Place order",
"type": "post_message",
"value": "Confirm order."
}
]
}
}]
```
{% endcode %}
In the agent, the following response is displayed with a start-over link button:

Click the `Wrong order` button to start the conversation from the beginning:

{% hint style="danger" %}
**Deprecated**: You can also `use avaamo:#messages/hidden/start%20over/new/<>`to start over the conversation from the greeting message.
{% code overflow="wrap" %}
```javascript
return [{
quick_reply: {
"content": "Confirm your order?",
"links": [{
"title": "Wrong order ",
"type": "deeplink ",
"value": "avaamo: #messages/hidden/start%20over/new/Wrong order"
}]
}
}]
```
{% endcode %}
However, using `deeplink in the type parameter` and `specifying the URL in the value parameter` is deprecated from the v6.4.0 release onwards. See [Deprecation notice](https://docs.avaamo.com/user-guide/release-notes/v6.0-to-v6.4.x-releases/v6.4.x/release-notes-v6.4.0#deprecation-notice), for more information.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/live-agent-console/supervisor/quick-responses.md
# Quick responses
In the context of a live agent system, Quick responses, also known as canned responses or predefined messages are pre-written replies or messages that agents can use to quickly respond to common customer inquiries or issues.
### How do Quick Responses help?
The following are a few points that list the benefits of having quick responses in your organization:
* **Efficiency and Speed**: Quick responses enable agents to respond rapidly to customer queries, reducing response time and improving overall customer satisfaction. Agents can select relevant pre-written responses instead of typing out full replies, saving valuable time during interactions.
* **Consistency**: Quick responses ensure consistency in customer service. By using predefined messages, agents can deliver accurate and standardized information across multiple conversations.
* **Accuracy and Quality**: Quick responses are crafted by business owners or supervisors, ensuring that they contain accurate and reliable information. Agents can rely on these pre-approved responses to provide customers with correct answers, minimizing the chances of errors or misinformation. This helps in maintaining a high level of quality in customer support interactions.
* **Complex or Technical Issues**: Some customer inquiries may involve complex or technical information that agents need to communicate accurately. Quick responses can be specifically designed to address such issues, ensuring that agents have access to well-constructed explanations or solutions.
* **Training and Onboarding**: Quick responses can help during live agent training and onboarding processes. New live agents can familiarize themselves with common customer queries and their corresponding responses, helping them learn the ropes quickly.
* **Empathy to sensitive situation**s: Quick responses can also be designed to address emotional or sensitive situations. Agents can have predefined messages that show empathy, understanding, or apology, helping them handle delicate customer interactions with care and professionalism.
### View all quick responses
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Settings icon -> Quick Responses` page in the left navigation pane of the Supervisor interface to view all the quick responses in your organization.
* By default, the quick responses are displayed in descending order, organized according to their creation time, which implies that the last created quick response appears first in the list.
* Each row in the list provides essential information about a quick response, including the `Quick response name` and the message corresponding to the name.
### Create a new quick response
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Settings icon -> Quick Responses` page in the left navigation pane of the Supervisor interface to view all the quick responses in your organization.
* In the `Quick Responses` page, click `Create Quick Response` and specify the following details:
Parameters Description Maximum length Quick response Indicates the name of the quick response. Specify a name that clearly identifies the team, making it easier to associate and add new live agents to the team.
Supported characters: Quick response must start with an alphabet and can contain only alphabets, numbers, or underscores.
Quick response name must be unique which implies that there is only one name for one template.
20 characters Template The actual text of the quick response. This is the text displayed when you type a quick response name. You can make the messages personalized by leveraging the values from the context.user and context.live_agent_user objects.
For example, you can use first name and last name from the custom user properties and make the message dynamic and personalized.
Hello, ${context.user.custom_properties.first_name} ${context.user.custom_properties.last_name}, thank you for contacting us. I am ${context.live_agent_user.first_name}, your Sparsh Healthcare customer care assistant. How can I help you today?
5000 characters
* Click **Save** to complete the creation of the new `Quick response`. Currently, the platform offers the ability to create an unlimited number of quick responses for an account.
### Edit quick response
You can edit the `Quick response` and template from the `Supervisor -> Quick Responses` page.
* Click `Settings -> Avaamo Live Rgent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Settings icon -> Quick responses` page in the left navigation pane of the Supervisor interface to view all the quick responses in your organization.
* Search for the quick response you wish to edit. See [Search quick response](#search-quick-response), for more information.
* Click three ellipse dots in the `Actions` column of the quick response to view the extended menu and click `Edit` against the quick response you wish to edit.
* You can edit details such as the `Quick response name` and `Template` of the quick response.
### Delete quick response
A supervisor can delete a quick response for various reasons. A few examples can be
* When the quick response is no longer required or serves no purpose. Deleting such responses helps to maintain a more manageable and organized structure within the live agent system.
* When there is a need to restructure the quick response within the organization by merging, reassigning, or consolidating responses.
**To delete a quick response**:
* Click `Settings -> Avaamo Live Agent` in the Avaamo dashboard home page to view the Supervisor interface.
* Click `Settings icon -> Quick Responses` page in the left navigation pane of the Supervisor interface to view all the quick responses in your organization.
* Search for the quick response you wish to edit. See [Search quick response](#search-quick-response), for more information.
* Click three ellipse dots in the `Actions` column of the quick response to view the extended menu and click `Delete`**.** Click `OK` in the confirmation message to delete the quick response.
### Search quick response
You can search for quick responses using the search icon in the `Quick Responses` page. To search for a quick response, enter the desired text in the Search text box and press enter.
---
# Source: https://docs.avaamo.com/user-guide/outreach/quick-start.md
# Quick start
- [Campaign in SMS channel](/user-guide/outreach/quick-start/campaign-in-sms-channel.md)
- [Campaign in C-IVR channel](/user-guide/outreach/quick-start/campaign-in-c-ivr-channel.md)
- [Campaign in MS Teams channel](/user-guide/outreach/quick-start/campaign-in-ms-teams-channel.md)
- [Campaign in Custom channel](/user-guide/outreach/quick-start/campaign-in-custom-channel.md)
---
# Source: https://docs.avaamo.com/user-guide/overview-and-concepts/quick-summary.md
# Concepts summary
Before getting into a deep-dive understanding of the key concepts used in the Avaamo Conversational AI Platform, here is a quick summary of key concepts and terms:
Concept Description Agents An agent is synonymous with a "human agent". Similar to a human agent that has or is trained with different skills for responding to user queries, an agent is a "container of skills", each specialized to understand and handle a specific task in the user conversation flow.
Example : A Pizza agent can contain Membership and Rewards policy Answers skill, Order Pizza Dialog skill, FAQ Q&A skill, and Smalltalk skill for responding to different user queries.
Skills Skill is part of an agent that is specialized to understand and handle a specific task in the user conversation flow.
Example : Order Pizza skill in a Pizza agent is responsible for taking the user through a conversation for capturing the required data to order a pizza.
Intents An intent is an action in the user query that indicates what the user wishes to do.
Example : Order Pizza, Find weather, Report claim.
Training Data For the agent to respond to user queries, each intent must be trained with specific sentences that are used as representative phrases for user queries. This set of sentences is referred to as the Training data set. Note that Training data are not user queries. Training data is a set of sentences that is used to train the intent for responding to user queries. User query User queries are queries posted by the user to the agent. Entities If an intent refers to a verb or the action in the user query, then an entity refers to a noun (the object on which the action is performed) in the user query.
Example : In the user query "I want to book tickets from San Francisco to New York", San Francisco and New York represent entities of type Location.
Entity type An entity type is a named collection of similar objects such as states in a country, all pediatricians, a list of product names or data types (Date, Email, Location). Each entity type contains one or more values. Slots When information is extracted from a user sentence, the first task is to identify the intent behind the user query. The next task is to extract parameters in the training data that complete the intent. These are referred to as Slots. Each slot maps to an entity type for extraction and validation purposes.
Example : In the user query "I want to book tickets from San Francisco to New York this Friday", San Francisco and New York are Slots that represent Location entity type and Friday represents DateTime entity type.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card/rating.md
# Rating
You can add an input card with a rating system in the skill response.
### Syntax
The following is the format to add a rating response:
{% hint style="info" %}
**Note**: There is a 191 character limit for all the user-defined text fields.
{% endhint %}
```yaml
"card": {
"inputs": [{
"type": "rating",
"title": "<>",
"uuid": "<>"
}]
}
```
Attribute Description Type Attribute Description Type title Indicates the title of the rating card. String uuid Indicates a secure random UUID that can be used later to get the text entered by the user. See Section 4.4 in
https://tools.ietf.org/html/rfc4122 , for more information.
Option selected by the user is available in the context.last_message.
Syntax: context.last_message.<<uuid>>
String
### Example
The following is a sample JS to specify rating in response:
```yaml
return {
"card": {
"inputs": [
{
"title": "Rate our service",
"type": "rating",
"uuid": "784cc8d5-b3d0-4cbc-89c4-4ef3c2fa43ea"
}
]
}
}
```
In the agent, the following response is displayed:

You can use `context.last_message.<>` to get the option selected by the user.
{% content-ref url="" %}
[](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response/card)
{% endcontent-ref %}
{% content-ref url=".." %}
[..](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/how-to/build-dynamic-skill-response)
{% endcontent-ref %}
---
# Source: https://docs.avaamo.com/user-guide/outreach/recipient-lists.md
# Recipient lists
A **Recipient list** consists of a list of users to whom the campaign message must be sent. You can quickly create and upload a recipient list on the **Outreach -> Recipient Lists** page.
The following are some of the key features of the **Recipient Lists** section:
* Quickly upload a list of recipients in a simple CSV file.
* Flexible CSV format that can be used to create customized message templates.
* Reuse the same list for different campaigns.
* Build a separate list for a test run before launching the outreach program to the actual users.
The Recipient list page displays a list of all the recipient lists created for the Outreach program in descending order of created or updated timestamp. Each column contains the following details:
* Recipient list name: Indicates the name of the recipient list provided at the time of creating the recipient list.
* Number of recipients: Indicates the number of recipients in the recipient list CSV.
* Updated on: Indicates the last updated timestamp of the recipient list. For a newly created recipient list, it indicates the created timestamp of the recipient list.
* Action: You can use options in the Actions column to [download](#avaamo-file-format), [delete](#delete-a-recipient-list) or [view the recipient list](#view-a-recipient-list)
## Create a new recipient list
{% hint style="info" %}
**Notes**:
* See [Quick start](https://docs.avaamo.com/user-guide/outreach/quick-start), for a quick article on creating your first outreach program.
* Ensure you have met the [pre-requisites](https://docs.avaamo.com/user-guide/outreach/before-you-begin) before creating a new recipient list.
{% endhint %}
You can create a recipient list is one of the following ways:
* [Upload file](#upload-file): Use this option, if you wish to directly upload a CSV file with a list of recipients.
* [SFTP](#sftp): Use this option, if you wish to pick the recipient list from an SFTP server of your choice. When a campaign is triggered, the latest file available in the SFTP server location is picked as a list of recipients.
{% hint style="success" %}
**Key point**: The recipient file must be in UTF-8 encoded CSV. See [Export to a UTF-8 encoded CSV](#export-to-a-utf-8-encoded-csv), for a few tips.
{% endhint %}
### Upload file
You can use the **Upload** **recipient list** option if you wish to directly upload a CSV file with a list of recipients.
In the Avaamo Platform UI, click the **Outreach** option in the top menu, navigate to the **Recipient Lists** tab, and click **Create New Recipient List -> Upload** **recipient list** option. Specify the following details and click **Create**:
Parameters Description Maximum length Recipient list name Indicates the name of the recipient list. Provide a name that is easily identifiable to pick when you create a campaign. 50 characters File format Choose a file format of the recipient CSV file.
If you are uploading Avaamo-compliant CSV format, then see Avaamo file format , for more information. You can also select Custom as a file format and upload a CSV file in any custom format, say for example Epic integration system as a recipient list. See Custom file format, for more information. NA Upload recipient list in CSV format Click Browse to browse a CSV file with recipient details.
You can also click the Sample recipient file to download a sample recipient list file format. See Recipient list CSV format , for more information.
NA Test recipient list Use this if you are creating a recipient list for a test run.
The test recipient lists are available in the Recipient list dropdown only when you wish to test the campaign. See Test campaign , for more information. In the
NA
The newly created recipient list is displayed in the **Recipient Lists** tab.
* In the Recipient Lists tab, a recipient list marked for testing is indicated with a test tube icon , the recipient list not marked for testing is indicated with icon.
* Click the recipient list to view the configurations specified for creating the recipient list.
### SFTP
{% hint style="success" %}
**Key point**: The SFTP file name must contain only letters and numbers without any spaces or special characters.
{% endhint %}
You can use the **SFTP** **connection** option if you wish to pick the recipient list from an SFTP server of your choice. When a campaign is triggered, the latest file available in the SFTP server location is picked as a list of recipients. This allows you to update the recipient file list continuously and the newest list is picked by the Platform when the campaign is triggered.
In the Avaamo Platform UI, click the **Outreach** option in the top menu, navigate to the **Recipient Lists** tab, and click **Create New Recipient List -> Upload recipient list using SFTP** option. Specify the following details and click **Create**:
Parameters Description Maximum length Recipient list name Indicates the name of the recipient list. Provide a name that is easily identifiable to pick when you create a campaign. 50 characters File format Choose a file format of the recipient CSV file.
If you are uploading Avaamo-compliant CSV format, then see Avaamo file format , for more information. You can also select Custom as a file format and upload a CSV file in any custom format, say for example Epic integration system as a recipient list. See Custom file format, for more information. NA SFTP Host Indicates the URL of the SFTP server. NA Auth type Indicates the auth type used by the SFTP server. Following auth types are supported:
Basic: Specify the username and password for connecting to the SFTP server. Keys: Specify the username and required pem key for connecting to the SFTP server. NA Test Connection Use this button if you wish to test the connection for the SFTP server. NA File path Indicates the path of the recipient file from the SFTP server. NA Test recipient list Use this if you are creating a recipient list for a test run. NA
The newly created recipient list is displayed in the **Recipient Lists** tab.
* In the **Recipient Lists** tab, the recipient list uploaded using SFTP is indicated using icon.
* Click the recipient list to view the configurations specified for creating the recipient list.
## Recipient list file format
You can upload a recipient list CSV in one of the following formats - Avaamo or Epic. Each row in the CSV file is a recipient to whom the campaign message is sent. See [Avaamo file format](#avaamo-file-format) and [Epic file format](#epic-file-format), for more information.
{% hint style="info" %}
**Notes**:
* The column headings in the recipient list CSV can be used as `${column_name}` to create a customized message. These are placeholder values in the message. When an SMS or voice message is sent to a specific recipient, the placeholders `${column_name}` in the message are replaced with the corresponding column value from the CSV file.
* All the special characters in the column heading must be removed and space must be replaced with an underscore character when used in the campaign message. Example: If the CSV column heading has "Appointment Date", then in the message template it must be used as `${appointment_date}`.
{% endhint %}
### Avaamo file format
The following is the Avaamo file format of the recipient list CSV:
| Phone | email | <\> | <\> |
| ---------- | ---------- | ------------------ | ------------------ |
| <\> | <\> | <\> | <\> |
* Recipient information in the CSV file can contain details such as first name, email, last name, date, or time as per the scenario.
* For `C-IVR and SMS delivery channels`, the only CSV column header that is mandatory is the **Phone** column.
* This is the number to which the campaign message is sent.
* For the C-IVR channel, the phone number format must be in the [E.164 format](https://www.itu.int/rec/T-REC-E.164/) (`- [+] [country code] [subscriber number including area code] and can have a maximum of fifteen digits`) in all cases.
* For the SMS channel, it is recommended to specify the phone number in [E.164 format](https://www.itu.int/rec/T-REC-E.164/), except when the recipient's phone number is a national number. In such cases, only the `Subscriber number` without the country code is sufficient. For example, if the "from" and "to" number of the campaign is from the US, then the "to" number which is the recipient number can be just the Subscriber number.
E.164 Format Country Code Country Subscriber Number +1616555xxxx 1 US 616555xxxx +44345183xxxx 44 GB 345183xxxx +55115743xxxx 55 BR 115743xxxx
* For the `MS Teams delivery channel`, the only CSV column header that is mandatory is the **email** column.
* Ensure the email in the recipient list CSV is a part of the Azure directory for which the MS Teams channel is configured.
* You can find the details of the Azure directory of the MS Teams channel using the **Directory (Tenant) Id** in the MS Teams channel configuration page. See MS Teams, for more information.
The rest of the column headers in the recipient CSV file can be any user information that you wish to include for each recipient.
**Example:**
Phone email First name Last name +1556xxxx234 john@abccorp.com John Miller +1678xxxx234 mark@abccorp.com Mark Smith
**Message template**:
{% code overflow="wrap" %}
```markup
Dear ${first_name} ${last_name},
Flu season is back again this time of the year. The Sparsh care center is organizing a free Flu vaccination drive on October 1st and October 2nd from 10 AM to 6 PM. Visit your nearest Sparsh Care Center to get vaccinated.
Best regards,
Sparsh care center team
```
{% endcode %}
When the message is sent to a recipient number, the placeholder values in the template are replaced with actual values corresponding to the number.
{% code overflow="wrap" %}
```
Dear John Miller,
Flu season is back again this time of the year. The Sparsh care center is organizing a free Flu vaccination drive on October 1st and October 2nd from 10 AM to 6 PM. Visit your nearest Sparsh Care Center to get vaccinated.
Best regards,
Sparsh care center team
```
{% endcode %}
See [Templates](https://docs.avaamo.com/user-guide/outreach/templates), for more examples**.**
### **Custom file format**
Avaamo Conversational AI Platform allows you to upload a custom recipient CSV file with customized column headers based on your business requirement. Unlike Avaamos-specific recipient file format where either phone or email column header is mandatory, the custom file format allows you the flexibility to upload CSV from any external system without any mandatory column requirement. Later, the mapping of the column headers from the recipient list CSV to the actual column to be used for delivering the campaign message can be done while configuring the campaign. See [Select phone header](https://docs.avaamo.com/user-guide/campaigns/create-new-campaign#select-phone-header) and [Select email header](https://docs.avaamo.com/user-guide/campaigns/create-new-campaign#select-email-header), for more information.
For example, A custom recipient CSV file can have the following columns - Name, Email, Official Email, Preferred phone number, Mobile phone number, Home number, DOB, and many other columns. Say that you are using the SMS channel to deliver the campaign and you wish to send an SMS to the number in the `Preferred phone number` column. You can map this header in the [Select phone header ](https://docs.avaamo.com/user-guide/campaigns/create-new-campaign#select-phone-header)dropdown while configuring the campaign. When the campaign is executed, the numbers in the `Preferred phone number` column is picked for delivering the campaign message.
**Example of the Custom file format: Epic file format**
Epic enables the secure flow of patient data between Epic sites and exchange-capable systems. You can automate Epic integration with the Outreach feature in the Avaamo Platform to consume the patient data and send a campaign message to the list of recipients obtained from the Epic API seamlessly.
Epic formats are company specific and can vary. The Avaamo platform provides flexibility to upload any Epic format, however, do note the following points to enable Epic integration with the Outreach feature in the Avaamo platform.
* If `Authorised SMS` column is available, then the value in the `Authorised SMS` column is considered before sharing the campaign message. In such cases, the campaign message is sent only when `Authorised SMS` column is `Yes`. If `Authorised SMS` column is not available, then the campaign message is sent to all the users in the file.
* A suggested way to automate the integration is to build an automated script for extracting patient data from the Epic integration and drop it to an SFTP location periodically.
* Configure the SFTP details in the Outreach -> Recipient lists -> SFTP page. See [SFTP](#sftp), for more information.
* You can continue to extract and update the same file from the Epic sites to the SFTP location and the Avaamo Platform picks the latest file when the campaign is triggered.
Epic enables the secure flow of patient data between Epic sites and exchange-capable systems. You can automate Epic integration with the Outreach feature in the Avaamo Platform to consume the patient data and send a campaign message to the list of recipients obtained from the Epic API seamlessly.
## **Download recipient list**
* In the **Outreach ->** **Recipient Lists** tab, click three ellipse dots in the **Actions** column of the recipient list to view the extended menu and click **Download.**
* A copy of the recipient CSV file is downloaded to your local machine.
## **Search recipient list**
In the **Outreach ->** **Recipient Lists** tab, start entering the text in the **Search** text box and press the **Enter** key or click the **Search** icon. The results are filtered and displayed based on the text entered in the **Search** text box.
## **View a recipient list**
In the **Outreach ->** **Recipient Lists** tab, click three ellipse dots in the **Actions** column of the recipient list to view the extended menu, and click **View** to view the recipient list setup details.
You can also click the recipient list name to view the recipient list setup details.
## **Delete recipient list**
* In the **Outreach ->** **Recipient Lists** tab, click three ellipse dots in the **Actions** column of the recipient list to view the extended menu and click **Delete.**
* Click **OK** in the confirmation message to delete the recipient list.
{% hint style="info" %}
**Note**: You can delete a recipient list only when it is not associated with any campaign.
{% endhint %}
---
# Source: https://docs.avaamo.com/user-guide/avaamo-agent-assist/agent-assist-widget/ai-assist-view/recommendations.md
# Recommendations
During an ongoing call, based on the caller's inputs, `Agent Assist` automatically searches the knowledge repository for relevant information and provides recommendations to help you respond to user queries. These recommendations include concise snippets along with citations, referencing content from the knowledge base. Typically, it takes about 4-6 seconds for recommendations to appear after the caller completes their input.
The `Recommendations View` displays a continuous feed of all recommendations generated throughout the conversation, with the most recent suggestions appearing at the top. Each recommendation also includes citations for the referenced knowledge resources, which you can click on to view the full knowledge article.
Agent Assist uses a knowledge base to quickly answer queries during calls This is populated using the **LLaMB** in the Avaamo platform, which ingests and structures relevant content for effective recommendations. Refer [Before you begin](https://docs.avaamo.com/user-guide/avaamo-agent-assist/get-started/before-you-begin), for more information.
**How Automatic Recommendations Work:**
1. **Search for Relevant Answers**:
As the agent engages in a call, Agent Assist reads the conversation in real-time, identifying user queries and searching for suitable responses within the knowledge library.
2. **Real-Time Notifications for Recommendations**:
* If the agent is on a different tab or view when a recommendation is generated, a notification appears stating: `New recommendation received. Check the Recommendations tab.`
* This alert allows the agent to know that a recommended action or solution is available for the current user’s question.
3. **Accessing Recommendations**:
To view the recommendation, the agent navigates to the **Recommendations tab** where the proposed actions or solutions related to the caller’s query are displayed. These insights support the agent in promptly addressing user needs.
**Feedback on Recommendations**
You can provide feedback on the recommendations, which are recorded for analytics and reporting. If a recommendation meets your needs, you can give it a positive (thumbs up) rating, indicating that the provided information is accurate and complete.
If the recommendation is lacking, a negative rating prompts you to leave specific feedback comments detailing the issues or gaps you observed. This feedback helps improve the recommendation process through continuous training and refinement.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library.md
# Reference library
- [Context](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context.md): Encapsulates various details of a user’s interaction with the agent at a particular context
- [variables](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/variables.md)
- [user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user.md)
- [live\_agent\_user](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/user-1.md)
- [insights](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights.md)
- [history](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/history.md)
- [User.setProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperty.md): Sets the user property of the specified key to the indicated value
- [User.setProperties](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.setproperties.md): Sets the user property of the specified key to the indicated value
- [User.removeProperty](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/user.removeproperty.md)
- [Storage](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/storage.md): Stores data either for a global session or for a specific user session.
- [Flow control](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/flow-control.md): Customize the navigation of the agent flow using JS functions
- [Notifications](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/notifications.md): Allows agent to send SMS and email notifications to the users
- [Agent commands](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/skill-commands.md): Perform actions such as clear, reset, and transfer (to name a few) during a user’s interacting with the agent
- [Language.switch](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/language.switch.md): Switch language to anyone of the languages added to the agent.
- [Agent.transfer](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.transfer.md): Allows agent to switch to a live agent, if live agent option is enabled.
- [Agent.setContext](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/agent.setcontext.md): Allows agent to set context before transferring the request. Used in Skill-based routing
- [Advance JS libraries](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/advanced-js-libraries.md): List of supported Nodejs libraries with version no.
- [SmartCall (C-IVR)](/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/smartcall-c-ivr.md)
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/regression-test-file-format-1.md
# Regression test file format - V2
This article describes the new and improved version of the regression test file format referred to as "Version 2 (V2)" and how to understand results after executing the regression test using the V2 format.
* [File format](#file-format)
* [Understanding results](#understanding-results)
## Why Version 2 format?
Version 2 file format of regression testing is a new improved version. The basic principle of writing the test case differs in V1 and V2 formats and the improved format in V2 addresses certain shortcomings of the V1 format.
* Regression test - V1 format file, is a long list of comma-separated flows with skill and intent keys, along with the responses of each node in an additional column required to test multi-turn conversations. See [Regression test file format - V1](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-test-file-format#file-format), for more information.
* Regression test - V2 format file, is based on test identifiers. Each step in the flow is a row and hence, there are no additional columns of response nodes are required in the V2 format to test multi-turn conversations. Based on the way the test identifiers are defined, the platform infers the flow and the sequence of execution. See [Regression test file format - V2](#file-format), for more information.
The following table summarizes a few key differences and improvements of the Regression test - V2 format file:
Areas Regression test file format - V1 Regression test file format - V2 Ease-of-use Understanding and writing test cases is a time-consuming process.
Test identifiers make it easier to write test cases.
Multi-turn conversation flow testing Requires a long list of comma-separated flows with skill and intent keys and many additional columns with responses for each node. Requires the developers to write the test cases with proper test identifiers, each in a separate row. The rest of the inference of grouping and executing the test cases is done by the Platform. Scalability and Maintainability With the comma-separated list, it is not easy to scale and maintain new test cases or to augment the existing test cases.
Troubleshooting any error in the test case is time-consuming.
Helps to enhance the existing test case flow just by adding new identifiers.
Troubleshooting any error is easier since each row is a separate test case in a flow.
Flow control testing A limitation of the V1 format, as it is only based on the skill key and intent key. Allows complete test coverage of the flow control statements as it offers a combination of both intent and response node matching.
## File format
The regression test file must be in CSV format. The following are the details of the format:
ID QUERY TYPE EXPECTED_VALUE <<unique_id-<<sequence_id>> <<test Query>> <<response_source>> <<skill_key>>.<<intent_key>>
* **ID:** Unique identifier of each test case. The identifier must be in the format - `<>-<>,` for all cases except when the conversation is not multi-turn. Although, it is recommended to provide the full format, in such cases, only a unique identifier is sufficient. For example, If you wish to test Smalltalk or Q\&A response, then the ID can be "PizzaFAQ" instead of "PizzaFAQ-1". Each row of the CSV file is a test case to execute.
* `unique_id` can be any user-defined value.
* `sequence_id` must be numbers such as 1,2,3.
* `unique_id` and `sequence_id` must be separated by a hyphen.
* A multi-turn conversation flow is grouped by `unique_id` and executed in the sequence as mentioned by `sequence_id`. In simple terms, a group of rows with the same `unique_id` represents a flow to be executed according to the sequence in the `sequence_id`.
* See [Dialog skill](#dialog-skill), for more an example and more information.
* **QUERY:** The user query to be executed.
* **TYPE:** Indicates the response source that specifies where the user query is executed. For example, if the user query must match an intent or a response node in the Dialog skill. See [Type - Response source](#type-response-source), for more information and supported values.
* **EXPECTED\_VALUE:** Indicates the skill and intent key where the user query execution is expected to match.
{% hint style="info" %}
**Note**: The column headers are in capital case separated by an underscore.
{% endhint %}
## Type - Response source
You can specify the following response types in the regression test file:
TYPE EXPECTED_VALUE Description intent <<skill_key>>.<<intent_key>>Response source is an intent in the Dialog skill, Q&A, or Smalltalk. This is to test the query against a respective skill intent match.
See Dialog skill - intent match , for an example.
See Q&A , for an example.
response_node <<skill_key>>.<<intent_key>>Response source is a response node in the Dialog skill designer. This is to test the query against a Dialog skill response node match. Useful when,
The same intent match has different responses from different nodes based on the use case. Test flow control scenarios such as Goto_node.
See Dialog skill - response node match , for an example.
intentagent_request Test if the query triggers a live agent.
See Live agent , for an example.
intentagent_transferExpected value is agent_transfer when the live agent is triggered and transferred using #talk to agent command.
See Live agent , for an example.
intentagent_terminateExpected value is agent_terminate when the live agent is terminated using #end agent command.
See Live agent , for an example.
intentunhandledThe agent must not give a valid response to this query. It must be an unhandled response.
See Unhandled , for an example.
intentsmalltalkTest if the agent replies with a system Smalltalk response. disambiguation disambiguationTest if the agent replies with the disambiguation response for the given intent.
See Disambiguation , for an example.
disambiguation <<skill_key>>.<<intent_key>>|<<skill_key>>.<<intent_key>>Test if the agent responds with the disambiguation options specified in the pipe-separated list. See Result , for more information on understanding how the disambiguation results are evaluated.
{% hint style="info" %}
**Notes**: Ensure that there is no space before or after any separators such as "I" in the regression test file.
{% endhint %}
{% hint style="success" %}
**Key points**: To get the skill key and the intent key,
* In the desired conversational flow, post the query you wish to test in the agent chat widget at the bottom-right corner.
* Click the eye icon to view the message insights.
* From the message insights, you can get the skill key and the intent key. Use this to specify the expected intent match in the Regression test file:
* It is not required to specify system intents such as "None of these", "#end agent" when you are testing a flow. You can omit such system intents during testing.
{% endhint %}
## Use case
Consider the following conversation flow in the Order Pizza skill with the skill key as "macpizza\_order".
The following is an example of different response types in the regression test file:
ID QUERY TYPE EXPECTED VALUE OrderPizza-1 I want to order pizza intent macpizza_order.1 OrderPizza-2 veg intent macpizza_order.2 OrderPizza-3 cheese intent macpizza_order.4 OrderPizzaStarter-1 I want to order pizza intent macpizza_order.1 OrderPizzaStarter-2 veg intent macpizza_order.2 OrderPizzaStarter-3 cheese response_node macpizza_order.starters PizzaLiveAgent I want to talk to an agent intent agent_request StoreFAQ where is your store? intent mac_pizza_faqs.store_faqs Unhandled do you use organic ingredients? intent unhandled OrderFAQDisambiguation order disambiguation macpizza_order.1|mac_pizza_faqs.order_faq Disambiguation order disambiguation disambiguation
### Dialog skill - intent match
The pizza placing order flow in the above diagram can be tested as follows:
ID QUERY TYPE EXPECTED_VALUE OrderPizza-1 I want to order pizza intent macpizza_order.1 OrderPizza-2 veg intent macpizza_order.2 OrderPizza-3 cheese intent macpizza_order.4
{% hint style="info" %}
**Note**: Since all the unique identifiers are the same, they are grouped and executed in the following order `OrderPizza-1 -> OrderPizza-2 -> OrderPizza-3` based on the sequence identifier.
{% endhint %}
### Dialog skill - response node match
Consider the following conversation flow in the Order Pizza skill with the skill key as "macpizza\_order".
The pizza placing order flow in the above diagram can be tested as follows:
ID QUERY TYPE EXPECTED_VALUE OrderPizzaStarter-1 I want to order pizza intent macpizza_order.1 OrderPizzaStarter-2 veg intent macpizza_order.2 OrderPizzaStarter-3 cheese response_node macpizza_order.starters
{% hint style="info" %}
**Notes:**
* Since all the unique identifiers are the same, they are grouped and executed in the following order `OrderPizzaStarter-1 -> OrderPizzaStarter-2 -> OrderPizzaStarter-3` based on the sequence identifier.
* Node 4 has a flow control statement and the response is from the `starters` node. `OrderPizzaStarter-3` test case is to evaluate the response from the flow control statement.
{% endhint %}
### Live agent
Consider that in the MacPizza agent, you have enabled live agent interaction. See [Switch to live agent](https://docs.avaamo.com/user-guide/how-to/build-agents/configure-agents/switch-to-live-agent), for more information. You can test the transfer to the live agent using the following regression test case:
ID QUERY TYPE EXPECTED_VALUE PizzaLiveAgent I want to talk to an agent intent agent_request TalktoAgent #transfer to agent intent agent_transfer TerminateAgent #end agent intent agent_terminate
### Q\&A
Consider the following Q\&A skill:

You can test the Q\&A skill using the following regression test case:
ID QUERY TYPE EXPECTED_VALUE StoreFAQ where is your store? intent mac_pizza_faqs.store_faqs
### Unhandled
Consider that in the MacPizza agent, the query "*do you use organic ingredients?*", goes to an unhandled query. You can test the unhandled case using the following regression test case:
You can test the Q\&A skill using the following regression test case:
ID QUERY TYPE EXPECTED_VALUE Unhandled do you use organic ingredients? intent unhandled
### Disambiguation
Consider that in the MacPizza agent, the query "order", goes to disambiguation with options from a dialog skill "Order pizza" and from a Dynamic Q\&A skill "MacPizza FAQs". You can test the disambiguation case using the following regression test case:
You can test the Q\&A skill using the following regression test case:
ID QUERY TYPE EXPECTED_VALUE Disambiguation order disambiguation disambiguation OrderDisambiguation order disambiguation macpizza_order.1 OrderFAQDisambiguation order disambiguation macpizza_order.1|mac_pizza_faqs.order_faq
Test if the agent responds with the disambiguation options specified in the pipe-separated list. See [Result](#understanding-results), for more information on understanding how the disambiguation results are evaluated.
### Card responses
If you have card responses in your agent, then you specify the card response in the regression file using the following format:
```javascript
{
"card_response": {
"<>": "<>"
}
}
```
* **field\_id**: Identifier of the form element in the card. See [Add form elements](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/using-dialog-designer/create-new-skill/build-skill-responses/add-form-elements), for more information
* **value**: Value of the form element. This can be a simple string or can be an array of values based on the form element.
Example 1 (for form elements with an array of values: Checklist): Consider the following Card response in a Dialog skill node:

You can specify the "Expected value" in the regression test file as follows:
```javascript
{
"card_response": {
"d61ac4": [
"India",
"United States",
"Pakistan",
"Bangladesh"
]
}
}
```
Example 2 (for a simple string input such as single-line element, multi-line element, date, number, rating, poll, and picklist): The following is an example of a single-line element card response that can be used in the regression file:
```javascript
{
"card_response": {
"ea6432": "This is single line input"
}
}
```
## **Understanding results**
For each row, in addition to ID, QUERY, and TYPE, the following columns are displayed in the results CSV:
* EXPECTED\_VALUE: Indicates the expected value to be matched during the regression test run.
* MATCHED\_VALUE: Indicates the actual value that matched during the regression test run.
* RESULT: If the Expected value and Matched value are the same, the result is PASSED, else it is marked as FAILED. In a flow, if one row fails execution, then the subsequent rows in the flow are skipped from execution. Such cases are marked as SKIPPED.
* INSIGHTS: Insights on how the query was analyzed are available in JSON format. You can use this for further analysis and debugging. See [context.insights](https://docs.avaamo.com/user-guide/how-to/build-skills/create-skill/customize-your-skill/reference-library/context/insights), for more information.
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing/regression-test-file-format.md
# Source: https://docs.avaamo.com/user-guide/llamb/regression-testing/regression-test-file-format.md
# Regression test file format
A regression test file contains a set of questions, the actual answer to each question, which is the ground truth, and any user properties specific to that answer.
{% hint style="success" %}
**Key point:** Collaborate with Subject Matter Experts to build a regression test file in the Discovery phase itself.
{% endhint %}
### File format
The following is a sample regression test input file.
Your regression test file must be in CSV format. Each row of the CSV file is a test case to execute. The following are the details of the format:
Column 1 Column 2 Column 3 QUESTION GROUND TRUTH USER PROPERTIES
* **Question** – The query or input provided by a user to the agent. Only up to 1000 questions are supported per file.
{% hint style="info" %}
**Note:** You can run a maximum of 1,000 questions per day. Contact Avaamo Support to request a change to the daily limit configuration.
{% endhint %}
* **Ground Truth** – The expected answer for a given query serves as the reference point to evaluate whether the agent’s response is accurate and meaningfully aligned with the query’s intent. This field is optional and is used for comparison to evaluate the accuracy of the agent’s response. If left blank, the system generates the ground truth for all queries after the test is completed.
* **User Properties** – [Attributes](https://docs.avaamo.com/user-guide/llamb/get-started/step-2-ingest-enterprise-content/document-attributes) or metadata assigned at the user level, which can influence personalization and response generation. This field is optional**.**
---
# Source: https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing-universal-agents.md
# Regression testing - Universal agents
{% hint style="info" %}
**Note**: See [Universal agent](https://docs.avaamo.com/user-guide/how-to/build-agents/create-universal-agent), for more information on what a Universal agent is and how to use it.
{% endhint %}
You can test Universal agents using Regression testing. Regression testing in Universal agents allows you to test queries with its member agents.
The process of running the regression testing and viewing the status and its results remains the same as with the independent agents. See [Regression testing](https://docs.avaamo.com/user-guide/how-to/build-agents/test-agents/regression-testing), for more information.
The only difference between the Regression testing in the independent agents and the Regression testing in the Universal agents is the Regression testing file format. A sample Regression testing file format can be downloaded in the **Upload test file** pop-up window. You can use this as a reference to build the test cases that you wish to execute in the Universal agents.

{% hint style="info" %}
**Notes**:
* Currently, Universal agents are supported only in the English language. Hence, you can execute regression testing of Universal agents only in the English language.
* Regression testing for [disabled](https://docs.avaamo.com/user-guide/how-to/create-universal-agent/manage-member-agents#disable-member-agent) or[ invalid credentials](https://docs.avaamo.com/user-guide/how-to/configure-agents/deploy/universal-agent#regenerate-credentials) or [deleted member agent](https://docs.avaamo.com/user-guide/how-to/create-universal-agent/manage-member-agents#delete-member-agent) fails and returns false.
{% endhint %}
### Regression testing file format
Your regression test file must be in CSV format. Each row of the CSV file is a test case to execute. The following are the details of the format:
| Column 1 | Column 2 |
| :-------: | :--------: |
| <\> | <\> |
* **Flow**: Indicates the expected flow in which the user query is tested. This can be a comma-separated list of the expected flow sequence if you wish to test a multi-turn conversation.
* **Query**: Indicates sample query. In case you wish to test a multi-turn conversation, then you can add responses of each node in an additional column.
You can specify the following response types can be specified in the regression test file:
Response source Format Description A response from the member agent