afv-library/skills/agentforce-generate/assets/agents/voice-service-agent.agent

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"