GETTING STARTED
Introduction to AgentAssist
Architecture and Configuration
Glossary
FAQ
Agent AI Migration from XO v10 to v11
Release Updates
Release Notes
Previous Versions

SET UP AgentAssist
AgentAssist Setup Guide
Sign Up for AgentAssist
Third Party Configuration
Conversation Automation
Automations Board
Create a Bot
Add Multiple Bots
Create Use Cases
Overview
FAQs Setup
Create Dialog Tasks
Conversation Events
LLM and Generative AI
Access Custom Data in Agent AI Bot
Linked Services
Agent Coaching
Playbook
Customizing the Agent AI Widget
Configure Auto Summarization with Custom Dialog Tasks
Feedback Settings
Widget Theming (Layout Customization)
Supported Languages

INTEGRATIONS
AgentAssist Integration with Third-Party Applications
Amazon Connect
Amazon Connect with AgentAssist Voice using CCP
Amazon Connect with AgentAssist Chat Using 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
Chat
Legacy Chat Configuration
Messaging in App and Web (New Chat)
AgentAssist Configuration - Chat (Messaging)
Voice
Salesforce Service Cloud Voice (Amazon Connect Telephony)
Genesys Adapters
AgentAssist Voice Integration with Genesys CTI
Agent AI Voice Integration with CX Cloud from Genesys and Salesforce
NICE-CTI
Kore Agent AI with Salesforce NICE CX-CTI
Kore Agent AI with Salesforce NICE CX-CTI for Outbound Calls
Demos
Voice Demo
Chat Demo
Zendesk
Set up AgentAssist for Zendesk
Genesys
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
ServiceNow
NICE CX
NICE MAX Desktop (Chat and Voice)
NICE MAX Desktop for Outbound Calls
NICE Agent Desktop (Voice)
Talkdesk
Twilio
Five9
Agent AI Chat Integration with Five9

AGENT EXPERIENCE
AgentAssist Widget
Bot Override and Automations
Agentic Copilot

ANALYTICS
Conversation Logs
Dashboard
Agent AI ROI Analyzer (Beta)
APIs
Raw Data API v1
Raw Data API v2
Conversation Summary Trigger
Control Transcription API
Hooks API for Internal Transfers
API for Duration-Based Conversation Records

Hooks API for Internal Transfers

This API supports internal transfer events, reducing reliance on UI socket events. It captures transfer data initiated outside the UI, sends via API payloads, and displays in the Agent AI widget.

Method POST
Endpoint https://{{host}}/agentassist/api/v1/hooks/{{botId}}
Content Type application/json
Authorization auth: {{JWT}}

See How to generate the JWT Token

Path Parameters

Parameter Required Description
host Yes The environment URL. For example, https://platform.kore.ai.
botId Yes Unique identifier of the bot.

Header Parameters

Header Type Required Description
Content-Type String Yes Indicates the media type of the request body. Set to application/json.
token String Yes Authentication token used to authorize the request.

Sample Request

curl --location 'https://platform.kore.ai///agentassist/api/v1/hooks/st-XXXX-XXXX-XXXX-XXXX' \
--header 'Content-Type: application/json' \
--header 'token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6ImNzLTYzNjNmY2JiLTMxMGUtNWIwNy05MWE5LWM2MTRjZDNjYmY2ZSJ9.H-JGmnWDBm2mFIw_PoMLQ5WLTPT_9-iFFPTLrHxxxxx' \
--data '{
"conversationId": "c-xxxx",
"botId": "st-XXXX-XXXX-XXXX-XXXX",
"events": [
{
"name": "INTERNAL_TRANSFER_EVENT",
"transfertype": "NA",
"transition": "entry",
"isExtAD": "true",
"language": "language",
"experience": "chat",
"participant": {
"identity": "xxxxxx",
"name": "Agent ai",
"type": "agent"
}
}
]
}'

Request Body Parameters

Parameter Type Required Description
conversationId String Yes Unique identifier of the conversation.
botId String Yes Identifier of the bot associated with the event.
events Array of Objects Yes List of event objects that describe actions or state transitions.

 

Parameter Type Required Description
name String Yes Name of the event. Example: INTERNAL_TRANSFER_EVENT.
transfertype String Yes Specifies the transfer type.
transition String Yes Indicates the event transition (for example, entry).
isExtAD String Yes Shows whether the transfer uses an external directory.
language String No Language used during the event.
experience String Yes Interaction mode. Example: chat or voice

 

Parameter Type Required Description
participant Object Yes Provides details about the participant involved in the event.
participant.identity String Yes Unique identifier of the participant.
participant.name String Yes Name of the participant.
participant.type String Yes Type of participant. Example: agent.

Types of Transfers

The Hooks API supports the following transfer types:

Transfer Type Description
NA Transfer (No Transfer) The first agent accepts the conversation, or the last agent leaves the conversation.
Cold Transfer Conversation moves from one agent to another—only one agent is active at a time.
Warm Transfer A new agent joins while others remain in the conversation—multiple agents may be active.

 

Key principle: The conversation ID remains the same throughout all these events to ensure continuity in Agent AI’s context.

Sending Transfer Events

Use the following JavaScript code to send internal transfer events to the Agent AI backend.

async function sendInternalTransferEvent(payload) {
  await axios.post(
`<baseurl>/agentassist/api/v1/hooks/<botId>`,
payload,
{
  headers: {
    token: jwt.sign(
      {
        appId: <clientId>,
      },
      <clientSecret>
    ),
  },
}
  );
}


Where the payload includes:

  • Transfertype: The type of transfer
  • Transition: Indicates whether the agent is entering or exiting
  • Participant: Details of the agent involved

Detailed Scenarios

Here are the scenarios in detail, with their purpose and sample payloads:

NA Transfer (No Transfer)

When a customer connects with the first agent, it’s unknown whether a transfer will occur. In this case, the payload includes an NA entry event.

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "NA",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId1",
       name: "AgentName1",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Explanation:

  • transfertype: “NA”—No transfer has occurred yet.
  • transition: “entry”—The agent has entered the conversation.

Cold Transfer

This occurs when the conversation is moved from one agent to another.
At any given time, only one agent is in the conversation.

New Agent Joins

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "COLD",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId2",
       name: "AgentName2",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Previous Agent Leaves

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "COLD",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId1",
       name: "AgentName1",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Repeat the same pattern if there are more transfers.

Warm Transfer

This occurs when one or more additional agents join the conversation while others remain active.
Multiple agents can participate and be active at the same time.

Agent Joins

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "WARM",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId3",
       name: "AgentName3",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Agent Leaves (Not the Last Agent)

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "WARM",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId2",
       name: "AgentName2",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Final Agent Leaves at the End of the Conversation

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "NA",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId3",
       name: "AgentName3",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Cold Transfer Flow 

In this scenario, Agent-1 accepts the call and redirects it to Agent-2, and later Agent-3 gets the call.

  • Customer connects to Agent-1NA + entry
  • Agent-1 exits the conversation
    • Agent 1—cold + exit
  • Agent-2 accepts the conversation
    • Agent 2—cold + entry
  • Agent-2 exits the conversation
    • Agent 2—cold + exit
  • Agent-3 accepts the conversation
    • Agent 3—cold + entry
  • Conversation ends—Last agent—NA + exit

Warm Transfer Flow

  • Customer connects to Agent-1NA + entry
  • Agent-1 invites Agent-2 as a consultant
  • Agent-2 joinswarm + entry
  • Agent-1 invites Agent-3 as a consultant
  • Agent-3 joinswarm + entry
  • Agent-2 leaveswarm + exit
  • Agent-3 leaveswarm + exit
  • Conversation ends—Agent-1 exitsNA + exit

Key Takeaways

  • Always send the correct transfer events when agents join or leave.
  • Maintain a consistent conversation ID throughout the conversation.
  • Use:
    • NA for the first agent entry and last agent exit
    • cold for Conversation handovers
    • warm for multi-agent participation

Sample Response

if the request is successful, you get a success response (200 OK).

 

Hooks API for Internal Transfers

This API supports internal transfer events, reducing reliance on UI socket events. It captures transfer data initiated outside the UI, sends via API payloads, and displays in the Agent AI widget.

Method POST
Endpoint https://{{host}}/agentassist/api/v1/hooks/{{botId}}
Content Type application/json
Authorization auth: {{JWT}}

See How to generate the JWT Token

Path Parameters

Parameter Required Description
host Yes The environment URL. For example, https://platform.kore.ai.
botId Yes Unique identifier of the bot.

Header Parameters

Header Type Required Description
Content-Type String Yes Indicates the media type of the request body. Set to application/json.
token String Yes Authentication token used to authorize the request.

Sample Request

curl --location 'https://platform.kore.ai///agentassist/api/v1/hooks/st-XXXX-XXXX-XXXX-XXXX' \
--header 'Content-Type: application/json' \
--header 'token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6ImNzLTYzNjNmY2JiLTMxMGUtNWIwNy05MWE5LWM2MTRjZDNjYmY2ZSJ9.H-JGmnWDBm2mFIw_PoMLQ5WLTPT_9-iFFPTLrHxxxxx' \
--data '{
"conversationId": "c-xxxx",
"botId": "st-XXXX-XXXX-XXXX-XXXX",
"events": [
{
"name": "INTERNAL_TRANSFER_EVENT",
"transfertype": "NA",
"transition": "entry",
"isExtAD": "true",
"language": "language",
"experience": "chat",
"participant": {
"identity": "xxxxxx",
"name": "Agent ai",
"type": "agent"
}
}
]
}'

Request Body Parameters

Parameter Type Required Description
conversationId String Yes Unique identifier of the conversation.
botId String Yes Identifier of the bot associated with the event.
events Array of Objects Yes List of event objects that describe actions or state transitions.

 

Parameter Type Required Description
name String Yes Name of the event. Example: INTERNAL_TRANSFER_EVENT.
transfertype String Yes Specifies the transfer type.
transition String Yes Indicates the event transition (for example, entry).
isExtAD String Yes Shows whether the transfer uses an external directory.
language String No Language used during the event.
experience String Yes Interaction mode. Example: chat or voice

 

Parameter Type Required Description
participant Object Yes Provides details about the participant involved in the event.
participant.identity String Yes Unique identifier of the participant.
participant.name String Yes Name of the participant.
participant.type String Yes Type of participant. Example: agent.

Types of Transfers

The Hooks API supports the following transfer types:

Transfer Type Description
NA Transfer (No Transfer) The first agent accepts the conversation, or the last agent leaves the conversation.
Cold Transfer Conversation moves from one agent to another—only one agent is active at a time.
Warm Transfer A new agent joins while others remain in the conversation—multiple agents may be active.

 

Key principle: The conversation ID remains the same throughout all these events to ensure continuity in Agent AI’s context.

Sending Transfer Events

Use the following JavaScript code to send internal transfer events to the Agent AI backend.

async function sendInternalTransferEvent(payload) {
  await axios.post(
`<baseurl>/agentassist/api/v1/hooks/<botId>`,
payload,
{
  headers: {
    token: jwt.sign(
      {
        appId: <clientId>,
      },
      <clientSecret>
    ),
  },
}
  );
}


Where the payload includes:

  • Transfertype: The type of transfer
  • Transition: Indicates whether the agent is entering or exiting
  • Participant: Details of the agent involved

Detailed Scenarios

Here are the scenarios in detail, with their purpose and sample payloads:

NA Transfer (No Transfer)

When a customer connects with the first agent, it’s unknown whether a transfer will occur. In this case, the payload includes an NA entry event.

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "NA",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId1",
       name: "AgentName1",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Explanation:

  • transfertype: “NA”—No transfer has occurred yet.
  • transition: “entry”—The agent has entered the conversation.

Cold Transfer

This occurs when the conversation is moved from one agent to another.
At any given time, only one agent is in the conversation.

New Agent Joins

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "COLD",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId2",
       name: "AgentName2",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Previous Agent Leaves

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "COLD",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId1",
       name: "AgentName1",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Repeat the same pattern if there are more transfers.

Warm Transfer

This occurs when one or more additional agents join the conversation while others remain active.
Multiple agents can participate and be active at the same time.

Agent Joins

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "WARM",
     transition: "entry",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId3",
       name: "AgentName3",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Agent Leaves (Not the Last Agent)

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "WARM",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId2",
       name: "AgentName2",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Final Agent Leaves at the End of the Conversation

const payload = {
conversationId: "atesta-xxxx",
botId: "st-XXXX-XXXX-XXXX-XXXX",
events: [
   {
     name: "INTERNAL_TRANSFER_EVENT",
     transfertype: "NA",
     transition: "exit",
     isExtAD: true,
     language: "en",
     experience: "voice",
     participant: {
       identity: "agentId3",
       name: "AgentName3",
       type: "agent"
     }
   }
]
  }
sendInternalTransferEvent(payload);

Cold Transfer Flow 

In this scenario, Agent-1 accepts the call and redirects it to Agent-2, and later Agent-3 gets the call.

  • Customer connects to Agent-1NA + entry
  • Agent-1 exits the conversation
    • Agent 1—cold + exit
  • Agent-2 accepts the conversation
    • Agent 2—cold + entry
  • Agent-2 exits the conversation
    • Agent 2—cold + exit
  • Agent-3 accepts the conversation
    • Agent 3—cold + entry
  • Conversation ends—Last agent—NA + exit

Warm Transfer Flow

  • Customer connects to Agent-1NA + entry
  • Agent-1 invites Agent-2 as a consultant
  • Agent-2 joinswarm + entry
  • Agent-1 invites Agent-3 as a consultant
  • Agent-3 joinswarm + entry
  • Agent-2 leaveswarm + exit
  • Agent-3 leaveswarm + exit
  • Conversation ends—Agent-1 exitsNA + exit

Key Takeaways

  • Always send the correct transfer events when agents join or leave.
  • Maintain a consistent conversation ID throughout the conversation.
  • Use:
    • NA for the first agent entry and last agent exit
    • cold for Conversation handovers
    • warm for multi-agent participation

Sample Response

if the request is successful, you get a success response (200 OK).