Overview
Transfer call nodes transfer the active phone call to another phone number. This is useful for escalating to human agents, routing to specialized departments, or connecting callers to specific phone lines. Transfer call nodes support both warm transfers (with announcement) and cold transfers (immediate connection).
Key characteristic: Transfer call nodes connect the caller to a completely different phone number, ending the AI agent’s involvement in the conversation.
When to Use
Use transfer call nodes to:
Escalate to human agents - Complex issues requiring human judgment
Department routing - Transfer to sales, support, billing departments
Specialist connection - Route to subject matter experts
After-hours routing - Transfer to answering service outside business hours
Emergency scenarios - Critical situations requiring immediate human attention
Geographic routing - Connect to local office phone numbers
Compliance requirements - Legal or regulatory requirements for human interaction
Use Transfer Call Node when:
Caller needs to speak with a person at a phone number
Issue is beyond AI agent’s capabilities
Regulatory or compliance requirements demand human interaction
Specialized expertise is required
Use Transfer Agent Node instead when:
Transferring to another Hamsa AI agent
Want to maintain conversation context and history
Need faster, more reliable handoff
Staying within your AI agent ecosystem
→ Compare: Transfer Agent Node
Core Configuration
{
type : "transfer_call" ,
label ?: string ,
description ?: string ,
// Phone number (required)
phoneNumber : string , // E.164 format: +1234567890
// Transfer type
transferType : "warm" | "cold" , // Default: "cold"
// Transfer message (optional)
transferMessage ?: string ,
transferMessageType : "static" | "prompt" , // Default: "prompt"
// Timeout
timeout : number , // milliseconds, default: 30000
// Global node settings
isGlobal ?: boolean ,
globalConditionType ?: "prompt" | "dtmf" ,
globalCondition ?: string ,
globalDtmfKey ?: string ,
// Transitions (optional - usually none needed)
transitions ?: Transition []
}
Phone numbers must be in E.164 international format .
+[country code][area code][local number]
Valid examples:
+14155551234 (USA)
+442071234567 (UK)
+61212345678 (Australia)
+33123456789 (France)
Invalid examples:
❌ (415) 555-1234 (Not E.164)
❌ 415-555-1234 (Missing country code)
❌ 14155551234 (Missing + prefix)
❌ +1-415-555-1234 (Contains dashes)
Country Codes
Common country codes:
USA/Canada: +1
UK: +44
Australia: +61
Germany: +49
France: +33
Using Variables
Transfer Call Node : Dynamic_Transfer
phoneNumber : {{ support_phone_number }}
# Variable must contain E.164 formatted number
Invalid phone number format will cause transfer to fail. Always validate E.164 format.
Transfer Types
Cold Transfer (Default)
Immediately transfer the call without announcement. The caller is connected directly to the destination number.
Transfer Call Node : Operator_Transfer
phoneNumber : +18005551234
transferType : cold
# No transfer message - immediate connection
User experience:
Agent: “Let me transfer you now.”
Call immediately transfers
Caller hears ringing or destination’s greeting
AI agent disconnects
Use cold transfer when:
Speed is important
No context needs to be provided
Destination will identify itself (IVR, receptionist)
Simple, straightforward routing
Warm Transfer
Announce the transfer before connecting. The agent speaks a transfer message, then connects the call.
Transfer Call Node : Sales_Transfer
phoneNumber : +18005551234
transferType : warm
Transfer Message :
message : "I'm transferring you to our sales team who can better assist you with pricing and packages."
messageType : static
User experience:
Agent: “I’m transferring you to our sales team…”
Agent speaks full message
Call transfers after message completes
Caller hears ringing or destination’s greeting
Use warm transfer when:
Caller should know why they’re being transferred
Setting expectations about who they’ll reach
Professional, courteous experience
Context or explanation needed
Transfer Message Configuration
Static Message
Exact, predetermined message spoken every time.
Transfer Message :
message : 'Let me connect you with a specialist who can help. Please hold.'
messageType : static
Use static when:
Message should be identical every time
Legal or compliance requirements
Scripted professional transfer
No personalization needed
Prompt-Based Message
AI generates contextual transfer message based on conversation.
Transfer Message :
message : "Explain to the user that you're transferring them to a billing specialist who can help with their account balance question."
messageType : prompt
AI might say:
“I’m connecting you with our billing team who specializes in account balances.”
“Let me get you to someone in billing who can review your account.”
Use prompt when:
Want natural, conversational transfer
Personalization based on conversation context
Flexible, adaptive messaging
Reference extracted variables
Message with Variables
Use extracted variables in transfer messages.
Transfer Message :
message : "Thank you {{customer_name}}. I'm transferring you to {{department_name}} now."
messageType : static
Timeout Configuration
Set maximum wait time for transfer connection.
Transfer Call Node : Support_Transfer
phoneNumber : +18005551234
timeout : 45000 # 45 seconds
Default: 30000ms (30 seconds)
Range: 1000ms - 60000ms (1-60 seconds)
What happens on timeout:
Transfer attempt is cancelled
Call returns to flow (if transitions configured)
Otherwise, call typically ends
Recommendations:
Standard transfers: 30 seconds
Busy departments: 45-60 seconds
Quick routing: 15-20 seconds
If the destination doesn’t answer within the timeout, the transfer fails. Plan for timeout scenarios with fallback transitions.
Use Cases & Examples
Example 1: Simple Operator Transfer
Scenario: Transfer to operator with no announcement.
Transfer Call Node : Operator
phoneNumber : +18005550100
transferType : cold
Example 2: Department Routing with Message
Scenario: Route to sales with warm transfer.
Conversation Node : Qualify_Need
message : "Are you calling about sales, support, or billing?"
transitions :
- Natural Language : "sales" → Transfer_Sales
- Natural Language : "support" → Transfer_Support
- Natural Language : "billing" → Transfer_Billing
Transfer Call Node : Transfer_Sales
phoneNumber : +18005551001
transferType : warm
Transfer Message :
message : "I'm connecting you with our sales team who can discuss pricing and packages."
messageType : static
timeout : 30000
Example 3: Emergency Transfer (Global)
Scenario: Global node for urgent issues, accessible anytime via DTMF 0.
Transfer Call Node : Emergency_Transfer
# Global configuration
isGlobal : true
globalConditionType : dtmf
globalDtmfKey : 0
# Transfer configuration
phoneNumber : +18005550911
transferType : cold
Transfer Message :
message : "Transferring you to emergency support now."
messageType : static
Example 4: After-Hours Routing
Scenario: Transfer to answering service outside business hours.
Router Node : Business_Hours_Check
transitions :
- Structured Equation (logic : all) :
- {{ current_hour }} > = 9
- {{current_hour}} < 17
- {{current_day_of_week}} != "Saturday"
- {{current_day_of_week}} != "Sunday"
→ Business_Hours_Flow
- Always → After_Hours_Transfer
Transfer Call Node : After_Hours_Transfer
phoneNumber : +18005559999
transferType : warm
Transfer Message :
message : "Our offices are currently closed. I'm transferring you to our after-hours answering service who can take a message or help with urgent matters."
messageType : static
timeout : 45000
Example 5: Escalation with Context
Scenario: Transfer with personalized context about the caller.
Tool Node : Lookup_Customer
outputMapping :
customer_name : $.name
account_id : $.id
issue_type : $.current_issue
transitions :
- Always → Escalate_Transfer
Transfer Call Node : Escalate_Transfer
phoneNumber : +18005552222
transferType : warm
Transfer Message :
message : "Thank you for your patience, {{customer_name}}. I'm transferring you to a specialist who can help with your {{issue_type}} issue. Your account number is {{account_id}}."
messageType : static
Example 6: VIP Customer Routing
Scenario: High-value customers get direct line to VIP team.
Router Node : Customer_Tier_Check
transitions :
- Equation : {{ customer_tier }} == "vip"
→ VIP_Transfer
- Always → Standard_Support
Transfer Call Node : VIP_Transfer
phoneNumber : +18005550VIP
transferType : warm
Transfer Message :
message : "As a VIP member, I'm connecting you directly with our premium support team."
messageType : static
timeout : 20000 # VIP gets faster answer
Example 7: Geographic Routing
Scenario: Transfer to regional office based on location.
Router Node : Region_Router
transitions :
- Equation : {{ caller_state }} == "CA"
→ West_Coast_Office
- Equation : {{ caller_state }} == "NY"
→ East_Coast_Office
- Always → National_Line
Transfer Call Node : West_Coast_Office
phoneNumber : +14155551234
transferType : warm
transferMessage : "Connecting you to our San Francisco office."
Transfer Call Node : East_Coast_Office
phoneNumber : +12125551234
transferType : warm
transferMessage : "Connecting you to our New York office."
Example 8: Timeout Fallback
Scenario: Handle transfer timeout with fallback to voicemail.
Transfer Call Node : Attempt_Transfer
phoneNumber : +18005551234
timeout : 30000
transferType : warm
transferMessage : "Let me connect you with our team."
# Transitions handle timeout
transitions :
- Natural Language : "transfer failed or timeout" → Leave_Voicemail
Conversation Node : Leave_Voicemail
message : "Our team is currently unavailable. Would you like to leave a message or try again later?"
Global Transfer Nodes
Make transfer nodes accessible from anywhere in the flow.
Global via DTMF
Press a key anytime to transfer (common: 0 for operator).
Transfer Call Node : Global_Operator
isGlobal : true
globalConditionType : dtmf
globalDtmfKey : 0
phoneNumber : +18005550100
transferType : cold
User can press 0 at any point to immediately transfer.
Global via Natural Language
Speak trigger phrase anytime to transfer.
Transfer Call Node : Global_Human_Agent
isGlobal : true
globalConditionType : prompt
globalCondition : "User wants to speak to a human agent or operator"
phoneNumber : +18005550100
transferType : warm
transferMessage : "I'm connecting you with a live agent now."
User can say “I want to speak to a person” at any point.
Common Global Transfer Patterns
# Operator (DTMF 0)
Transfer Call Node :
isGlobal : true
globalConditionType : dtmf
globalDtmfKey : 0
phoneNumber : +18005550100
# Emergency (DTMF *)
Transfer Call Node :
isGlobal : true
globalConditionType : dtmf
globalDtmfKey : *
phoneNumber : +18005550911
# Speak to human (Natural language)
Transfer Call Node :
isGlobal : true
globalConditionType : prompt
globalCondition : "User requests human agent, operator, or live person"
phoneNumber : +18005550100
→ Learn More: Global Nodes
Transitions
Most transfer call nodes don’t need transitions—they terminate the AI agent’s involvement.
When to Use Transitions
Timeout handling:
Transfer Call Node : Busy_Support
phoneNumber : +18005551234
timeout : 30000
transitions :
- Always → Leave_Voicemail_Option
Conditional flow continuation:
# Rare use case: Continue flow after failed transfer
Transfer Call Node : Optional_Transfer
transitions :
- Natural Language : "transfer failed" → Continue_AI_Support
- Always → End_Call
In practice: Most transfer call nodes have no transitions and simply end the call after transfer.
Best Practices
✅ Do’s
Use E.164 format for all phone numbers
✅ phoneNumber : +14155551234
❌ phoneNumber : (415) 555-1234
Provide context in warm transfers
transferMessage : "I'm connecting you to our billing team who can help with your invoice question."
Set realistic timeouts
timeout : 45000 # 45 seconds for busy departments
Use global nodes for common transfers
# Operator accessible anytime via 0
isGlobal : true
globalDtmfKey : 0
Store phone numbers as variables
# In agent configuration
support_phone : +18005551234
# In node
phoneNumber : { { support_phone } }
Test transfers thoroughly
Call the destination number manually
Verify it’s reachable
Test timeout behavior
Confirm transfer completes
❌ Don’ts
Don’t use invalid phone formats
❌ phoneNumber : 555-1234
❌ phoneNumber : (800) CALL-NOW
❌ phoneNumber : 1-800-555-1234
Don’t transfer without context (when using warm)
❌ transferMessage : 'Transferring now.'
✅ transferMessage : "I'm transferring you to our billing team who can help with your invoice."
Don’t set timeouts too short
❌ timeout : 5000 # Too short, will likely timeout
✅ timeout : 30000 # Reasonable wait time
Don’t forget to test
Don’t deploy without testing actual transfers
Don’t assume phone number is correct
Don’t skip timeout testing
Don’t use transfer call for agent-to-agent
# ❌ Don't do this for AI-to-AI transfer
Transfer Call Node to another AI agent phone number
# ✅ Do this instead
Transfer Agent Node : agent_id
Troubleshooting
Possible causes:
Invalid phone number format
Phone number doesn’t exist
Network connectivity issues
Invalid country code
Solution:
Verify E.164 format: +[country][area][number]
Test phone number manually
Check country code is correct
Remove any spaces, dashes, or parentheses
Issue: Transfer times out
Possible causes:
Destination number not answering
Timeout set too short
Destination line is busy
After-hours (no one available)
Solution:
Increase timeout value
Verify destination is staffed
Test during business hours
Add fallback transition for timeout
Issue: Transfer message not playing
Possible causes:
Using cold transfer (no message in cold transfer)
Message is empty
Message type misconfigured
Solution:
Use transferType: warm for messages
Verify message field has content
Check messageType is set correctly
Issue: User disconnects during transfer
Possible causes:
Long wait time (timeout)
No context provided (user confused)
Unexpected transfer (user didn’t request it)
Solution:
Use warm transfer with explanation
Set appropriate expectations
Reduce wait time
Only transfer when appropriate
Issue: Variables not interpolating in message
Possible causes:
Variable doesn’t exist
Variable name misspelled
Variable not extracted yet
Solution:
Verify variable exists (extracted earlier)
Check spelling: {{exact_variable_name}}
Ensure extraction happens before transfer
Test with static message first
Flow Examples
Example Flow 1: Simple Department Routing
Example Flow 2: Smart Routing with Qualification
Example Flow 3: Escalation Path
Comparison: Transfer Call vs Transfer Agent
Feature Transfer Call Node Transfer Agent Node Destination Phone number Hamsa AI agent Speed Slower (phone system) Faster (no phone transfer) Reliability Depends on phone network More reliable Context Lost (new call) Preserved (full history) User Experience Hold music, ringing Seamless transition Use Case Human agents, external Other AI agents Latency 5-15 seconds <1 second Costs Telephony transfer costs No transfer costs Best For Escalation to humans Routing between AI specialists
→ Learn More: Transfer Agent Node
Schema Reference
{
type : "transfer_call" ,
label ?: string ,
description ?: string ,
// Phone number (required)
phoneNumber : string , // E.164 format: +1234567890
// Transfer type
transferType : "warm" | "cold" , // Default: "cold"
// Transfer message (for warm transfers)
transferMessage ?: string ,
transferMessageType : "static" | "prompt" , // Default: "prompt"
// Timeout
timeout : number , // milliseconds, default: 30000 (30 seconds)
// Global node settings
isGlobal ?: boolean ,
globalConditionType ?: "prompt" | "dtmf" ,
globalCondition ?: string , // For prompt-based global
globalDtmfKey ?: "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "*" | "#" ,
// Transitions (optional)
transitions ?: Transition [],
// Position
position : { x : number , y : number }
}
Next Steps
Transfer Agent Node Transfer to another Hamsa AI agent
Global Nodes Make transfers accessible anytime
Router Node Route before transferring
End Call Node End calls gracefully
DTMF Features Use keypad for transfer triggers
Best Practices Build better flows