Unify Logo Footer.svg
Unify Applications
Logo
Copilot Chat & Voice

Copilot Chat & Voice

Logo

9 mins READ

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)

PropertyTypeDefaultDescription
chatIdstringThe 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.
conversationStartersstring[]Suggested prompts shown while the conversation is empty.
agentAvatarDetailsobjectThe agent's avatar for idle and thinking states — image, custom HTML, or Lottie.
autofocusbooleanFocuses 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

PropertyTypeDefaultDescription
mode"comfortable" | "compact"comfortableLayout density of the composer.
enterKeyBehaviorenter-key presetSend messageWhat the Enter key does — send the message or insert a new line.
placeholderstringPlaceholder text before the user types.
linkedBlockIdblock referenceThe Copilot or Copilot Thread block this input sends messages to.
autoFocusbooleantrueFocuses the input as soon as it appears.
autocompletebooleanfalseEnables suggestions while typing (predictions, past conversations, document citations when linked to a thread).
actionslist of actionsAction buttons in the composer: Add Attachments, Send Message, Emoji Picker, Model Switcher, Tools, Skill Library, Share Location.

Events

EventTrigger
On FocusInput gains focus.
On BlurInput loses focus.
On Show HistoryUser opens conversation history from the input.
On Manage SourcesUser opens the knowledge-sources manager.
On Share LocationUser shares a location (payload includes lat, lon, venueName, address, mapPreviewUrl).

Methods

MethodParamsEffect
Set Valuecontent, attachmentsSets the composer text and adds attachments. Merges (not replaces) attachments.
Change ModemodeSwitches layout between comfortable, compact, and search (search is method-only).
Start DictationBegins voice dictation into the input.
Stop DictationEnds voice dictation.
ResetClears text and attachments; also turns off autofocus.
FocusMoves keyboard focus into the input.

Exposed State

State keyTypeDescription
{{ id.value }}stringThe current composer text.
{{ id.attachments }}arrayFiles attached to the pending message.
{{ id.modelId }}stringThe AI model selected via the model switcher.
{{ id.isFocused }}booleanWhether 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

PropertyTypeDefaultDescription
databound response dataThe response to render. Bind to an A2A protocol message or a list of platform messages.
citations.databound listThe sources cited by the response, shown as a citation row.
citations.fieldMappingsmapped valuesappName / iconUrlMaps citation item fields to what the citation chip displays.

Events

EventTrigger
On Citation ClickUser 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

PropertyTypeDefaultDescription
viewType"search" | "chat" | "searchAndChat"searchSearch results, chat conversation, or both with a user-facing switcher.
initialThreadIdstringOpens on an existing thread instead of a fresh one.
initialQuerystringA query to run as soon as the thread opens.

Events

EventTrigger
On Message SentUser sends a message or query.
On Case CreatedA new thread (conversation) is created.
On Show HistoryUser opens the history view from the thread.
On Change ViewThe 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

PropertyTypeDefaultDescription
aiAgentIdagent referenceFirst available agentThe AI agent that answers the conversation.
initialChatIdstringThe chat session to resume. Left empty, a new chat is created.
runtimeContextstring (text or JSON)Context passed to the agent when a new chat is created.
fetchInitialMessagesOnConnectbooleanfalseLoads 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

PropertyTypeDefaultDescription
copilotType"AI_AGENT" | "LIVE_CHAT" | "ENTERPRISE_SEARCH"AI_AGENTWhich kind of conversations the list shows.
activeCasestringThe conversation to show as selected in the list. Bind to the currently open conversation.
searchQuerystringFilters the list. Bind to a search input's value for live search.
aiAgentIdstringLimits the list to conversations by one specific agent.
entityType / entityIdstringLimit the list to conversations associated with one record (e.g. a specific ticket).
showSectionsbooleanGroups conversations into time-based sections: Today, Previous 7 days, Previous 30 days, and older.

Events

EventTrigger
On Conversation SelectUser clicks a conversation in the list.
On Conversation RenameUser renames a conversation.
On Conversation ArchiveUser archives a conversation.
On Conversation DeleteUser deletes a conversation.

Examples

BlockRelationship
CopilotThe all-in-one assembled experience that composes these blocks.
Headless CopilotThe engine-only variant for fully custom UI.
Copilot VideoDisplays 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.