mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-08-11 02:14:21 +08:00
102 lines
4.6 KiB
Plaintext
102 lines
4.6 KiB
Plaintext
system:
|
|
instructions: "You are a voice-based AI customer service agent. Keep responses brief — users are listening, not reading. Read back critical data (order numbers, amounts, dates) to confirm before acting on it. Never read out URLs, citations, or visual formatting."
|
|
messages:
|
|
welcome: "Hi, thanks for calling! How can I help you today?"
|
|
error: "I'm sorry, I'm having trouble processing that. Could you say that again?"
|
|
|
|
access:
|
|
default_agent_user: "agent@example.com"
|
|
|
|
config:
|
|
developer_name: "VoiceServiceAgent"
|
|
agent_label: "Voice Service Agent"
|
|
description: "Voice-channel customer service agent with telephony-optimized responses"
|
|
agent_type: "AgentforceServiceAgent"
|
|
|
|
variables:
|
|
EndUserId: linked string
|
|
source: @MessagingSession.MessagingEndUserId
|
|
description: "End user identifier"
|
|
RoutableId: linked string
|
|
source: @MessagingSession.Id
|
|
description: "Routable session identifier"
|
|
ContactId: linked string
|
|
source: @MessagingEndUser.ContactId
|
|
description: "Contact record identifier"
|
|
VoiceCallId: linked string
|
|
source: @VoiceCall.Id
|
|
description: "This variable may also be referred to as Voice Call Id"
|
|
language:
|
|
default_locale: "en_US"
|
|
additional_locales: ""
|
|
all_additional_locales: False
|
|
|
|
# Minimum voice config: platform default voice ("Mark", en_US) + core tuning.
|
|
# Optional advanced settings (filler-word detection, speak-up prompts, endpointing)
|
|
# are documented in references/voice-modality-reference.md — add them only if needed.
|
|
# Customize the voice later in Agent Builder → Connections → Voice.
|
|
modality voice:
|
|
voice_id: "UgBBYS2sOqTuMpoF3BR0"
|
|
outbound_speed: 1
|
|
outbound_stability: 0.65
|
|
outbound_similarity: 0.75
|
|
|
|
# customer_web_client (ECv2) is the voice-capable surface. connection messaging is
|
|
# additive here — kept because this agent escalates to a human (@utils.escalate).
|
|
connection customer_web_client:
|
|
adaptive_response_allowed: True
|
|
|
|
connection messaging:
|
|
escalation_message: "Let me transfer you to a specialist who can help with that."
|
|
|
|
start_agent agent_router:
|
|
description: "Routes callers to the appropriate service topic"
|
|
reasoning:
|
|
instructions: ->
|
|
| Listen to what the caller needs and route them to the right topic.
|
|
| For order questions (tracking, status, delivery) go to order status.
|
|
| If the caller asks to speak with a person or you cannot help, escalate.
|
|
| Do NOT answer questions directly — route to the appropriate topic.
|
|
actions:
|
|
go_order_status: @utils.transition to @subagent.order_status
|
|
description: "Route to order status topic for tracking and delivery questions"
|
|
go_escalation: @utils.transition to @subagent.escalation
|
|
description: "Transfer to a human agent"
|
|
|
|
subagent order_status:
|
|
description: "Helps callers check order status and delivery estimates"
|
|
reasoning:
|
|
instructions: ->
|
|
| Help the caller check their order status. Ask for their order number if not provided.
|
|
| Use {!@actions.get_order_status} to look up the order. Read back the status clearly and concisely.
|
|
| NEVER guess order details — only report what the action returns.
|
|
| After answering, ask if there's anything else you can help with.
|
|
actions:
|
|
get_order_status: @actions.get_order_status
|
|
description: "Look up order status by order number"
|
|
with order_number = ...
|
|
go_back: @utils.transition to @subagent.agent_router
|
|
description: "Return to main routing when caller has a different question"
|
|
|
|
actions:
|
|
get_order_status:
|
|
description: "Retrieves order status and estimated delivery date"
|
|
target: "apex://OrderStatusService"
|
|
inputs:
|
|
order_number: string
|
|
description: "The order number to look up"
|
|
is_required: True
|
|
outputs:
|
|
status_summary: string
|
|
description: "Human-readable order status summary"
|
|
|
|
subagent escalation:
|
|
description: "Transfers the caller to a live human agent"
|
|
reasoning:
|
|
instructions: ->
|
|
| The caller needs to speak with a human agent. Use {!@actions.escalate_to_human} to transfer them.
|
|
| Before transferring, briefly let them know you're connecting them.
|
|
actions:
|
|
escalate_to_human: @utils.escalate
|
|
description: "Transfer the caller to a live agent"
|