Quick Start
Set the key and description
For Custom: set a key (e.g.,
postcode, customer_id) and describe what to collectAdd validation rules (optional)
For Custom: add constraints like exact length, min/max length, or regex patterns
What Can You Use It For?
- Email addresses — The agent spells it back letter by letter and confirms before saving
- License plates — Currently supports German plates, including handling ambiguous area codes
- Any custom data — Numbers, customer IDs, phone numbers, names, postal codes — anything you define with optional validation rules
Data Types
| Type | What it collects | Built-in behavior |
|---|---|---|
| An email address | Handles noisy voice transcription, validates format, spells back for confirmation | |
| License Plate | A vehicle license plate (currently German only) | Parses plate format, handles ambiguous area codes, confirms with caller |
| Custom | Any freeform data you define | You describe what to collect and optionally add validation constraints |
Validation Constraints (Custom Type Only)
For custom data collection, you can add rules to make sure the agent collects values in the right format:| Constraint | What it does | Example |
|---|---|---|
| Exact Length | Value must be exactly N characters | A 6-digit code → length 6 |
| Min/Max Length | Value must be between N and M characters | A reference number between 4–10 characters |
| Alphabet | Restrict allowed character types (letters, numbers, special characters, spaces) | Numbers only for a PIN code |
| RegExp | Match a specific pattern with a regular expression | A postal code pattern like ^\d{5}$ |
Exact Length and Min/Max Length cannot be used together on the same task.
How It Works During a Call
- The agent decides to collect — Based on the conversation flow and your prompt, the LLM triggers the collect data tool
- A sub-agent takes over — A specialized mini-agent temporarily takes over the conversation, focused entirely on collecting that one piece of data
- Interactive back-and-forth — The sub-agent asks the caller, listens, and reads the value back for confirmation. If the caller corrects something, the agent updates and confirms again
- Caller confirms or declines — The caller either says “Yes, that’s correct” (confirmed) or “No, I don’t want to share that” (declined)
- Control returns — The main agent takes back over and continues the conversation, aware of what was collected
Agent: “Could you please give me your email address?” Caller: “Sure, it’s john dot smith at example dot com” Agent: “Let me confirm — that’s j-o-h-n dot s-m-i-t-h at e-x-a-m-p-l-e dot c-o-m. Is that correct?” Caller: “Yes, that’s right.” Agent: “Perfect, I’ve got that noted down. Now, how can I help you further?”
Result Statuses
Each collected data field ends up with one of these statuses:| Status | Meaning | Color |
|---|---|---|
| Confirmed | The caller confirmed the value is correct | 🟢 Green |
| Declined | The caller chose not to share the information | 🟡 Yellow |
| Error | Something went wrong during collection | 🔴 Red |
| In Progress | Collection was started but the call ended before it completed | ⚪ Gray |
Where to See Collected Data
- Call Details — Open any call and you’ll see a Collected Data section showing each field with its value and status
- API — The
collected_datafield is included in call responses from the telli API, with each key mapped to{ status, value } - Webhooks — The
call_endedwebhook includes the collected data, so you can automatically process it in your own systems (e.g., save the email to your CRM)
Best Practices
Be Specific in Descriptions
Instead of “Get the email”, write “Ask the caller for their email address after confirming they want to receive a confirmation email”.Guide Timing in Your Prompt
Tell the agent when during the conversation to ask for the data. Asking at the right moment feels more natural.Use Constraints for Structured Data
If you know a case number is always 6 digits, add an exact length + numbers-only constraint. This prevents the agent from accepting invalid values.One Task Per Data Point
Create separate tasks for each piece of information you need (e.g., one for email, one for case number).Keys Must Be Unique
Each task needs a unique key. The key is used in the API and webhooks to identify the data.Good to Know
- The specialized sub-agent that handles collection is designed to be resilient to voice transcription errors — it knows that “at” might be transcribed as ”@” or that letters can sound similar
- You can configure multiple collect data tasks on a single agent — the agent will handle each one when appropriate during the call
- Task keys must start with a letter or underscore, followed by letters, numbers, or underscores (e.g.,
email,case_number,customer_id_2) - Collected data is stored on the call record permanently — it’s available in the API and webhooks even after the call ends