#how to automatically get the called number, without the agent asking for it because it doesnt do th
1 messages · Page 1 of 1 (latest)
Short answer: use the system dynamic variable system__called_number (note the double underscores), not “system_caller_id.” It’s available automatically on telephony calls.
What to do
- In prompts or messages: reference {{system__called_number}} to access the destination number; {{system__caller_id}} is the caller’s number. These variables are auto-populated for voice calls only. (elevenlabs.io)
- In tool calls: pass the number silently via a tool parameter (so the agent doesn’t say it aloud), e.g., phone={{system__called_number}}. System variables can be used in tool parameters and are updated at execution time. (elevenlabs.io)
- If you’re receiving inbound Twilio calls and prefer to handle numbers server-side, enable the Twilio personalization webhook; ElevenLabs will POST caller_id and called_number to your endpoint before the conversation starts. (elevenlabs.io)
Common gotchas
- The correct names use a double underscore prefix: system__called_number and system__caller_id; using “system_caller_id” won’t resolve. Telephony-only variables won’t work in web/widget sessions. (elevenlabs.io)
References:
- Dynamic variables (system__caller_id, system__called_number; usage in prompts/tools; telephony-only). (elevenlabs.io)
- Twilio personalization webhook (called_number in request). (elevenlabs.io)
- Silent use of system variables in tool parameters (don’t read aloud). (elevenlabs.io)
Sources:
Dynamic variables | ElevenLabs Documentation
Dynamic variables | ElevenLabs Documentation
Twilio personalization | ElevenLabs Documentation
Dynamic variables | ElevenLabs Documentation
Dynamic variables | ElevenLabs Documentation
Twilio personalization | ElevenLabs Documentation
Designing secure caller identity authentication flows for voice agents
so system__caller_id?
Yes. The correct system dynamic variable is system__caller_id (note the double underscore). It auto-populates on telephony calls with the caller’s phone number. For the dialed number, use system__called_number. You can reference them in prompts or tool parameters as {{system__caller_id}} and {{system__called_number}}; no user prompt is required. (elevenlabs.io)
Confirm their called_number ({{system__caller_id}}).
is this good?
Not quite. {{system__caller_id}} is the caller’s number. To confirm the number that was called, use {{system__called_number}}. Both are built-in system dynamic variables for telephony and use the double-underscore prefix. (elevenlabs.io)
Example: “Just to confirm, you dialed {{system__called_number}}.” (elevenlabs.io)
Sources:
Dynamic variables | ElevenLabs Documentation
Dynamic variables | ElevenLabs Documentation
Personality
Environment
Tone
Goal
Create interest, qualify motivated leads, and guide them toward a consultation when appropriate.
OUTBOUND INTRODUCTION
Start every call in Spanish by default.
If the lead switches to English, immediately continue in English.
Confirm you’re happy with either language if asked.
Introduce yourself as Dani from David Moya Real Estate.
Reference their prior interest in Dubai real estate.
Ask if it’s a good time to talk.
CREATE INTEREST (ONCE ONLY)
Share 1–2 strong angles about Dubai real estate.
Keep value very brief.
Ask one soft interest question.
CONFIRM INTEREST
If not interested: close politely.
If interested: continue.
IDENTITY & CONTACT CAPTURE
Ask for their full name.
Confirm their caller number using {{system__called_number}}
Explain it’s only to send property details or summaries.
DISCOVERY & QUALIFICATION
Ask ONE question at a time, only after interest is confirmed:
Property type
Bedrooms
Area preference
Budget
Cash or financing
Timeline
Store internally as client_requirements.
INVESTMENT TYPE CLARIFICATION
Silently infer:
Ready property
Off-plan
Off-market
Or combination
Explain timeline briefly only if helpful.
FOLLOW-UP MATERIALS
If the client agrees:
Send a WhatsApp summary first (mandatory priority).
Include a short summary of requirements.
Add 1–2 suitable property suggestions (high-level, no pressure).
MEETING BOOKING (OPTIONAL — ONLY IF CLIENT WANTS)
Never push for a meeting.
Never book without email.
Ask for email first.
Ask preferred day/time.
Check availability.
Book and confirm clearly.
CLOSE THE CALL
Confirm what was sent on WhatsApp.
Ask one final quick question.
Thank them warmly.
End politely.
Guardrails
Never say you are an AI
One question per turn
No overselling
Allow interruptions
i have something like this why doesnt it use the tool, even though its saying in the call it did
Short answer: in ElevenLabs Agents, “saying it used a tool” in the spoken transcript does not guarantee an actual tool invocation occurred. Verify the events and fix the common configuration issues below.
How to verify whether a tool actually ran
- In the conversation events, look for:
- agent_tool_response (system/client/server tool actually executed)
- client_tool_call and the subsequent client_tool_result (for client tools you register in your app)
If these events are missing, the tool did not run. (elevenlabs.io)
Most common causes and fixes
- Client tool not registered in your code
- Client tools must be registered (and names must match exactly, case-sensitive) in your SDK integration. If unregistered, the agent may talk about the action but nothing will happen. Also enable “Wait for response” if the agent should use returned data. (elevenlabs.io)
- Server tool (webhook) misconfigured
- Check method/URL, headers/auth, and any path/query/body parameters. Ensure any dynamic variables used in the tool are actually set at runtime or have placeholders. Choose a high‑intelligence LLM if the agent struggles to supply parameters. (elevenlabs.io)
- Tool names/parameters don’t match
- Tool and parameter identifiers must match between your agent configuration and your app exactly (case‑sensitive). Otherwise the model can plan to call a tool, but the platform won’t execute it. (elevenlabs.io)
- Expecting external side‑effects from a System Tool
- System tools only change internal conversation state (e.g., end_call, language detection). They do not hit external APIs; use a server tool (webhook) for external actions. (elevenlabs.io)
- Missing dynamic variables
- If your tool uses values like {{system__called_number}}, confirm they’re available. ElevenLabs provides system dynamic variables at runtime (caller/called numbers, conversation_id, etc.). If a required variable isn’t set, the tool call may be skipped or malformed. (elevenlabs.io)
- Model selection
- Tool calling reliability varies by LLM; ElevenLabs recommends high‑intelligence models (e.g., GPT‑4o mini, Claude 3.5 Sonnet) for function calling. (elevenlabs.io)
WhatsApp-specific note (if you expect “send WhatsApp summary”)
- Connect a WhatsApp business account or implement a server tool that sends the message. The platform sets system__caller_id and system__called_number for WhatsApp conversations; your tool must actually use these to send the message. Otherwise the agent may say it sent something when no API call occurred. (elevenlabs.io)
Quick checklist
- Confirm the tool event(s) appear in the conversation: agent_tool_response, client_tool_call/client_tool_result. (elevenlabs.io)
- For client tools: verify SDK registration and exact name/parameter matches; use “Wait for response” if needed. (elevenlabs.io)
- For server tools: verify URL/auth/params and dynamic variables; pick a capable LLM. (elevenlabs.io)
- If needed
no i already verify that the tool is correct, its something where its from the prompt