Copilot Chat
The Copilot Chat block is the conversation surface of the copilot family: it renders the running message transcript between the user and an AI agent (or a human agent in live-chat handoffs), plus the message input panel at the bottom. It loads earlier messages as the user scrolls, shows the agent's thinking progress while a response streams, displays conversation starters when the thread is empty, and supports message feedback (like/dislike), regeneration, citations, and file attachments.
Note: You don't usually drop this block manually. The Copilot and Copilot Thread blocks compose it automatically as their transcript area. Add it directly only when building a fully custom layout.
Key Configuration (set by parent composition)
| Property | Type | Default | Description |
chatId | string | — | The conversation this transcript belongs to. |
defaultChatAssigneeType | "aiAgent" | "agent" | — | Who is answering — an AI agent or a human agent. |
messageVariant | "DEFAULT" | "BUBBLE" | — | Flat rows or chat bubbles. |
conversationStarters | string[] | — | Suggested prompts shown while the conversation is empty. |
agentAvatarDetails | object | — | The agent's avatar for idle and thinking states — image, custom HTML, or Lottie. |
autofocus | boolean | — | Focuses the message input as soon as the chat appears. |
Behavior & Gotchas
Note: An initial prompt is sent automatically, exactly once. When the copilot opens with a pre-set starting prompt, the chat submits it on the user's behalf on mount — the user doesn't type or press anything.
Note: Returning from voice mode refreshes the transcript. When the user switches back from voice mode, the chat immediately re-checks the conversation so anything said during the voice session appears.
Warning: The input box hides for run-triggered workflow agents on an empty conversation. If the agent is a workflow agent whose trigger is not a chat message, the message input is hidden while the conversation is empty.
Copilot Input
The Copilot Input block is the message composer of the copilot family — the box where users type prompts, attach files, pick an AI model, enable tools and skills, share their location, or dictate by voice. It links to a Copilot or Copilot Thread block and sends messages into that conversation. It comes in Comfortable and Compact layouts and can offer intelligent autocomplete suggestions while typing.
Tip: When to use standalone: When composing a custom chat layout and wanting the prompt box as its own block — e.g. an input on a home page that starts a conversation in a thread view. If using the all-in-one Copilot block, it already includes its own input.
Properties
| Property | Type | Default | Description |
mode | "comfortable" | "compact" | comfortable | Layout density of the composer. |
enterKeyBehavior | enter-key preset | Send message | What the Enter key does — send the message or insert a new line. |
placeholder | string | — | Placeholder text before the user types. |
linkedBlockId | block reference | — | The Copilot or Copilot Thread block this input sends messages to. |
autoFocus | boolean | true | Focuses the input as soon as it appears. |
autocomplete | boolean | false | Enables suggestions while typing (predictions, past conversations, document citations when linked to a thread). |
actions | list of actions | — | Action buttons in the composer: Add Attachments, Send Message, Emoji Picker, Model Switcher, Tools, Skill Library, Share Location. |
Events
| Event | Trigger |
On Focus | Input gains focus. |
On Blur | Input loses focus. |
On Show History | User opens conversation history from the input. |
On Manage Sources | User opens the knowledge-sources manager. |
On Share Location | User shares a location (payload includes lat, lon, venueName, address, mapPreviewUrl). |
Methods
| Method | Params | Effect |
Set Value | content, attachments | Sets the composer text and adds attachments. Merges (not replaces) attachments. |
Change Mode | mode | Switches layout between comfortable, compact, and search (search is method-only). |
Start Dictation | — | Begins voice dictation into the input. |
Stop Dictation | — | Ends voice dictation. |
Reset | — | Clears text and attachments; also turns off autofocus. |
Focus | — | Moves keyboard focus into the input. |
Exposed State
| State key | Type | Description |
{{ id.value }} | string | The current composer text. |
{{ id.attachments }} | array | Files attached to the pending message. |
{{ id.modelId }} | string | The AI model selected via the model switcher. |
{{ id.isFocused }} | boolean | Whether the input currently has focus. |
Behavior & Gotchas
Note: Set Value merges attachments instead of replacing them. To start clean, call Reset first, then Set Value.
Note: Reset also turns off autofocus. Chain a Focus call if you want the cursor back in the box after a reset.
Copilot Response
The Copilot Response block renders one or more agent messages outside a live conversation. Feed it response data — an agent-to-agent (A2A) protocol message or a list of platform messages — and it displays them with the same rich rendering as the Copilot Chat transcript: markdown, embedded interactive content, and a citations row. Use it when you already have the agent's answer and just need to present it, without the input box, polling, or conversation state that a full chat brings.
Tip: When to use: Search-style or "one-shot answer" experiences where the user can't reply. Fetch an agent's answer yourself (automation, API) and display it with full copilot formatting. If the user should be able to reply, use Copilot Chat or Copilot Thread.
Properties
| Property | Type | Default | Description |
data | bound response data | — | The response to render. Bind to an A2A protocol message or a list of platform messages. |
citations.data | bound list | — | The sources cited by the response, shown as a citation row. |
citations.fieldMappings | mapped values | appName / iconUrl | Maps citation item fields to what the citation chip displays. |
Events
| Event | Trigger |
On Citation Click | User clicks a citation chip (payload: citation details). |
Copilot Thread
The Copilot Thread block is a standalone conversation view built for enterprise-search experiences. It renders a single thread in one of three views — Search (query-and-answer results), Chat (a running conversation), or Both (a toggle between the two) — and manages the thread lifecycle.
Properties
| Property | Type | Default | Description |
viewType | "search" | "chat" | "searchAndChat" | search | Search results, chat conversation, or both with a user-facing switcher. |
initialThreadId | string | — | Opens on an existing thread instead of a fresh one. |
initialQuery | string | — | A query to run as soon as the thread opens. |
Events
| Event | Trigger |
On Message Sent | User sends a message or query. |
On Case Created | A new thread (conversation) is created. |
On Show History | User opens the history view from the thread. |
On Change View | The view switches between search and chat. |
Copilot Voice
The Copilot Voice block runs a real-time voice conversation with an AI agent — microphone, optional camera, and screen sharing — without rendering any chat interface of its own. It is the engine of a custom voice experience: you compose the visible UI yourself using its slots and sibling blocks, then drive the session through its methods and state.
Tip: When to use: Build a bespoke voice assistant UI — call screen, kiosk, in-app voice agent — with full control over the layout. If you want a ready-made chat widget where voice is just one mode, use Copilot instead.
Properties
| Property | Type | Default | Description |
aiAgentId | agent reference | First available agent | The AI agent that answers the conversation. |
initialChatId | string | — | The chat session to resume. Left empty, a new chat is created. |
runtimeContext | string (text or JSON) | — | Context passed to the agent when a new chat is created. |
fetchInitialMessagesOnConnect | boolean | false | Loads existing messages into the voice transcript on connect. |
Copilot History
The Copilot History block lists a user's past copilot conversations so they can jump back into any of them. It supports three conversation sources (AI Agent, Live Chat, Enterprise Search) and offers search, optional time-based grouping (Today, Previous 7 days, etc.), a pinned Starred section, and per-conversation actions (select, rename, archive, delete).
Properties
| Property | Type | Default | Description |
copilotType | "AI_AGENT" | "LIVE_CHAT" | "ENTERPRISE_SEARCH" | AI_AGENT | Which kind of conversations the list shows. |
activeCase | string | — | The conversation to show as selected in the list. Bind to the currently open conversation. |
searchQuery | string | — | Filters the list. Bind to a search input's value for live search. |
aiAgentId | string | — | Limits the list to conversations by one specific agent. |
entityType / entityId | string | — | Limit the list to conversations associated with one record (e.g. a specific ticket). |
showSections | boolean | — | Groups conversations into time-based sections: Today, Previous 7 days, Previous 30 days, and older. |
Events
| Event | Trigger |
On Conversation Select | User clicks a conversation in the list. |
On Conversation Rename | User renames a conversation. |
On Conversation Archive | User archives a conversation. |
On Conversation Delete | User deletes a conversation. |
Examples
Related Blocks
| Block | Relationship |
| Copilot | The all-in-one assembled experience that composes these blocks. |
| Headless Copilot | The engine-only variant for fully custom UI. |
| Copilot Video | Displays a live video or screen-share feed from a voice session. |
Frequently Asked Questions
How do I wire a Copilot Input block to a specific Copilot or Headless Copilot block?
Set the Copilot Input's linkedBlockId property to the ID of the Copilot or Headless Copilot block it should submit messages to. When the user sends a message, the Input block routes it to the linked block's conversation. Without this link, the Input block fires On Send Message but the message is not automatically delivered to any Copilot engine.
Can a user resume a previous Copilot Thread conversation?
Yes. Bind the Initial Thread ID (initialThreadId) property to a stored thread identifier. When the component renders, it opens that thread instead of starting empty. The Copilot Thread block also exposes an On Thread Select event — use it to persist the selected thread ID to your data source so it can be passed back on next visit.
What is the difference between Copilot Voice and the voice mode inside the main Copilot block?
The standard Copilot block's voice mode is an overlay that activates on top of the existing chat UI — the user can switch between text and voice in the same conversation. The standalone Copilot Voice block is a dedicated voice-only surface that always starts in voice mode. Use Copilot Voice when you want a voice-first or voice-only interface without any text chat UI.
How do I pre-populate the Copilot Thread search with an initial query?
Bind the Initial Query (initialQuery) property to the search term you want. When the block renders, it executes the search immediately with that query. This is useful for loading search results contextually — for example, pre-searching for topics related to the current page or record the user is viewing.