Copilots (Agent Assist)¶
Status: Current | Last reviewed: 2026-10-07
A copilot listens to a live call and helps the human agent handling it. It never speaks to the customer. Instead it puts cards into the Agent Assist panel — a suggested answer with citations, a coaching nudge, a translated transcript line, a form filling itself in as the customer talks.
For each Copilot, use Display in to choose Assist rail or Center workspace. Center placement works with the TrueServe Copilot Workspace component and can show larger case histories, evidence and live forms. The Takeda demo instead uses native Salesforce components in the center and Copilot cards in the sidebar.
In Studio Preview, switch between Suggestions and Workspace to rehearse both placements on the same call. This changes the displayed view without starting another conversation. Choose Workspace for a composed patient record such as the Surgery Partners demo.
Composition context is a third placement for a worker whose result feeds a custom composed catalog view. It produces no standalone visible card. Use it with a catalog that reads related surfaces, or a host integration that consumes SDK events. A form worker can use this placement without a catalog card to fill a native Salesforce form without duplicate suggestions in the sidebar.
Host context and event triggers¶
For custom and coaching workers, Trigger inputs chooses Transcripts,
Custom events, or Both. Transcripts is the default. Event names
optionally restricts the accepted events, for example context.ready and
case.updated. An event-only worker can display a transfer summary before the
human speaks while other workers continue listening to the call.
Use {{HostContext}} in prompts for the Salesforce record and Context Flow
outputs. {{LatestEvent}} and {{EventHistory}} contain application events,
separate from spoken conversation. A prompt can say: “When the call context
contains multiple discussed patient Cases, show the transfer summary with only
those patients.” Catalog examples are not caller data.
Load context at session start can run a model or configured tools. When
the opening card needs Salesforce's page context, trigger it on context.ready
instead so it waits for that data.
You build one in the agent editor like any other agent. The copilot editor is a fixed canvas: a chain from Conversation start, through Transcription and the Actionability gate, fanning out to your copilots, then Translation, Summarization, and Conversation end. Click any node — or use the selector strip above the canvas — and its settings open in the inspector on the left. Only the copilot fan-out is yours to add and remove; the rest of the chain is always there, because the runtime always builds it in that order.
At the top of the canvas an engine selector chooses between Custom (TrueServe's own transcription, gate, and summarization — the default) and 3rd-Party · Agent Assist (Google Agent Assist replaces those three and brings its own suggestions; your copilots still run, on Agent Assist's transcripts).
The Allianz annuity demo demonstrates approved empathy and knowledge cues alongside independent fact and intake workers. Its common cue cards use preapproved content, while other tasks use a model. Timing reports separate these paths.
Create one¶
Agents → New agent, then pick Copilot (real-time agent assistance and suggestions). Starting from a Copilot template (Templates) gets you a working configuration you can edit down.
The canvas shows these nodes, top to bottom:
| Node | What it decides |
|---|---|
| Conversation start / end | Lifecycle workflows; start-workflow outputs are available in live prompts by name, such as {{customer_name}} |
| Transcription | Which service turns the call into text, and how that text is cleaned up |
| Actionability gate | Whether every turn wakes every copilot, or only the turns worth acting on |
| Copilots (the fan-out) | The copilots themselves — a card per copilot or per form instance in Agent Assist |
| Translation | Live translation of the transcript, with its own glossary |
| Summarization | Whether a summary is written on transfer, after the call, or both |
Nothing else is required. Save the draft, publish it, and point an Agent Assist component at it — see Salesforce components for the Salesforce side.
Transcription¶
Both sides of the call are transcribed separately, so every copilot can react to just the customer or just the agent.
Pick a Provider, a Service, and an Integration (leave the integration on Use environment/default credentials unless this agent should bill to a specific account) — the same three controls as any other node. Every offered service supports two-speaker transcription:
| Provider / Service | When to pick it |
|---|---|
| Deepgram · Nova 3 | The recommended default. Stereo transcription with automatic language detection. |
| Deepgram · Flux | Lower latency, with end-of-turn prediction. Good when suggestions feel a beat late. |
| OpenAI · GPT Live Transcribe | Streaming Realtime transcription; two speakers via one session per channel. |
| ElevenLabs · Scribe (Realtime) | Streaming Scribe transcription; two speakers via one session per channel. |
| AWS · Transcribe | Stereo transcription via AWS channel identification. |
Google Agent Assist is not in this list — it is the 3rd-Party engine choice at the top of the node, because picking it replaces more than transcription.
If your agent shows a service marked (unsupported), it was configured before this list existed and calls to it will not start. Pick one of the services above.
Glossary terms are the product names, brand names, and jargon the speech-to-text service is likely to mishear. Add them one at a time in the table, or Upload a file (one term per line, optionally term = what it means); an upload merges with what's already there rather than replacing it.
The glossary is used three ways: it is sent to the transcription service itself as vocabulary hints, it drives transcript enhancement, and translation can reuse it.
Transcript enhancement corrects those terms before any copilot sees the turn. Two modes:
| Mode | What happens |
|---|---|
| Domain terms only | Corrects specialized terms and names using your glossary and recent conversation context. Leaves grammar and phrasing alone. A glossary is optional: without one, the model uses context and its own vocabulary knowledge. |
| Full clean-up (grammar and phrasing) | Also fixes grammar and phrasing. Reads better, but it rewrites what the speaker actually said, so the transcript becomes a paraphrase. |
Enhancement runs on every utterance, so pick a small, fast model for it.
Edit the enhancement prompt¶
Open Transcription → Transcript enhancement → Advanced. Prompt shows the full default instructions for your selected mode and glossary, ready to edit. Add glossary terms above to guide corrections for your products, names, and jargon.
Editing saves a Custom prompt, which replaces the default instructions, including their mode and glossary text. Later changes to those settings do not rewrite your custom prompt. Choose Reset to default to restore the instructions generated from your current settings. Recent conversation turns are still supplied separately.
Type {{ or @ in the prompt and choose a variable. The picker includes standard session variables (conversation_id, agent_id, tenant_id, ani, dnis, and currentDateTime), your copilot's session variables, and outputs declared by the workflow selected on Conversation start. For example, a workflow output named customer_name is inserted as {{customer_name}} and filled with that workflow's result when the conversation starts. Conversation-end outputs are not available during live transcription.
The actionability gate¶
One small-model check per turn decides whether the conversation has anything worth acting on yet, so a greeting doesn't trigger every copilot at once.
Leave Gate copilots on actionable turns on. Off means every copilot runs on every turn — more suggestions, more cost.
The gate model runs on every turn too: pick the smallest model that can tell a greeting from a question. Under Advanced, the full default prompt is shown and can be edited. Reset to default restores it.
An individual copilot can opt out under its own Advanced settings — see Skip the gate, which is how you get an opening-checklist card that fires on "hello".
Add copilots¶
Click Add copilot on the canvas to open the same left sidebar used by Add node. Choose a type from the list; the new node opens in the inspector. Each runs independently against the live transcript and renders its own card in Agent Assist. Adding one adds its own branch on the canvas.
| Copilot | What it does |
|---|---|
| Suggested Answers | Answers the customer's question from your knowledge sources, with citations. |
| Coaching | Prompts the agent with next-best-actions, reminders, or compliance nudges. |
| Custom Copilot | Produces your own structured response and maps it to a selected Agent Assist card. |
| Form Filling | Extracts field values from the conversation into a form the agent can confirm. |
Translation is no longer something you add — it is its own node on the canvas, always there, switched on when you need it (below).
You can add more than one of the same kind — two coaching copilots watching for different things, say. Each gets its own label, its own model, and its own card.
Every copilot shares three controls:
- Runs on — Customer, Agent, or Both. A suggested answer usually runs on the customer; a compliance nudge on the agent.
- Model — a Provider (OpenAI, Google, or AWS), a Model, and an Integration. Leave the integration on Use environment/default credentials unless this copilot should bill to a specific account.
- Card — the component that renders the result. Built-in kinds have a default; select a card for a Custom Copilot.
Visible custom workers need a card. Form workers can run without a card when a native application consumes their field events. If the picker shows (missing) beside a selected card, choose a current catalog component.
Suggested Answers¶
Select at least one Knowledge Source. Suggested Answers accepts only Knowledge tools, including ones created inline. A node without a Knowledge tool cannot run or be published. Python, API, and other tool types are unavailable here.
Query refinement has its own model, integration, and editable prompt under Advanced. Choose a small, fast model to turn the customer’s question into a focused search query. Its fixed response contains one field, query; you can edit that field’s description. Knowledge tool query input defaults to {{query}}, which passes the refined query into each selected Knowledge tool. The final answer uses the main model and prompt, configured separately from query refinement and the Actionability gate.
The answer prompt is under the node’s main Advanced section. Use {{KnowledgeSources}} to insert the retrieved contents and citations. This variable is available only in the Suggested Answers answer prompt, after retrieval; it is not available in query refinement.
Coaching¶
Write a Coaching prompt describing what the agent should be coached on. The default prompt is shown in full and can be edited or reset. Tailor it to your desk.
Coach the agent on our refund policy. If the customer asks for a refund
outside 30 days, remind the agent to offer store credit instead and to
avoid promising an exception. Flag any mention of a chargeback immediately.
If coaching needs a lookup, type @ in the prompt and choose Tool → Add a tool…. Select a saved Python, API, MCP, or Knowledge tool, or create an inline Python, API, or Knowledge tool using the normal prompt dialogs. Click the tool reference or Configure to map inputs to fixed values or conversation/session variables, set availability conditions, or save results into variables. Attached tools run when the copilot runs, subject to their conditions. Remove detaches a tool.
A coaching card can be configured with a temporary display duration in advanced agent configuration. It disappears automatically; a fresh relevant warning restarts its timer on the same card. Unrelated conversation does not extend it. The Allianz demo uses a 15-second reminder for customer requests to slow down or a clearly garbled agent transcript. One agent segment with essential words missing can be enough, without customer feedback. Suspected transcription errors produce a gentle check-understanding cue, not a judgment about accent or ability.
Custom Copilot¶
Choose Custom Copilot from the Add copilot sidebar. Set its prompt, model, speaker trigger, and optional tools as for Coaching. In Response format, use the visual editor to add, remove, rename, and describe fields, choose types, and mark required fields. Objects and lists can contain nested fields.
Select Card catalogs, choose one Agent Assist Card from those catalogs, then use Map response fields to card properties, below the response editor. Each card property can read a response field, including a nested value; matching names map automatically. For example, map a response field guidance to the card’s headline property. The mapped values must match the card’s types and required properties. The card determines presentation; your response structure determines what the model produces.
Form Filling¶
Select Card catalogs, then one or more Available form cards. Each form chooses its own Card, with the sole available card used automatically. Custom cards can map the standard display fields (form_label, fields, missing_fields, note) to their properties.
Instances per conversation defaults to Once; Repeatable allows an explicit new instance after completion. Complete when defaults to Agent confirms completion, with Required fields are filled available for automatic completion. Completed forms stop updating. See Live forms and suggestion dismissal for exact behavior and SDK/API examples.
Give each form a Form name and add its Fields: a name, a description, a type (Text, Number, Yes/No, or Date), and whether it is required. You can define more than one form — switch between them with the form tabs.
Descriptions matter — they are the only instruction the model gets about what belongs in that field.
Allow forms pushed during the call accepts a replacement definition for a configured form. Use the adjacent documentation link for Embedded SDK and API instructions. With no fields listed and that switch off, nothing is extracted.
An Extraction prompt is optional; the built-in one handles ordinary forms.
Translation¶
Translation is its own node on the canvas — a peer of Summarization, not a copilot you add. Switch on Translate the live transcript and set the Agent's language. Each utterance is shown in this language under the transcript line; the call itself stays in the customer's language.
Glossary: translation has its own glossary, separate from transcription's — the terms to leave untranslated. Or pick Reuse the transcription glossary to share one list, or No glossary to translate everything.
Under Advanced, Translate every utterance is on by default. It translates every completed utterance from the selected speaker, including greetings and short replies. Turn it off to translate only lines the actionability gate considers actionable.
Translation renders inline under the transcript, not as a card of its own. Each translation keeps the original speaker and appears next to its source line even if translation takes a few seconds.
Advanced settings¶
Every copilot has an Advanced section. The defaults are good; reach for these when a copilot fires too often, too early, or with too little context.
| Setting | What it does |
|---|---|
| Context window (turns) | How many prior utterances go into the prompt (1–100). |
| Minimum utterances | Wait for this many turns before running at all (1–50). |
| Debounce (seconds) | Quiet period before running, so a copilot doesn't fire mid-sentence (0.5–60). |
| Auto-summarize older context | Summarize turns that fall outside the context window instead of dropping them. |
| Skip the actionability gate | Run on every turn, including greetings. Use it for a greeting or opening-checklist card. |
| Temperature | Leave empty to use the provider default (0–2). |
Skip the actionability gate has no effect when the gate itself is off — the editor says so in place.
Prompts and structured output¶
Card-producing copilots return applicable, reason, and result. applicable: false with result: null is the explicit exit when there is nothing useful to suggest; result fields are required only when a result is present. The response editor shows this envelope above the result fields. The SDK controls manual and automatic dismissal, preserving in-progress forms.
The other prompt stages have their own exits: the Actionability gate returns is_actionable: false; Query refinement returns an empty query; enhancement returns unchanged text and no corrections; translation can return empty translated_text.
Every Copilot prompt shows its actual default as editable text, with Default prompt / Custom prompt status and Reset to default. This includes the Actionability gate, Suggested Answers, Coaching, Form Filling, Translation, and both summary targets. Coaching and Custom Copilot keep their prompts visible; the other prompts are under Advanced.
The defaults reflect what the node runs: the gate includes its decision instructions, Translation includes the target language and glossary, and Form Filling lists the starting form fields. Suggested Answers includes instructions for producing a response from Knowledge results. Coaching and Custom Copilot keep their own prompts when tools are attached. Custom instructions remain fixed until you edit or reset them. All these editors offer standard session variables and Conversation start workflow outputs.
Response format, below the prompt, lists the actual response fields, their types, whether they are required, and their descriptions. Edit a description to guide what the model returns in that field; Reset restores its default description. Built-in response fields cannot be added, removed, renamed, or changed to another type here. Custom Copilot and After the call summaries instead let you define your own fields and map them to a card. Nested fields appear with their full names, such as corrections[].reason. The model receives these descriptions with the structured response schema, separately from the prompt.
Copilot prompt menus offer variables and If / Else sections. Coaching and Custom Copilot also offer the Tool menu for inline selection, creation, and input mappings. Procedure Step, Procedure Section, Set a variable, and Run an Action are omitted.
These live variables are available across prompts and tool input mappings:
| Variable | Value |
|---|---|
LatestMessage |
The most recent message from either speaker |
LatestCustomerMessage |
The most recent customer message |
LatestAgentMessage |
The most recent agent message |
ConversationHistory |
The conversation turns included by this node’s context window |
SpeechMetrics |
Recent measured speaking pace by speaker; unavailable until supported word timing and enough speech are present |
KnowledgeSources |
Retrieved content and citations, only in the Suggested Answers answer prompt |
Session variables and outputs from the Conversation start workflow are available by name too. Live variables are refreshed for each run; they are not session-start bindings. A missing speaker’s latest message is empty.
| Node | Response |
|---|---|
| Transcription enhancement | corrected_text and a list of corrections with reasons |
| Actionability gate | is_actionable, query, request_type, parameters, and reason; a non-actionable turn still returns JSON |
| Query refinement | query, passed to Knowledge tool inputs |
| Suggested Answers / Coaching / On-transfer summary | Properties defined by the selected Agent Assist card |
| Custom Copilot / Post-call summary | Custom fields mapped to properties of the selected Agent Assist card |
| Form Filling | A fields list containing field_name, field_value, and confidence; forms pushed during the call can update the allowed field names |
| Translation | translated_text and source_language |
The provider note updates with your selection. OpenAI requests strict JSON Schema output; Google requests JSON with a response schema. Choose a model that supports the requested format. Bedrock requests native JSON Schema output through Converse. If the selected model explicitly reports that structured output is unsupported, it uses schema-guided JSON instead; responses are checked against the schema in either mode. Invalid or incomplete Bedrock responses are rejected. A schema error does not trigger a fallback.
Summarization¶
Summaries use the whole conversation by default. Context window (turns) can limit the included turns. Two independent targets:
| Target | Where it shows |
|---|---|
| On transfer | Pinned to the top of Agent Assist when the call is transferred or consulted, so the receiving agent has the context. |
| After the call | Opens as a wrap-up panel in Salesforce once the call ends. |
Each has its own model, card, and editable default Prompt. Reset to default restores the summary instructions. On-transfer response fields come from the selected summary card. After the call → Advanced → Response format lets you add or remove custom summary fields and map them to properties of any selected Agent Assist card. The existing wrap-up modal hosts that card. A target with no card selected renders nothing.
The after-the-call summary is what the TrueServe Wrap-Up Summary component displays — see Salesforce components. If that panel shows a transcript and no summary, this switch is the first thing to check.
Session variables¶
There is no separate variables editor: referencing a session variable {{name}} in any prompt creates its binding automatically, bound to whatever the caller sends at session start — from a Salesforce Flow, the API, or the embed. The prompt editors offer your existing variables in their {{ dropdown.
In 3rd-Party (Agent Assist) mode, session variables are also passed into the Google Dialogflow virtual agent as its session parameters — so a value set by a Genesys flow reaches Google's own suggestions too.
What works today¶
| Capability | Status |
|---|---|
| Suggested answers, coaching, custom copilots, form filling, translation | Available |
| Google Agent Assist as a 3rd-party engine | Available |
| Deepgram Nova 3/Flux, GPT Live Transcribe, Scribe Realtime, Amazon Transcribe (all two-speaker) | Available |
| Transcript enhancement and the actionability gate | Available |
| On-transfer and post-call summarization | Available |
| Agent Assist and Wrap-Up Summary in Salesforce | Available |
| Copilots on chat conversations | Voice only today |
| Editing the cards themselves | In the copilot-cards catalog, per tenant — a developer task, not an editor one |
Test transcripts¶
Opening the Copilot tester from a Studio multi-agent demo carries its shared sample facts into the rehearsal. The test simulates the representative phase; a connected phone flow supplies the audio and transfer context for a live call.
End call stops both the voice test and the listening copilot. A configured post-call summary can finish afterward. If cards are missing, check for worker errors as well as gate decisions: model or knowledge-connection failures can prevent a card even when the gate allows the turn.
During a test, the transcript shows what the copilot hears from both speakers. Partial text is updated in place when that utterance finishes; later utterances appear separately, including repeated phrases. The simulated voice agent's separate transcript is omitted to avoid displaying the same speech twice.
Troubleshooting¶
- The editor warns that calls will not start. The configured transcription service can't be built. Pick one of the three under Transcription.
- A copilot never produces anything. Check it has a card selected — a copilot with no card is skipped entirely when the agent is built. Then check its Minimum utterances and Debounce aren't set higher than the call is long.
- Nothing at all appears in Agent Assist. No copilots are enabled, so the agent transcribes but never suggests. Add one.
- Suggested Answers cannot be published or does not run. Select at least one available Knowledge tool. For weak search results, check the query refinement prompt and Knowledge input mapping.
- The form stays empty. No fields are listed and Allow forms pushed during the call is off, so there is nothing to extract into.
- The wrap-up panel shows a transcript but no summary. After the call summarization is off, or it has no card selected.
- Suggestions arrive on every "hello". The actionability gate is off, or that copilot has Skip the actionability gate on.
- A card name shows (missing). The card was renamed or removed from the catalog. Pick a current one.
- The test buttons are greyed out. Something in the configuration can't be built — most often a card reference that no longer resolves. Fix the flagged item and the buttons re-enable.
See also¶
- Creating an agent
- Templates — the Copilot template category
- Salesforce components — TrueServe Agent Assist and TrueServe Wrap-Up Summary
- Testing with the emulator For a greeting before anyone speaks, open Card at call start on a custom or coaching worker and enter an approved initial response matching the selected card's fields. Leave it empty to disable. This card needs no model call. Keep patient/account facts out of the initial response and retrieve them when the conversation establishes the relevant person.
For an existing handoff or record context, enable Load context at session start
on a custom/coaching worker. Explicit tool field mappings can load verified data
without a model call; otherwise the model inspects the startup context. For
Salesforce page data, trigger on context.ready instead. This is separate from
the static greeting response.