mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-07-30 19:50:42 +08:00
210 lines
8.3 KiB
Plaintext
210 lines
8.3 KiB
Plaintext
# Escalation Pattern Template
|
|
# ===========================
|
|
#
|
|
# This template demonstrates the complete escalation pattern with:
|
|
# - Multi-channel connection blocks (messaging, voice, web)
|
|
# - Graceful handoff with escalation messages
|
|
# - Pre-escalation data gathering
|
|
# - OmniChannel routing configuration
|
|
#
|
|
# Pattern: Multi-channel escalation with context preservation
|
|
# Use when: Any agent that needs human handoff capabilities
|
|
|
|
system:
|
|
messages:
|
|
welcome: "Hello! I'm here to help. If I can't assist you, I can connect you with a specialist."
|
|
error: "I apologize, something went wrong. Let me connect you with someone who can help."
|
|
instructions: "You are a helpful agent. When you cannot resolve an issue, escalate to a human agent with full context."
|
|
|
|
config:
|
|
agent_name: "EscalationPatternAgent"
|
|
agent_label: "Escalation Demo Agent"
|
|
description: "Agent demonstrating complete escalation patterns"
|
|
default_agent_user: "agent@yourorg.com" # REQUIRED: Change to valid Einstein Agent User
|
|
|
|
# ============================================================
|
|
# CONNECTION BLOCKS (Multi-Channel Escalation)
|
|
# ============================================================
|
|
|
|
connections:
|
|
# Messaging channel (SMS, WhatsApp, etc.)
|
|
connection messaging:
|
|
escalation_message: "One moment, I'm transferring our conversation to a specialist who can better assist you."
|
|
outbound_route_type: "OmniChannelFlow"
|
|
outbound_route_name: "<flow://Escalate_Messaging_To_Agent>"
|
|
adaptive_response_allowed: False
|
|
|
|
# Voice channel
|
|
connection voice:
|
|
escalation_message: "Please hold while I transfer you to a specialist. They will have full context of our conversation."
|
|
outbound_route_type: "Queue"
|
|
outbound_route_name: "Customer_Support_Queue"
|
|
adaptive_response_allowed: True
|
|
|
|
# Web chat channel
|
|
connection web:
|
|
escalation_message: "Connecting you with a live agent now. They'll be with you shortly."
|
|
outbound_route_type: "OmniChannelFlow"
|
|
outbound_route_name: "<flow://Web_Chat_Escalation_Flow>"
|
|
adaptive_response_allowed: False
|
|
|
|
variables:
|
|
# Customer context
|
|
customer_name: mutable string = ""
|
|
description: "Customer's name for personalization"
|
|
customer_issue: mutable string = ""
|
|
description: "Summary of customer's issue"
|
|
issue_category: mutable string = ""
|
|
description: "Category of issue for routing"
|
|
|
|
# Escalation state
|
|
escalation_reason: mutable string = ""
|
|
description: "Reason for escalation"
|
|
attempts_before_escalation: mutable number = 0
|
|
description: "Number of resolution attempts"
|
|
ready_to_escalate: mutable boolean = False
|
|
description: "Whether pre-escalation data is gathered"
|
|
|
|
start_agent entry:
|
|
description: "Entry point - greet and assess needs"
|
|
reasoning:
|
|
instructions: |
|
|
Greet the customer and understand their needs.
|
|
Try to help directly, escalate if needed.
|
|
actions:
|
|
go_support: @utils.transition to @topic.support
|
|
description: "Help with support issue"
|
|
|
|
# ============================================================
|
|
# SUPPORT TOPIC (With Escalation Triggers)
|
|
# ============================================================
|
|
|
|
topic support:
|
|
description: "Attempt to resolve issue, escalate if unable"
|
|
reasoning:
|
|
instructions: ->
|
|
# POST-ACTION: Check if escalation was triggered
|
|
if @variables.ready_to_escalate == True:
|
|
transition to @topic.pre_escalation
|
|
|
|
# Track attempts
|
|
| I'm here to help you with your issue.
|
|
|
|
if @variables.attempts_before_escalation >= 2:
|
|
| It seems like I'm having trouble resolving this.
|
|
| Would you like me to connect you with a specialist?
|
|
|
|
actions:
|
|
# Attempt resolution
|
|
try_resolve: @actions.Attempt_Resolution
|
|
description: "Try to resolve the issue"
|
|
with issue = ... # LLM extracts from conversation
|
|
set @variables.customer_issue = @outputs.issue_summary
|
|
set @variables.issue_category = @outputs.category
|
|
set @variables.attempts_before_escalation = @variables.attempts_before_escalation + 1
|
|
|
|
# User-initiated escalation
|
|
request_human: @utils.setVariables
|
|
description: "I'd like to speak with a human"
|
|
with escalation_reason = "Customer requested human agent"
|
|
with ready_to_escalate = True
|
|
|
|
# Agent-initiated escalation (after failed attempts)
|
|
escalate_complex: @utils.setVariables
|
|
description: "Connect me with a specialist"
|
|
available when @variables.attempts_before_escalation >= 2
|
|
with escalation_reason = "Unable to resolve after multiple attempts"
|
|
with ready_to_escalate = True
|
|
|
|
# ============================================================
|
|
# PRE-ESCALATION TOPIC (Gather Context)
|
|
# ============================================================
|
|
|
|
topic pre_escalation:
|
|
description: "Gather information before escalating"
|
|
reasoning:
|
|
instructions: ->
|
|
# Ensure we have customer name for personalization
|
|
if @variables.customer_name == "":
|
|
| Before I transfer you, may I have your name so the specialist can address you properly?
|
|
else:
|
|
| Thank you, {!@variables.customer_name}. Let me prepare the transfer.
|
|
|
|
# Display summary of what we'll share
|
|
if @variables.customer_name != "" and @variables.customer_issue != "":
|
|
| I'll share the following with the specialist:
|
|
| - Your issue: {!@variables.customer_issue}
|
|
| - Category: {!@variables.issue_category}
|
|
| - Reason for transfer: {!@variables.escalation_reason}
|
|
|
|
|
| Ready to connect you now.
|
|
transition to @topic.escalation
|
|
|
|
actions:
|
|
# Capture customer name
|
|
save_name: @utils.setVariables
|
|
description: "Save customer name"
|
|
available when @variables.customer_name == ""
|
|
with customer_name = ... # LLM extracts name from response
|
|
|
|
# Proceed to escalation
|
|
proceed: @utils.transition to @topic.escalation
|
|
description: "Proceed with transfer"
|
|
available when @variables.customer_name != ""
|
|
|
|
# Cancel escalation
|
|
cancel_escalation: @utils.setVariables
|
|
description: "Actually, let me try again with the bot"
|
|
with ready_to_escalate = False
|
|
with escalation_reason = ""
|
|
run @utils.transition to @topic.support
|
|
|
|
# ============================================================
|
|
# ESCALATION TOPIC (Handoff)
|
|
# ============================================================
|
|
|
|
topic escalation:
|
|
description: "Execute escalation to human agent"
|
|
reasoning:
|
|
instructions: ->
|
|
# Log escalation context (this gets passed to human agent)
|
|
run @actions.Log_Escalation_Context
|
|
with customer_name = @variables.customer_name
|
|
with issue_summary = @variables.customer_issue
|
|
with category = @variables.issue_category
|
|
with reason = @variables.escalation_reason
|
|
with attempt_count = @variables.attempts_before_escalation
|
|
|
|
| Transferring you now. Thank you for your patience!
|
|
|
|
actions:
|
|
# The actual escalation - uses connection block configuration
|
|
handoff: @utils.escalate
|
|
description: "Transfer to human agent"
|
|
|
|
# ============================================================
|
|
# OPTIONAL: SPECIALIZED ESCALATION QUEUES
|
|
# ============================================================
|
|
|
|
topic escalate_billing:
|
|
description: "Escalate specifically to billing team"
|
|
reasoning:
|
|
instructions: |
|
|
I'm connecting you with our billing specialists.
|
|
They'll be able to help with your account questions.
|
|
actions:
|
|
# Note: In production, you'd configure this action
|
|
# to route to a specific billing queue
|
|
billing_handoff: @utils.escalate
|
|
description: "Transfer to billing team"
|
|
|
|
topic escalate_technical:
|
|
description: "Escalate specifically to technical support"
|
|
reasoning:
|
|
instructions: |
|
|
I'm connecting you with our technical support team.
|
|
They specialize in resolving complex technical issues.
|
|
actions:
|
|
tech_handoff: @utils.escalate
|
|
description: "Transfer to technical support"
|