GETTING STARTED
Introduction to AgentAssist
Architecture and Configuration
Glossary
FAQ
Release Notes
Recent Updates
Previous Versions

SET UP AgentAssist
AgentAssist Setup Guide
Sign Up for AgentAssist
Conversation Automation
Automations Board
Create a Bot
Add Multiple Bots
Create Use Cases
Overview
FAQs Setup
Create Dialog Tasks
Welcome Events
LLM and Generative AI
Search AI
Agent Coaching
Playbook
Customizing the AgentAssist Widget
Configure Auto Summarization with Custom Dialog Tasks
Feedback Settings
Widget Theming (Layout Customization)

INTEGRATIONS
AgentAssist Integration with Third-Party Applications
Amazon Connect
Amazon Connect with AgentAssist Voice Installation Guide
Amazon Connect with AgentAssist Chat Using Custom CCP
Amazon Connect with AgentAssist – Voice via AWS Third Party Applications
Channels
Voice
Configure Voice Channel
Configure Speech Recognition
Chat
SmartAssist
Configure AgentAssist
Demos
Voice Demo
Chat Demo
Salesforce
OmniChannel
Omni-Channel Configuration - Chat
AgentAssist Configuration - Chat
Genesys CTI
AgentAssist Voice Integration
NICE-CTI
AgentAssist Voice and Chat
AgentAssist Chat
Demos
Voice Demo
Chat Demo
Zendesk
Set up AgentAssist for Zendesk
Genesys
AgentAssist Integration with Genesys - Manual Setup Instructions
Agent AI Integration with Genesys Cloud CX
Set Up AgentAssist for Genesys
Change AgentAssist Bot in Genesys
Integrate Kore.ai Bot on Genesys Cloud CX Messaging
NICE MAX Desktop
Talkdesk
Twilio

AGENT EXPERIENCE
AgentAssist Widget
Bot Override and Automations

ANALYTICS
Conversation Logs
Dashboard
Agent AI ROI Analyzer (Beta)
APIs
Raw Data API v1
Raw Data API v2
Conversation Summary Trigger

AgentAssist Integration with Third-Party Applications

Introduction

AgentAssist is an AI-powered virtual assistant that optimizes contact center agent performance. It offers seamless assistance, promoting enhanced productivity and improved customer satisfaction. Its user-friendly interface and real-time support capabilities let agents effortlessly solve complex customer interactions. To learn more about the AgentAssist widget, follow this link.

This document details the steps for integrating the AgentAssist widget with third-party applications.

Integration Architectures

Chat Integration with Client-Side Communication

Chat Integration with Server-Side Communication

Voice Integration with Client-Side Transcript Sharing

Voice Integration with Server-Side Communication

Steps to Integrate AgentAssist into any Third-Party Application

This section gives an overview of the required steps to integrate Kore.ai AgentAssist into any third-party application, including telephony or CRM systems.

  1. Store Bot credentials within the third-party platform.
  2. Generate a URL for the AgentAssist widget.
    1. Fetch the stored bot details.
    2. Get the unique ID of the current ongoing conversation.
    3. Generate JSON Web Token and build the URL.
  3. Enable inter-communication between the Kore.ai AgentAssist widget and the third-party platform.
  4. Trigger a summary on the AgentAssist widget at the end of a conversation.

Store Bot credentials within the third-party platform

  • Store the Kore.ai Bot credentials in the third-party for integration. Refer to this article and this one on how to access your bot credentials.
  • Examples on how to store:
Platform Storage Method
Genesys Data Tables
NiceCX Studio Scripts
Salesforce Custom Objects
Talkdesk Script Variables
Amazon Connect Lambda Environment, Flow Context Variables

Generate a URL for the AgentAssist widget

  1. Fetch the Kore.ai Bot credentials stored on the platform.
  2. Get the unique ID of the ongoing conversation:
    • The process varies depending on the third-party platform.
    • The Conversation ID is usually accessible within the flow variables on the third-party platform.
  3. Generate JSON Web Token and build the URL:
    The URL follows this structure:

    1. Host: https://agentassist.kore.ai
    2. Path: koreagentassist-sdk-v3/UI/agentassist-iframe.html
    3. Query Parameters:
      • botId: Bot ID of the bot you want to use (for example, st-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx)
      • conversationid: Unique identifier for the ongoing conversation.
      • source: Name of the third-party platform. Only used for tracking on the AgentAssist console.
      • agentassisturl: https://smartassist.kore.ai or https://agentassist.kore.ai
      • isCall: Boolean value indicating if the current conversation is a call.
      • customdata: Optional – customData with URL encoded JSON format.
      • channel: Optional – for experience purposes and can be email, voice, or chat.
      • token: JSON Web Token encrypted with the client secret of the bot with the following payload.

        {
          "iss": "cs-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Client ID of the Bot
          "sub": "number",
          "aud": "https://idproxy.kore.com/authorize",
          "botId": "st-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Bot ID
          "isAnonymous": false
        }

        Towards the end, the URL should look like this:
        https://agentassist.kore.ai/koreagentassist-sdk-v3/UI/agentassist-iframe.html?token=<jwt-token>&botid=<bot-id>&agentassisturl=https://smartassist.kore.ai&conversationid=<conversation-id>&source=<source>&isCall=true&customData=<url-encoded-json>&channel=<channel>

Enable inter-communication between the Kore.ai AgentAssist widget and the third-party platform

  • For correct functioning of the Kore.ai AgentAssist widget, ensure communication is facilitated between the AgentAssist widget and the third-party desktop.
  • The communication can be one-way or two-way based on the medium of conversation (voice or a chat).

Third-party platform to the AgentAssist widget

Client-side Approach – Recommended for Chat

  • This approach is used if the Agent Desktop (client) exposes the events like incoming and outgoing Chat Messages or Voice Transcripts to the window. In this case, you put the AgentAssist widget in a wrapper to capture the messages coming from the window (Agent Desktop).
  • You can post messages to the AgentAssist widget with the postMessage API. You can read more about it here.
  • The payload of messages required to be posted to the AgentAssist widget are as follows:
    • Post all messages (Customer and Agent) to the AgentAssist widget for conversation logs.

      {
        "author": {
          "name": "<Customer Name>", // or Agent Name, or a placeholder name
          "id": "<Customer ID>", // or Agent ID
          "type": "USER" // or AGENT
        },
        "botId": "<Bot ID>",
        "type": "USER", // or AGENT
        "conversationId": "<conversationId>",
        "userId": "<customerId>",
        "message": "<message>"
      }
  • Post Customer messages to the AgentAssist widget for intent identification.

    {
      "author": {
        "Id": "<author id>", // optional, send blank string if not available
        "type": "USER",
        "firstName": "<first name>",
        "lastName": "<last name>"
      },
      "conversationid": "<Conversation ID>",
      "name": "agentAssist.CustomerMessage",
      "value": "<Message sent by customer>"
    }

Server-side Approach – Recommended for Voice

Chat Channel
  • This approach is used when the client does not expose Chat message events to the window, but allows the messages to be sent to an external webhook via either from within a flow or an explicit configuration within the third-party desktop.
  • The message payload needs to be in a specific JSON format as it is sent to Kore.ai AgentAssist Webhook.
    • If the third-party does not let you specify and/or customize the message format it sends to webhook, you need to write a service in the middle to be used as a proxy for the Kore.ai AgentAssist webhook. The proxy changes the data format from the third-party to the one specified by Kore.ai.
  • Here is the cURL command for sending messages to Kore.ai AgentAssist that is adaptable to your specific use case.

    // Add curl to send message via webhook to AgentAssist
    
    curl --location --request POST \
    'https://agentassist.kore.ai/agentassist/api/v1/hooks/<Bot ID>' \
    --header 'token: <token>' \
    --header 'Content-Type: application/json' \
    --data-raw '{ \
      "conversationId": "<Third Party Conversation ID>", \
      "query": "show balance", \
      "botId": "st-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", \
      "agentId": "xxxxx", \
      "experience": "voice", \
      "entities": [], \
      "sendUserMessage": true, \
      "sendAgentMessage": false, \
      "language": "en-IN" \
    }'
Voice Channel
  • This is the main approach used with Kore.ai AgentAssist voice channels.
  • Both the voice streams (agent and customer) are sent to Kore.ai AgentAssist. Based on the feasibility of the third-party contact center, there are two implementations for this process – Voice Streaming over SIP & Voice Streaming over WSS.

AgentAssist widget to third-party platform

Note: Applicable only for Chat conversations.

For both the approaches (client-side and server-side), we add a wrapper on top of the AgentAssist widget. The wrapper functions as an event listener for the Javascript postMessage API. The wrapper can then use either the client-side or the server-side approach to send a message to the customer, impersonating the agent.

Events

The AgentAssist widget emits events structured as the following:

// "Send" button event
{ 
   "method": "send", 
   "name": "agentAssist.SendMessage", 
   "conversationId": "<conversation-id>", // Conversation ID
   "payload": "Hi there. How can I help you today?" // Message Content

 

// "Copy" button event. You can copy to the agent text input or clipboard
{ 
   "method": "copy", 
   "name": "agentAssist.SendMessage", 
   "conversationId": "<conversation-id>", // Conversation ID
   "payload": "Hi there. How can I help you today?" // Message Content
}

Client-Side Approach – Recommended

  • Applicable when you can programmatically send messages directly via the agent desktop, by either triggering events or any alternative.

Server-Side Approach

  • Use this approach if the client-side approach isn’t feasible and the third-party contact center allows for pushing messages to the current conversation via a webhook.
  • Similarly, if the third-party does not allow you to invoke the webhook from a browser (due to CORS restrictions or credentials being exposed in the client), you must write a service in the middle to be used as a proxy for the third-party webhook. The proxy is responsible for sending the data to the third-party contact center in the data format accepted by their endpoints.

Trigger summary on the AgentAssist widget at the end of the conversation

When the conversation ends, you can trigger the AgentAssist Summary functionality by sending the following event to the AgentAssist widget:

{
  "payload": {
    "chatHistory": []
  },
  "conversationId": "<Conversation ID>",
  "name": "agentAssist.endOfConversation",
  "botId": "<Bot ID>"
}

 

 

 

AgentAssist Integration with Third-Party Applications

Introduction

AgentAssist is an AI-powered virtual assistant that optimizes contact center agent performance. It offers seamless assistance, promoting enhanced productivity and improved customer satisfaction. Its user-friendly interface and real-time support capabilities let agents effortlessly solve complex customer interactions. To learn more about the AgentAssist widget, follow this link.

This document details the steps for integrating the AgentAssist widget with third-party applications.

Integration Architectures

Chat Integration with Client-Side Communication

Chat Integration with Server-Side Communication

Voice Integration with Client-Side Transcript Sharing

Voice Integration with Server-Side Communication

Steps to Integrate AgentAssist into any Third-Party Application

This section gives an overview of the required steps to integrate Kore.ai AgentAssist into any third-party application, including telephony or CRM systems.

  1. Store Bot credentials within the third-party platform.
  2. Generate a URL for the AgentAssist widget.
    1. Fetch the stored bot details.
    2. Get the unique ID of the current ongoing conversation.
    3. Generate JSON Web Token and build the URL.
  3. Enable inter-communication between the Kore.ai AgentAssist widget and the third-party platform.
  4. Trigger a summary on the AgentAssist widget at the end of a conversation.

Store Bot credentials within the third-party platform

  • Store the Kore.ai Bot credentials in the third-party for integration. Refer to this article and this one on how to access your bot credentials.
  • Examples on how to store:
Platform Storage Method
Genesys Data Tables
NiceCX Studio Scripts
Salesforce Custom Objects
Talkdesk Script Variables
Amazon Connect Lambda Environment, Flow Context Variables

Generate a URL for the AgentAssist widget

  1. Fetch the Kore.ai Bot credentials stored on the platform.
  2. Get the unique ID of the ongoing conversation:
    • The process varies depending on the third-party platform.
    • The Conversation ID is usually accessible within the flow variables on the third-party platform.
  3. Generate JSON Web Token and build the URL:
    The URL follows this structure:

    1. Host: https://agentassist.kore.ai
    2. Path: koreagentassist-sdk-v3/UI/agentassist-iframe.html
    3. Query Parameters:
      • botId: Bot ID of the bot you want to use (for example, st-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx)
      • conversationid: Unique identifier for the ongoing conversation.
      • source: Name of the third-party platform. Only used for tracking on the AgentAssist console.
      • agentassisturl: https://smartassist.kore.ai or https://agentassist.kore.ai
      • isCall: Boolean value indicating if the current conversation is a call.
      • customdata: Optional – customData with URL encoded JSON format.
      • channel: Optional – for experience purposes and can be email, voice, or chat.
      • token: JSON Web Token encrypted with the client secret of the bot with the following payload.

        {
          "iss": "cs-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Client ID of the Bot
          "sub": "number",
          "aud": "https://idproxy.kore.com/authorize",
          "botId": "st-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Bot ID
          "isAnonymous": false
        }

        Towards the end, the URL should look like this:
        https://agentassist.kore.ai/koreagentassist-sdk-v3/UI/agentassist-iframe.html?token=<jwt-token>&botid=<bot-id>&agentassisturl=https://smartassist.kore.ai&conversationid=<conversation-id>&source=<source>&isCall=true&customData=<url-encoded-json>&channel=<channel>

Enable inter-communication between the Kore.ai AgentAssist widget and the third-party platform

  • For correct functioning of the Kore.ai AgentAssist widget, ensure communication is facilitated between the AgentAssist widget and the third-party desktop.
  • The communication can be one-way or two-way based on the medium of conversation (voice or a chat).

Third-party platform to the AgentAssist widget

Client-side Approach – Recommended for Chat

  • This approach is used if the Agent Desktop (client) exposes the events like incoming and outgoing Chat Messages or Voice Transcripts to the window. In this case, you put the AgentAssist widget in a wrapper to capture the messages coming from the window (Agent Desktop).
  • You can post messages to the AgentAssist widget with the postMessage API. You can read more about it here.
  • The payload of messages required to be posted to the AgentAssist widget are as follows:
    • Post all messages (Customer and Agent) to the AgentAssist widget for conversation logs.

      {
        "author": {
          "name": "<Customer Name>", // or Agent Name, or a placeholder name
          "id": "<Customer ID>", // or Agent ID
          "type": "USER" // or AGENT
        },
        "botId": "<Bot ID>",
        "type": "USER", // or AGENT
        "conversationId": "<conversationId>",
        "userId": "<customerId>",
        "message": "<message>"
      }
  • Post Customer messages to the AgentAssist widget for intent identification.

    {
      "author": {
        "Id": "<author id>", // optional, send blank string if not available
        "type": "USER",
        "firstName": "<first name>",
        "lastName": "<last name>"
      },
      "conversationid": "<Conversation ID>",
      "name": "agentAssist.CustomerMessage",
      "value": "<Message sent by customer>"
    }

Server-side Approach – Recommended for Voice

Chat Channel
  • This approach is used when the client does not expose Chat message events to the window, but allows the messages to be sent to an external webhook via either from within a flow or an explicit configuration within the third-party desktop.
  • The message payload needs to be in a specific JSON format as it is sent to Kore.ai AgentAssist Webhook.
    • If the third-party does not let you specify and/or customize the message format it sends to webhook, you need to write a service in the middle to be used as a proxy for the Kore.ai AgentAssist webhook. The proxy changes the data format from the third-party to the one specified by Kore.ai.
  • Here is the cURL command for sending messages to Kore.ai AgentAssist that is adaptable to your specific use case.

    // Add curl to send message via webhook to AgentAssist
    
    curl --location --request POST \
    'https://agentassist.kore.ai/agentassist/api/v1/hooks/<Bot ID>' \
    --header 'token: <token>' \
    --header 'Content-Type: application/json' \
    --data-raw '{ \
      "conversationId": "<Third Party Conversation ID>", \
      "query": "show balance", \
      "botId": "st-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", \
      "agentId": "xxxxx", \
      "experience": "voice", \
      "entities": [], \
      "sendUserMessage": true, \
      "sendAgentMessage": false, \
      "language": "en-IN" \
    }'
Voice Channel
  • This is the main approach used with Kore.ai AgentAssist voice channels.
  • Both the voice streams (agent and customer) are sent to Kore.ai AgentAssist. Based on the feasibility of the third-party contact center, there are two implementations for this process – Voice Streaming over SIP & Voice Streaming over WSS.

AgentAssist widget to third-party platform

Note: Applicable only for Chat conversations.

For both the approaches (client-side and server-side), we add a wrapper on top of the AgentAssist widget. The wrapper functions as an event listener for the Javascript postMessage API. The wrapper can then use either the client-side or the server-side approach to send a message to the customer, impersonating the agent.

Events

The AgentAssist widget emits events structured as the following:

// "Send" button event
{ 
   "method": "send", 
   "name": "agentAssist.SendMessage", 
   "conversationId": "<conversation-id>", // Conversation ID
   "payload": "Hi there. How can I help you today?" // Message Content

 

// "Copy" button event. You can copy to the agent text input or clipboard
{ 
   "method": "copy", 
   "name": "agentAssist.SendMessage", 
   "conversationId": "<conversation-id>", // Conversation ID
   "payload": "Hi there. How can I help you today?" // Message Content
}

Client-Side Approach – Recommended

  • Applicable when you can programmatically send messages directly via the agent desktop, by either triggering events or any alternative.

Server-Side Approach

  • Use this approach if the client-side approach isn’t feasible and the third-party contact center allows for pushing messages to the current conversation via a webhook.
  • Similarly, if the third-party does not allow you to invoke the webhook from a browser (due to CORS restrictions or credentials being exposed in the client), you must write a service in the middle to be used as a proxy for the third-party webhook. The proxy is responsible for sending the data to the third-party contact center in the data format accepted by their endpoints.

Trigger summary on the AgentAssist widget at the end of the conversation

When the conversation ends, you can trigger the AgentAssist Summary functionality by sending the following event to the AgentAssist widget:

{
  "payload": {
    "chatHistory": []
  },
  "conversationId": "<Conversation ID>",
  "name": "agentAssist.endOfConversation",
  "botId": "<Bot ID>"
}