Stay organized with collections
Save and categorize content based on your preferences.
With Contact Center AI Platform, a virtual agent can transfer a chat session to another
virtual agent without intervention by a human agent. This improves scalability
for complex multi-flow virtual agent designs. Only support
agents support virtual agent
to virtual agent transfers. Other virtual agent types, such as virtual task
assistants, don't
support this type of transfer.
Virtual agent to virtual agent transfers don't work with deflections.
Terminology
Transfer: The reassignment of an agent handling a session.
Escalation: A type of transfer where a virtual agent is "escalated" to
another agent.
Data parameters: Parameters passed to a virtual agent when a session
starts. These are passed to Dialogflow using /get_welcome_message.
Session variables: Variables from Intent Response and End
User Response. Session variables are stored for a call or chat session and
persist until the session ends. The capture_type session variable includes
the data_parameters value, which is passed to a newly assigned virtual
agent.
hide_va_to_va_system_messages: A parameter in PATCH /v1/settings/chat
that lets you hide from end-users the system messages from the web SDK and
mobile SDKs for virtual agent to virtual agent transfers.
Virtual agent to virtual agent transfers
This sections explains virtual agent to virtual agent transfers at a high level.
Initiation: A virtual agent transfers a chat session to another virtual
agent assigned to a queue. allow_virtual_agent must be true and there
must be a virtual agent available in the destination queue. For more
information, Session variable.
Data transfer: Key-value pairs of session variables with the
data_parameters capture type are passed from the source virtual agent to
the destination virtual agent.
New participant : A new participant is created with a waiting status, and
the ChatProviderService makes the new virtual agent join the chat. The
ChatProgressService then updates the participant status to connected.
Status updates: The chat status is updated to va_assigned, and a
connection to Dialogflow is established.
Escalation cancellation: The previous escalation is canceled if it's
escalating in
Chatbot::EscalationServiceListener::on_escalation_created.
Message suppression: hide_va_to_va_system_messages lets you suppress
chat transfer system messages to end-users using the web SDK and mobile SDKs.
Dialogflow custom payloads
This section contains examples of Dialogflow custom payloads.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-25 UTC."],[],[],null,["# Virtual agent to virtual agent transfers\n\nWith Contact Center AI Platform, a virtual agent can transfer a chat session to another\nvirtual agent without intervention by a human agent. This improves scalability\nfor complex multi-flow virtual agent designs. Only [support\nagents](/contact-center/ccai-platform/docs/virtual-agent) support virtual agent\nto virtual agent transfers. Other virtual agent types, such as [virtual task\nassistants](/contact-center/ccai-platform/docs/va-task-assistants), don't\nsupport this type of transfer.\n\nVirtual agent to virtual agent transfers don't work with deflections.\n\nTerminology\n-----------\n\n- **Transfer**: The reassignment of an agent handling a session.\n\n- **Escalation**: A type of transfer where a virtual agent is \"escalated\" to\n another agent.\n\n- **Data parameters** : Parameters passed to a virtual agent when a session\n starts. These are passed to Dialogflow using `/get_welcome_message`.\n\n- **Session variables** : Variables from Intent Response and End\n User Response. Session variables are stored for a call or chat session and\n persist until the session ends. The `capture_type` session variable includes\n the `data_parameters` value, which is passed to a newly assigned virtual\n agent.\n\n- **hide_va_to_va_system_messages** : A parameter in `PATCH /v1/settings/chat`\n that lets you hide from end-users the system messages from the web SDK and\n mobile SDKs for virtual agent to virtual agent transfers.\n\nVirtual agent to virtual agent transfers\n----------------------------------------\n\nThis sections explains virtual agent to virtual agent transfers at a high level.\n\n1. **Initiation** : A virtual agent transfers a chat session to another virtual\n agent assigned to a queue. `allow_virtual_agent` must be `true` and there\n must be a virtual agent available in the destination queue. For more\n information, [Session variable](#session-variable).\n\n2. **Data transfer** : Key-value pairs of session variables with the\n `data_parameters` capture type are passed from the source virtual agent to\n the destination virtual agent.\n\n3. **New participant** : A new participant is created with a `waiting` status, and\n the `ChatProviderService` makes the new virtual agent join the chat. The\n `ChatProgressService` then updates the participant status to `connected`.\n\n4. **Status updates** : The chat status is updated to `va_assigned`, and a\n connection to Dialogflow is established.\n\n5. **Escalation cancellation** : The previous escalation is canceled if it's\n escalating in\n `Chatbot::EscalationServiceListener::on_escalation_created`.\n\n6. **Message suppression** : `hide_va_to_va_system_messages` lets you suppress\n chat transfer system messages to end-users using the web SDK and mobile SDKs.\n\nDialogflow custom payloads\n--------------------------\n\nThis section contains examples of Dialogflow custom payloads.\n\n### Escalation payload\n\nEscalation payload example: \n\n {\n \"ujet\": {\n \"type\": \"action\",\n \"action\": \"escalation\",\n \"escalation_reason\": \"by_virtual_agent\", // \"by_consumer\" or \"by_virtual_agent\"\n \"allow_virtual_agent\": true,\n \"menu_id\": 100,\n \"language\": \"ko\"\n }\n }\n\nSet `allow_virtual_agent` to `true` to allow transfer to a virtual agent.\n\n### Session variable\n\nSession variable example: \n\n {\n \"ujet\": {\n \"session_variable\": {\n \"capture_target\": \"payload\",\n \"capture_type\": [\"comment\", \"data_parameters\"],\n \"payload\": {\n \"value_one\": \"$session.params.payload_value_one\",\n \"value_two\": \"$session.params.payload_value_two\"\n }\n },\n ...\n }\n }\n\nImportant considerations\n------------------------\n\n- **Reporting \\& Metadata** : Using queued status between `va_assigned` ensures correct reporting and metadata."]]