# Privacy Announcements
Source: https://docs.itellico.ai/build/advanced/announcements
Play GDPR-compliant announcements before your agent starts listening
## How Pre-Call Announcements Work
Privacy Announcements let you play a recorded message at the start of each call before your AI agent begins listening. Use this Alpha feature for caller notices, data-processing disclosures, or a consistent recorded welcome.
When enabled, the announcement plays first, and the platform disables audio input until the announcement completes. This ensures callers hear the full message before the conversation begins.
The **EU AI Act** requires that callers are told they are interacting with an AI. **GDPR** requires disclosure of data processing. Failing to disclose can result in fines of up to **4% of annual revenue** or **€20 million**. In the US, **TCPA** violations carry **$500–$1,500 per call** in statutory damages. Pre-call announcements are the most reliable way to meet these requirements. A fixed opening line in the greeting can also work if interruptions are disabled, though by that point the AI model is already processing.
## Use Cases
Inform European callers about data processing and recording before the conversation starts.
Deliver required legal notices or disclaimers at the start of every call.
Play a consistent, professional welcome message with your brand's voice.
Notify callers that the conversation may be recorded for quality assurance.
***
## Configuration
Navigate to your agent editor → **Privacy** tab → **Announcement** section.
### Enable Announcements
Toggle the announcement feature on or off. When disabled, calls start directly with your agent's [greeting](/build/conversation/greeting-messages).
### Upload Audio
Upload a pre-recorded audio file for your announcement.
**Supported formats:**
* MP3
* OGG
* WAV
**Maximum file size:** 10MB
***
## Best Practices
Aim for announcements under 15 seconds. Longer messages increase hang-up rates.
**Good:** "This call may be recorded. By continuing, you consent to our privacy policy."
**Too long:** "Thank you for calling our company. We value your privacy and want to inform you that this conversation will be handled by our artificial intelligence assistant. Your data will be processed in accordance with..."
The EU AI Act requires that callers are informed when they are interacting with an AI system. This applies to all voice AI agents operating in the EU.
**Good:** "You'll be speaking with our AI assistant. How can I help?"
**Avoid:** Pretending the AI is a human when disclosure is required.
For GDPR compliance, give callers the option to end the call.
**Example:** "If you prefer not to continue, you may hang up now."
Use language and tone consistent with your brand voice.
**Professional:** "Thank you for calling. This call is recorded for quality assurance."
**Friendly:** "Hey! Just a heads up, our AI assistant will be helping you today."
***
## GDPR Compliance
For businesses operating in the European Union, privacy announcements help meet GDPR requirements:
Tell callers their data will be processed and by whom.
Explain why data is being collected (support, sales, etc.).
Mention where callers can find your full privacy policy.
Give callers the option to end the call if they don't consent.
**Example GDPR-compliant announcement (English):**
```text wrap theme={null}
Welcome to Company ABC. This call will be handled by our AI assistant and may
be recorded for quality purposes. We process your data according to our privacy
policy, available at company-abc.com/privacy. If you prefer not to continue,
please hang up now.
```
### DACH Region (Germany, Austria, Switzerland)
In the DACH region, additional rules apply:
* **Germany (DSGVO/UWG):** Callers must be informed that they are speaking with an AI system. Recording requires explicit notice. Mention your Datenschutzerklaerung (privacy policy) and provide a way to opt out.
* **Austria (TKG/DSG):** Similar to Germany. Inform callers about AI usage and recording. Reference your Datenschutzerklaerung.
* **Switzerland (DSG):** The revised Swiss Data Protection Act (revDSG, effective since Sept 2023) requires transparency about automated decision-making. Inform callers about data processing and provide your Datenschutzerklaerung link.
**Example announcement (German):**
```text wrap theme={null}
Willkommen bei Firma ABC. Dieses Gespraech wird von unserem KI-Assistenten
gefuehrt und kann zu Qualitaetszwecken aufgezeichnet werden. Informationen zum
Datenschutz finden Sie unter firma-abc.at/datenschutz. Wenn Sie nicht
fortfahren moechten, legen Sie bitte auf.
```
This is general guidance, not legal advice. Regulations in the DACH region are strict — consult a qualified legal professional for your specific requirements. For help with setup, contact [support@itellico.ai](mailto:support@itellico.ai).
***
## Uploading Audio Files
### Via Dashboard
Open your agent editor → **Privacy** tab → **Announcement** and enable **Pre-call Announcement**
Click **Upload** and select your MP3, OGG, or WAV file (max 10MB)
Once uploaded, the row shows an audio player and delete button. The setting saves automatically.
### Audio File Requirements
| Requirement | Specification |
| ----------- | ----------------------------- |
| Formats | MP3, OGG, WAV |
| Max size | 10MB |
| Quality | 128kbps or higher recommended |
| Channels | Mono or stereo |
For best quality, use mono audio at 44.1kHz sample rate. This reduces file size while maintaining clarity for voice announcements.
***
## Troubleshooting
* Verify the announcement is **enabled**
* Check that you have uploaded an audio file
* Test with **Test Agent** to confirm configuration
* Ensure file is under 10MB
* Verify file format is MP3, OGG, or WAV
* Check your internet connection
* Try converting the file to a different format
***
## Next Steps
Configure what your agent says after the announcement
Configure data retention policies
Test announcements with Test Agent
Configure when your agent is available
# Conversation Privacy Controls
Source: https://docs.itellico.ai/build/advanced/conversation-privacy-controls
Combine announcements, retention, recording controls, and Trust Center settings into one clear privacy model
Privacy in voice AI is not one toggle.
You shape it through several controls that affect what callers hear, what you store, what you publish, and what your team can later review or export.
This guide shows how those controls work together.
## The Four Main Privacy Layers
| Layer | What it controls | Main doc |
| ----------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------- |
| **Notice** | What the caller hears before or during the conversation | [Announcements](/build/advanced/announcements) |
| **Storage** | What the platform stores and for how long | [Data Retention Settings](/build/advanced/data-retention) |
| **Caller choice** | Whether the caller can stop recording mid-call | [Recording Opt-Out](/build/advanced/recording-opt-out) |
| **Public transparency** | What callers and visitors can read about how your agents handle their data | [Trust Center](/manage/trust-center/overview) |
## Why This Matters
Most privacy failures happen at the boundaries:
* a call is recorded but callers were not prepared for it
* retention settings do not match the public policy
* a widget is live, but the privacy links are missing or unclear
* a team exports or forwards data without checking what is actually stored
The safest pattern is to make notice, storage, and public disclosure align.
## Start With The Policy You Actually Want
Before changing the UI, decide:
* do you want to store recordings, transcripts, both, or neither?
* do some agents need stricter rules than the account default?
* do callers need an explicit way to opt out of recording?
* do public web visitors need a visible Trust Center before they interact?
Once that policy is clear, configure the product around it.
## Common Privacy Patterns
Typical setup:
* pre-call notice enabled
* transcripts and recordings stored with defined retention
* public Trust Center enabled for widget traffic
* recording opt-out enabled when required by policy or jurisdiction
Typical setup:
* short notice with clear disclosure
* reduced retention windows
* some data types set to **Do not store**
* public Trust Center aligned to the stricter policy
Typical setup:
* explicit announcement before the agent starts listening
* tight retention rules or no recording storage
* recording opt-out enabled when recordings exist
* clear internal review process for exports and webhook consumers
## How The Controls Fit Together
### 1. Announcements set the caller expectation
Use [Announcements](/build/advanced/announcements) when callers should hear a notice before the agent begins listening.
This is the right place to explain:
* that the conversation may be recorded
* why it is being recorded
* what the caller can do if they do not want recording
### 2. Retention decides what stays in the system
Use [Data Retention Settings](/build/advanced/data-retention) to control:
* whether transcripts are stored
* whether recordings are stored
* how long analytics artifacts remain available
* whether expiry leads to deletion or anonymization
The important rule: your retention settings should match what your team promises publicly.
### 3. Recording Opt-Out handles live caller objections
Use [Recording Opt-Out](/build/advanced/recording-opt-out) when recordings are enabled and callers may reasonably ask for recording to stop.
If recordings are already set to **Do not store**, this control becomes less relevant because the recording is not kept in the first place.
### 4. Trust Center explains your public-facing posture
Use the [Trust Center](/manage/trust-center/overview) to publish:
* privacy policy links
* subprocessors information
* retention posture
* transparency material for website visitors
This matters most for web widgets, public demos, and externally shared assistants.
## Widgets Need Extra Care
For widget-based conversations, align these three things:
1. the widget consent and privacy copy
2. the public Trust Center page
3. the actual retention and recording behavior behind the widget
If those three are inconsistent, visitors lose trust quickly.
See [Web Widget Deployment](/launch/web-widget-deployment) and [Web Widget Implementation](/launch/web-widget-implementation) for the deployment side.
## Privacy Review Checklist Before Launch
1. Confirm whether transcripts and recordings are stored.
2. Confirm whether the agent-level retention overrides match the account default you intended.
3. If recordings are enabled, decide whether callers should hear a notice and whether they can opt out.
4. If a widget is public, confirm the Trust Center and policy links are live.
5. Check which downstream systems receive conversation data through exports or webhooks.
6. Run a real test conversation and confirm the behavior matches the policy you plan to publish.
## Common Mistakes
The strongest public privacy copy does not help if the actual settings still store more than your policy says.
Webhooks, exports, and internal review workflows can extend the privacy footprint beyond the voice call itself. Review the full flow, not only the agent tab.
Also test what happens when a caller asks not to be recorded, stays silent during the notice, or abandons the interaction early.
## Next Steps
Configure the notice callers hear before the conversation begins
Set agent-level storage and expiry rules
Let callers stop recording during a live conversation
Align your public privacy posture with the actual system behavior
# Data Retention Settings
Source: https://docs.itellico.ai/build/advanced/data-retention
Configure agent-level retention rules, privacy defaults, and caller rights in the Privacy tab
## Overview
The **Privacy** tab lets you configure agent-level data retention behavior.
Use it when one agent needs stricter or different retention than your account defaults in **Trust Center**.
These settings control how long **itellicoAI** stores your data. They do not affect third-party providers (such as OpenAI or ElevenLabs) who may retain data for their own purposes — for example, for abuse prevention or audit compliance. Review each provider's data retention policy separately.
## Where to Configure
1. Open an agent in **AI Agents**
2. Go to **Privacy**
3. Review **Data Retention**
***
## Current Data Types
The current Privacy tab shows retention settings for:
* **Transcripts**: messages and conversation events
* **Call Recordings**: audio recordings of conversations
* **Analytics - Goals**: goal achievement results and reasoning
* **Analytics - Insights**: AI-generated summaries, ratings, and extracted information
* **System Prompts**: AI agent prompt content (no PII)
* **IP Addresses & Location**: client IP and derived location where available
* **Customer Numbers**: phone numbers of callers and contacts
***
## Retention Choices
The current dropdown options are:
* **Do not store**
* **24 hours**
* **30 days**
* **90 days**
* **6 months**
* **1 year**
* **2 years**
* **Keep forever**
Not every option is available for every data type.
For **Transcripts**, **Analytics - Goals**, and **Analytics - Insights**, the UI first asks what to store:
* **Do not store**
* **Store anonymized transcript only** or **Store minimized results only**
* **Store original transcript** or **Store full results**
If you store anonymized/minimized or full data, choose the retention duration in the second dropdown.
### Zero-retention support
`Do not store` is available for:
* transcripts
* recordings
* analytics - goals
* analytics - insights
* system prompts
### Minimum-retention guardrails
The following data types currently require at least **90 days**:
* **IP Addresses & Location**
* **Customer Numbers**
***
## Expiry Actions
Each row also lets you choose what happens when the retention period ends:
* **Delete**
* **Anonymize** where supported
### Data types that support anonymization
* transcripts
* analytics - goals
* analytics - insights
* IP addresses & location
* customer numbers
### Data types that only support deletion
* call recordings
* system prompts
***
## Reset to Default
If a row has custom agent-level settings, the UI shows a reset action.
Use **Reset** when you want that data type to follow the account-level Trust Center policy again.
***
## Relationship to Other Privacy Controls
The Privacy tab also includes:
* **Pre-call Announcement** for playing a recorded notice before the agent listens
* **Recording Opt-Out** for letting callers stop recording during a live call
Recording Opt-Out is only shown when recording storage is enabled. If recordings are set to **Do not store**, the recording opt-out control does not appear.
***
## Recommended Operating Pattern
1. Set broad account defaults in **Trust Center**
2. Only set agent-level retention where a specific agent truly needs different rules
3. Test recording behavior if you change recording retention
4. Keep your public and contractual privacy statements aligned with the effective policy
***
## Next Steps
Configure account-level defaults and data requests
Play a notice before the agent starts listening
Let callers stop recording mid-call
Validate retention-dependent call behavior before launch
# DTMF Controls
Source: https://docs.itellico.ai/build/advanced/dtmf-controls
Enable keypad tone support for IVR navigation and caller keypad input during phone calls
## How DTMF Works
DTMF (Dual-Tone Multi-Frequency) is the signal produced when someone presses keys on a phone keypad. Enable DTMF when a phone-call agent needs to:
* send keypad tones to external IVR systems
* collect caller keypad input, such as menu choices or short account identifiers
DTMF is for phone calls only. Web calls and chat sessions do not have a phone keypad, so DTMF does not apply there.
***
## Where To Enable It
**Access:** Open an agent, go to **Call Flow**, and scroll to **Keypad Input**.
Turn on **Enable DTMF during calls**.
DTMF is currently an Alpha setting. The dashboard exposes one toggle; keypad timing, capture mode, clear digit, termination key, and buffering behavior use platform defaults.
***
## What Is Supported
When DTMF is enabled, the platform registers keypad tools for the call session. It can send tones to the phone leg and receive caller keypad presses from SIP DTMF events.
For exact-length input, such as "collect 4 digits", the platform uses native fixed-length keypad collection when available. For variable-length or menu-style input, it falls back to the platform's internal collector.
***
## Prompt Examples
Use short, explicit phrasing:
```text wrap theme={null}
"Press 1 for billing, 2 for support, or 3 for sales."
```
After the digit arrives, confirm the meaning, not the mechanism:
```text wrap theme={null}
"Got it — I'll help with support."
```
Use DTMF for short numeric input that is easier to enter than to say:
```text wrap theme={null}
"Please enter the last 4 digits of your account number using your keypad."
```
Confirm safely:
```text wrap theme={null}
"Thanks. I found the account ending in 2457."
```
Do not repeat full sensitive values back to the caller unless your workflow truly requires it.
### Always offer a voice fallback
Not every caller will want to use a keypad.
```text wrap theme={null}
"If you prefer, you can also say the number out loud."
```
That keeps the flow accessible for callers on speakerphone, softphones, or devices with awkward keypad access.
***
## Testing DTMF
Open **Test** on the agent and choose **Phone** so you are testing a real phone leg.
Ask the agent for a simple keypad response such as `1` or a short numeric identifier.
Confirm the agent reacts correctly and the call does not stall if no key is pressed immediately.
If your agent must navigate another phone tree, run a live test against that real number or SIP destination and verify the downstream IVR accepts the tones reliably.
Intentionally avoid pressing keys once so you can confirm the agent retries cleanly or offers a voice alternative.
## Best Practices
* Ask for one keypad action at a time.
* Offer a voice fallback, such as "You can also say the number out loud."
* Confirm only the safe part of sensitive values, such as the last 4 digits.
* Test the exact carrier, phone number, or SIP route you will use in production.
***
## Next Steps
Configure live transfer destinations and downstream call handling
Test phone outcomes such as human answer vs voicemail
Set up the phone infrastructure required for live keypad interactions
Tune interruption and pause behavior around keypad-driven flows
# Dynamic Context (Pre-Call Webhook)
Source: https://docs.itellico.ai/build/advanced/dynamic-context
Fetch personalized data from your systems before conversations begin
## How Dynamic Context Works
Expert Mode
Dynamic Context lets you fetch customer data from your external APIs **once, before each conversation starts**. Instead of relying only on contact records, your agents can access account status, order history, support tickets, and business context from your customer relationship management (CRM) system, databases, and backend systems. You can also use [custom API tools](/build/tools/custom-api-actions) to fetch data during conversations.
Configure Dynamic Context in **Call Flow** under **Before Call** in your agent editor. The returned JSON data is available directly as variables (e.g., `{{ field_name }}`) in your agent's [greeting](/build/conversation/greeting-messages) and [prompt](/build/conversation/prompt).
**The platform calls the context API once before the conversation begins.** The data is available for rendering the greeting and throughout the conversation. It does not refresh during the conversation. The hard request timeout is 30 seconds, but you should design the endpoint to return in under 1 second.
**Quick Requirements:**
* HTTPS endpoint
* Valid JSON object, or an array of objects that can be merged
* Small response payload with only data needed for the conversation
* Fast response time; aim for under 1 second
* Authentication via Bearer token, Basic auth, custom header, or no auth
## How It Works
**Request Flow:**
Call initiated (inbound) or about to start (outbound)
**BEFORE conversation begins:** System sends POST request to your endpoint
Your API queries CRM/database for customer data
Your API returns JSON with context data
The platform makes context data available as template variables
The platform renders the greeting (using context variables if referenced)
Conversation begins (context variables available if referenced in prompt)
Context remains static throughout conversation (no refresh)
`direction: "inbound"` with caller's contact\_number. Look up customer data in your CRM.
`direction: "outbound"` with contact\_number you're calling. Fetch campaign context.
`medium: "web"` with optional external\_id. Identify user in your system via the [web widget](/manage/web-widgets/overview).
***
## Configuration
1. Open your agent in the editor
2. Click **Call Flow**
3. In **Before Call**, open **Dynamic Context**
This step is usually completed by a technical teammate.
**Endpoint URL:** `https://api.company.com/context`
**Authentication:** Choose Bearer Token, Basic Auth, Custom Header, or None
The request will include: agent\_uuid, direction, agent\_number, contact\_number (and external\_id for web widget)
Save the Dynamic Context settings, then use **Test** to verify the saved endpoint and authentication respond correctly.
Enable and save. The platform fetches context before each conversation.
***
## Request & Response Format
### Request Payload (POST Request)
```http theme={null}
POST https://api.company.com/context
Authorization: Bearer your_api_token
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
X-Agent-UUID: 550e8400-e29b-41d4-a716-446655440000
X-Agent-Number: +15551234000
X-Contact-Number: +15551234567
X-Direction: inbound
X-Medium: phone
X-Room-SID: RM_abc123
{
"agent_uuid": "550e8400-e29b-41d4-a716-446655440000",
"direction": "inbound",
"agent_number": "+15551234000",
"contact_number": "+15551234567"
}
```
**Body parameters:**
* `agent_uuid` (string, always included) - The UUID of the agent handling the call
* `direction` (string, always included) - "inbound" or "outbound"
* `agent_number` (string, optional) - The phone number the agent is using
* `contact_number` (string, optional) - The customer's phone number
* `external_id` (string/int, optional) - Only for web widget calls, if provided by your integration
**Additional headers:**
* `X-Agent-UUID`, `X-Agent-Number`, `X-Contact-Number`, `X-Direction`, `X-Medium` (phone/web)
* `X-Room-SID` - Unique identifier for this conversation session
* `X-External-ID` - For web widget calls only
**Typical usage:** Your endpoint uses `contact_number` or `external_id` to look up the customer in your CRM/database, then returns relevant account data, order history, tickets, etc. The `agent_uuid` can be used to customize responses per agent if needed.
### What You Return (JSON Response)
```json theme={null}
{
"account": {
"customer_id": "12345",
"tier": "VIP",
"status": "active",
"created_date": "2022-03-15"
},
"recent_orders": [
{
"order_id": "ORD-789",
"status": "shipped",
"tracking": "1Z999AA1234567890"
}
],
"support_tickets": [
{
"ticket_id": "TKT-456",
"status": "open",
"subject": "Billing question"
}
]
}
```
**Requirements:**
* Valid JSON object, or an array of objects that can be merged
* Keep the response small and focused on fields the agent needs
* Return only necessary fields (keeps response fast)
* Handle missing data gracefully (return `null` or omit fields)
**How variables are accessed:** All top-level keys in your JSON response become template variables. If you return `{"account": {"tier": "VIP"}}`, you access it as `{{ account.tier }}`, not `{{ context.account.tier }}`.
***
## Using Context Variables
All returned data from your API is available directly as top-level variables in your agent's greeting and prompt.
**Accessing fields:**
```jinja theme={null}
Account Tier: {{ account.tier }}
→ "VIP"
Order Status: {{ recent_orders[0].status }}
→ "shipped"
Number of Tickets: {{ support_tickets|length }}
→ 1
```
**Example greeting with context:**
```jinja theme={null}
Thanks for calling! I see you're a {{ account.tier }} customer with us.
How can I help you today?
```
**Example prompt with context:**
```jinja theme={null}
You are helping a {{ account.tier }} customer since {{ account.created_date }}.
{% if support_tickets|length > 0 %}
IMPORTANT: Customer has {{ support_tickets|length }} open ticket(s):
{% for ticket in support_tickets %}
- Ticket #{{ ticket.ticket_id }}: {{ ticket.subject }} ({{ ticket.status }})
{% endfor %}
Ask if they're calling about ticket #{{ support_tickets[0].ticket_id }}.
{% endif %}
{% if recent_orders|length > 0 %}
Recent order #{{ recent_orders[0].order_id }} is {{ recent_orders[0].status }}.
{% if recent_orders[0].tracking %}
Tracking: {{ recent_orders[0].tracking }}
{% endif %}
{% endif %}
Account Status: {{ account.status | default("active") }}
```
Use the `| default("value")` filter to provide fallbacks when data is missing. See [Greeting](/build/conversation/greeting-messages) and [Prompt](/build/conversation/prompt) for more templating syntax and usage examples.
***
## Authentication
### Bearer Token (Recommended)
```
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
Use for JSON Web Token (JWT), OAuth (Open Authorization) 2.0 access tokens, or modern API keys.
### Custom Header
```
X-API-Key: sk-abc123def456...
```
Custom header name with a credential value, such as an API key.
### Basic Auth
```
Authorization: Basic YXBpX3VzZXI6cGFzc3dvcmQ=
```
Username/password, base64 encoded.
### None
No authentication (only for internal/private networks).
Always use HTTPS.
***
## Example Use Case
**Customer Support with Full Context**
**Scenario:** Support agent needs complete customer view before conversation starts.
**Your API returns:**
```json theme={null}
{
"customer": {
"name": "John Smith",
"tier": "Premium",
"since": "2022-01-15"
},
"account": {
"status": "active",
"subscription": "Pro Plan",
"renewal_date": "2025-12-01"
},
"support": {
"open_tickets": [
{
"id": "TKT-789",
"subject": "Can't export reports",
"priority": "high"
}
]
}
}
```
**Agent prompt:**
```jinja theme={null}
You're helping {{ customer.name }}, a {{ customer.tier }} customer
since {{ customer.since }}.
{% if support.open_tickets|length > 0 %}
Customer has an open {{ support.open_tickets[0].priority }} priority ticket
about "{{ support.open_tickets[0].subject }}".
Start by asking: "I see you have a ticket open about
{{ support.open_tickets[0].subject }}. Is that what you're calling about today?"
{% endif %}
Account: {{ account.subscription }}, renews {{ account.renewal_date }}
```
**Result:** Agent knows about the open ticket before the conversation starts, allowing for a personalized greeting and informed conversation throughout.
***
## Best Practices
* Target under 1 second response time
* Cache frequently accessed data (5-10 minute TTL)
* Return only fields you'll use in your prompt
* Use database indexes on lookup fields (contact\_number, external\_id, or your internal customer IDs)
* Use `| default("value")` filters in your prompt
* Return `null` for missing fields (don't error)
* Test with contacts that have minimal data
```jinja theme={null}
{# Safe - provides fallback #}
Tier: {{ account.tier | default("Standard") }}
{# Safer - checks existence #}
{% if support_tickets and support_tickets|length > 0 %}
Has open tickets
{% endif %}
```
* Don't return SSN, credit cards, passwords
* Use HTTPS only
* Implement authentication (Bearer token recommended)
* Return only necessary fields (e.g., last 4 of account number, not full)
* Log access for audit trails
1. Use **Test** with real customer data
2. Test edge cases (new customer, VIP, suspended account)
3. Verify your prompt handles missing fields gracefully
4. Pilot with small traffic percentage before full rollout
***
## Troubleshooting
* Verify credentials are correct
* Check authentication type matches your API (Bearer Token, Basic Auth, or Custom Header)
* Test with same credentials in Postman
* Check if token has expired
* Use **Test** to verify the endpoint is responding
* Check JSON structure matches what you're accessing
* Verify Dynamic Context toggle is ON
* Use `| default("fallback")` for missing fields
* Add database indexes
* Implement caching
* Return only necessary fields
* Optimize database queries
* Check network latency to your API
* Check parameters in **Test**
* Verify template variables resolve correctly: `{{ account.tier }}`
* Ensure cache keys include customer identifier
* Test with known customer to confirm data matches
***
## Next Steps
Use context variables to personalize your agent's greeting
Use context variables in your prompt with Jinja templating
Master templating syntax for dynamic prompts
Create tools that use context data during conversations
# Inactivity, Timeouts & Pause Detection
Source: https://docs.itellico.ai/build/advanced/inactivity-timeout-settings
Configure silence reminders and maximum call duration to manage conversation flow
**Access:** Open an agent and go to **Call Flow**, then scroll to **Inactivity & Timeout**.
## How Inactivity Settings Work
Inactivity settings help your agent handle silence and keep calls within a safe maximum duration. They work with [VAD and turn detection](/build/advanced/vad-turn-detection): VAD decides when the caller has stopped speaking, while inactivity settings decide what to do if the conversation stays quiet.
These settings apply to voice conversations, including phone calls and web calls. The current dashboard exposes maximum call duration, silence reminders, and Expert-mode timing. Reminder wording is generated automatically by the runtime.
## Visible Controls
Set the maximum length of the call from start to finish.
The dashboard range is **1-120 minutes**. The backend stores the value in seconds, and the runtime can shorten the effective limit if usage metadata sets a lower maximum duration for the session.
Turn on follow-up behavior when the caller goes silent.
When enabled, the runtime monitors silence and asks the caller if they are still there before ending an apparently abandoned conversation.
Expert mode exposes the reminder cadence:
* **After:** seconds of silence before the first reminder, from **5-120 seconds**
* **Up to:** number of reminders before ending, from **1-10**
These controls appear only when **Silence Reminders** is enabled.
## Runtime Behavior
```mermaid theme={null}
sequenceDiagram
participant Caller
participant Agent
Caller->>Agent: Speaks normally
Agent->>Caller: Responds
Note over Caller,Agent: Caller goes silent
Note over Agent: Waits for configured silence interval
Agent->>Caller: Sends AI-generated reminder
Note over Caller,Agent: Caller remains silent
Agent->>Caller: Repeats up to configured reminder count
Agent->>Caller: Ends the conversation gracefully
```
## Recommended Starting Points
| Scenario | Max Call Duration | Silence Reminder Timing |
| ---------------------------- | ----------------- | -------------------------------------- |
| Customer support | 30-60 minutes | After 10-20 seconds, up to 3 reminders |
| Appointment booking | 30-60 minutes | After 15-30 seconds, up to 4 reminders |
| Short outbound qualification | 10-20 minutes | After 8-15 seconds, up to 2 reminders |
| Complex consultative calls | 60-120 minutes | After 20-45 seconds, up to 4 reminders |
Use longer reminder timing when callers often need to look up account numbers, calendars, or documents. Use shorter timing for quick outbound calls where silence usually means the call has been abandoned.
## What Is Not Configurable In The Dashboard
The runtime generates reminder copy automatically. The current dashboard does not expose:
* custom reminder message rotation
* custom timeout end messages
If you need a specific spoken phrase, put that guidance in your agent [prompt](/build/conversation/prompt). For example: "When a caller goes silent after you ask for an account number, politely say you can wait while they find it."
## Troubleshooting
Increase the Expert-mode **After** value and review whether VAD is ending caller turns too aggressively.
Reduce the **After** value or lower the number of reminders for quick flows where silence usually means the caller left.
Increase **Max Call Duration** and the reminder count. Also check whether a usage-level max duration is shortening the runtime limit.
Reduce **Max Call Duration**, lower the reminder count, and update your prompt to keep responses concise.
## Related Features
Configure turn-taking and interruption behavior
Configure transfers and call end behavior
Configure how conversations begin
Track conversation success and completion
# MCP Servers
Source: https://docs.itellico.ai/build/advanced/mcp-servers
Connect Model Context Protocol servers to extend agent capabilities with external tools and data sources
## What MCP Servers Do
Expert Mode
Model Context Protocol (MCP) servers let you extend your AI agents with external tools and data sources using an open standard. Add MCP servers from the agent editor, configure authentication, and manage which discovered tools the agent can use from the **Tools** tab in **Expert Mode**.
MCP is an open standard for connecting AI models to external systems. Learn more at [modelcontextprotocol.io](https://modelcontextprotocol.io).
## How It Works
MCP servers expose **tools** that your AI agent can invoke during conversations:
1. You connect an MCP server by URL
2. itellicoAI automatically discovers the tools the server provides
3. You enable the tools you want your agent to use
4. During conversations, the agent calls tools as needed to answer questions or perform actions
```mermaid theme={null}
sequenceDiagram
participant User
participant Agent
participant MCP as MCP Server
participant External as External System
User->>Agent: "Check my order status"
Agent->>MCP: Invoke get_order_status tool
MCP->>External: Query order system
External-->>MCP: Order data
MCP-->>Agent: Formatted result
Agent->>User: "Your order shipped yesterday..."
```
***
## Add an MCP Server
You add MCP servers directly from the **Tools** tab.
To add a server:
If you are in Simple mode, switch to **Expert** mode first.
Go to **Tools** in your agent editor, click **Add**, then choose **MCP Server**.
Add a **Name** and either a direct **URL** or a URL credential from **Secrets**.
Use optional **Headers** and **Query Parameters** for authentication or server-specific options.
Save the connection to attach it to the current agent.
***
## Manage Tools from the Server
Saving a server connection does not automatically expose every discovered tool to the agent. You choose which tools the agent can access.
From the MCP server row in **Tools**, open **Manage tools**.
Tools are discovered automatically. Use **Refresh** to rerun discovery after server changes.
Choose one or more discovered tools, or use **Select all** when the server is intentionally narrow.
Save to update the explicit allow list for the current agent.
Existing MCP server rows are visible in Simple mode, but adding or editing requires Expert mode.
***
## Configuring Custom Headers and Query Parameters
### Custom Headers
Use headers for API key or bearer token authentication:
```json theme={null}
{
"Authorization": "Bearer your-api-key",
"X-API-Key": "your-key"
}
```
Add headers as key-value pairs in the configuration panel.
### Query Parameters
For servers requiring URL-based authentication:
```json theme={null}
{
"api_key": "your-key",
"client_id": "your-client-id"
}
```
Store credentials securely. Never expose API keys in client-side code or public repositories.
***
## Automatic Tool Discovery
When you open **Manage tools** for an MCP server, itellicoAI queries the server and retrieves:
* **Tool names** - Identifier used to invoke the tool
* **Descriptions** - What the tool does (shown to the AI for decision-making)
* **Parameter schemas** - Input parameters with types and descriptions
* **Return types** - Expected response format
Tool discovery runs automatically when you open the tool settings and can be re-run with **Refresh** to pick up newly added tools.
***
## Enabling and Disabling Individual Tools
After discovery, you decide which individual server tools to enable for the current agent. This keeps tool access narrow and easier for the model to use well.
**Best practices for tool management:**
* **Enable only what you need.** Fewer tools means the AI makes better tool selection decisions.
* **Write clear descriptions.** If a tool description from the server is unclear, the AI may not know when to use it.
* **Disable destructive tools** (delete, update) unless your use case specifically requires them.
* **Re-run discovery** periodically if the server adds new tools.
***
## Latency Expectations
The current MCP flow does not expose timeout controls in the UI. Treat low-latency responses as part of MCP server design.
**Best practices:**
* Keep tool responses fast enough for live conversations
* Cache expensive lookups where possible
* Avoid long-running workflows in synchronous MCP tools
* Test from realistic network conditions before going live
***
## Testing MCP Servers
Before deploying to production, test your MCP server connection and tools.
After adding the server, confirm that **Manage tools** shows discovered tools for the server.
Start **Test Agent** and run a **Web call**, **Phone call**, or **Chat** session that should trigger the MCP tool.
Verify the agent handles tool failures gracefully -- for example, when the MCP server is unreachable or returns an error.
***
## Building Custom MCP Servers
Your MCP server must:
1. **Expose an HTTPS endpoint** - Secure connections are required
2. **Implement MCP protocol** - Standard tool discovery and invocation
3. **Return structured responses** - JSON-formatted tool results
4. **Handle errors gracefully** - Return meaningful error messages
### Example Server
```python theme={null}
from mcp import Server
server = Server("my-custom-server")
@server.tool("get_customer")
async def get_customer(customer_id: str) -> dict:
"""Look up customer information by ID"""
customer = await database.get_customer(customer_id)
return {
"name": customer.name,
"email": customer.email,
"status": customer.status
}
```
For detailed MCP server development guidance, see the [MCP documentation](https://modelcontextprotocol.io).
***
## Troubleshooting
* Verify the server URL is correct and accessible
* Check that HTTPS is properly configured
* Ensure authentication credentials are valid
* Test the endpoint directly with cURL or Postman
* Confirm your server implements MCP tool discovery
* Check server logs for errors
* Verify the server is responding to requests
* Re-run discovery after fixing server issues
* Review tool descriptions -- are they clear enough for the AI?
* Check agent [prompt](/build/conversation/prompt) -- does the agent know when to use tools?
* Verify tools are enabled (not disabled)
* Reduce the total number of enabled tools if the AI is selecting poorly
* Optimize your MCP server performance
* Consider caching frequently accessed data
* Check network latency between itellicoAI and your server
***
## Security Considerations
MCP servers have access to external systems. Follow security best practices:
* Use least-privilege access for API credentials
* Regularly rotate authentication keys
* Monitor tool invocation logs for unusual activity
* Audit which tools are enabled on each agent
**Network Security:**
* All connections must use HTTPS
* Consider IP allowlisting for your MCP servers
* Use strong authentication methods
**Data Security:**
* Only expose data the agent needs
* Implement proper access controls on the server side
* Log all tool invocations for audit purposes
***
## Next Steps
Use simpler HTTP integrations without MCP
Explore all tool types
Use the built-in web search tool
Test MCP tools in conversations
# Recording Opt-Out
Source: https://docs.itellico.ai/build/advanced/recording-opt-out
Allow callers to request that their call not be recorded
## How Recording Opt-Out Works
Recording Opt-Out enables callers to request that their call recording be stopped and deleted during the conversation. This Alpha feature helps with General Data Protection Regulation (GDPR) compliance and demonstrates respect for caller privacy.
When enabled, this feature adds a tool your AI agent can invoke when a caller expresses they don't want to be recorded.
***
## How It Works
When a caller says something like "I don't want to be recorded" or "Please stop recording":
```mermaid theme={null}
sequenceDiagram
participant Caller
participant Agent
participant Platform
Caller->>Agent: "Please stop recording"
Agent->>Platform: Invoke recording opt-out tool
Platform->>Platform: Stop live recording
Platform->>Platform: Mark audio for deletion
Agent->>Caller: "Recording has been stopped and deleted."
```
1. **Agent recognizes the request:** The AI understands the opt-out request
2. **Tool invoked:** The agent triggers the recording opt-out action
3. **Recording stops:** Live recording stops immediately
4. **Data deleted:** The platform deletes any recorded audio for this call
5. **Caller confirmed:** Agent confirms the action to the caller
***
## Configuration
Navigate to your agent editor → **Privacy** tab → **Caller Rights** section.
### Enable Recording Opt-Out
Toggle the feature on or off:
* **Enabled:** Callers can request to stop and delete recording
* **Disabled:** Opt-out requests are not available (default)
***
## Caller Triggers
The agent will recognize opt-out requests phrased in various ways:
**English:**
* "Stop recording this call"
* "I don't want to be recorded"
* "Please don't record me"
* "Turn off the recording"
* "Delete this recording"
**German:**
* "Bitte nicht aufnehmen"
* "Aufnahme stoppen"
* "Ich möchte nicht aufgenommen werden"
The agent uses natural language understanding to recognize intent, not just exact phrases.
***
## Use Cases
Meet European data protection requirements for consent withdrawal
Allow callers to discuss sensitive topics without recording
Demonstrate commitment to caller privacy and data rights
Comply with two-party consent laws in certain jurisdictions
***
## What Happens When Opt-Out is Triggered
| Component | Action |
| -------------- | ------------------------------------------------------------------------- |
| Live recording | Stopped immediately |
| Recorded audio | Marked for deletion and not persisted when the recording upload completes |
| Transcript | Controlled separately by Data Retention settings |
| Call metadata | Retained (call happened, duration, etc.) |
| Analytics | Basic call stats retained |
Once the platform deletes the recording, it cannot be recovered. Ensure your team understands this is a permanent action.
***
## Best Practices
**Combine with announcements:** If you record calls, inform callers at the start with a Privacy Announcement. Mention the opt-out option:
```text theme={null}
This call may be recorded for quality purposes. If you prefer not to be
recorded, please let me know at any time.
```
**Train your agent:** Add guidance to your prompt to acknowledge opt-out requests professionally:
```text theme={null}
When a caller requests to stop recording:
- Acknowledge the request immediately
- Confirm the recording has been stopped and deleted
- Reassure them the conversation can continue
- Do not pressure them to continue recording
```
**Document your policy:** Have a clear internal policy about what happens when callers opt out and how this affects quality assurance processes.
***
## GDPR Considerations
Under GDPR, individuals have the right to:
Know that recording is taking place (use announcements)
Agree to being recorded before it happens
Change their mind and request recording to stop
Have recorded data removed (right to erasure)
Recording Opt-Out addresses the last two rights—allowing callers to withdraw consent and request deletion during the call.
This is general guidance, not legal advice. Consult with a legal professional to ensure your recording practices meet your specific regulatory requirements.
***
## Limitations
* **Only affects current call:** Cannot delete recordings from previous calls
* **Immediate effect:** Once triggered, recording deletion cannot be undone during the same call
* **Metadata retained:** Basic call information (that a call occurred) is retained
* **Audio-focused:** Transcript and analytics storage follow your Data Retention settings
***
## Next Steps
Inform callers about recording at the start
Deploy with proper compliance measures
Show your privacy practices publicly
Test opt-out in the simulator
# Smart Filler
Source: https://docs.itellico.ai/build/advanced/smart-filler
Reduce perceived latency with intelligent filler responses
## How Smart Filler Works
Expert Mode
Smart Filler reduces perceived latency by generating contextual filler responses while your main AI model processes the full answer. Instead of silence during processing, your agent says something like "Let me check that for you..." before delivering the complete response.
Smart Filler uses a fast secondary AI model to generate contextual fillers in parallel with your main AI model. It reduces perceived latency but does not make the main response complete faster.
## How It Works
```mermaid theme={null}
sequenceDiagram
participant User
participant Agent
participant FastLLM as Fast Secondary large language model (LLM)
participant MainLLM as Main AI Model
User->>Agent: Asks question
Agent->>FastLLM: Generate filler (parallel)
Agent->>MainLLM: Generate full response (parallel)
FastLLM-->>Agent: "Let me check that..."
Agent->>User: Speaks filler
MainLLM-->>Agent: Full response ready
Agent->>User: Speaks full response
```
1. User asks a question
2. Smart Filler immediately generates a contextual filler phrase using a fast secondary AI model
3. The filler plays while your main AI model processes the full response
4. The complete response follows without interruption
***
## Configuration
Navigate to your agent's **General** tab, switch to **Expert** mode, and open **Sounds** to configure Smart Filler.
### Enable Smart Filler
Toggle Smart Filler on or off. When disabled, the agent waits silently until the full response is ready.
### Delay Threshold
Choose how long the main response can take before the filler plays. The dashboard supports **0-2000 ms** in 50 ms steps. A value of `0 ms` lets the filler play as soon as it is available; higher values avoid fillers for fast responses.
### Custom Filler Prompt
Customize how your agent generates filler responses with a custom prompt.
**Default behavior:** The agent generates appropriate acknowledgments like:
* "Let me check that for you..."
* "One moment while I look into that..."
* "Good question, let me find out..."
**Custom prompt examples:**
```text theme={null}
Use Austrian German expressions like "Passt" or "Jo eh"
for casual acknowledgments.
```
```text theme={null}
Use formal business language. Never use casual phrases.
Example: "I'll look into that right away" not "Let me check".
```
```text theme={null}
Be warm and friendly. Use phrases like "Great question!"
and "I'd be happy to help with that!"
```
```text theme={null}
Match the language the customer is speaking. If they speak
German, respond in German. If Spanish, respond in Spanish.
```
Custom filler prompts are limited to 2000 characters. Keep instructions concise and focused.
***
## Use Cases
Cover wait time from advanced AI models with longer response times
Fill pauses during tool calls, database lookups, or multi-step reasoning
Acknowledge the caller while [knowledge base](/build/knowledge/architecture) retrieval adds processing time
Bridge latency from [custom API tools](/build/tools/custom-api-actions)
***
## Best Practices
**Match your brand voice:** Use the custom prompt to ensure fillers match your agent's personality and brand guidelines. See the [prompt engineering guide](/build/conversation/prompt-engineering-guide) for writing effective prompts.
**Keep it natural:** The best fillers sound like natural human acknowledgments, not robotic placeholders.
**Consider context:** Different situations call for different filler styles. Sales calls might use energetic fillers while support calls might use reassuring ones.
**Test extensively:** Make test calls to ensure fillers feel natural in real conversations and don't create awkward pauses or repetition.
***
## Performance Impact
| Metric | Without Smart Filler | With Smart Filler |
| -------------------- | ----------------------- | ------------------------- |
| Perceived latency | Full AI processing time | \~500ms |
| User experience | Silent waiting | Natural conversation flow |
| Actual response time | Unchanged | Unchanged |
Smart Filler doesn't speed up your actual response time—it makes the wait feel shorter by providing immediate acknowledgment.
***
## Limitations
* **Not always appropriate:** Some contexts (legal disclaimers, critical information) may require silence rather than fillers
* **Language matching:** Works best when filler prompt matches conversation language
***
## Next Steps
Add audio feedback while processing
Fine-tune voice parameters
Select the model that drives your agent
Test Smart Filler in the simulator
# Turn-Taking and Timing
Source: https://docs.itellico.ai/build/advanced/turn-taking-and-timing
Tune interruptions, pauses, silence handling, and pacing for natural conversations
Natural voice experiences depend on timing.
If the agent speaks too quickly, customers feel interrupted. If it waits too long, the call feels uncertain or slow.
This page explains the main controls that shape timing and turn-taking.
Timing is only one layer of the caller experience. If the conversation still feels wrong after timing changes, step back and review the full [AI Pipeline Guide](/build/voice-speech/ai-pipeline-guide).
## The Four Controls
| Control | What it affects | Main doc |
| ------------------------ | ------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| **Greeting timing** | When the first message starts and whether callers can interrupt it | [Greeting Messages](/build/conversation/greeting-messages) |
| **VAD / turn detection** | When the platform decides the caller has finished speaking | [VAD & Turn Detection](/build/advanced/vad-turn-detection) |
| **Inactivity handling** | What happens when nobody speaks for a while | [Inactivity Timeout Settings](/build/advanced/inactivity-timeout-settings) |
| **Ambient sound** | How pauses feel between spoken turns | [Ambient Sound](/build/voice-speech/ambient-sound) |
## 1. Greeting Timing
The first few seconds set the tone for the whole call.
Use greeting timing to control:
* how long the agent waits before speaking
* whether the caller can interrupt the opening line
* whether inbound and outbound greetings behave differently
### Recommended starting point
* short initial delay
* non-interruptible greeting for most inbound use cases
* outbound-specific override only when proactive calls need a different opening
## 2. VAD And Turn Detection
VAD decides when the caller has stopped speaking and the agent should respond.
This strongly affects:
* perceived responsiveness
* interruption behavior
* whether the agent cuts people off
* whether the agent waits too long after short pauses
### When to tighten it
* the agent waits too long after obvious answers
* callers say the assistant feels slow
### When to loosen it
* the agent interrupts mid-thought
* callers pause naturally before finishing
* the call includes number sequences or careful explanations
## 3. Inactivity Handling
Inactivity settings control what happens when the call goes quiet.
Use them to define:
* how long the platform waits
* whether it should reprompt
* when it should end the conversation
This matters most for:
* outbound calls where the recipient does not answer clearly
* long pauses during support or booking flows
* calls where the customer may step away temporarily
## 4. Ambient Sound
Ambient sound does not change turn detection directly, but it changes how pauses feel.
Used carefully, it can make pauses feel:
* intentional
* less sterile
* more natural
Used badly, it can make the call feel:
* noisy
* distracting
* less professional
For regulated or clarity-critical use cases, less is usually better.
## How These Controls Work Together
```mermaid theme={null}
graph TD
A[Greeting timing] --> D[How the conversation starts]
B[VAD and turn detection] --> E[How the agent responds between turns]
C[Inactivity handling] --> F[How silence is handled]
G[Ambient sound] --> H[How pauses feel]
D --> I[Overall conversation pacing]
E --> I
F --> I
H --> I
```
## Symptoms And Likely Fixes
| Symptom | Most likely area to review |
| ------------------------------------ | --------------------------------- |
| Agent starts talking too soon | Greeting delay or VAD sensitivity |
| Agent cuts callers off | VAD / turn detection |
| Agent feels slow after short answers | VAD / pause timing |
| Calls feel awkward during silence | Inactivity settings |
| Pauses feel sterile or abrupt | Ambient sound and overall pacing |
## How Model And Transcriber Choices Affect Timing
One settings panel does not control all timing.
Your experience also depends on:
* the speech model and voice choice
* transcriber behavior
* how much work the agent is doing during the turn
* whether tools or knowledge retrieval add extra latency
If a conversation feels slow, do not only change one timing slider. Also check:
* [Choose AI Model](/build/voice-speech/choose-ai-model)
* [Transcriber](/build/voice-speech/transcriber)
* [Knowledge issues](/troubleshooting/knowledge-issues)
* [Tool and integration issues](/troubleshooting/tools-integrations)
## A Practical Tuning Loop
1. Start with default timing.
2. Run a short [Web Simulator](/test/web-simulator) test.
3. Run at least one real [Phone Test](/test/phone-testing).
4. Listen for interruptions, long pauses, and awkward silence.
5. Change one timing variable at a time.
6. Test again with the same scenario.
## Common Mistakes
If you change greeting delay, VAD, inactivity, and ambient sound together, it becomes hard to know what actually improved or broke the experience.
Ambient sound can improve feel, but it does not fix slow tools, slow retrieval, or slow models.
Browser tests are useful, but phone calls expose timing issues more clearly, especially around greeting pace and interruption behavior.
## Next Steps
Configure the opening experience
Fine-tune how the platform detects completed speech
Decide what happens during silence
Adjust the feel of pauses and background atmosphere
# Voice Activity Detection & Turn Detection
Source: https://docs.itellico.ai/build/advanced/vad-turn-detection
Configure response timing, AI turn detection, and interrupt handling for natural conversation flow
**Access:** Open an agent and go to **Call Flow**, then scroll to **Conversation Flow**.
## How Turn Detection Works
Voice Activity Detection (VAD) and turn detection decide when the caller has finished speaking and when the agent should respond. These controls affect perceived responsiveness, interruptions, and whether the agent waits through natural pauses.
These settings apply to voice conversations, including phone calls and web calls. Simple mode exposes response timing presets. Expert mode adds interruption controls, AI turn detection, and advanced timing sliders.
## Simple Mode
Simple mode exposes **Response Timing** presets:
Longer pauses before responding. Use this for thoughtful conversations, number collection, or flows where callers often pause mid-sentence.
A middle ground for general-purpose conversations.
Faster responses. Use this for quick exchanges, but test for accidental interruptions.
## Expert Mode Controls
Controls whether callers can speak over the agent while it is talking.
Turn this off for legal disclosures, required announcements, or scripted sections where the caller should hear the full message.
Choose **Patient**, **Balanced**, **Responsive**, or **Custom**.
The presets update the underlying timing values together. Choose **Custom** when you need to tune the sliders directly.
Enables AI-based end-of-turn detection. When disabled, the runtime uses VAD-only detection.
AI Turn Detection can reduce mid-sentence cutoffs, but it may add a small amount of latency.
Expert mode exposes three sliders:
* **Silence before responding:** `0.10s-1.00s`
* **Speech duration to trigger interrupt:** `0.10s-3.00s`
* **Minimum words to interrupt:** `0-5`
These settings are the dashboard-supported controls for tuning responsiveness and interruption stability.
## AI Turn Detection
AI Turn Detection is the dashboard control for smart endpointing. It uses an AI model to detect when a caller has finished their turn, rather than relying only on a raw silence threshold.
**Benefits:**
* Reduces false cutoffs during natural pauses
* Improves handling for multi-clause sentences
* Keeps barge-in behavior more stable
* Falls back to VAD-only behavior if the AI turn detector is unavailable
Enable it to test if it produces better results for your use case.
## Configuration Best Practices
Use **Balanced** for general support or booking agents. Use **Patient** if callers often pause to think. Use **Responsive** only after testing for interruptions.
Test callers who speak at different speeds, use pauses, read numbers, and interrupt the agent.
If you switch presets and change interruption sliders together, it becomes hard to identify which change improved or broke the conversation.
Browser tests are useful, but phone audio exposes turn-taking problems more clearly.
## Troubleshooting
Switch to **Patient**, increase **Silence before responding**, increase **Minimum words to interrupt**, or enable **AI Turn Detection**.
Switch to **Responsive**, reduce **Silence before responding**, or disable **AI Turn Detection** if the added patience is not needed.
Make sure **Allow Interruptions** is enabled, reduce **Speech duration to trigger interrupt**, and reduce **Minimum words to interrupt**.
Use **Patient** or **Balanced**, increase **Speech duration to trigger interrupt**, and require at least one or two words before interrupting.
## Related Features
Configure voice speed and provider-specific voice controls
Decide what happens during silence
Configure required messages that should usually not be interrupted
Configure phone keypad interaction
# Voicemail Handling
Source: https://docs.itellico.ai/build/advanced/voicemail-handling
Configure Answering Machine Detection (AMD) to identify and handle voicemail systems in outbound campaigns
## How Voicemail Detection Works
Answering Machine Detection (AMD) enables your AI agents to automatically detect when outbound calls reach voicemail instead of a live person. When the agent detects voicemail, it hangs up and logs the outcome, allowing you to retry at different times to maximize chances of reaching a live person.
This critical feature prevents wasted agent time talking to answering machines and optimizes campaign efficiency by focusing resources on live conversations rather than voicemail systems.
**Phone Calls Only:** Answering Machine Detection (AMD) applies to [phone calls via Session Initiation Protocol (SIP)/Public Switched Telephone Network (PSTN)](/launch/phone-numbers) connections. Web-based conversations without a phone leg do not support voicemail detection.
Access AMD configuration during campaign creation, campaign settings, and phone test calls. **Text-based** is the default mode. **ML-based** enables the external AMD participant for faster detection (\~1.5s vs 5-15s).
***
## What is Answering Machine Detection?
### The Challenge
When making outbound calls, you encounter two possible scenarios:
**Scenario 1: Live Answer**
```text wrap theme={null}
Phone rings → Person answers → "Hello?"
→ Agent should engage in conversation
→ Full agent capabilities needed
```
**Scenario 2: Voicemail**
```text wrap theme={null}
Phone rings → Voicemail system answers → "You've reached John Smith..."
→ Agent should hang up and retry later
→ Don't waste time with full conversation script
→ Don't create awkward interaction talking over voicemail greeting
```
**The problem:** How does the agent know which scenario occurred?
### AMD Solution
AMD analyzes the audio in the first few seconds after call connection to determine if a human or machine answered:
**Detection process:**
```text wrap theme={null}
1. Call connects
2. AMD analyzes audio (0.5-3 seconds depending on method)
3. Classification: HUMAN or MACHINE
4. Agent executes appropriate behavior
```
**Benefits:**
* **Efficiency:** Don't waste agent time on voicemail
* **Better targeting:** Focus retry attempts on different times to reach live person
* **Higher connect rates:** Optimize call timing based on voicemail patterns
* **Better analytics:** Separate "reached voicemail" from "no answer" in reporting
***
## AMD Methods
### Detection Types
Detect voicemail using keyword analysis with your transcriber and LLM — the default mode
Recognize voicemail patterns using a Deep Neural Network — optional addon for faster detection
### Text-Based AMD
**Role:** Default detection mode. Uses your agent's transcriber and LLM to identify voicemail keywords.
**How it works:**
```text wrap theme={null}
1. Call connects
2. Agent's AI voice pipeline (transcriber) receives audio
3. Agent waits for first turn/utterance to complete (pause detected)
4. LLM analyzes transcription for voicemail-like patterns:
- "You've reached"
- "Leave a message"
- "Not available"
- "Voicemail"
- "After the beep"
5. If voicemail detected → Agent hangs up
6. If live person detected → Agent continues normal conversation
```
**Characteristics:**
**Slower:** Waits for complete turn/utterance to finish
Must wait for the entire voicemail greeting to complete (pause detected), then transcribe and analyze the full text. Typical detection occurs after 5-15+ seconds depending on length of voicemail message.
**Limitation:** Long voicemail greetings mean longer wait times before detection
**Best for:** Campaigns where accuracy is more important than immediate detection
**High accuracy when:**
* Standard voicemail greetings with common phrases
* Clear audio quality
* Voicemail language matches transcriber language
* B2B environments with professional greetings
**Will NOT detect:**
* Voicemail greetings in languages the transcriber doesn't support
* Voicemail systems with no greeting (just beeps)
* Non-verbal voicemail indicators
**Lower accuracy when:**
* Custom greetings without standard keywords
* Short greetings ("Hi, leave a message" - very brief)
* Poor audio quality or background noise
* Background noise interfering with transcription
**Ideal for:**
* **B2B campaigns** - Business voicemails typically use standard phrasing
* **Campaigns prioritizing accuracy** - Reduces false positives by analyzing full utterance context
* **Budget-conscious deployments** - Lower computational cost
* **English-language markets** - Keyword detection optimized for English
**Example scenarios:**
* Sales outreach to business phone numbers
* Appointment reminders to office lines
* B2B lead qualification campaigns
**May struggle with:**
* Personal, creative voicemail greetings ("Hey, it's Mike, you know what to do")
* Very short greetings
* Voicemail language doesn't match transcriber language
* Greetings that sound conversational ("Hello? Hello? Just kidding, leave a message")
* Background music or noise in greeting
**False positives:** Human who starts with "You've reached..." might be misclassified
**False negatives:** Voicemail without keywords might be classified as human
### ML-Based AMD (Optional Addon)
**Role:** Optional fast detection layer you can enable for speed. Works in parallel with text-based AMD.
**How it works:**
```text wrap theme={null}
1. Call connects
2. Deep Neural Network (DNN) analyzes audio in real-time:
- Speech patterns and cadence
- Voicemail audio patterns
- Acoustic characteristics
- Timing and rhythm
- Natural vs. recorded speech indicators
3. Model trained on tens of thousands of audio recordings
4. Classification: HUMAN or MACHINE
5. Language-independent detection
```
**Characteristics:**
**Fast:** \~1.5 seconds
Identifies live human responses within 1.5 seconds
**Much faster than text-based AMD** which must wait for complete utterance
**Very high accuracy** in real-world conditions
**Why enable ML-Based AMD:**
* **Language-independent:** Works across all languages (text-based only works if transcriber language matches)
* **Detects beep-only voicemail:** Catches voicemail systems with no greeting (text-based cannot)
* **Handles creative greetings:** Detects personal/non-standard greetings without keywords
* **Pattern-based detection:** Doesn't rely on specific voicemail keywords
* **Fast detection:** \~1.5 seconds vs 5-15+ seconds for text-only
* **Better for multi-language campaigns:** No language configuration needed
**Limitations:**
* Extremely short connections (\< 0.5 seconds of audio)
* Highly degraded audio quality
**Ideal for:**
* **Consumer campaigns** - Personal voicemails with creative greetings
* **Multi-language campaigns** - Not dependent on English keywords
* **Quality-focused campaigns** - When accuracy is more important than speed
* **Complex markets** - Mixed business/personal numbers
**Example scenarios:**
* Consumer sales calls
* Political campaigns
* Non-profit fundraising
* Healthcare outreach
* Multi-language support campaigns
**Handles well:**
* Creative personal greetings
* Short greetings
* Non-English voicemails
* Greetings without standard keywords
* Background music or sound effects
* Natural conversational-sounding greetings
**Robust across:**
* Different languages
* Regional accents
* Various voicemail systems
* Custom greetings
### How AMD Works
**Text-Based AMD (Base Layer):**
* Default campaign and phone-test mode
* Analyzes transcription for voicemail keywords
* Waits for complete utterance (5-15+ seconds)
* More conservative - rarely hangs up on live people
**ML-Based AMD (Optional Addon):**
* You can optionally enable this for faster detection
* Analyzes audio patterns in \~1.5 seconds
* Works in parallel with text-based AMD
* Faster but may occasionally hang up on live people
**Configuration Options:**
**Text-Based Only (Conservative):**
* Only text-based detection active
* Slower detection (5-15+ seconds)
* Rarely hangs up on live people
* **Trade-off:** Might miss some voicemails and talk to them
* Best for: When you want to avoid hanging up on live people at all cost
**Text-Based + ML-Based (Fast & Recommended):**
* ML detects in \~1.5 seconds
* Text-based validates in parallel
* Very high accuracy
* **Trade-off:** Occasionally might hang up on a live person
* Best for: Campaigns where talking to voicemail incurs additional cost
**Which should you choose?**
**Text-Based (recommended for most use cases):** Sufficient for the majority of campaigns. Rarely hangs up on live people, and handles standard voicemail greetings well.
**Text-Based + ML-Based:** If you need faster detection (\~1.5s vs 5-15s) and can tolerate occasionally hanging up on a live person — for example, high-volume campaigns where talking to voicemail incurs meaningful cost.
***
## Configuring AMD
AMD can be configured in two places:
Enable AMD when testing your agent with phone calls
Configure AMD for outbound campaigns
### Test Phone Calls
Configure AMD when testing your agent via phone:
Go to your **Agent** page
Click **Test Agent**
Choose **Phone call** as the test type
Find the **Answering Machine Detection (AMD)** setting
Choose between:
* **Text-based** (default) - Avoids hanging up on live people at all cost
* **ML-based** - Fast detection (\~1.5s) but may occasionally hang up on live people
Select your From Number
Enter To Number (your phone number for testing)
Click **Start Phone Call**
If the agent detects voicemail, it hangs up
### Campaign Creation And Settings
Campaign creation uses the default text-based AMD mode. To change AMD for a campaign, open the campaign after creation and use the campaign **Settings** tab.
Go to **[Campaigns](/manage/campaigns/overview)** section
Click **Create Campaign** and fill in the required campaign name, agent, phone number, and schedule fields.
Open the campaign and select the **Settings** tab.
Switch to **Expert** mode if needed, then find **Answering Machine Detection**.
*Choose voicemail detection strategy for this campaign*
Select one:
* **Text-based** - Avoids hanging up on live people at all cost (slower, 5-15s)
* **ML-based** - Fast detection (\~1.5s) but may occasionally hang up on live people
The campaign settings page auto-saves the selected strategy.
**Changing AMD settings for existing campaigns:**
1. Navigate to campaign **Settings**
2. Switch to **Expert** mode if the AMD field is hidden
3. Locate **Answering Machine Detection (AMD)** dropdown
4. Select different strategy (Text-based or ML-based)
5. Save changes
Changing AMD settings mid-campaign may affect analytics consistency. Consider creating a new campaign if you need to A/B test AMD configurations.
***
## AMD Behavior
When AMD detects voicemail, the agent automatically hangs up and logs the outcome.
The platform marks the call as **MACHINE** in campaign analytics, allowing you to schedule retries at different times to increase chances of reaching a live person.
***
## Testing AMD Configuration
### AMD Test Plan
**Setup:**
1. Configure agent with ML-Based AMD enabled
2. Prepare test phone number with voicemail
**Test:**
1. Start test call to voicemail number
2. Let call go to voicemail
3. Monitor agent behavior
**Validation:**
* Agent hangs up within \~1.5 seconds
* Call marked as MACHINE in logs
* No conversation attempt with voicemail greeting
**Setup:**
1. Configure agent with Text-Based AMD only
2. Use same voicemail test number
**Test:**
1. Start test call
2. Let call go to voicemail with standard greeting
**Validation:**
* Agent waits for complete greeting (5-15+ seconds)
* Agent hangs up after detecting keywords
* Call marked as MACHINE
**Setup:**
1. Test with both AMD methods
2. Answer call personally
**Test:**
1. Start test call
2. Answer and say "Hello?"
3. Verify agent continues conversation normally
**Validation:**
* Agent does NOT hang up
* Normal conversation proceeds
* Call NOT marked as MACHINE
**Scenarios to test:**
**Silent answer:**
* Answer but don't speak
* Verify AMD doesn't misclassify
**Quick greeting:**
* Answer with very brief "Hi"
* Verify conversation continues
**Voicemail without keywords:**
* Test with non-standard greeting
* Monitor ML vs text-based performance
**Beep-only voicemail:**
* Voicemail system with no greeting
* Verify ML-based detects, text-based may miss
***
## Troubleshooting
**Symptoms:** Performance not matching expectations
**Check:**
* Review campaign AMD setting
* Compare expected vs actual detection speed
* Check false positive/negative rates in logs
**Solution:**
* Switch between Text-based and ML-based
* Test both methods with your call patterns
* Choose based on your priority (speed vs conservative)
**Symptoms:** Hanging up on live people frequently
**Analysis:**
* Review call recordings of false positives
* Check if ML-based AMD is being too aggressive
* Identify common patterns (background noise, specific greetings)
**Solution:**
* Switch to Text-based AMD (more conservative)
* Improve call quality/reduce background noise
* Test from different phone numbers
* Contact support if persistent
**Symptoms:** Agent frequently talks to voicemail
**Analysis:**
* Check if voicemails have non-standard greetings
* Review if beep-only voicemail systems
* Verify transcriber language matches voicemail language
**Solution:**
* Switch to ML-based AMD (better for non-standard greetings)
* ML-based detects beep-only systems
* Ensure agent speaks same language as target audience
***
## Next Steps
Create and manage outbound calling campaigns
Track AMD performance and optimize campaigns
Write effective prompts for call handling
Configure optimal calling times based on AMD data
# Conversation Goals
Source: https://docs.itellico.ai/build/analytics/conversation-goals
Define and track measurable objectives for every conversation
## What Conversation Goals Do
Conversation goals are optional metrics that help you measure success. Define what outcomes matter to you, and AI will analyze each conversation transcript to determine whether the conversation achieved those goals. This enables performance reporting, success rate tracking, and data-driven optimization.
**Goals are for reporting only.** The agent doesn't know about goals during the conversation. AI evaluates goals after the call ends by analyzing the transcript.
To guide the agent's behavior during calls, define what you want the agent to accomplish in your [agent prompt](/build/conversation/prompt).
**Access:** In your agent editor → **Analytics** tab → **Post-Call Analytics** section
***
## Setup
In your agent editor → **Analytics** tab → **Post-Call Analytics** section → **Add** → **Goal**
**Primary Goal:** Your main success metric
* The most important outcome to measure for this agent
* Used to calculate overall conversation success rate
* Example: "Appointment booked"
**Secondary Goals:** Additional metrics
* Track extra outcomes without affecting primary success rate
* Measure additional value delivered
* Example: "Email collected"
**Name:** Clear, concise label
```
Example: "Follow-up meeting scheduled"
```
**Description:** What success looks like (be as specific as possible - AI uses this to evaluate)
```
Example: "A follow-up meeting was successfully scheduled with
a specific confirmed date, time, and list of attendees. The
customer agreed to the scheduled time and received confirmation."
```
More specific descriptions = more accurate goal evaluation
The platform now tracks this goal for all future conversations.
***
## Primary vs Secondary Goals
**Optional.** Choose the single most important outcome to measure.
**Why only one primary goal?** Having one primary goal defines your main success metric. Conversations are considered successful if the primary goal is achieved, making your analytics dashboard easier to interpret.
**Examples:**
* 📅 Appointment booked
* ✅ Lead qualified
* 🔧 Issue resolved
* 💳 Payment collected
* 📞 Callback scheduled
**Reporting:**
* Used to calculate overall success rate
* Primary metric in analytics dashboard
* Determines if conversation was successful
**Optional. Multiple allowed.** Additional outcomes to track.
**Examples:**
* 📧 Email collected
* ⭐ Feedback gathered
* 💰 Upsell opportunity identified
* 📝 Contact information updated
* ✓ Preferences confirmed
**Reporting:**
* Tracked separately from primary goal
* Doesn't affect overall success rate
* Measures additional value delivered
***
## Examples
**Primary Goal:**
* Name: "Appointment booked"
* Description: "An appointment was successfully scheduled with confirmed date, time, service type, and contact information"
**Secondary Goal:**
* Name: "Email collected"
* Description: "Customer provided their email address for appointment reminders"
**Primary Goal:**
* Name: "Lead qualified"
* Description: "Lead meets qualification criteria with confirmed budget, timeline, decision-maker status, and identified pain points"
**Secondary Goal:**
* Name: "Demo scheduled"
* Description: "Product demo was successfully booked with the qualified lead"
**Primary Goal:**
* Name: "Issue resolved"
* Description: "Customer's problem was addressed and resolution confirmed to their satisfaction"
**Secondary Goal:**
* Name: "Feedback collected"
* Description: "Customer provided feedback rating or suggestions for improvement"
**Primary Goal:**
* Name: "Requirements collected"
* Description: "Complete project requirements gathered including scope, budget, timeline, and decision process"
**Secondary Goal:**
* Name: "Urgency identified"
* Description: "Project urgency level and ideal start date were determined"
***
## Viewing Results
### Individual Conversations
View goal status for each call:
1. Go to **Conversations**
2. Click on a conversation
3. View **Goals** section
4. See which goals were achieved (achieved, partially achieved, or not achieved)
### Dashboard
View goal metrics across all conversations:
Go to **Dashboard** to see goal completion rates and performance trends.
[Learn more about Dashboard →](/manage/dashboard)
***
## Best Practices
The AI uses your description to evaluate goal completion.
❌ Vague: "Get customer info"
✅ Clear: "Collect customer's full name, email address, phone number, and reason for inquiry"
Don't try to accomplish too much in one call.
✅ Focus: One clear primary objective
❌ Overload: Multiple competing primary goals
Secondary goals track additional value beyond your primary metric.
**Examples:**
* Primary: "Appointment booked" + Secondary: "Email collected"
* Primary: "Issue resolved" + Secondary: "Feedback gathered"
* Primary: "Lead qualified" + Secondary: "Demo scheduled"
Archive old goals to keep them out of the way while preserving historical data.
**To archive:** Click archive icon next to goal
**To restore:** Open **Archived** → click the unarchive icon
***
## Tips
* **Align your prompt with goals** - While the agent doesn't see goals during calls, write your agent prompt to guide conversations toward achieving your defined goals
* **Review regularly** - Check goal achievement rates weekly to identify optimization opportunities
* **Refine definitions** - Adjust goal descriptions if AI evaluation doesn't match your expectations
* **Combine with insights** - Use [Gather Insights](/build/analytics/gather-insights) for detailed quality scoring
***
## Troubleshooting
**Causes:**
* Goals created after conversations took place
* Goals archived
**Solutions:**
* Goals only apply to new conversations after creation
* Open **Archived** in the Analytics tab and restore the goal if needed
**Causes:**
* Vague goal description
* Description doesn't match actual success criteria
**Solutions:**
* Make description more specific and detailed
* Provide clear success criteria
* Test with a few calls and refine
**Causes:**
* Goal too ambitious for conversation type
* Agent prompt doesn't align with goal
* Goal description not specific enough
**Solutions:**
* Review if goal is realistic for your use case
* Update your agent prompt to guide toward desired outcome
* Make goal description more specific
* Adjust goal definition based on actual conversation patterns
***
## Next Steps
Extract detailed insights and LLM-based evaluations
Send emails, team alerts, and tasks after calls
View performance metrics
Review goal results in conversations
***
## Common Questions
The platform evaluates goals automatically after each conversation ends. The analysis runs asynchronously — results appear in the conversation detail view within a few seconds.
Yes. You can add, edit, or archive goals at any time. New goals only apply to future conversations — they won't retroactively analyze past calls.
Goals measure success (did the call achieve its purpose?). Insights pull out specific data from the conversation (what was the caller's sentiment? what topic was discussed?). Use both together for a complete picture.
# Gather Insights
Source: https://docs.itellico.ai/build/analytics/gather-insights
Use LLM-as-a-judge to extract structured insights and quality metrics from conversations
## What Gather Insights Does
Gather Insights uses AI after each call to evaluate the transcript, extract structured information, and answer the specific questions you care about. This is your **LLM-as-a-judge** layer for quality scoring, categorization, and field extraction.
**Access:** In your agent editor → **Analytics** tab → **Post-Call Analytics** section
## Analytics Language
Expert Mode
Set the language for AI evaluation:
**Access:** In your agent editor → **Analytics** tab → **Settings** section → **Analytics Language**
Select the language the AI uses to evaluate goals and insights when analyzing transcripts and answering insight questions.
You can also set the **Analysis Model** in the same **Settings** section.
This setting applies to both goals and insights.
***
## Default Insights vs Custom Insights
**Default insights** — Pre-configured by itellicoAI:
* Cannot be edited or archived
* Toggle on or off with the Active switch
* Optimized for common use cases
**Custom insights** — Created by your team:
* Full control over name, description, and type
* Can be edited, archived, and restored
* Tailored to your own workflows
Default insights give you a starting point. Add custom insights for your own reporting, QA, or extraction needs.
## How To Decide What To Add
| Use this when you want... | Best fit |
| ------------------------------------------- | ------------------- |
| a ready-made common quality signal | **Default Insight** |
| a custom question tied to your own workflow | **Insight** |
| a yes/no business outcome | **Goal** |
***
## Setup
In your agent editor → **Analytics** tab → **Post-Call Analytics** section → **Add** → **Add Insight**
**Name:** Internal label
```text theme={null}
Example: Customer Satisfaction Score
```
**Description:** The exact question AI should answer
```text theme={null}
Example: On a scale of 1-5 stars, rate the customer's overall
satisfaction based on their tone, language, and whether their
issue was fully resolved during the call.
```
More specific descriptions produce more reliable AI judgments.
**Yes/No** — binary answer
```text theme={null}
Example: Was the customer's issue fully resolved?
```
**Open** — free text answer
```text theme={null}
Example: What was the main topic discussed?
```
**Data Point** — one extracted value
```text theme={null}
Example: What order number did the caller provide?
```
**Single Choice** — one option from your list
```text theme={null}
Example: Which product line was discussed?
```
**Multiple Choice** — one or more options from your list
```text theme={null}
Example: Which objections did the caller mention?
```
**Rating** — 1-5 stars
```text theme={null}
Example: How professional was the agent?
```
Click **Add Analysis** to save.
***
## Use Insights For Structured Extraction
Use **Data Point** or **Open** insights when you want the AI to pull a specific field or summary out of the call. This is the clearest post-call equivalent of “variable extraction”.
**Good extraction-style prompts:**
* `What is the customer's order number? Return only the order number or "not provided".`
* `What date and time did the customer request for the appointment?`
* `What is the main cancellation reason? Return a short phrase only.`
* `Summarize the exact next steps agreed on in 1-2 sentences.`
If you want clean operational data, tell the AI exactly how to answer: category only, short phrase only, specific date/time, or `"not provided"` when missing.
## Question Types
**Binary answer questions** for clear metrics.
**Best for:**
* Compliance checks
* Quality verification
* Feature usage detection
**Examples:**
* `Was payment information collected?`
* `Did the agent follow the script?`
* `Was the caller transferred?`
* `Did the customer agree to the offer?`
**Text response questions** for detailed insights and field extraction.
**Best for:**
* Information extraction
* Issue categorization
* Root cause analysis
* Conversation summaries
**Examples:**
* `What was the primary topic discussed?`
* `What objections did the customer raise?`
* `Which product was discussed?`
* `Summarize the customer's technical issue`
**Single-value extraction** for operational fields that should stay short.
**Best for:**
* Order numbers
* Requested appointment dates
* Product names
* Short labels or IDs
**Examples:**
* `What order number did the caller provide? Return only the order number or N/A.`
* `What appointment date did the caller request? Return YYYY-MM-DD or N/A.`
* `Which account ID was mentioned?`
**One option from a list** when you want consistent categories.
**Best for:**
* Primary call reason
* Lead source
* Complaint severity
* Product category
**Examples:**
* `Choose the main call reason: Billing, Support, Sales, Cancellation, Other.`
* `Choose the highest escalation level: None, Team Lead, Manager, Legal.`
**One or more options from a list** when several categories can apply.
**Best for:**
* Objections mentioned
* Products discussed
* Compliance checks passed
* Follow-up channels requested
**Examples:**
* `Which objections did the caller mention: Price, Timing, Trust, Missing Feature, Other?`
* `Which follow-up channels were requested: Email, Phone, SMS, In-person?`
**1-5 star scale** for qualitative assessment.
**Standard scale:**
* **5** = Exceptional performance
* **4** = Above average performance
* **3** = Average or satisfactory performance
* **2** = Below average performance
* **1** = Minimal or poor performance
**Best for:**
* Quality scoring
* Sentiment analysis
* Performance evaluation
* Satisfaction measurement
**Examples:**
* `Rate customer sentiment (1=very negative, 5=very positive)`
* `How well did the agent handle objections?`
* `Rate call quality (1=poor, 5=excellent)`
* `Customer satisfaction score`
## Recommended Starting Set
For most teams, a strong first insight set is:
1. **Customer satisfaction** as a rating
2. **Issue resolved** as yes or no
3. **Primary call topic** as single choice or open text
4. **Customer sentiment** as a rating
Start small. Once those answers are operationally useful, add more.
***
## Examples
**Name:** Customer Satisfaction Score
**Type:** Rating (1-5 stars)
**Description:**
```text theme={null}
Rate the customer's overall satisfaction based on their tone,
language, and responses (1-5 stars):
5 stars = Very satisfied, enthusiastic, all needs met
4 stars = Satisfied, positive interaction
3 stars = Neutral, basic needs met
2 stars = Somewhat dissatisfied, some frustration
1 star = Very dissatisfied, angry, unresolved issues
```
**Name:** Issue Fully Resolved
**Type:** Yes/No
**Description:**
```text theme={null}
Was the customer's issue, question, or request fully resolved
by the end of the call? Answer Yes only if the customer confirmed
satisfaction or explicitly agreed the issue was resolved.
```
**Name:** Requested Appointment Date
**Type:** Data Point
**Description:**
```text theme={null}
Extract the appointment date requested by the caller.
Return only the date in YYYY-MM-DD format.
If no date was requested, return "not provided".
```
**Name:** Primary Call Topic
**Type:** Open
**Description:**
```text theme={null}
Identify the main topic or reason for this call. Choose from:
- Billing inquiry
- Technical support
- Product information
- Order status
- Complaint
- Cancellation request
- General question
Return only the category name. If multiple topics were discussed,
return the one that took the most conversation time.
```
***
## Insights vs Goals
Use both together for complete conversation tracking:
| Feature | Goals | Insights |
| --------------- | -------------------------------------------- | ----------------------------------------------- |
| **Purpose** | Track conversions | Extract insights and judge quality |
| **Example** | Appointment booked | How satisfied was the customer? |
| **Answer Type** | Achieved / Partially achieved / Not achieved | Yes/No, text, data point, choice, or 1-5 rating |
| **Use For** | Success metrics | Quality scoring, categorization, extraction |
| **Best For** | Business outcomes | Detailed reporting |
**Example combination:**
* **Goal:** `Appointment booked` — was the conversion achieved?
* **Insight:** `Customer Satisfaction` — how well was it handled?
* **Insight:** `Primary Call Topic` — what did they want?
***
## Viewing Results
### Individual Conversations
1. Go to **Conversations**
2. Click a conversation
3. Open the **Gathered Insights** section
4. Review each question and AI answer
### Dashboard
Go to **Dashboard** to see insight trends and metrics.
[Learn more about Dashboard →](/manage/dashboard)
## When To Review Insight Results
Review them when you want to:
* compare quality across agents or campaigns
* understand why a goal is being missed
* route quality issues into follow-up work
* export structured call insights for reporting or downstream workflows
***
## Best Practices
The AI uses your description to answer. Be detailed.
❌ `Was the call good?`
✅ `Did the agent provide accurate information, address all customer questions, and maintain a professional tone throughout the call?`
For rating questions, always define what each level means.
If you want reusable data, constrain the output:
* category only
* one short sentence
* one date/time
* `not provided` if missing
Start with 3-5 critical insight questions, not 20.
***
## Next Steps
Track conversions and outcomes
Trigger emails and tasks from insights
View aggregate insights
Align live behavior with what you measure
# Analytics Overview
Source: https://docs.itellico.ai/build/analytics/overview
Understand post-call analytics, conversation goals, gathered insights, language settings, and analytics model selection
## What Analytics Does
Analytics turns completed conversations into structured results you can review, report on, and use for improvement. It runs after the conversation ends, using the transcript to evaluate outcomes and extract information.
Use Analytics to answer questions such as:
* Did the conversation achieve its main goal?
* What information did the customer provide?
* Which topics, objections, or outcomes appeared?
* Which conversations need follow-up or review?
Analytics does not control the agent during the live conversation. To change live behavior, update the agent's [prompt](/build/conversation/prompt), tools, or call flow settings.
***
## Main Analytics Features
Measure whether each conversation achieved the outcomes you care about.
Extract structured answers, ratings, categories, and data points from each transcript.
Send notifications or follow-up messages using the results of the conversation.
Inspect analytics results in context when improving your agent.
***
## Choosing Goals Or Insights
Use **Conversation Goals** for success metrics and trend reporting. Use **Gather Insights** for structured fields, categories, ratings, summaries, or review signals from the transcript.
For the full comparison and setup examples, see [Gather Insights](/build/analytics/gather-insights#insights-vs-goals).
Start with one primary goal and a few high-value insights. Add more only when you know how the result will be used.
***
## Analytics Language
**Access:** Open an agent → **Analytics** tab → **Settings** → **Analytics Language**
Choose the language used for analytics results. This affects how the platform writes goal reasoning, insight answers, and post-call reports.
For example, choose German if your team reviews results in German, even if callers sometimes speak another language.
***
## Analytics Model
Expert Mode
**Access:** Open an agent → **Analytics** tab → **Settings** → **Analytics Model**
Choose the model used to evaluate goals and generate post-call analytics.
| Option | Cost | When to use |
| ----------- | ------------- | ------------------------------------------------------------------------ |
| **Default** | Included | Most agents and standard reporting |
| **Premium** | `+€0.02/call` | More demanding evaluation, nuanced reasoning, or complex insight prompts |
Premium Analytics Model selection adds an extra charge per analyzed call. Review [Premium Features](/billing/premium-features) and your billing usage before enabling it broadly.
***
## Recommended Setup
Choose the language your team should see in goal reasoning, insight answers, and reports.
Define the main outcome for the agent, such as booking an appointment, qualifying a lead, or resolving a support issue.
Add a small set of insights for the details you need after each call, such as topic, sentiment, objection, order number, or next step.
Start with the included Analytics Model. Switch to Premium only when you see a measurable quality benefit.
***
## Next Steps
Define success metrics
Extract structured results
Send follow-up notifications
# Post-Call Automation
Source: https://docs.itellico.ai/build/analytics/post-call-automation
Automate follow-up emails and task creation triggered by conversation outcomes
## How Post-Call Automation Works
Post-call automation runs automatically after conversations. Use notifications to alert your team, create follow-up tasks, or send emails based on what happened in the call.
**Access:** In your agent editor → **Notifications** tab → **Post-Call Notifications**
### What You Can Do
| Capability | How |
| --------------------------------------------------- | ---------------------------------------------------------------------------- |
| **Send emails when something happens** | Set a trigger condition (AI evaluates against the transcript) |
| **Route to different people based on call content** | Use dynamic recipients — AI decides who gets the email |
| **Include call data in emails** | Use system variables like `{{conversation_summary}}` and `{{customer_name}}` |
| **Extract custom data from calls** | Use `{{dyn_*}}` variables — AI pulls specific info from the transcript |
| **Notify your team in-app** | Enable Team Alert for all team members or specific teammates |
| **Create follow-up tasks** | Enable "Create Task" to auto-generate a task linked to the conversation |
| **Always send after every call** | Toggle "Always send" to skip condition checking |
## How To Think About Notifications
Each notification answers three questions:
1. **When should it fire?**
2. **Who should receive it?**
3. **What should happen next: email and/or team alert, with optional task creation?**
***
## Setup
In your agent editor → **Notifications** tab → **Post-Call Notifications** → **Add**
**Templates** provide pre-configured triggers and content for common use cases:
* **Callback Requested** - Customer asks for follow-up
* **Appointment Booked** - Meeting/consultation scheduled
* **Customer Complaint** - Escalates dissatisfaction
* **Unanswered Question** - Agent couldn't answer
* **Technical Issue** - Routes bugs/errors to tech teams
* **Billing Inquiry** - Payment/invoice questions
* **Escalation Needed** - Requires management attention
* **Order Placed** - Purchase confirmation
* **Demo Request** - Product demonstration interest
* **Positive Feedback** - Share compliments with team
Templates are fully customizable starting points. You can also start from scratch.
**Name:** Internal identifier (e.g., "Callback Request Alert")
Describe when to send (AI analyzes this against call transcript):
```
Example: "Did the customer request a callback, ask to be
contacted later, or want someone to follow up with them?"
```
Be specific. The more detailed your trigger description, the more accurate the AI matching.
**Or:** Toggle "Always send after every call" to bypass condition checking
**Fixed Recipients:** Enter specific email addresses (supports multiple)
```
Example: support@company.com, manager@company.com
```
**Dynamic Recipients (AI-powered):** AI routes to different recipients based on call content
```
Example: Route complaints by severity
- If legal threat → legal@company.com
- If angry/canceling → retention@company.com
- If product issue → quality@company.com
- Otherwise → support@company.com
Example: Route technical issues by type
- If website issue → dev@company.com
- If billing system → billing-tech@company.com
- Otherwise → tech-support@company.com
Example: Route orders by value
- If order over $1000 → sales-manager@company.com
- Otherwise → orders@company.com
```
**Subject:** `Callback requested`
**Body:** Use rich text editor with variables (see [Template Variables](#template-variables) below)
* **System variables:** Click variable picker to insert (e.g., `{{customer_name}}`, `{{conversation_summary}}`)
* **Dynamic variables:** Type `{{dyn_` + descriptive name (e.g., `{{dyn_appointment_date}}`)
Enable **Team Alert** to create in-app notifications and push alerts for all team members or selected teammates.
Enable **Create Task** to create a follow-up task when the notification fires.
Save notification → Toggle **Enabled** switch
***
## Create Task
Each notification can also create a [task](/manage/tasks/overview) automatically when it fires. Enable **Create Task** in the notification form to generate a task linked to the conversation.
| Setting | Description |
| ----------------- | ---------------------------------------------------------------- |
| **Create Task** | Toggle on to create a task when this notification fires |
| **Task Priority** | Set the priority for created tasks: Low, Medium, High, or Urgent |
Created tasks include the agent name and a link to the originating conversation for full context. Manage created tasks from the [Tasks](/manage/tasks/overview) page.
Combine email and task creation in a single notification. For example, send a callback request email to the support team and simultaneously create a high-priority task to track follow-up.
## Common Business Patterns
| Situation | Good automation pattern |
| ----------------------- | ---------------------------------------------------------- |
| Callback requested | Create a task and email the support queue |
| Complaint or escalation | Email the responsible team and create a high-priority task |
| Appointment booked | Send confirmation email only |
| Agent could not answer | Notify support or sales and include transcript summary |
***
## Template Variables
### System Variables
Use the **variable picker** in the editor to insert these.
**Availability:** Some variables only populate under certain conditions:
* Phone numbers (`customer_number`, `to_number`) - Phone calls only
* Customer data (`customer_name`, `customer_email`) - Only if the conversation is linked to a contact
* Conversation transcript - Only if transcription is enabled
**Conversation Details:**
* `{{conversation_date}}` - Full date/time in 24-hour format
* `{{conversation_time}}` - Time in 12-hour format
* `{{conversation_duration}}` - Duration in MM:SS format
* `{{conversation_status}}` - Status (Completed, Failed, etc.)
* `{{conversation_direction}}` - Inbound/Outbound
* `{{conversation_summary}}` - AI-generated summary
* `{{conversation_transcript}}` - Full transcript with fallback text
* `{{conversation_url}}` - Link to view conversation
* `{{conversation_uuid}}` - Unique identifier
**Agent & Account:**
* `{{agent_name}}` - Name of AI agent
* `{{account_name}}` - Your account name
**Customer Information** (only if the conversation is linked to a contact):
* `{{customer_number}}` - Customer phone number (phone calls only)
* `{{customer_name}}` - Customer name
* `{{customer_email}}` - Customer email
* `{{to_number}}` - Called phone number (phone calls only)
### Dynamic Variables
**How they work:** Type `{{dyn_` followed by a descriptive name. AI analyzes the call transcript and extracts the information.
**Examples:**
```
{{dyn_appointment_date}} → AI finds the date mentioned in call
{{dyn_appointment_time}} → AI finds the time mentioned
{{dyn_issue_summary}} → AI summarizes the problem discussed
{{dyn_ticket_number}} → AI locates any ticket reference
{{dyn_next_steps}} → AI identifies agreed action items
{{dyn_shipping_address}} → AI extracts mentioned address
{{dyn_order_number}} → AI finds order reference
```
The variable name guides the AI. More specific names = better extraction accuracy.
✅ `{{dyn_rescheduled_appointment_date}}`
❌ `{{dyn_date}}`
***
## Examples
**Trigger:**
```
Did the caller schedule, book, or confirm an appointment or meeting?
```
**Recipients:** Fixed - `team@company.com`
**Subject:** `Appointment confirmed - {{dyn_appointment_date}}`
**Body:**
```
Hi {{customer_name}},
Your appointment is confirmed:
📅 {{dyn_appointment_date}} at {{dyn_appointment_time}}
📍 {{dyn_location}}
🔗 {{dyn_meeting_link}}
Need to reschedule? Call {{agent_name}}
Best,
{{agent_name}}
```
**Variables used:**
* System: `{{customer_name}}`, `{{agent_name}}`
* Dynamic: `{{dyn_appointment_date}}`, `{{dyn_appointment_time}}`, `{{dyn_location}}`, `{{dyn_meeting_link}}`
**Trigger:**
```
Did the customer request a callback, follow-up call, or ask to be contacted later?
```
**Recipients:** Fixed - `support@company.com`
**Subject:** `Callback requested`
**Body:**
```
Customer requested callback:
Phone: {{customer_number}}
Date: {{conversation_date}}
Reason: {{conversation_summary}}
View call: {{conversation_url}}
```
**Variables used:**
* System: `{{customer_number}}`, `{{conversation_date}}`, `{{conversation_summary}}`, `{{conversation_url}}`
**Trigger:**
```
Did the customer express dissatisfaction, file a complaint, or report a problem?
```
**Recipients:** Dynamic
```
Route by severity:
- If legal threat → legal@company.com
- If angry/canceling → retention@company.com
- If product issue → quality@company.com
- Otherwise → support@company.com
```
**Subject:** `Customer issue - {{dyn_severity}}`
**Body:**
```
Issue reported:
Customer: {{customer_number}}
Severity: {{dyn_severity}}
Issue: {{dyn_issue_summary}}
View full call: {{conversation_url}}
```
**Variables used:**
* System: `{{customer_number}}`, `{{conversation_url}}`
* Dynamic: `{{dyn_severity}}`, `{{dyn_issue_summary}}`
***
## Tips
❌ Bad: "Customer unhappy"
✅ Good: "Did the customer express dissatisfaction, frustration, mention being unhappy, or threaten to cancel/leave negative review?"
Enable the notification and test with real or test calls to verify triggering and content.
* 3-5 paragraphs max
* One clear purpose
* Single call-to-action
* Bullet points for multiple items
***
## Troubleshooting
**Possible causes:**
* Notification is disabled
* Trigger condition doesn't match call content
* Fixed recipient list is empty or invalid
* Dynamic recipient rules did not produce a valid email address
**Solutions:**
* Verify notification is enabled (toggle On)
* Review trigger description and test with matching calls
* Add fixed recipients or make dynamic recipient rules include a clear fallback address
**Possible causes:**
* Typo in variable name
* Dynamic variable name too vague
* Data not available (e.g., customer not in system)
**Solutions:**
* Use exact variable names from variable picker
* Make dynamic variable names more specific and descriptive
* Test with real calls to verify extraction
* Check [availability conditions](#template-variables) for system variables
**Possible causes:**
* Routing rules description unclear
* AI misinterpreting call content
**Solutions:**
* Review and clarify routing rules description
* Make criteria more explicit with specific keywords
* Test with sample calls and adjust rules
* Add "Otherwise" fallback route
***
## Next Steps
Manage tasks created by notifications
Measure the outcomes your notifications react to
Inspect calls and notification results
Pass data for template variables
# Agent Identity
Source: https://docs.itellico.ai/build/basic-config/agent-identity
Configure your agent's avatar, name, timezone, and expert-only internal metadata in General settings
## Identity Settings
Your core identity settings are configured in the **Identity** section under **General** in the [agent editor](/build/getting-started/agent-editor). These settings control how the agent appears in your dashboard and demo links.
## Avatar
Upload an avatar image to visually identify your agent in the dashboard and in demo links shared with others.
### How to Upload
Select your agent from the [AI Agents](/build/getting-started/agent-editor) list
Go to **General** → **Identity**
Click the avatar placeholder or the **Upload** button and select an image file from your device
### Image Specifications
| Property | Requirement |
| ---------------- | ----------------------------- |
| **Format** | PNG, JPEG/JPG, or WebP |
| **File size** | Maximum 5 MB |
| **Image size** | Recommended 200x200px minimum |
| **Aspect Ratio** | Square (1:1) |
The avatar is visible when you share demo links. Choose an image that represents your brand professionally.
***
## Agent Name
The agent name identifies this agent across the [dashboard](/manage/dashboard), [campaigns](/manage/campaigns/overview), reports, and demo links.
If you plan to share demo links, use a professional agent name — it is visible to visitors. Internal labels like "Test Agent v3" are fine for agents you will not share publicly.
### Naming Best Practices
* "Acme Support"
* "Alex from Acme Sales"
* "Booking Assistant"
* "Customer Support - Product Questions"
* "Outbound Sales - Lead Qualification"
* "Appointment Booking - Dental Clinic"
**Naming conventions for teams with multiple agents:**
* `[Function] - [Specialty]` (e.g., "Support - Billing")
* `[Department] - [Agent Type]` (e.g., "Sales - Qualifier")
* `[Use Case] - [Language]` (e.g., "Booking - Spanish")
***
## Timezone
Set the timezone used for date/time tools and scheduling. This ensures your agent references the correct local time during conversations.
Defaults to Europe/Vienna if not set.
***
## Tags
Expert Mode
Add multiple tags to categorize agents by team, function, or any other criteria.
***
## Notes
Expert Mode
Notes are not visible to callers or in demo links.
Use notes to record:
* The agent's primary purpose and use case
* Which team or department owns it
* Any special configuration details worth remembering
***
## Quick Reference
| Field | Purpose | Visible To | Mode |
| ------------ | ------------------------------ | --------------------- | ------ |
| **Avatar** | Visual identification | Internal + Demo links | All |
| **Name** | Identify agent across platform | Internal + Demo links | All |
| **Timezone** | Date/time reference for tools | Internal only | All |
| **Tags** | Organize and filter agents | Internal only | Expert |
| **Notes** | Internal documentation | Internal only | Expert |
***
## Next Steps
Explore all sections in the agent editor
Define your agent's conversational behavior
# Greeting Messages
Source: https://docs.itellico.ai/build/conversation/greeting-messages
Choose fixed, AI-generated, or user-initiated greeting modes. Personalize opening messages with variables, set message delays, and configure barge-in for inbound and outbound calls.
**Access:** Open an agent and go to **Call Flow**, then scroll to **Call Start**.
## How Greetings Work
The greeting is the first thing customers hear when connecting with your agent. A well-crafted greeting sets the tone, establishes expectations, and guides the conversation in the right direction.
## Greeting Modes
Choose from three different greeting modes:
This area changes between Simple and Expert mode. Simple mode keeps greeting setup concise; Expert mode adds timing and interruption controls.
### Simple mode
### Expert mode
**Best for**: Consistent, branded greetings
Your agent says the exact same greeting every time.
```text wrap theme={null}
Hey! Thanks for calling Acme support. This is Alex. What can I help you with?
```
**Advantages:**
* Consistent brand messaging
* Predictable customer experience
* Easy to test and refine
* No AI variability
**Use when:**
* Brand voice is critical
* Greeting includes specific disclaimers
* Consistency across all calls needed
**Best for**: Personalized, context-aware greetings
Your agent generates greetings dynamically based on available context.
**Example variations:**
```text wrap theme={null}
# With customer name:
"Hi Sarah! Thanks for calling. What can I help you with today?"
# VIP customer:
"Hi Mr. Johnson! Thanks for calling. What can I help you with today?"
# Time-based:
"Good morning! Thanks for calling Acme support. What brings you in?"
# Campaign-specific:
"Hey! I see you requested info about our Enterprise plan. Happy to help with that!"
```
**Advantages:**
* Personalized to each caller
* Context-aware (time, campaign, customer type)
* Natural variability
* Can reference available data
**Use when:**
* You have rich contact data
* Personalization improves experience
* Different customer segments need different approaches
**Best for**: Outbound calls where recipient speaks first
The agent waits silently for the customer to speak before responding.
**Customer:** "Hello?" / "Yes?" / "Who is this?"
**Agent:** "Hi! This is Alex from Acme. I'm calling about your recent inquiry. Do you have a moment?"
**Advantages:**
* Natural for outbound scenarios
* Customer speaks first as expected
* Agent responds after customer picks up
**Use when:**
* Making outbound calls
* Recipient will naturally say something when answering
* You want the customer to initiate the conversation
**For most use cases, we recommend Fixed Message instead.** Wait for Caller is only useful in certain outbound calling scenarios.
***
## Greeting Configuration
### Delay
Expert Mode
Control how long the agent waits before speaking (0-10 seconds).
A delay of **0.5 seconds** is a good starting point for most use cases.
### Interruptibility
Expert Mode
Control whether customers can interrupt the greeting.
**Non-Interruptible (Recommended):**
* Greeting plays in full without interruption
* Ensures customers hear complete message
* Professional and clear introduction
* Best for most use cases
**Interruptible:**
* Customer can speak during greeting
* Agent stops mid-greeting and listens
* Can lead to incomplete introductions
* Use only if customers frequently interrupt and non-interruptible greetings lead to suboptimal conversations or hangups
Non-interruptible greetings ensure your brand introduction and purpose are always communicated clearly. Keep greetings concise (under 10 seconds) for best results.
***
## Inbound vs Outbound Greetings
### Inbound Greetings
Customers are calling you. They initiated contact.
**Best practices:**
* Thank them for calling
* Identify your company/service
* Introduce the agent (optional name)
* Ask how you can help
**Examples:**
```text wrap theme={null}
# Standard support:
"Thank you for calling Acme Software support. How can I help you today?"
# With agent name:
"Hi! This is Alex from Acme support. What can I help you with?"
# Friendly:
"Hey there! Thanks for calling. What brings you in today?"
# Department-specific:
"Acme Billing department, this is Sam. How can I assist you?"
```
***
### Outbound Greetings
You're calling the customer. You need to establish legitimacy and purpose quickly.
**Best practices:**
* Identify yourself and company
* State purpose of call
* Confirm you're speaking with right person
* Ask if it's a good time
**Examples:**
```text wrap theme={null}
# Appointment reminder:
"Hi, this is Alex from Acme Dental. I'm calling to confirm your appointment tomorrow at 2 PM. Is this still a good time for you?"
# Lead follow-up:
"Hello, this is Sarah from Acme Software. You recently requested information about our Enterprise plan. Do you have a few minutes to discuss how we can help?"
# Customer feedback:
"Hi! This is Jordan from Acme. You recently purchased our product, and I wanted to get your quick feedback. Do you have two minutes?"
# Payment reminder:
"Hello, this is the billing team at Acme. I'm calling about your account. Can we take care of that payment today?"
```
### Outbound Greeting Overrides
Expert Mode
Configure separate greetings for outbound calls in the **Greeting** section.
Turn on **Use different greeting for outbound calls**
Fixed Message, AI Generated, or Wait for Caller
Usually 0-0.5 seconds for outbound
Usually interruptible for natural feel
By default, outbound calls mirror your inbound greeting. Use overrides when you need different behavior for proactive calls.
***
## Using Variables in Greetings
### Contact Variables
Personalize fixed greetings with customer information:
| Need | Common source |
| --------------------- | ------------------------------------------- |
| Caller name | `contact.first_name` or `contact.full_name` |
| Caller email or phone | `contact.email` or `contact.phone` |
| Current date or time | `current_datetime` |
| Account-specific data | Dynamic Context variables from your own API |
The `current_datetime` variable is automatically available in greetings and prompts. For exact syntax, conditionals, filters, and fallback values, see [Template Syntax](/build/conversation/template-syntax).
### Conditional Greetings
Use conditional greetings only when the opening line must adapt to caller context, such as known contacts, premium tiers, or campaign paths:
Variables like `account_tier`, `company_name`, or custom fields must be provided through Dynamic Context. See [Dynamic Context API](/build/advanced/dynamic-context) for setup and [Template Syntax](/build/conversation/template-syntax) for writing the conditional template.
***
## Writing Great Greetings
Aim for under 10 seconds.
**Good:** "Hi! Thanks for calling Acme support. How can I help?"
**Too long:** "Hello and thank you for calling Acme Software technical support center. My name is Alex, and I'll be assisting you today..."
Use conversational language.
**Good:** "Hey! Thanks for calling. What can I help with?"
**Avoid:** "Greetings, valued customer. Please state the nature of your inquiry."
Make your purpose clear.
**Good:** "Hi! This is Alex from Acme Billing. I'm calling about your recent invoice."
**Avoid:** "Hello, this is Acme. I wanted to reach out to you today."
***
## Testing Greetings
### What to Test
* Is delay appropriate?
* Does agent start speaking too soon/late?
* Can customer interrupt if needed?
* Is greeting clear and understandable?
* Does it establish purpose?
* Is tone appropriate?
* Any awkward phrasing?
* Do variables render correctly?
* Are defaults working?
* Does conditional logic trigger properly?
* Under 10 seconds?
* Customer stays engaged?
* No unnecessary words?
### Testing Process
1. Click **Test Agent** in the agent editor
2. Choose **Web call**
3. Listen to greeting multiple times
4. Test with different contexts (VIP customer, different campaigns, etc.)
5. Ask colleagues for feedback
6. Refine based on actual call results
***
## Common Mistakes
**Avoid:** "Greetings. You have reached the Acme Corporation technical support division."
**Better:** "Hey! Thanks for calling Acme support. What can I help you with?"
**Avoid:** "Yo! What's up? What do you need?"
**Better:** "Hey there! Thanks for calling. What can I help with today?"
**Avoid:** "Hi, this is Alex. How can I help?"
**Better:** "Hey! This is Alex from Acme support. What brings you in today?"
**Avoid:** "Hi, is this Sarah? How are you today?"
**Better:** "Hi Sarah! This is Alex from Acme. You requested some info about our product - do you have a quick minute to chat?"
***
## Next Steps
Learn how to use variables in greetings and prompts
Master advanced prompting techniques
Test your greetings and refine
# Prompt
Source: https://docs.itellico.ai/build/conversation/prompt
Write your agent's prompt using the editor with variables, templates, and the writing guide
**Access:** Open an agent and go to **Prompt**.
## What the Prompt Does
The prompt defines your agent's personality, conversational style, objectives, and behavioral rules. This is the most important configuration for your agent's success.
Think of it like writing instructions for a new employee — tell them who they are, how to behave, what they can help with, and what to do when they're unsure.
Your prompt is sent to the AI model with every conversation turn. It tells the model:
* **Who it is** (role and identity)
* **How to behave** (tone, style, guardrails)
* **What to achieve** (objectives and goals)
* **When to use tools** (tools, knowledge, transfers)
***
## The Prompt Editor
The prompt editor is located in the **Prompt** tab of the agent editor. It includes several features to help you write better prompts faster.
### Editor Features
Open the template library, preview a prompt, edit the preview if needed, and use it as your agent's instructions
Insert dynamic variables from the toolbar or type `{{` to autocomplete available variables
Open the in-product guide for structure, examples, and common prompt-writing mistakes
Track prompt and knowledge-base tokens, expand the editor, and save or discard prompt changes inline
***
## Using the Writing Guide
The **Writing Guide** opens inside the Prompt tab. Use it when you want examples for structure, role definition, tone, guardrails, and common mistakes.
Start with the role, goal, conversation flow, boundaries, and escalation rules.
Click **Writing Guide** above the editor.
Check your prompt for clear sections, concrete if-then rules, sensitive-topic boundaries, and an escape hatch.
Use the inline save controls after editing.
***
## Using Variables
Variables let you insert dynamic data into your prompt. The platform replaces variables with real values at call start.
### Inserting Variables
1. Place your cursor where you want the variable
2. Click **Variables** in the editor toolbar
3. Select a variable from the list
4. The variable is inserted using template syntax: `{{ variable_name }}`
### Common Variables
| Variable | Description | Example Value |
| ---------------------------- | ---------------------- | ----------------------------------------------- |
| `{{ contact.first_name }}` | Caller's first name | "Sarah" |
| `{{ contact.last_name }}` | Caller's last name | "Johnson" |
| `{{ contact.email }}` | Caller's email address | "[sarah@example.com](mailto:sarah@example.com)" |
| `{{ contact.phone_number }}` | Caller's phone number | "+1234567890" |
| `{{ current_datetime }}` | Current date and time | "2026-01-30 14:30:00" |
### Example with Variables
```text wrap theme={null}
# Role
You are Alex, a customer support agent for Acme Software.
# Conversation Context
{% if contact.first_name %}
Address the customer as {{ contact.first_name }}.
{% else %}
Ask for the customer's name at the start of the conversation.
{% endif %}
Current date and time: {{ current_datetime }}
```
Variables use Jinja templating — conditionals (`{% if %}`), loops (`{% for %}`), and filters. See [Template Syntax](/build/conversation/template-syntax) for the full reference.
***
## Using Prompt Templates
Click **Templates** above the editor to open the template gallery. Templates provide proven starting points for common agent types.
**To apply a template:**
1. Click **Templates** in the editor
2. Preview templates to find one that matches your use case
3. Click **Use Template** to insert it into the editor
4. Replace placeholders with your specific details
5. Customize the prompt to match your requirements
Templates follow the same structure used by the built-in template gallery: Role, Objective, Response Format, Conversation Flow, and Escalation Triggers. Start with a template and adapt it rather than writing from scratch.
[See all available templates -->](/build/conversation/prompt-templates)
***
## Writing Guidance
This page documents the **Prompt** tab and editor controls. For full prompt-writing patterns, voice-specific examples, response-length guidance, guardrails, tool references, and testing techniques, use the [Prompt Engineering Guide](/build/conversation/prompt-engineering-guide).
Use this page when you need to know where to edit prompts, insert variables, apply templates, or save changes. Use the guide when you need help deciding what the prompt should say.
***
## What the Agent Already Knows
The platform automatically provides the following context. You do not need to include these in your prompt:
The complete conversation history between the agent and the contact, including all messages and tool calls.
Contact data like name, email, and phone number. Access via variables like `{{ contact.first_name }}`.
When relevant, the platform automatically retrieves and includes content from your knowledge bases.
The platform tells the agent what tools are available (transfer, book appointment, custom API tools). You just need to explain when to use them.
The agent automatically knows the current date, time, and timezone.
***
## Before You Save
Use the editor controls to save only after you have checked the basics:
* variables resolve to the data you expect
* tool names match the names configured in the **Tools** tab
* templates have been customized for your business
* the prompt is short enough to maintain
* the agent has been tested in [Chat or Web call](/test/web-simulator)
For the full writing checklist, see [Prompt Engineering Guide](/build/conversation/prompt-engineering-guide).
***
## Next Steps
Discover advanced techniques for writing effective prompts
Browse pre-built templates for common use cases
Learn how to personalize messages with dynamic content
Learn how to test your agent effectively
# Prompt Engineering Guide
Source: https://docs.itellico.ai/build/conversation/prompt-engineering-guide
Write effective prompts for voice AI agents
Your prompt is the primary way you configure how your agent behaves. This guide covers how to structure it, what to include, and what makes voice prompts different from text prompts.
Just getting started? See [Prompt Basics](/build/conversation/prompt) first.
***
## How Voice Differs from Text
Voice agents process language differently than chatbots. Keep this in mind when writing.
| Text AI | Voice AI |
| ----------------------------------------- | ------------------------------- |
| User reads at their own pace | Listener processes in real-time |
| Long responses are acceptable | Long responses lose the caller |
| Formatting (bold, lists) aids readability | No formatting — only speech |
| User can re-read | Caller can't "re-listen" easily |
| Typos are minor | Mispronunciations break trust |
**Key principle:** Write instructions that produce short, spoken responses — not written ones.
***
## Quick Start: The 5-Minute Prompt Formula
Start here if you're writing a prompt from scratch.
Give your agent a clear identity and personality.
```
You are [Name], a [role] at [Company].
Your personality is [trait 1], [trait 2], and [trait 3].
```
Define the specific, measurable outcome.
```
Your objective is to [specific measurable outcome].
```
Map out the key steps in order.
```
Conversation Flow:
1. Greeting — confirm identity and thank them for calling
2. Permission — ask if they have a few minutes
3. Discovery — understand their needs with open-ended questions
4. Action — book, answer, or transfer using the appropriate tool
5. Closing — confirm next steps and say goodbye
```
Define what your agent should never do and when to escalate.
```
Never:
- Discuss pricing (transfer to sales team)
- Make promises about features or timelines
- Continue if the caller is hostile (end call politely)
Transfer to a human when:
- Caller requests a manager
- Technical issue is beyond your knowledge
- Caller is frustrated after two attempts to help
```
Prepare for common responses with exact wording.
```
Objection Handling:
- "Not interested" → "I understand. Can I ask what changed since you requested info?"
- "Too expensive" → "I hear you. Let's discuss what features matter most."
- "Need to think about it" → "Of course. What specific concerns should I address?"
```
***
## Recommended Prompt Structure
Use this as a template when building out the full prompt.
| Section | Purpose | Tips |
| ---------------------------- | -------------------------------------- | ----------------------------------------------------- |
| **Role & Tone** | Who the agent is and how it sounds | Include brand tone, languages, pronunciation notes |
| **Primary Goal** | The desired outcome | Use bullets or numbered lists for clarity |
| **Conversation Flow** | Core steps in order | Include prerequisites, loops, and exit criteria |
| **Information Capture** | Required fields and confirmation steps | Highlight how to verify before proceeding |
| **Tool Triggers** | When and how to use each tool | Use exact tool names matching the UI |
| **Escalations & Guardrails** | Forbidden topics and hand-off rules | Pair each rule with the relevant transfer or end tool |
| **Closure** | How to wrap up and confirm next steps | Include any follow-up you promise the caller |
Keeping these sections in a consistent order makes prompts easier to maintain and review.
***
## Response Length
The most common voice AI mistake is responses that are too long. A response that reads fine as text can take 15+ seconds to speak — callers lose attention, interrupt, or hang up.
### What to write
```
Keep responses to 1-3 sentences for most answers.
Only give detail when the caller explicitly asks for more.
When listing options, offer a maximum of 3 at a time, then ask if they'd like to hear more.
```
### What to avoid
```
❌ "Provide comprehensive, detailed responses to all questions."
❌ "List all available options when asked."
❌ "Include disclaimers and legal language in your responses."
```
### Pacing for important information
```
When giving dates, numbers, or addresses:
- Slow down and speak clearly
- Repeat key details once
- Ask the caller to confirm: "Did I get that right?"
```
***
## Natural Speech Patterns
### Conversational flow
Guide the agent to use natural acknowledgment phrases that match how a person would speak:
```
- "Let me check that for you" (before tool calls)
- "Got it" or "Understood" (acknowledging input)
- "Just to make sure I have this right..." (before confirming details)
- "One moment while I look that up" (during knowledge retrieval)
```
### Avoid written language
Some phrases read fine but sound robotic when spoken:
| Written (Avoid) | Spoken (Prefer) |
| ------------------------------------ | ------------------------ |
| "As per our policy..." | "Our policy is..." |
| "I would like to inform you that..." | "Just so you know\..." |
| "Please be advised that..." | "I should mention..." |
| "In reference to your inquiry..." | "About your question..." |
| "Affirmative" | "Yes, that's right" |
### Numbers and dates
```
Phone numbers: group in pairs — "forty-three, seven-twenty, one-two-three"
Dates: use natural format — "Tuesday, March fifth" not "2026-03-05"
Prices: say the currency — "forty-five euros" not "45.00"
Email addresses: spell clearly — "john at example dot com"
```
***
## Conversation Structure
### Opening
Keep it short. The caller wants to get to their reason for calling.
```
Good: "Hi, this is [Name] at [Company]. How can I help you?"
Bad: "Hello and welcome to [Company]. My name is [Name] and I'm here to assist you
with any questions, concerns, or requests you may have today."
```
### Turn-taking
```
After giving information, ask a follow-up question to keep the conversation moving.
Don't give a monologue — pause after each key point and check if the caller has questions.
If the caller interrupts, stop and listen — their input takes priority.
```
### Closing
```
1. Confirm the caller's needs are met: "Is there anything else I can help with?"
2. If not: "Great, thanks for calling [Company]. Have a good day!"
3. Don't recap everything — just the key action items.
```
***
## Handling Difficult Moments
### When the agent doesn't know
```
If you don't have the information to answer:
- Say: "I don't have that, but let me connect you with someone who does."
- Never guess or make up answers.
- Never say "As an AI, I cannot..."
```
### When the caller is frustrated
```
If the caller seems upset:
- Acknowledge: "I understand this is frustrating."
- Don't be defensive or overly apologetic.
- Focus on solving their problem.
- Offer to transfer to a human if needed.
```
### When the caller goes off-topic
```
If the conversation goes off-topic:
- Redirect: "I'd love to help with that, but I'm set up to help with [scope].
Can I help you with anything related to [scope]?"
```
### When collecting sensitive information
```
When collecting phone numbers, email addresses, or account numbers:
- Ask for each piece of information separately.
- Repeat back what you heard and ask for confirmation.
- If the caller provides a number too quickly, ask them to repeat it slowly.
```
***
## Writing Principles
Voice agents need conversational language, not corporate speak.
**Avoid:**
```
"I am contacting you regarding..."
"Per our previous correspondence..."
```
**Better:**
```
"I'm calling about..."
"Following up on..."
```
Test: read it aloud. If it sounds stiff, simplify it.
Vague instructions leave too much room for inconsistency. Give enough detail that the agent knows what you mean — without scripting every word verbatim.
**Avoid:**
```
"Introduce yourself professionally"
"Explain the benefits"
```
**Better:**
```
"Greet the caller by name, introduce yourself as [Agent Name], and state the purpose of the call"
"Mention that the product reduces manual reporting time"
```
Scripting exact sentences can help for critical moments like greetings or legal disclosures. For the rest, describe the intent and let the agent find natural phrasing.
Handle different scenarios with conditional logic.
```
If customer says yes → continue to step 2
If customer says no → ask: "When would be better?"
If customer is hostile → say: "Let me transfer you to someone who can help."
```
Plan for success, objections, and edge cases.
Help the agent move smoothly between conversation stages.
```
"Now that we've covered X, let me share Y..."
"Great question. Before I answer that, can I ask..."
"That makes sense. Based on what you've told me..."
```
Always verify critical information before taking action.
```
Before booking:
"Let me confirm — that's Tuesday, March 15th at 2 PM. Is that correct?"
Before transferring:
"Just to make sure, you need help with [issue]. Correct?"
```
***
## Referencing Tools
Always reference tools by the **exact name** configured in the UI. The agent uses that name to trigger the tool — ambiguous wording can break execution.
### Example: Booking tool
```text wrap theme={null}
When the caller confirms they want to schedule, call the `Schedule Dental Checkup` booking tool with:
- `date` and `time` gathered during the conversation
- Ask for email if `contact.email` is missing; otherwise use contact email
If the tool returns an error:
1. Apologize: "I'm sorry, I'm having trouble booking that time slot"
2. Offer two alternative slots from the same day
3. Retry once with the alternative
4. If the second attempt fails, trigger the `Transfer to Front Desk` tool
```
### Example: Transfer tool
```text wrap theme={null}
Use the `Transfer to Tier 2 Support` tool when:
- Issue requires escalation beyond your capabilities
- Caller explicitly requests a human agent
- Legal or billing questions arise
Before transferring:
1. Explain why: "I'd like to connect you with a specialist who can help with this"
2. Ask permission: "May I transfer you now?"
3. If they agree, trigger the transfer tool
```
***
## Variables and Conditional Content
Use Jinja templating to personalize your prompt with dynamic values from contacts and context.
```jinja wrap theme={null}
{% if contact.first_name %}
Greet them by name: "Hi {{ contact.first_name }}, thanks for calling!"
{% else %}
Use a general greeting: "Hi there, thanks for calling!"
{% endif %}
{% if contact.email %}
You have the customer's email on file: {{ contact.email }}
{% else %}
Ask for their email address before proceeding with the booking.
{% endif %}
```
See [Variable Sources](/build/conversation/variable-sources) and [Template Syntax](/build/conversation/template-syntax) for the full reference.
***
## Testing Your Prompts
1. **Read it aloud** — if it sounds unnatural spoken, it will sound worse from the agent
2. **Time test responses** — responses over 15 seconds need shortening
3. **Test interruptions** — speak while the agent is talking to check handling
4. **Test edge cases** — ask questions outside scope, give wrong information, stay silent
5. **Review recordings** — listen to actual calls, not just transcripts
***
## Next Steps
Personalize prompts with dynamic values
Fix mispronounced words
Control conversation timing
# Prompt Templates
Source: https://docs.itellico.ai/build/conversation/prompt-templates
Browse, preview, and apply pre-built prompt templates for common agent use cases
## What Are Prompt Templates
The Prompt Template Gallery provides pre-built prompts for common agent use cases. Instead of writing from scratch, browse the gallery, preview a template, and apply it to your agent in one click.
The gallery includes global templates plus any team-specific templates enabled for your account. In the dashboard, templates are read-only starting points: apply one to copy its content into the prompt editor, then customize the copied prompt for the agent.
***
## Why Use Templates
Go from zero to a working agent in minutes instead of writing prompts from scratch
Follow the same tested format as the built-in templates: Role, Objective, Response Format, Conversation Flow, and Escalation Triggers
Ensure all agents across your account follow the same communication standards
Create effective agents quickly without prompt engineering experience
***
## Browsing the Gallery
### Access the Gallery
You can open the template gallery from two places:
1. **From the prompt editor** -- Click **Templates** while editing an agent's prompt
2. **From new-agent setup** -- Choose a template when creating an agent, then refine it in the Prompt tab
### Filter by Category
Use the category filters to narrow down templates:
| Category | Templates For |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **Core Templates** | Receptionist, after-hours routing, FAQ support, lead qualification, appointment booking, feedback, outreach, and information gathering |
| **Industry** | Real estate, healthcare, home services, mortgage, solar, car dealership, insurance, education, and hospitality templates |
| **Professional Services** | Legal and financial-advisory templates |
| **Services** | Service-business templates |
***
## Previewing a Template
Click any template card to open a full preview. The preview shows:
* **Template name and description** -- What use case it is designed for
* **Tags** -- Search and use-case labels for the template
* **Editable prompt text** -- The complete prompt in the same prompt editor used by agents
Read through the full prompt before applying. Understanding the template's structure helps you customize it effectively for your specific needs.
***
## Template Structure
Built-in templates use the same core structure:
| Section | Purpose |
| ----------------------- | --------------------------------------------------------------------------------------------------- |
| `# Role` | Defines who the agent is, who it represents, and the personality it should use |
| `# Objective` | States the main outcome the agent should achieve |
| `# Response Format` | Sets response length, question style, and voice-specific formatting rules |
| `# Conversation Flow` | Breaks the call into phases with clear goals and branch behavior |
| `# Escalation Triggers` | Lists situations where the agent should transfer, create follow-up, or stop handling the request |
| Reference sections | Adds use-case-specific guidance, such as common questions, objection handling, routing, or policies |
Use this structure when you customize a template or write one from scratch. It matches the format used by the prompt templates seeded in the product.
***
## Applying a Template
### To a New Agent
When creating a new agent, choose a template in the create-agent flow or open the **Prompt** tab in the [Agent Editor](/build/getting-started/agent-editor) and click **Templates**. Select a template and the editor inserts it automatically.
### To an Existing Agent
Navigate to your agent and open **Prompt**
Opens the template gallery
Preview and click **Use Template**
Adjust the template text before applying it
Replace placeholder values like `{{company_name}}` and `{{business_hours}}` with your details, or provide them through Dynamic Context
Edit the template to match your specific requirements, then save
Applying a template does not create a permanent link. Future template changes do not update agents that already used it.
***
## Built-in Template Examples
Covers warm greeting, issue identification, troubleshooting flow, escalation rules, and closing. Includes placeholders for company name, support hours, and escalation contacts.
Structured around BANT (Budget, Authority, Need, Timeline) qualification. Includes consultative selling guidelines, objection handling notes, and next-step routing for qualified and unqualified leads.
Covers service selection, availability checking, information collection, confirmation, and cancellation/rescheduling policies. Designed to work with the Cal.com booking action.
NPS survey flow with score collection, follow-up questions based on score range, recovery workflow for detractors, and closing. Includes structured data extraction.
Value-first approach for outbound calls. Covers introduction, value proposition, interest gauging, objection handling, and next-step scheduling. Designed for non-pushy engagement.
Patient information collection, symptom gathering, appointment scheduling, and insurance verification flow. Includes HIPAA (Health Insurance Portability and Accountability Act)-aware language guidelines.
***
## Placeholder Syntax
Templates use double curly braces for values that should be filled in when the template is applied. Replace placeholder values directly in the prompt, or provide matching variables through [Dynamic Context](/build/advanced/dynamic-context).
```text wrap theme={null}
# Role
You are {{agent_name}}, a {{agent_role}} for {{company_name}}. You are {{agent_tone}}.
# Objective
{{primary_goal}}
# Conversation Flow
Working hours are {{business_hours}}.
```
### Common Placeholders
| Placeholder | Description |
| ------------------------ | --------------------------------- |
| `{{company_name}}` | Organization or business name |
| `{{agent_role}}` | Agent's role description |
| `{{business_hours}}` | Operating hours |
| `{{primary_goal}}` | Main objective for the agent |
| `{{escalation_contact}}` | Who to transfer to for escalation |
***
## Best Practices
Templates provide structure. Add your company-specific details, tone adjustments, and edge-case handling on top.
Name placeholders clearly: `{{cancellation_policy}}` is better than `{{policy1}}`.
Keep templates focused. A customer support template and a sales template should be separate.
Apply templates to a test agent and run conversations to verify they work as expected before sharing with your team.
***
## Next Steps
Learn prompt writing best practices and editor features
Apply advanced prompting techniques
Use runtime variables in your prompts
Build an agent step by step
# Conversation Data Flow
Source: https://docs.itellico.ai/build/conversation/runtime-data-flow
See how values move from contacts and context into live tools and post-call automation
This page shows how values move through a conversation.
It answers three practical questions:
* What data is available before the call starts?
* What data can the agent collect or use during the call?
* What data only becomes available after the call ends?
## The Data Flow
```mermaid theme={null}
graph LR
A[Contact data] --> D[Live conversation]
B[Dynamic Context] --> D
C[Built-in system variables] --> D
D --> E[Tool inputs]
E --> F[Tool result used in current conversation]
D --> G[Transcript and events]
G --> H[Goals and gathered insights]
H --> I[Post-call notifications and tasks]
```
## Stage 1: Data Available Before The Call
This data can be used in the greeting and prompt immediately.
### Contact data
If the caller matches a known contact, these values are available before the call starts.
Examples:
* `{{contact.first_name}}`
* `{{contact.email}}`
* `{{contact.phone_number}}`
### Dynamic Context
[Dynamic Context](/build/advanced/dynamic-context) lets you fetch JSON from your own systems before the conversation begins.
Examples:
* `{{account_tier}}`
* `{{open_tickets}}`
* `{{last_order_status}}`
### Built-in system values
These exist in every conversation.
Examples:
* `{{agent_uuid}}`
* `{{current_datetime}}`
* `{{direction}}`
* `{{timezone}}`
## Stage 2: Data Collected During The Call
During the conversation, the agent can gather details that were not known at the start.
Typical examples:
* order number
* preferred appointment date
* department choice
* issue description
This collected information is usually used in one of two ways:
* to continue the conversation more accurately
* to supply the inputs required by a tool
## Stage 3: Tool Inputs And Tool Results
Tools use the live conversation state.
That means the agent can combine:
* contact fields
* pre-call context
* built-in variables
* values collected from the caller
### What tools can do with that data
| Tool type | Typical input source | Typical outcome |
| ----------------- | --------------------------------------- | ---------------------------------------------------------------------- |
| **Transfer** | Caller intent, department, urgency | Routes the conversation to another destination |
| **Booking** | Date, time, contact details | Creates or updates an appointment |
| **Custom Action** | Collected values plus context variables | Calls your external API and uses the response in the live conversation |
| **Web Search** | Current question | Returns external information for the current answer |
### Important limitation
Custom action results are part of the current conversation flow. They help the agent answer the caller or decide the next step.
Do **not** treat them as a general post-call variable store. For reusable values after the conversation ends, use [Gather Insights](/build/analytics/gather-insights) and [Post-Call Automation](/build/analytics/post-call-automation).
## Stage 4: Data Created After The Call
After the conversation ends, the platform can analyze the transcript and events.
This stage creates:
* goal results
* gathered insights
* `{{dyn_*}}` variables used in post-call notifications
* follow-up tasks and downstream automations
Examples:
* `{{dyn_issue_summary}}`
* `{{dyn_next_steps}}`
* `{{dyn_appointment_date}}`
These values are useful for:
* notification emails
* follow-up tasks
* reporting
* downstream systems connected through webhooks
They are **not** available to the agent during the finished call, because the analysis happens afterward.
## What Can Be Used Where
| Location | Contact data | Dynamic Context | Built-in system values | Live collected values | `{{dyn_*}}` post-call values |
| -------------------------- | -------------------- | --------------- | ------------------------ | ----------------------------------------- | ---------------------------- |
| **Greeting** | Yes | Yes | Yes | No | No |
| **Prompt** | Yes | Yes | Yes | No direct template usage before collected | No |
| **Live tools** | Yes | Yes | Yes | Yes | No |
| **Notification templates** | Customer fields only | No | Conversation fields only | No direct live-call state | Yes |
Notification templates do not reuse the live-call prompt context. Use post-call variables such as `{{customer_name}}`, `{{customer_email}}`, `{{customer_number}}`, `{{conversation_date}}`, `{{conversation_direction}}`, `{{conversation_url}}`, and `{{dyn_*}}`.
## Recommended Pattern
Use the right data source for the right job:
* use **contacts** for stable customer profile data
* use **Dynamic Context** for fresh business-system context before the call
* use **tool inputs** for live actions during the call
* use **Gather Insights** for structured analysis after the call
That keeps your system predictable and easier to debug.
## Common Mistakes
Use contact data, Dynamic Context, live tool inputs, and post-call insights for different jobs. They are not interchangeable.
Dynamic Context runs before the conversation starts. If you need fresh information during the call, use a live tool such as a [Custom Action](/build/tools/custom-api-actions).
`{{dyn_*}}` values are created after the call ends. Use them in [Post-Call Automation](/build/analytics/post-call-automation), not in the greeting or prompt.
## Next Steps
See each source individually
Add pre-call context from your systems
Use live data during the conversation
Turn post-call values into follow-up actions
# Template Syntax
Source: https://docs.itellico.ai/build/conversation/template-syntax
Jinja2 template syntax reference for personalizing agent prompts with dynamic data
## How Variables Work
Variables let you personalize your agent's prompt with dynamic data. itellicoAI uses [Jinja2](https://jinja.palletsprojects.com/en/stable/templates/) for templating — see the official docs for the full language reference.
***
## Variable Sources
### Built-in Contact Variables
If a contact exists in your itellicoAI account, these 5 fields are automatically available:
```jinja wrap theme={null}
{{ contact.first_name }}
{{ contact.last_name }}
{{ contact.full_name }}
{{ contact.email }}
{{ contact.phone_number }}
```
**Example:**
```jinja wrap theme={null}
Hello {{ contact.first_name }}!
Your email is {{ contact.email }}.
```
✅ No setup needed - works automatically if contact exists
***
### Everything Else: Dynamic Context API
**All other data** must come from your Dynamic Context connection (set up by your development team) as variables you can use directly. See [Dynamic Context API](/build/advanced/dynamic-context).
You can return any fields you want. For example:
```jinja wrap theme={null}
{{ language }}
{{ account_tier }}
{{ company_name }}
{{ order_id }}
{{ customer_since }}
{{ any_field_you_need }}
```
**Example - Your API returns:**
```json theme={null}
{
"language": "de",
"account_tier": "premium",
"company_name": "Acme Corp"
}
```
**Then your agent can use:**
```jinja wrap theme={null}
{% if language == "de" %}
Guten Tag! Sie arbeiten für {{ company_name }}.
{% endif %}
{% if account_tier == "premium" %}
Priority support available.
{% endif %}
```
⚙️ Requires setup - see [Dynamic Context API](/build/advanced/dynamic-context)
***
## Available Variables
### Built-in Contact Variables
These variables are automatically available from your itellicoAI contacts:
```jinja wrap theme={null}
{{ contact.first_name }}
{{ contact.last_name }}
{{ contact.full_name }}
{{ contact.email }}
{{ contact.phone_number }}
```
**Example usage:**
```text wrap theme={null}
You are speaking with {{ contact.first_name }} {{ contact.last_name }}.
Their email is {{ contact.email | default("not provided") }}.
Their phone number is {{ contact.phone_number }}.
```
**Custom fields** are NOT nested under `contact.` — they're variables you can use directly like `{{ language }}` or `{{ account_tier }}`. You must provide these through your Dynamic Context connection (set up by your development team). See [Dynamic Context API](/build/advanced/dynamic-context).
### Dynamic Context Variables
Any custom data you provide through your Dynamic Context connection (set up by your development team) becomes available as variables you can use directly:
```jinja wrap theme={null}
{{ account_tier }}
{{ language }}
{{ company_name }}
{{ preferred_contact_method }}
```
**Example with custom variables:**
```jinja wrap theme={null}
{% if account_tier == "premium" %}
As a premium customer, you have priority support.
{% endif %}
{% if language == "de" %}
Sprechen Sie Deutsch.
{% endif %}
Company: {{ company_name | default("valued customer") }}
```
Set up a Dynamic Context connection (requires developer setup) to provide custom variables. Any JSON fields you return become variables you can use directly (e.g., `{"language": "de"}` → `{{ language }}`).
### Date & Time
The current datetime is automatically available as `current_datetime` in both **greetings and prompts**:
```jinja wrap theme={null}
{{ current_datetime }} # Current timestamp
{{ current_datetime.hour }} # Current hour (0-23)
{{ current_datetime | datetime("%H:%M") }} # Format with datetime filter
{{ current_datetime | datetime("%A") }} # Day name (Monday, Tuesday, etc.)
```
**Example usage:**
```jinja wrap theme={null}
{% if current_datetime.hour < 12 %}
Good morning, {{ contact.first_name }}!
{% elif current_datetime.hour < 17 %}
Good afternoon, {{ contact.first_name }}!
{% else %}
Good evening, {{ contact.first_name }}!
{% endif %}
```
Use `current_datetime` to build advanced time-based logic like business hours routing, time-of-day greetings, or scheduling constraints without needing external data sources.
Use the `datetime` filter for formatting. Direct date formatting methods are not available. Use the datetime filter shown above instead.
***
## Conditional Logic
### If Statement
```jinja wrap theme={null}
{% if condition %}
This shows if condition is true
{% endif %}
```
### If-Else
```jinja wrap theme={null}
{% if account_tier == "VIP" %}
Provide VIP service
{% else %}
Provide standard service
{% endif %}
```
### If-Elif-Else
```jinja wrap theme={null}
{% if account_value > 10000 %}
Enterprise tier customer
{% elif account_value > 1000 %}
Professional tier customer
{% else %}
Standard tier customer
{% endif %}
```
### Real-World Example
```jinja wrap theme={null}
{% if language == "es" %}
Respond in Spanish. Use formal addressing (usted).
{% elif language == "fr" %}
Respond in French. Use formal addressing (vous).
{% elif language == "de" %}
Respond in German. Use formal addressing (Sie).
{% else %}
Respond in English. Use friendly, conversational tone.
{% endif %}
```
***
## Filters
Filters transform variable values.
### Common Filters
**default:** Provide fallback value
```jinja wrap theme={null}
{{ contact.first_name | default("there") }}
```
**upper:** Convert to uppercase
```jinja wrap theme={null}
{{ contact.last_name | upper }}
```
**lower:** Convert to lowercase
```jinja wrap theme={null}
{{ contact.email | lower }}
```
**title:** Title case
```jinja wrap theme={null}
{{ contact.first_name | title }}
```
**length:** Get length
```jinja wrap theme={null}
{% if contact.phone_number | length > 10 %}
International number detected
{% endif %}
```
**datetime:** Format datetime objects
```jinja wrap theme={null}
{{ current_datetime | datetime("%H:%M") }} # 14:30
{{ current_datetime | datetime("%d.%m.%Y") }} # 24.01.2025
{{ current_datetime | datetime("%A, %B %d") }} # Monday, January 24
```
### Chaining Filters
```jinja wrap theme={null}
{{ contact.first_name | default("Friend") | title }}
```
***
## Loops
Iterate over lists (advanced use case):
```jinja wrap theme={null}
{% for item in list_variable %}
Process {{ item }}
{% endfor %}
```
***
## Practical Examples
### Example 1: Personalized Greeting
```jinja wrap theme={null}
{% if contact.first_name %}
Hello {{ contact.first_name }}, great to hear from you!
{% else %}
Hello! Thanks for calling!
{% endif %}
{% if contact.email %}
I have your contact information on file, so I can send you a confirmation after our call.
{% endif %}
```
### Example 2: Custom Business Logic (Requires Dynamic Context API)
```jinja wrap theme={null}
{% if contact.first_name %}
Hello {{ contact.first_name }}, thanks for calling {{ company_name }}!
{% else %}
Hello! Thanks for calling {{ company_name }}!
{% endif %}
{% if account_tier == "premium" %}
As a premium customer, you have priority support. How can I help you today?
{% else %}
How can I help you today?
{% endif %}
```
Variables like `company_name` and `account_tier` must be provided by your Dynamic Context connection (set up by your development team). See [Dynamic Context API](/build/advanced/dynamic-context).
### Example 3: Time-Based Prompt Logic
```jinja wrap theme={null}
Current time: {{ current_datetime | datetime("%H:%M") }}
{% if current_datetime.hour >= 17 or current_datetime.hour < 9 %}
Outside normal business hours. If customer needs immediate assistance:
"Our regular support hours are 9 AM to 5 PM. For urgent issues, I can take your information and have someone call you first thing in the morning, or you can reach our emergency line at [number]."
{% else %}
Within business hours. Full support available.
{% endif %}
```
### Example 4: Multi-Language Support (Requires Dynamic Context API)
```jinja wrap theme={null}
Customer's preferred language: {{ language | default("en") }}
{% if language == "es" %}
Language: Spanish
Greeting: "¡Hola!"
Tone: Formal (use "usted")
Knowledge collection: "FAQ Español"
{% elif language == "de" %}
Language: German
Greeting: "Guten Tag!"
Tone: Formal (use "Sie")
Knowledge collection: "FAQ Deutsch"
{% else %}
Language: English
Greeting: "Hello!"
Tone: Friendly and conversational
Knowledge collection: "FAQ English"
{% endif %}
```
### Example 5: Account Tier Logic
```jinja wrap theme={null}
Account value: ${{ account_value | default(0) }}
{% if account_value >= 50000 %}
ENTERPRISE CUSTOMER
- Offer white-glove service
- Direct access to account manager
- Priority response times
- Custom solutions available
{% elif account_value >= 10000 %}
PROFESSIONAL CUSTOMER
- Premium support tier
- Dedicated support team
- Priority queue
{% else %}
STANDARD CUSTOMER
- Standard support
- Knowledge base first
- Transfer for complex issues
{% endif %}
```
***
## Testing Variables
### Test with Different Data
1. Open the agent's **Test Agent** menu and choose **Chat**, **Web call**, or **Phone call**
2. Test scenarios with different contact data:
* With first name vs without
* VIP vs standard customer
* Different languages
* Different timezone
### Common Issues
| Issue | Cause | Fix |
| ----------------------- | ------------------------- | ------------------------------------------ |
| Variable shows as blank | No default provided | Add `\| default("fallback")` |
| Syntax error | Typo in variable name | Check spelling against available variables |
| Condition not working | Wrong comparison operator | Use `==` not `=` |
| Filter not applying | Filter doesn't exist | Check filter name spelling |
***
## Best Practices
Never assume a variable has a value. Always provide defaults.
❌ **Bad:**
```jinja theme={null}
Hello {{ contact.first_name }}!
```
✅ **Good:**
```jinja theme={null}
Hello {{ contact.first_name | default("there") }}!
```
Complex nested conditions are hard to debug. Keep it simple.
❌ **Too complex:**
```jinja theme={null}
{% if account_tier == "VIP" and account_value > 10000 and region == "US" %}
```
✅ **Simpler:**
```jinja theme={null}
{% if account_tier == "VIP" %}
```
Test with:
* Missing data (all fields empty)
* Unexpected values
* Very long strings
* Special characters
***
## Next Steps
See variables in action with complete examples
Test your variables work correctly
# Variable Sources
Source: https://docs.itellico.ai/build/conversation/variable-sources
Understand where variables come from, when they're available, and where you can use them
Variables let you personalize your agent's greeting, prompt, and notifications with real data. This page explains where variables come from, when they become available, and where you can use them.
If you want the full lifecycle view, including how live tool inputs differ from post-call values, read [Conversation Data Flow](/build/conversation/runtime-data-flow).
## The Four Sources
| Source | When it's available | Example variables |
| ---------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| **Contact data** | Before the call starts (if the caller matches a contact) | `{{contact.first_name}}`, `{{contact.email}}`, `{{contact.phone_number}}` |
| **Pre-call context** | Before the call starts (fetched from your API via [Dynamic Context](/build/advanced/dynamic-context)) | `{{account_tier}}`, `{{open_tickets}}`, `{{last_order_status}}` |
| **Built-in system** | Always available | `{{current_datetime}}`, `{{timezone}}`, `{{direction}}`, `{{agent_uuid}}` |
| **Post-call insights** | After the call ends (AI extracts from transcript) | `{{dyn_appointment_date}}`, `{{dyn_issue_summary}}`, `{{dyn_caller_sentiment}}` |
## Contact Variables
Available automatically when the caller's phone number matches a contact in your system.
```
Hi {{contact.first_name | default("there")}}, thanks for calling.
```
Use `| default("fallback")` so the greeting still works when no contact is matched.
**Available fields:** `contact.first_name`, `contact.last_name`, `contact.full_name`, `contact.email`, `contact.phone_number`
## Pre-Call Context (Dynamic Context)
Expert Mode
The platform fetches this from your API before the conversation starts. Configure the endpoint in **Call Flow → Before Call**.
Your API receives the caller's number and agent ID, and returns JSON. Every field in the response becomes a variable.
```
{% if account_tier == "enterprise" %}
This is a priority customer. Provide white-glove support.
{% else %}
Standard support flow.
{% endif %}
```
[Set up Dynamic Context →](/build/advanced/dynamic-context)
## Built-In System Variables
Always available in every conversation:
| Variable | What it contains |
| ---------------------- | ------------------------------------------------------- |
| `{{current_datetime}}` | Current date and time |
| `{{timezone}}` | Agent's configured timezone |
| `{{direction}}` | `inbound` or `outbound` |
| `{{medium}}` | Conversation channel, such as `voice`, `web`, or `test` |
| `{{agent_uuid}}` | The agent's unique ID |
| `{{agent_number}}` | The phone number the agent is using |
| `{{contact_number}}` | The caller's phone number |
## Post-Call Insight Variables
Available in [Notifications](/build/analytics/post-call-automation) after the call ends. AI extracts these from the transcript.
Type `{{dyn_` followed by a descriptive name:
```
{{dyn_appointment_date}} → AI finds the date mentioned
{{dyn_issue_summary}} → AI summarizes the problem
{{dyn_next_steps}} → AI identifies agreed action items
```
These only work in notification email templates, not in the agent's prompt (the call is already over).
## Where You Can Use Variables
| Location | Contact | Pre-call | System | Post-call |
| ----------------------- | -------------------- | -------- | ------------------------ | --------- |
| **Greeting message** | Yes | Yes | Yes | No |
| **Prompt** | Yes | Yes | Yes | No |
| **Notification emails** | Customer fields only | No | Conversation fields only | Yes |
Notification emails use a separate post-call context. They do not receive live-call variables like `{{contact.first_name}}`, Dynamic Context fields, `{{current_datetime}}`, or `{{timezone}}` directly. Use notification variables such as `{{customer_name}}`, `{{customer_email}}`, `{{customer_number}}`, `{{conversation_date}}`, `{{conversation_direction}}`, `{{conversation_summary}}`, and `{{dyn_*}}`.
## Syntax
Variables use Jinja syntax: `{{ variable_name }}`
**Filters:**
* `{{ contact.first_name | default("there") }}` — fallback value
* `{{ current_datetime | datetime("%H:%M") }}` — format dates
**Conditionals:**
```
{% if direction == "outbound" %}
You are making an outbound call to {{contact.first_name}}.
{% else %}
A customer is calling in.
{% endif %}
```
## Debugging Variables
If a variable isn't working:
1. Check the source — is the contact matched? Is Dynamic Context returning data?
2. Check spelling — variable names are case-sensitive
3. Check the fallback — use `| default("...")` for variables that might be empty
4. Test with different scenarios — inbound vs outbound, known vs unknown caller
## Next Steps
See how values move through the conversation lifecycle
Reference the full Jinja syntax and advanced patterns
Set up pre-call data fetching
Use post-call variables in email templates
Personalize greetings with variables
# Agent Editor
Source: https://docs.itellico.ai/build/getting-started/agent-editor
Configure every aspect of your AI voice agent
The Agent Editor is where you configure everything about your agent. Open it by clicking any agent from the **AI Agents** list.
The top bar shows the agent name, cost and latency estimates, **Test Agent** (test right in the browser), and **Share** (create a demo link so others can try your agent). The actions menu includes **Duplicate** and **Archive**.
***
## General
Set up the basics — agent name, timezone, language, AI model, voice, and background sounds.
[Learn more →](/build/basic-config/agent-identity)
***
## Prompt
Write the prompt that tells your agent how to behave — its role, rules, tone, and conversation flow.
[Learn more →](/build/conversation/prompt)
***
## Knowledge
Connect knowledge bases so your agent can answer questions using your business content — FAQs, policies, product info, and more.
[Learn more →](/build/knowledge/architecture)
***
## Tools
Add actions your agent can take during a call — transfer to a person, book an appointment, call an API, or search the web.
[Learn more →](/build/tools/overview)
***
## Call Flow
Control how calls start, flow, and end — greeting message, turn-taking speed, silence handling, and hang-up behavior.
[Learn more →](/build/conversation/greeting-messages)
***
## Analytics
Define what success looks like — set goals, add insight questions, and track results across conversations.
[Learn more →](/build/analytics/gather-insights)
***
## Notifications
Set up automatic emails and follow-up tasks that trigger after calls based on outcomes you define.
[Learn more →](/build/analytics/post-call-automation)
***
## Privacy
Configure pre-call announcements, data retention, and call recording. This is also where you control whether calls are recorded, how long recordings are kept, and whether callers can opt out of recording.
[Learn more →](/build/advanced/data-retention)
***
## A Good First Version
You don't need to configure everything before testing. A solid first version includes:
* A clear agent name and voice
* A prompt covering the main use case
* One knowledge base if factual answers matter
* Only the tools you actually need
* One test cycle before you deploy
***
## Next Steps
Follow step-by-step agent creation
Discover tips for writing effective prompts
Explore worked examples: receptionist, booking, support, sales
Connect to phone numbers, campaigns, or your website
# Create Your First Agent
Source: https://docs.itellico.ai/build/getting-started/create-first-agent
Create an agent and configure it in the Agent Editor
## Before You Start
You need:
* An active itellicoAI account
* A clear use case (support, booking, lead qualification, outreach)
Optional but useful:
* Website URL(s)
* Docs/FAQs for Knowledge
## Open the Create Flow
1. Go to **AI Agents**
2. Click **Create Agent**
3. Enter a **name** for your agent
4. Pick a **language** preset (or leave as Multilingual)
5. Optionally choose an **agent template** to start with a pre-built prompt for common use cases (receptionist, appointment booking, lead qualification, and more)
6. Click **Create**
Your new agent opens in the [Agent Editor](/build/getting-started/agent-editor), where you can configure every aspect of its behavior.
***
## What to Configure
Once in the Agent Editor, work through the key tabs:
* **General** — name, language, AI model, voice, and background sounds
* **Prompt** — define the agent's role, rules, and conversation flow
* **Knowledge** — connect documents and web content the agent can reference
* **Tools** — add actions like call transfer, calendar booking, or custom API calls
* **Call Flow** — set the greeting, turn-taking speed, and hang-up behavior
* **Analytics** — define goals and insight questions to measure after each call
* **Notifications** — set up automatic emails and tasks based on call outcomes
* **Privacy** — configure announcements, recording, and data retention
You can also start from a template. Open the **Prompt** tab and click **Browse Templates** to pick a pre-built prompt for common use cases like front desk, appointment booking, lead qualification, and more.
***
## Next Steps
Configure prompt, tools, conversation, and deploy settings
Write and refine the agent prompt
Connect channels and receive live conversations
Validate behavior before production traffic
# Share Agent Demo Links
Source: https://docs.itellico.ai/build/getting-started/share-agent-demo-links
Create hosted demo links so teammates, prospects, or customers can try your agent in a browser
Agent demo links let you send a browser-based version of your agent to other people without giving them access to your account.
**Access:** Open any agent in the [Agent Editor](/build/getting-started/agent-editor) and click **Share** in the top-right toolbar.
## What People See
The shared page shows a hosted demo experience for that agent.
Depending on the link settings, visitors can:
* see the agent name and avatar
* start a browser-based voice demo
* read the live transcript during the session
* see whether the link expires or has limited demo usage
If live calls are turned off for the link, the page can still open, but visitors cannot start a live demo call.
## Create a Demo Link
In the [Agent Editor](/build/getting-started/agent-editor), click **Share** in the top bar.
Add an optional name so you can recognize the link later, for example `Sales demo`, `Customer review`, or `Partner training`.
Choose an expiry window such as **24 hours**, **7 days**, **30 days**, **No expiry**, or a custom date and time. You can also set a maximum number of demos.
Create the link, copy it, and send it to the reviewer or customer.
The link is copied automatically after creation, but you should still store it somewhere safe if other team members need it later.
## Manage Existing Links
Use **Manage Links** from the Share dialog to review existing links for the agent.
The link list shows:
* **Name**
* **Created**
* **Expires**
* **Live calls**
* **Views**
* **Demos**
* **Actions**
From the actions menu or edit dialog, you can:
* rename a link
* change its expiry
* set or change the demo cap
* enable or disable live calls
* delete the link completely
Deleting a link immediately stops access for anyone who still has the URL.
## Understanding Views And Demos
* **Views** count how often people opened the shared page
* **Demos** count how many live demo sessions were actually started
This is useful when you want to know whether a link was just opened for review or used in a real product demo.
## Best Practices
Create separate links for sales demos, internal review, partner enablement, or customer sign-off so reporting stays easy to understand.
Short-lived links reduce the chance that an old demo keeps circulating after the agent changes.
If a link is being shared outside your team, cap the number of demos so it does not become an open-ended public test link.
Keep the record for reference if needed, but disable live calls if you no longer want people testing the agent.
## Troubleshooting
Check whether **Live calls** is turned off for that link.
The link may have expired or been deleted. Create a fresh one and resend it.
Edit the link and increase the demo cap, or create a new link for the next reviewer.
## Next Steps
Continue refining the agent before you share it more broadly
Deploy voice and chat on your website
Build a review process for internal testing and sign-off
# Knowledge Base Architecture
Source: https://docs.itellico.ai/build/knowledge/architecture
Understand how knowledge bases, folders, and items work together
**In this guide, you'll learn:**
* How knowledge bases, folders, and items are structured
* How to organize content for best retrieval quality
* Where Context and RAG mode decisions fit into the hierarchy
* Limits on items, files, and folders
***
## Overview
Knowledge bases give your AI agent access to your company's actual information — policies, procedures, product details, and anything else your business relies on. Organize this information into a structured hierarchy, and your agent can retrieve and reference it instantly during conversations.
This page explains the structure of knowledge content. For the access-mode decision table, use [Context vs RAG](/build/knowledge/context-vs-rag).
## Knowledge Architecture
### The Three-Level Hierarchy
Knowledge in itellicoAI follows a three-level structure:
**Knowledge Base → Folders → Items**
Items can be **text**, **files** (PDF, Word, Excel, Markdown, CSV, JSON, YAML, XML), **URLs** (one web page), or **website crawls** (multiple pages from one site). See [content types](/build/knowledge/content-types) for details on each format.
```mermaid theme={null}
graph TB
KB[Customer Support FAQ
Knowledge Base]
KB --> F1[Billing & Payments
Folder]
KB --> F2[Technical Issues
Folder]
F1 --> I1[payment-methods.pdf
FILE]
F1 --> I2[help.example.com/invoices
URL]
F2 --> I3[Login troubleshooting
TEXT]
F2 --> I4[docs.example.com
WEBSITE]
style KB fill:#E10489,stroke:#333,stroke-width:2px,color:#fff
style F1 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
style F2 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
style I1 fill:#fff,stroke:#333,stroke-width:1px,color:#000
style I2 fill:#fff,stroke:#333,stroke-width:1px,color:#000
style I3 fill:#fff,stroke:#333,stroke-width:1px,color:#000
style I4 fill:#fff,stroke:#333,stroke-width:1px,color:#000
```
This hierarchy makes it easy to organize large amounts of information while keeping it accessible and manageable.
***
## Knowledge Base List
Navigate to **Knowledge Bases** in the left sidebar to see all your knowledge bases in a table.
**Access:** Click **Knowledge Bases** in the main menu.
The list shows each knowledge base's name, item count, token usage, processing status, and last updated time. You can search, sort, and select multiple knowledge bases for bulk actions.
### Copied Knowledge Bases
When a knowledge base is copied through supported import flows, the copy includes its folders and items. The system handles indexing automatically using the platform defaults.
***
## Understanding Each Level
### Knowledge Bases
A knowledge base is the top-level container that groups related information together. It represents a major category or domain of your business knowledge.
**Example knowledge bases:**
* **Customer Support FAQ** - All customer-facing support information
* **Product Documentation** - Technical docs, user guides, feature descriptions
* **Company Policies** - HR policies, compliance docs, internal procedures
* **Sales Resources** - Pricing sheets, competitor comparisons, pitch decks
### Folders
Folders are organizational units within a knowledge base. They group related items together by topic, category, or purpose.
Folders group related items by topic, making content easier to find and manage.
**Example folders within a Customer Support knowledge base:**
* **Billing & Payments** - Invoice questions, payment methods, refunds
* **Technical Issues** - Troubleshooting guides, error messages, bug workarounds
* **Product Information** - Features, specifications, compatibility
* **Return Policies** - Return windows, conditions, process steps
Use clear, descriptive folder names. Your team and your AI will both benefit from intuitive organization.
### Knowledge Items
Knowledge items are the actual pieces of information - documents, FAQs, policies, procedures, or any content you want your agent to know.
**Knowledge items can be:**
* **Text entries** - Directly written content
* **File uploads** - PDF, Word (.doc, .docx), Excel (.xlsx), Text (.txt, .log), Markdown (.md), CSV/TSV, JSON, YAML, XML (up to 10MB)
* **URL scrapes** - Content from a single web page
* **Website crawls** - Multiple discovered pages from one site, with optional refresh settings
**Example knowledge items:**
* "Refund Policy for Digital Products"
* "How to Reset Password - Step by Step"
* "Product Specifications - Model X200"
* "Shipping Times by Region"
Orange means the item is still processing. Green means it is ready to use.
***
## When to Use Knowledge Bases
If customers regularly ask about policies, procedures, or product details, add that information to a knowledge base. Your agent will reference it accurately every time.
**Example:** Customer asks "What's your return policy?" Agent retrieves the exact policy from your knowledge base and explains it naturally.
If you have existing documentation - user manuals, FAQs, policy documents - you can upload them directly in various formats (PDF, DOC, DOCX, TXT). Your agent will be able to search and reference them in conversations.
**Example:** Upload your 50-page product manual. When customers have technical questions, your agent finds and explains the relevant sections.
Knowledge bases make it easy to update information without changing your agent's core instructions. Update a price sheet or policy document, and your agent instantly has the new information.
**Example:** You update your pricing document once, and all agents using that knowledge base immediately reference the new prices.
Create one knowledge base and share it across multiple agents. Maintain information in one place, use it everywhere.
**Example:** Your "Product Specifications" knowledge base can be used by your sales agent, support agent, and pre-sales qualification agent.
Keep your agent's [prompt](/build/conversation/prompt) separate from factual information. The prompt defines personality and behavior; knowledge bases provide facts and details.
**Example:** Your agent prompt says "be friendly and professional." Your knowledge base contains the actual product specs, pricing, and policies.
***
## Organization Best Practices
### Start with Clear Categories
* Sales Knowledge
* Support Knowledge
* Billing Knowledge
* Technical Documentation
* Product Information
* Policies & Procedures
* Troubleshooting
* FAQs
* Pre-Sales Information
* Onboarding Guides
* Usage & Features
* Support & Troubleshooting
* Customer-Facing Info
* Internal Procedures
* Partner Resources
* Technical Specs
### Naming Conventions
Use clear, consistent names that make sense to your entire team:
**Good naming examples:**
* Knowledge Base: "Customer Support Resources"
* Folder: "Billing & Payments"
* Item: "Refund Policy - Digital Products"
**Poor naming examples:**
* Knowledge Base: "KB\_001"
* Folder: "Misc Docs"
* Item: "Policy\_v2\_final\_UPDATED"
Include version dates or numbers in item titles if you maintain multiple versions: "Pricing Sheet - 2025 Q1"
### Well-Structured Knowledge Base Example
Here's an example of a well-organized e-commerce knowledge base:
```mermaid theme={null}
graph TB
KB[E-Commerce Support
Knowledge Base]
KB --> F1[Orders & Shipping
4 items]
KB --> F2[Returns & Refunds
4 items]
KB --> F3[Products & Inventory
3 items]
KB --> F4[Payment & Billing
3 items]
style KB fill:#E10489,stroke:#333,stroke-width:2px,color:#fff
style F1 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
style F2 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
style F3 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
style F4 fill:#f0f0f0,stroke:#333,stroke-width:1px,color:#000
```
**Folder contents:**
* **Orders & Shipping:** Tracking, shipping times, international info, modifications
* **Returns & Refunds:** Policy, shipping process, processing times, exchanges
* **Products & Inventory:** Categories, stock availability, specifications
* **Payment & Billing:** Payment methods, invoices, payment plans
**What makes this structure good:**
* Clear, descriptive folder names that group related content
* Balanced distribution (3-4 items per folder)
* Easy to navigate and find information
* Scales well as you add more content
### Extract Only Relevant Content
**More knowledge ≠ Better performance**
Adding too much knowledge increases the chance your agent retrieves irrelevant information alongside what's actually needed.
**Best practice for large documents:**
Instead of uploading entire manuals or policy documents, extract only the pages/sections your agent needs.
**Problem:**
* Agent finds and mixes in irrelevant sections with the right answer
* More difficult for agent to determine what's actually relevant
* Wastes conversation space on unrelated content
**Example:**
Customer asks: "What's your return policy?"
Agent might pull in: HR vacation policies, internal procedures, employee benefits — and struggle to separate what the customer actually needs.
**Approach:**
* "Return Policy - Pages 45-48"
* "Shipping Policy - Pages 52-55"
* "Warranty Terms - Pages 89-92"
**Benefit:**
* Agent finds only customer-relevant content
* Clearer, more accurate responses
* More efficient use of conversation space
**Example:**
Customer asks: "What's your return policy?"
Agent retrieves: Only the 4-page return policy section — exactly what's needed, nothing else.
**How to extract relevant sections:**
* Export specific pages from PDF as separate files
* Copy relevant sections into TEXT items
* Use website crawls only when you need multiple pages from the same public site
### Regular Maintenance
Schedule regular reviews of your knowledge bases to ensure information stays current.
Delete items that are no longer relevant or unlink them from agents. Outdated information can confuse your agent and provide incorrect answers.
If customers report incorrect information, check your knowledge base immediately.
***
## Real-World Examples
**Knowledge Base:** "SaaS Product Support"
**Folders:**
* **Account Management** (15 items)
* Password reset process
* Account upgrade instructions
* Billing cycle information
* Plan comparison chart
* **Feature Documentation** (47 items)
* Individual feature guides
* Integration tutorials
* API documentation
* Best practices
* **Troubleshooting** (23 items)
* Common error messages
* Connection issues
* Browser compatibility
* Performance optimization
**Result:** Support agent can answer 80% of technical questions without human intervention.
**Knowledge Base:** "Patient Services"
**Folders:**
* **Appointment Policies** (8 items)
* Scheduling guidelines
* Cancellation policy
* Insurance requirements
* New patient process
* **Office Information** (5 items)
* Office locations and hours
* Parking instructions
* Accessibility information
* Contact directory
* **Insurance & Billing** (12 items)
* Accepted insurance providers
* Payment options
* Billing questions
* Financial assistance
**Result:** Agent handles appointment booking and policy questions 24/7 with complete accuracy.
**Knowledge Base:** "Product Catalog & Sales"
**Folders:**
* **Product Specifications** (89 items)
* Detailed product descriptions
* Technical specifications
* Compatibility information
* Size guides
* **Pricing & Promotions** (15 items)
* Current pricing
* Active promotions
* Volume discounts
* Seasonal sales
* **Shipping & Delivery** (7 items)
* Shipping options
* Delivery timeframes
* International shipping
* Tracking information
**Result:** Sales agent provides accurate product information and pricing instantly during customer conversations.
***
## Next Steps
Create and organize your knowledge step by step
Learn about text, file, URL, and website crawl knowledge items
Connect knowledge bases to your agents
Choose the right access method for your use case
See a full worked example with knowledge-backed support
***
## Common Questions
No. The agent automatically retrieves relevant content during conversations. You don't need to reference the knowledge base in your prompt — though you can add instructions like "Only answer using your knowledge base" if you want to restrict responses.
RAG retrieval typically adds under 100ms. For most use cases this is not noticeable. Context mode adds no retrieval latency at all since content is pre-loaded, but uses more of your token budget.
Each knowledge base supports up to 500 URL or website items, 50 text items, and 25 file uploads (10 MB max per file). For context mode, the total budget is 10,000 tokens (\~7,500 words). RAG mode is not bound by the context budget, but item and file limits still apply.
Knowledge bases are included in your plan. However, context mode increases prompt size which affects per-minute cost, and some premium analysis features may incur additional charges. See [Premium Features](/billing/premium-features) for details.
# Assign Knowledge to Agents
Source: https://docs.itellico.ai/build/knowledge/assign-knowledge
Connect knowledge bases, folders, or items to an agent from the Knowledge tab
## Overview
In the Agent Editor, open **Knowledge** to connect sources from your knowledge bases.
You can connect at three levels:
* Entire knowledge base
* Folder
* Individual item(s)
## Connect Knowledge
Go to **AI Agents**, open an agent, then open the **Knowledge** tab.
Use **Connect Knowledge** (or **Add Knowledge** from the empty state).
In the **Connect Knowledge** panel, use the left tree to select a knowledge base or folder.
* Knowledge base level: **Connect Entire KB**
* Folder level: **Connect Folder**
* Item level: select items, then use **Connect Items**
***
## What You See After Connecting
The connections table includes:
* **Name**
* **Type** (`Entire KB`, `Folder`, `Item`)
* **Path**
* **Mode** (Expert Mode only)
* **Items**
* Remove action (trash icon)
You can remove a connection at any time.
***
### Mode Controls
Expert Mode
You can:
* Choose **RAG** or **Context** when connecting a knowledge base, folder, or selected items
* Change connection mode from the table **Mode** column
* Toggle an existing connection mode from the browser panel
In Simple mode, connections use **RAG** by default.
***
### Context Budget
Expert Mode
When using Context mode, the UI enforces a **10,000 token** budget across all context connections.
If a source exceeds remaining context budget, the UI blocks the switch and shows a warning.
***
## Connection Behaviors to Know
* If an entire knowledge base is connected, folder/item entries under it are effectively inherited.
* If a folder is connected, items in that folder are inherited.
* The folder browser shows inherited/connected state so you can avoid redundant connections.
***
## Test Your Setup
After connecting knowledge:
1. Open your agent test flow.
2. Ask questions that should be answered from connected sources.
3. Verify answers are grounded in your content.
***
## Next Steps
* [Context vs RAG Mode](/build/knowledge/context-vs-rag)
* [Content Types](/build/knowledge/content-types)
# Content Types & Processing
Source: https://docs.itellico.ai/build/knowledge/content-types
Understand text, file, URL, and website crawl knowledge items and how they're processed
## Supported Content Types
itellicoAI supports four types of knowledge items, each designed for different content sources and use cases. Understanding how each type works will help you choose the right format for your information. For guidance on organizing these items, see [knowledge base architecture](/build/knowledge/architecture).
Enter content directly using the built-in editor
Upload PDF, Word, Excel, Text, Markdown, CSV, JSON, YAML, and XML files up to 10MB
Pull content from one web page
Discover and import multiple pages from one public site
***
## Text Items
### What Are Text Items?
Text items are content you enter directly into the itellicoAI knowledge base editor. They are the most straightforward and reliable content type —immediately available with no processing delay.
### How to Add a Text Item
Open the folder where you want to add the item.
Click **Add Item** to create a new item.
Choose **Text Content** from the content type options.
Give your item a clear, descriptive title.
Enter your content in the editor. Use formatting for clarity:
* Headings for sections
* Bullet points for lists
* Numbers for steps
* Bold for emphasis
Save your text item. It turns green immediately.
### Best Practices
Write content in clear, self-contained sections. Each section should answer a specific question so RAG (Retrieval-Augmented Generation) retrieval returns focused results.
Improve organization and retrieval accuracy with clear names like "Return Policy - Digital Products" instead of "Policy 4."
### When to Use Text Items
Create question-and-answer pairs directly in the system.
**Example:**
```text wrap theme={null}
Title: How do I reset my password?
Content:
To reset your password:
1. Go to the login page
2. Click "Forgot Password"
3. Enter your email address
4. Check your email for a reset link
5. Click the link and create a new password
Password requirements:
- Minimum 8 characters
- At least one uppercase letter
- At least one number
- At least one special character
If you don't receive the email within 5 minutes, check your spam
folder or contact support@company.com.
```
Write clear, concise policy statements.
**Example:**
```text wrap theme={null}
Title: Return Policy - Digital Products
Content:
Digital products can be refunded within 30 days of purchase if:
Eligible for refund:
- Product has a technical defect preventing usage
- Product description was materially inaccurate
- Customer has not accessed or downloaded the product
Not eligible for refund:
- Change of mind after accessing the product
- Compatibility issues disclosed in product description
- User error or misunderstanding of features
To request a refund:
Email support@company.com with your order number and reason
for the refund request.
Processing time: 5-7 business days
Refund method: Original payment method
```
Step-by-step instructions for processes.
**Example:**
```
Title: Order Modification Process
Content:
Customers can modify orders within 24 hours of placement.
What can be modified:
- Shipping address
- Delivery speed
- Item quantities (if inventory available)
What cannot be modified:
- Payment method (must cancel and reorder)
- Items after processing has begun
- Orders placed more than 24 hours ago
Modification process:
1. Customer contacts support via phone or email
2. Agent verifies order is within modification window
3. Agent checks inventory for requested changes
4. Agent updates order in system
5. Customer receives confirmation email
If order has already shipped, customer must use return process instead.
```
Brief, frequently referenced information.
**Example:**
```
Title: Business Hours & Contact Information
Content:
Customer Support:
- Phone: 1-800-555-0123
- Email: support@company.com
- Hours: Monday-Friday, 9 AM - 6 PM EST
- After-hours: emergency@company.com (urgent issues only)
Sales:
- Phone: 1-800-555-0124
- Email: sales@company.com
- Hours: Monday-Friday, 8 AM - 8 PM EST
Billing:
- Phone: 1-800-555-0125
- Email: billing@company.com
- Hours: Monday-Friday, 9 AM - 5 PM EST
```
### Limitations
* No file attachment support —content must be typed or pasted
* Large volumes of content are better managed as file uploads
Text items are the most reliable content type. When possible, enter content as text rather than uploading files.
***
## File Upload Items
### What Are File Upload Items?
File upload items allow you to upload existing documents in various formats. The system extracts the text content and makes it available to your agents.
### How to Add a File Item
Open the folder where you want to add the file.
Click **Add Item** to create a new item.
Choose **Upload File** from the content type options.
Give your file a descriptive title (this is separate from the filename).
Click **Upload** and select your document from your computer.
The system will upload and begin processing your file.
The item turns orange while processing and green when ready to use.
### Processing Details
The system uses advanced document parsing to extract text from uploaded files:
* **Text extraction** —text-based PDFs and Word documents have their content extracted directly
* **OCR (Optical Character Recognition) processing — technology that reads text from scanned images** —the platform processes scanned documents and images within PDFs with OCR
* **Chunking** —extracted content is split into chunks for vector indexing (preparing content for semantic search), enabling retrieval
**File specifications:**
* **Formats:** PDF, Word (.doc, .docx), Excel (.xlsx), Text (.txt, .log), Markdown (.md), CSV/TSV (data formats), JSON (data formats), YAML (.yaml, .yml) (data formats), XML (data formats)
* **Size limit:** 10MB maximum
* **Content:** Text-based documents and scanned images (advanced parsing handles most scans)
* **Protection:** No password protection
Processing can take up to several minutes depending on file size and parsing difficulty.
### Best Practices
* Compress large files
* Remove unnecessary images
* Use text-based documents when possible
* Keep under 5MB for faster processing
* Review extracted content after processing
* Check for formatting issues
* Verify critical information is accurate
* Re-upload if extraction is poor
### Limitations
* Maximum file size of 10MB
* Password-protected files cannot be processed
* Very poor quality scans may produce incomplete or inaccurate text
* Complex layouts (multi-column, heavy tables) may not extract perfectly —review extracted content and consider converting to text items if needed
### Troubleshooting
**Causes:**
* File exceeds 10MB
* File is password-protected
* File is corrupted
* Very poor quality scanned images
**Solutions:**
* Compress file or split into smaller files
* Remove password protection
* Re-export file from source
* For very poor quality scans, copy content into a text item instead
**Causes:**
* Complex layouts (multi-column, tables)
* Very poor quality scanned images
* Special fonts or encoding
* Form fields and interactive elements
**Solutions:**
* Check extracted content in edit mode
* Re-create as text item with proper formatting
* Simplify document layout before uploading
* Export as plain text document
**What to do:**
* Wait 5-10 minutes before assuming failure
* Check file size and page count
* For large files, consider splitting into multiple files
* Convert to text and upload as TEXT items instead
***
## URL Items
### What Are URL Items?
URL items scrape content from a single web page and store it in your knowledge base. This is useful for referencing a specific online documentation page, help article, or blog post.
### How to Add a URL Item
Open the folder where you want to add the URL.
Click **Add Item** to create a new item.
Choose **Web Page** from the content type options.
Give the content a descriptive title.
Paste the complete URL including `https://`
**Example:**
```
https://docs.company.com/api/authentication
```
The system will fetch and process the web page.
The item turns orange while processing and green when ready to use.
### Processing Details
When you add a URL item, the system:
1. **Fetches** the page at the provided URL
2. **Extracts** the main text content, stripping navigation, ads, and boilerplate
3. **Stores** the extracted text as the knowledge item content
4. **Indexes** the content for vector search, just like text and file items
The system scrapes content once at creation time. To refresh, delete and re-create the URL item.
### Best Practices
* Open URL in incognito window first
* Verify no login is required
* Check content is visible without JavaScript
* Ensure page loads quickly
* Check content after scraping completes
* Verify correct content was captured
* Look for formatting issues
* Confirm no extra content (ads, sidebars) was included
### Limitations
* **Authentication** —pages requiring login cannot be scraped
* **JavaScript-heavy pages** —single-page applications and dynamically loaded content may not be captured
* **Paywalled content** —content behind paywalls is inaccessible
* **No automatic refresh** —content is scraped once; you must re-create the item to update
* **robots.txt (a file websites use to control automated access)** —sites that block scraping will fail
URL scraping works best with simple, text-based web pages. If scraping fails or produces incomplete content, copy the content manually into a text item instead.
### Troubleshooting
**Causes:**
* Page requires login/authentication
* URL is incorrect or broken
* Content loads via JavaScript
* Website blocks scraping (robots.txt)
* Page doesn't exist (404)
**Solutions:**
* Verify URL is publicly accessible
* Test URL in incognito browser window
* Check URL is complete and correct
* Copy content manually into text item
* Use PDF export of page instead
**Causes:**
* JavaScript-rendered content not captured
* Dynamic content loading
* Multiple tabs/sections on page
* Comments or sidebar scraped instead of main content
**Solutions:**
* Inspect scraped content in edit mode
* Use direct URL to specific content section
* Copy desired content into text item
* Export page as PDF and upload instead
**Solution:**
Single-page URL content is scraped once at creation time. To update:
* Delete and re-create the URL item
* Or copy current content into a text item for manual updates
For frequently changing content, consider:
* Manual text items you update regularly
* PDF exports you refresh periodically
***
## Website Crawl Items
### What Are Website Crawl Items?
Website crawl items discover multiple public pages from one website and import the pages you select. Use this when one knowledge source spans several URLs, such as a help center or documentation site.
### How to Add a Website Crawl
Open the folder where you want to add the crawl.
Click **Add Item** to create a new item.
Choose **Website Crawl** from the content type options.
Paste the website URL and click **Discover URLs**.
Review discovered pages, select the pages you want, and click **Import Selected**.
### Crawl Settings
Open **Advanced options** before discovery to control the crawl scope and refresh behavior.
| UI setting | Default | What it controls | When to change it |
| --------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Max pages to discover** | `100` | The maximum number of URLs to discover from the starting site. Available values are `25`, `50`, `100`, `250`, and `500`. This limits discovery only; you still choose which discovered pages to import. | Lower it for small sites or quick tests. Raise it for larger help centers or documentation sites. |
| **Auto-refresh interval** | `Never` | How often the system resyncs already imported pages. Options are `Never`, `Every 24 hours`, `Every 7 days`, and `Every 30 days`. | Use `Every 7 days` or `Every 30 days` for public docs, pricing, policy, or help-center pages that change over time. |
| **Include subdomains** | Off | Whether discovery may include pages under subdomains of the starting host. If you start from `docs.example.com`, this allows hosts such as `api.docs.example.com`; it does not include sibling domains such as `help.example.com`. | Turn it on only when the site you want to import is split across subdomains under the same host. |
| **Discover new pages on refresh** | Off, hidden while auto-refresh is `Never` | When refresh is enabled, the system can re-run discovery and stage newly found pages for review. Newly discovered pages are not included automatically. | Turn it on when the site regularly adds new pages and you want to review them from **View pages**. |
After import, the website root appears as a Website item. Use **View pages** to include or exclude individual pages, add URLs within the crawl domain, re-discover pages, or resync page content. In **View pages**, you can update the refresh interval and auto-discovery behavior; the original max-pages and subdomain scope are set during discovery.
### Limitations
* Public pages work best; authenticated pages are not supported
* JavaScript-heavy pages may not extract cleanly
* Crawls count toward the knowledge base URL/website item limit
* Imported pages still need successful content processing and vector indexing before RAG can retrieve them
***
## Processing Status Flow
Knowledge items go through two separate processing pipelines:
1. **Content Processing** —extracting text from files, URLs, and website pages
2. **Vector Indexing** —preparing content for RAG (semantic search)
### Processing Status
Orange means the item is still processing. Green means it is ready to use. If an item shows an error, click **Reindex** to retry.
***
## Choosing the Right Content Type
| Your Situation | Best Content Type |
| ---------------------------------------------- | ------------------------------------------- |
| Writing FAQs from scratch | TEXT |
| Have existing Word/PDF docs under 10MB | FILE |
| Have documents over 10MB | Split into smaller files or extract to TEXT |
| One public web page | URL (with TEXT as backup) |
| Multi-page public documentation or help center | Website Crawl |
| Private/authenticated content | Copy to TEXT |
| Need immediate availability | TEXT (no processing delay) |
| Complex formatting matters | FILE |
***
## Next Steps
Learn how agents access your knowledge content
Follow the step-by-step creation guide
Understand knowledge base structure
Reference knowledge in your agent prompt
# Context vs RAG Mode
Source: https://docs.itellico.ai/build/knowledge/context-vs-rag
Choose between Context injection and RAG retrieval for your knowledge bases
## Two Access Methods
When you assign knowledge to your agent, you need to choose how the agent accesses that information. If you have not created a knowledge base yet, start with the [create knowledge bases](/build/knowledge/create-knowledge-bases) guide. itellicoAI offers two access methods: **Context Mode** (prompt injection) and **RAG Mode** (RAG: Retrieval-Augmented Generation — a search system that finds only the most relevant information your agent needs).
## Quick Decision
| Use Context When... | Use RAG When... |
| ------------------------------------------------------ | --------------------------------------------------------- |
| Content is small (under a few thousand words) | Content is large (FAQs, catalogs, full documentation) |
| Agent needs it on every single call | Agent only needs it for specific questions |
| You want zero retrieval latency | You need broad coverage across many topics |
| Examples: pricing table, business hours, return policy | Examples: product catalog, full FAQ library, support docs |
Not sure? **Start with RAG.** It's safer for most use cases. Switch to Context only for small, always-needed content.
***
## The Two Access Methods
**Prompt Injection**
All knowledge is injected directly into the agent's conversation context (alongside your [prompt](/build/conversation/prompt)) at the start of each interaction.
**Best for:** Small knowledge bases with critical information the agent needs for every conversation.
**RAG (Retrieval-Augmented Generation)**
Agent dynamically searches and retrieves relevant knowledge based on the conversation topic.
**Best for:** Larger knowledge bases where only specific sections are needed per conversation.
***
## Context Mode (Prompt Injection)
### How It Works
In Context Mode, the platform loads your knowledge base content directly into the agent's system prompt at the beginning of each conversation:
```text wrap theme={null}
System Prompt:
You are a helpful customer service agent.
[Your agent instructions...]
==== KNOWLEDGE BASE: Customer Support FAQ ====
### Billing & Payments
- Question: How do I update my payment method?
Answer: You can update your payment method by...
- Question: When will I be billed?
Answer: Billing occurs on the same day each month...
### Return Policy
[Full return policy content]
### Shipping Information
[Full shipping information]
==== END KNOWLEDGE BASE ====
Now assist the customer with their question.
```
The agent sees ALL knowledge content from the start and can reference it throughout the conversation.
### Formatted Output
By default, the system injects knowledge with structured formatting:
```text wrap theme={null}
========================================
# Knowledge Base Name
Knowledge base description
## Folder Name
Folder description
### Item Title
----------------------------------------
Item content here
----------------------------------------
========================================
```
This formatting helps the agent understand the structure and organization of the knowledge.
### When to Use Context Mode
If your content is compact and the agent needs it on every call, Context Mode ensures it's always available.
**Example use case:**
A support agent with a knowledge base containing:
* 10 common FAQs
* Return policy
* Contact information
* Shipping options
Information the agent must reference on most or all calls.
**Example use case:**
A booking agent that needs:
* Company policies (always)
* Available services (always)
* Pricing structure (always)
* Booking procedures (always)
When knowledge items reference each other or form a cohesive whole.
**Example use case:**
Product configuration agent with:
* Option dependencies ("If they choose X, offer Y")
* Compatibility matrix
* Package bundles
* Pricing that depends on combinations
### Context Mode Advantages
Access all knowledge immediately without search delay
Handle small knowledge sets efficiently within the context window
Deliver exactly the same knowledge every time
Include Jinja variables that resolve at runtime
### Context Mode Limitations
Context Mode is **limited to 10,000 tokens (roughly 7,500 words) total** across all assigned knowledge.
**Trade-offs:**
* All context-mode content is sent with every request, so more content means higher cost and latency
* The entire knowledge base is included even if only a small portion is relevant for that call
* Best for content that's a few thousand words or less — use RAG for anything larger
***
## RAG Mode (Retrieval-Augmented Generation)
### How It Works
In RAG Mode, the platform stores your knowledge base in a vector database. When the agent needs information:
1. **User asks a question:** "What's your return policy?"
2. **Agent identifies need:** Agent determines it needs knowledge about returns
3. **System searches:** RAG system searches knowledge base for relevant content
4. **Relevant content retrieved:** Only the return policy section is fetched
5. **Agent responds:** Agent uses retrieved knowledge to answer
The agent only sees the knowledge it needs, when it needs it.
### Intelligent Retrieval
RAG uses semantic search with vector embeddings to find relevant knowledge:
```text wrap theme={null}
User: "I need to send back the shoes I bought last week"
RAG System thinks:
- Keywords: "send back", "shoes", "bought"
- Semantic meaning: Returns, possibly exchange
- Search knowledge for: return policy, shipping, exchanges
Retrieved knowledge:
- Return Policy Overview
- Return Shipping Instructions
- Exchange Procedures
NOT retrieved:
- Billing FAQ
- Product Specifications
- Account Management
```
### RAG Mode Advantages
Support larger knowledge bases without the 10,000-token context limit
Reduces system prompt tokens for large knowledge bases
Only retrieves what's needed for current topic
Handles wide variety of unrelated topics well
### RAG Mode Considerations
RAG relies on search accuracy. If your knowledge items aren't clearly written, retrieval may miss relevant information.
**Retrieval quality depends on:**
* Clear, descriptive knowledge item titles
* Well-structured content
* Proper categorization into folders
* Avoiding duplicate or conflicting information
***
## Choosing the Right Mode
Use this decision guide to select the best access method:
### Hybrid Approach
You can use both modes for different knowledge bases on the same agent:
**Example configuration:**
* **Context Mode:** Small "Core Policies" knowledge base (always needed)
* **RAG Mode:** Large "Product Catalog" knowledge base (retrieve as needed)
This combines the strengths of both methods.
***
## Testing Your Configuration
Configure your agent with a knowledge base in either Context or RAG Mode.
Use the Test Agent menu to start a chat, web call, or phone call.
Ask questions that should be answered from your knowledge base.
**Example questions:**
* "What's your return policy?"
* "How much does the Pro plan cost?"
* "What are your business hours?"
Confirm the agent is correctly using knowledge content in responses.
Ask about topics NOT in your knowledge base to ensure agent responds appropriately ("I don't have that information").
***
## Best Practices
When in doubt, use RAG Mode. It's safer for large knowledge bases and you can always switch to Context Mode if needed.
RAG uses semantic search to find relevant knowledge. Write complete, well-written content that naturally includes the terms and concepts users will ask about.
**Good:** "Our return policy allows returns within 30 days of purchase for physical products. Digital products cannot be returned once downloaded."
**Bad:** "See policy doc" or incomplete sentence fragments
Try both Context and RAG Mode with your knowledge base and see which performs better for your use case.
Use Context Mode for critical, frequently-needed info and RAG Mode for extensive reference material.
***
## Troubleshooting
**Check:**
* Do all knowledge items show green (ready to use)?
* Is remaining context sufficient (not truncated)?
**Solution:**
* Fix failed items
* Reduce knowledge size or switch to RAG
**Check:**
* Is content well-organized?
* Are you asking questions that match the knowledge?
**Solution:**
* Add more detailed content
* Test with different phrasings
* Consider adding keywords to content
**Check:**
* Is the knowledge content correct and current?
* Do you have conflicting information in multiple items?
**Solution:**
* Update knowledge content
* Remove duplicates and conflicts
**Solutions:**
* Switch to RAG Mode for large knowledge bases
* Split knowledge into smaller, focused bases
* Reduce agent prompt length
* Remove verbose or redundant content
***
## Next Steps
Build and organize your knowledge content
Learn about text, file, URL, and website crawl items
Use knowledge references in your prompt
Test how your agent uses knowledge
# Create Knowledge Bases
Source: https://docs.itellico.ai/build/knowledge/create-knowledge-bases
Step-by-step guide to creating, populating, and managing knowledge bases for your AI agents
## Creating Your First Knowledge Base
A [knowledge base](/build/knowledge/architecture) gives your AI agent access to your business information. You can upload documents, paste text, scrape one web page, or crawl a public website to build a repository of information that your agent retrieves during conversations. This guide covers creating a knowledge base, uploading content, monitoring processing status, and assigning knowledge to agents.
Plan your knowledge structure before you start. A well-organized knowledge base is easier to maintain and produces better agent responses.
***
## Step 1: Create a Knowledge Base
### Navigate to Knowledge Bases
Log into your [itellicoAI dashboard](https://app.itellico.ai) and click **Knowledge Bases** in the left navigation menu.
Click the **+ Create Knowledge Base** button.
### Fill in Basic Information
Choose a clear, descriptive name that reflects the content category.
**Naming rules:**
* Letters, numbers, spaces, hyphens, and underscores only
* No special characters (@, #, \$, etc.)
* Maximum 100 characters
**Good examples:**
* "Customer Support FAQ"
* "Product Documentation"
* "Company Policies"
**Avoid:**
* "KB\_001" (not descriptive)
* "Misc Docs" (too vague)
Provide context about what this knowledge base contains and when to use it.
**Example descriptions:**
* "Customer-facing support documentation including FAQs, policies, and troubleshooting guides"
* "Internal product specifications, feature documentation, and technical details"
Your knowledge base is created and ready for content.
***
## The Knowledge Base Editor
After creating a knowledge base, you're taken to the editor — a two-column layout:
* **Left panel** — Your folders (collections). Search, create, and select folders.
* **Right panel** — Items in the selected folder. Search, add, edit, and manage items.
### Items Table
When you select a folder, the right panel shows all items in a table:
| Column | Description |
| ----------- | ---------------------------------------------------------------- |
| **Title** | Item title with type-specific icon |
| **Type** | Text, File, URL, or Website badge |
| **Status** | Processing dot with Ready, Processing, Pending, or Error tooltip |
| **Actions** | Copy reference, Edit, Reindex, Delete |
***
## Step 2: Upload Documents and Content
Once your knowledge base has at least one folder, add content using any of the four supported methods.
**Best for:** User manuals, product specs, legal documents, training materials
**Supported formats:** PDF, Word (.doc, .docx), Excel (.xlsx), Text (.txt, .log), Markdown (.md), CSV/TSV, JSON, YAML (.yaml, .yml), XML
**Maximum file size:** 10MB per file
In your knowledge base, click **Add Item**.
Choose **Upload File** for document uploads.
Give your file a clear title (e.g., "Return Policy for Digital Products").
Drag and drop or click to browse. The system accepts PDF, Word (.doc, .docx), Excel (.xlsx), Text (.txt, .log), Markdown (.md), CSV/TSV, JSON, YAML (.yaml, .yml), and XML files up to 10MB.
The system uploads and begins processing. The status light turns green when it is ready to use.
**Best for:** FAQs, policies, procedures, quick reference information
In your knowledge base, click **Add Item**.
Choose **Text Content** to enter content directly.
Use a clear title like "Password Reset Instructions" or "Pricing Tiers Explained".
Enter the information you want your agent to know. Be clear, specific, and comprehensive.
The system saves and processes text items immediately.
**Best for:** Documentation pages, blog posts, help articles, external resources
In your knowledge base, click **Add Item**.
Choose **Web Page** to scrape one page.
Give the content a clear title.
Paste the complete URL including `https://`
The system fetches and processes the web page content.
URL scraping works best with simple, text-based web pages. Pages requiring authentication or heavy JavaScript may not scrape successfully.
**Best for:** Public help centers, docs sites, pricing pages, and other multi-page sources
In your knowledge base, click **Add Item**.
Choose **Website Crawl** to discover pages from one site.
Paste the website URL, then use **Discover URLs**.
Select the pages to import. Open **Advanced options** if you need to change discovery scope or refresh behavior.
Click **Import Selected**. The crawl root appears as a Website item, and imported pages are processed as child pages.
**Advanced options**
| UI setting | Default | Use when |
| --------------------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Max pages to discover** | `100` | You want to cap discovery at `25`, `50`, `100`, `250`, or `500` pages before choosing what to import. |
| **Auto-refresh interval** | `Never` | You want imported pages to resync every 24 hours, 7 days, or 30 days. |
| **Include subdomains** | Off | The pages you need live under subdomains of the starting host. |
| **Discover new pages on refresh** | Off, hidden while auto-refresh is `Never` | Refresh is enabled and you want new pages staged for review later. |
**Discover new pages on refresh** does not automatically add new pages to your agent knowledge. It stages newly found pages in **View pages** so you can review and include them.
***
## Step 3: Managing Knowledge Base Items
### Viewing Items
Open your knowledge base to see all items listed with their title, type (Text, File, URL, Website), processing status, and last updated time.
### Editing Items
Click on any non-website item to view or edit its content. Website crawl roots open the crawl pages view instead.
### Deleting Items
Click the delete icon on any item to remove it. This removes the item from both the knowledge base and the vector index.
***
## Understanding Status Indicators
Orange means the item is still processing. Green means it is ready to use.
### Troubleshooting Errors
**Common causes:**
* File is corrupted or password-protected
* URL or website page requires authentication or uses complex JavaScript
* File exceeds 10MB limit
**Solutions:**
* Try uploading the content as TEXT instead
* Remove password protection from the file
* Split large files into smaller documents
**Solutions:**
* Click the **Reindex** button to retry
* If reindexing fails, delete and re-create the item
* Ensure the content is not too short (needs at least a few sentences)
If issues persist, contact support at **[support@itellico.ai](mailto:support@itellico.ai)** with the knowledge item title, file type or URL, and any error messages shown.
***
## Step 4: Assign Knowledge Base to Agents
Once your knowledge base has content showing green (ready to use), link it to your agents.
Navigate to the agent you want to configure.
Open **Knowledge** tab in the agent editor.
Use **Connect Knowledge** to open the knowledge browser.
Connect an entire knowledge base, a folder, or selected items. Expert Mode lets you choose **Context** (full content injected into prompt) or **RAG** (semantic search retrieval); Simple mode uses RAG by default. See [context vs RAG](/build/knowledge/context-vs-rag) to decide which is right for you.
Learn when to use full context injection versus RAG-based retrieval for your knowledge bases.
***
## Content Quality Guidelines
**Instead of:** "Customers can return items within our standard window."
**Write:** "Customers can return items within 30 days of purchase. Items must be unused and in original packaging with all tags attached."
Avoid jargon unless it is industry-standard and your audience knows it. Write as if explaining to a knowledgeable colleague.
Each item should cover one topic thoroughly. Split large topics into multiple items rather than creating one massive document.
Examples make abstract concepts concrete and help the agent give better answers.
***
## Next Steps
Connect your knowledge base to agents
Choose how agents access knowledge
Learn how to structure knowledge bases effectively
# Booking & Calendar Integration
Source: https://docs.itellico.ai/build/tools/booking-calendar
Schedule appointments automatically with Cal.com integration
## How Calendar Booking Works
The Booking tool lets your AI agents schedule appointments during live conversations. Integrated with Cal.com, your agents can check availability, present time slots, confirm bookings, and send automatic confirmations.
Requires a Cal.com account and active integration. Works with Cal.com's free tier.
**How it works:** The booking tool provides two functions to your agent:
1. **Get available slots** - Fetches available time slots from Cal.com
2. **Book appointment** - Creates the booking with customer details
This handles the core booking flow. For advanced workflows like confirming existing appointments, rescheduling, or cancelling, you'll need to build custom logic using [Custom API Actions](/build/tools/custom-api-actions) that integrate directly with the Cal.com API or another calendar provider's API (e.g., Calendly).
***
## Setup
Set up event types in Cal.com for each appointment type:
* Duration (15 min, 30 min, 60 min, etc.)
* Meeting location (Zoom, Google Meet, phone, in-person)
* Availability windows
[Cal.com event types documentation](https://cal.com/docs/core-features/event-types)
Book a test appointment in Cal.com to verify availability, meeting links, and notifications work correctly.
Get your Cal.com API key and connect it to itellicoAI:
1. Go to [Cal.com Settings → Developer → API Keys](https://app.cal.com/settings/developer/api-keys)
2. Click **+ Add**, name it (e.g., "itellicoAI"), and save
3. In itellicoAI, go to **Settings → Developers → Integrations**
4. Open the **Cal.com** card, then select or create a secret that stores the API key
5. Click **Test Connection**
6. Click **Connect** after the test succeeds
***
## Using Your Existing Calendar System
A common question: **"We use Google Calendar / Microsoft Outlook / Microsoft 365. Can we still use Cal.com?"**
**Yes!** Cal.com integrates with your existing calendar system to prevent double bookings and check availability across all your calendars.
### How It Works
Cal.com connects to your company's calendar system (Google Calendar, Microsoft Outlook, Microsoft 365, Exchange) and:
1. **Checks availability** - Reads your existing calendar to determine when you're free
2. **Prevents conflicts** - Cross-references all connected calendars before showing available slots
3. **Syncs bookings** - Adds confirmed appointments to your existing calendar automatically
4. **Updates in real-time** - When customers book through itellicoAI, the appointment appears in your company calendar immediately
Cal.com acts as a scheduling layer on top of your existing calendar system. You continue using Google Calendar, Outlook, or Microsoft 365 as normal - Cal.com just reads availability and writes bookings to it.
### Supported Calendar Systems
Cal.com integrates with:
* **Google Calendar** - Personal and Google Account accounts
* **Microsoft Outlook** - Outlook.com and Outlook desktop
* **Microsoft 365** - Business and enterprise accounts
* **Microsoft Exchange** - Exchange 2013, 2016, and newer
* **Apple Calendar** - iCloud calendar
### Setting Up Calendar Integration
In Cal.com, go to **Settings → Calendars** and connect your calendar:
* **Google Calendar**: Click "Connect" and authorize Cal.com
* **Microsoft Outlook/365**: Click "Connect" and sign in with Microsoft
* **Exchange**: Click "Connect" and enter your Exchange server details
[Cal.com calendar connection guide](https://cal.com/docs)
Once connected, Cal.com automatically checks this calendar for conflicts. When someone tries to book with you:
1. Cal.com checks all connected calendars
2. Only shows times when you're actually available
3. Prevents double bookings across all systems
Choose which calendar receives new bookings:
* In Cal.com event type settings
* Select the calendar where appointments should be created
* This can be different from the calendars Cal.com checks for conflicts
**Multiple calendars:** You can connect multiple calendars (e.g., personal Google Calendar + work Outlook). Cal.com checks all of them for conflicts and you choose which one receives new bookings.
### Common Scenarios
**Setup:**
1. Connect your Microsoft 365 account to Cal.com
2. Cal.com reads your availability from Microsoft 365
3. New bookings appear in your Microsoft 365 calendar
4. Your AI agent books appointments through itellicoAI → Cal.com → Microsoft 365
**Benefit:** You and your team continue using Microsoft 365 normally. The AI agent automatically respects everyone's existing calendar commitments.
**Setup:**
1. Connect your Google Account account to Cal.com
2. Cal.com reads your availability from Google Calendar
3. New bookings appear in your Google Calendar
4. Your AI agent books appointments through itellicoAI → Cal.com → Google Calendar
**Benefit:** Direct integration with your existing Google Account setup. All bookings sync automatically.
**Setup:**
Each team member connects their own calendar to their Cal.com account:
* Alice connects her Google Calendar
* Bob connects his Microsoft 365 calendar
* Carol connects her Outlook calendar
**Benefit:** Cal.com handles the complexity. Each person's availability is checked in their native calendar system.
***
## Add Booking Tool
1. Go to your agent → **Tools** tab
2. Click **Add** and select **Calendar Booking**
3. Select your Cal.com event type
The tool is automatically named "Book \[Event Type]" based on your Cal.com event. See configuration options below.
***
## Configuration
### Event & Platform
**Cal.com Event Type** (Required)
* Select from dropdown or enter event ID manually
* Each tool maps to one Cal.com event type
**Meeting Platform** (Required)
* Choose how meetings are hosted:
* **Cal Video** - Built-in Cal.com video
* **Zoom** - Requires Zoom connected in Cal.com
* **Google Meet** - Requires Google Meet connected
* **Microsoft Teams** - Requires Teams connected
* **Phone** - Phone call appointment
* **In Person** - Physical meeting (address required)
**Timezone** (Required)
* Defaults to your browser's timezone (can be changed)
* All suggested times are presented in this timezone
* Searchable dropdown with all available timezones
### Scheduling Preferences
**Days to Look Ahead** (1-3 days, default: 2)
* How many future days the agent considers when finding slots
**Time Slots Per Day** (2-5 slots, default: 3)
* How many time slots per day the agent offers
**Hours Between Suggestions** (1-4 hours, default: 3)
* Minimum spacing between suggested times
**Start Date** (Optional)
* Earliest date the agent can suggest
* Leave blank for immediate availability
### Email Configuration
The agent uses this priority to find customer email:
1. **Dynamic Context** - `cal_email` from your context API
2. **Contact Record** - Email stored in itellicoAI contact
3. **Fallback Email** - Team inbox (configure below)
4. **Ask Customer** - Agent requests email during call
**Fallback Email** (Optional)
* Used when customer email is unavailable
* Leave blank to force agent to always collect email
### SMS Notifications
**Send SMS Confirmation** (Default: enabled)
* Sends SMS after booking completes
* Includes meeting details and join link
SMS confirmations only work on **phone calls** where the caller's phone number is available in the system. They will not send for web calls or when the phone number is unavailable.
**SMS Template**
* Customize the message with placeholders:
* `{date}` - Appointment date
* `{time}` - Appointment time
* `{link}` - Meeting link
* `{location}` - In-person address
* `{duration}` - Meeting duration
**Use default booking instructions** (Default: enabled)
* Adds the built-in scheduling script to the agent prompt
* Recommended for most agents
* Disable only if you are replacing the complete booking flow in your own prompt
***
## Scheduling for Multiple Employees
A common scenario: **"We have 3 employees who can handle appointments, each with different availability. How do we schedule across the team?"**
**Solution:** Use Cal.com Teams with Round Robin scheduling. This distributes appointments across team members based on their individual availability.
### What is Cal.com Teams?
With Cal.com Teams, you can create event types that multiple team members handle. Instead of booking with a specific person, customers book with your team, and Cal.com automatically assigns the appointment to an available team member.
Cal.com Teams requires a Teams or Organization plan. The round robin feature intelligently distributes appointments based on availability, priority, or rotation.
### How Round Robin Works
When a customer books an appointment:
1. **Checks availability** - Cal.com checks each team member's calendar
2. **Applies distribution logic** - Selects the best team member based on your chosen method:
* **Priority**: Assign to higher-priority team members first
* **Weighted**: Distribute proportionally (e.g., senior staff get more bookings)
* **Least recently booked**: Rotate evenly by who was booked least recently
3. **Books with one person** - Cal.com schedules the customer with the selected team member
4. **Updates calendar** - Appointment appears in that team member's calendar
### Setting Up Team Event Types
In Cal.com:
1. Go to **Teams** → **Create Team**
2. Name your team (e.g., "Sales Team", "Support Team")
3. Invite team members by email
4. Each member connects their own calendar (Google, Microsoft, etc.)
In your Cal.com team:
1. Go to **Event Types** → **New Event Type**
2. Select **Round Robin** as the event type
3. Configure duration, meeting platform, etc.
4. Select which team members can handle this event type
Choose how appointments are distributed:
**Priority Ranking:**
* Assign each team member a priority (High, Medium, Low)
* Higher priority members get bookings first
* Use for senior staff or specialists
**Weighted Distribution:**
* Give each member a weight percentage (default 100%)
* Higher weights = more bookings
* Use for part-time vs full-time staff
**Least Recently Booked:**
* Automatically rotates through team members
* Ensures even distribution
* Use for equal workload sharing
Once your team event type is created:
1. In itellicoAI, go to your agent → **Tools** tab
2. Click **Add** and select **Calendar Booking**
3. Select your team event type from the dropdown
4. The booking tool will now schedule with your team
### Advanced: Fixed + Round Robin Hosts
For scenarios where one person must always attend, while others rotate:
**Example:** Sales calls need a sales rep (rotating) + sales manager (always present)
**Setup in Cal.com:**
1. Create round robin event type
2. Select **Fixed Hosts**: Sales Manager (always attends)
3. Select **Round Robin Hosts**: Sales reps (one attends per call)
4. Cal.com checks availability for both and books when both are free
### Team Scheduling Examples
**Scenario:** 3 sales reps should share demo calls equally
**Setup:**
* Create team "Sales Team" with 3 members
* Use **Least Recently Booked** distribution
* Each rep connects their calendar to Cal.com
* Create event type "Sales Demo" (30 min, round robin)
**Result:** Demos are automatically distributed evenly. Rep availability is checked in real-time from their individual calendars.
**Scenario:** Senior support staff should get complex issues, junior staff get routine issues
**Setup:**
* Create event type "Technical Support Call" with priority distribution
* Senior staff: High priority
* Junior staff: Medium priority
**Result:** Senior staff get booked first when available. Junior staff handle overflow.
**Scenario:** 2 full-time employees and 1 part-time employee
**Setup:**
* Full-time staff: 100% weight each
* Part-time staff: 50% weight
* Use weighted distribution
**Result:** Part-timer gets half as many bookings as full-time staff.
**Scenario:** Customer needs both a technical specialist and account manager
**Setup:**
* Use **Round Robin Groups** (advanced feature)
* Group 1: Technical specialists (one attends)
* Group 2: Account managers (one attends)
**Result:** Cal.com selects one person from each group, ensuring both roles are covered.
### Team Integration with itellicoAI
When you connect a Cal.com team event type to itellicoAI:
1. **Your AI agent books with the team** - Not a specific person
2. **Cal.com handles assignment** - Automatically selects the best team member
3. **Customer gets confirmation** - With the assigned team member's details
4. **Team member's calendar updates** - Appointment appears in their individual calendar
**In your agent prompt:**
```
When a customer wants to schedule a consultation:
1. Use 'Book Team Consultation' action
2. The system will automatically assign an available team member
3. Confirm: "Perfect! You're scheduled with [assigned team member]
on [date] at [time]. You'll receive a confirmation email."
```
**Flexibility:** Team members can update their individual Cal.com availability, and the round robin automatically respects those changes. No need to update anything in itellicoAI.
***
## Using Booking in Your Prompt
The booking tool already has **Use default booking instructions** enabled by default. Keep it enabled unless you are writing and maintaining the complete booking flow yourself.
When default booking instructions are enabled, use your agent prompt for business-specific booking rules, not for duplicating the step-by-step scheduling script:
* who should be offered this appointment type
* which cases should be transferred instead of booked
* what information the agent should collect before offering booking
* what fallback path to use if booking is not possible
Avoid defining a separate booking sequence in both your prompt and the Call Flow tab while **Use default booking instructions** is enabled. Conflicting instructions can cause the agent to ask for the same information twice, offer times too early, or call the booking tool before the caller clearly confirms.
### Recommended Prompt Additions
Reference the tool by its auto-generated name only when you need business-specific behavior:
```
For consultation requests:
- Use the "Book 30-Minute Consultation" booking tool.
- Before offering booking, confirm the customer wants a product consultation, not billing support.
- If the customer asks for billing help, offer to transfer instead of booking a consultation.
- If no suitable slot is available, collect a callback number and preferred timeframe.
```
The tool name is automatically generated from your Cal.com event type title (e.g., "30-Minute Consultation" becomes "Book 30-Minute Consultation").
### Replacing the Default Booking Flow
Only turn off **Use default booking instructions** if you need full control over the scheduling conversation. If you disable it, your prompt must cover consent before checking availability, collecting email when needed, confirming the exact slot before booking, and handling no-availability cases.
### Handle Booking Failures
```
If 'Book 30-Minute Consultation' fails:
1. Apologize: "I'm having trouble accessing the calendar right now"
2. Offer alternative:
- "I can have someone call you back to schedule"
- Collect callback number and best time
3. If no availability: "We're fully booked for [timeframe].
Would [alternative timeframe] work?"
```
***
## Testing
* Cal.com integration shows "Connected"
* Event types appear in dropdown
* Meeting platforms configured in Cal.com
1. Start test call with your agent
2. Request appointment booking
3. Verify agent presents available times
4. Confirm booking completes
* Email confirmation received
* SMS confirmation sent (if enabled)
* Meeting link works
* Calendar updated
* Request dates outside availability
* Test without email in contact record
* Verify failure handling
***
## Troubleshooting
**Cause:** Cal.com not connected
**Solution:**
* Go to **Settings → Developers → Integrations**
* Open the **Cal.com** card
* Verify status shows "Connected"
**Cause:** No event types in Cal.com or sync issue
**Solution:**
* Create event types in Cal.com
* Disconnect and reconnect integration if needed
**Cause:** Platform not connected in Cal.com
**Solution:**
* Go to Cal.com event type settings
* Connect the platform (Zoom, Google Meet, etc.)
* Disconnect and reconnect integration to sync changes
**Possible causes:**
* Wrong email address
* Spam folder
* Cal.com email settings
**Solution:**
* Check spam/junk folder
* Verify email in booking confirmation
* Check Cal.com notification settings
**Possible causes:**
* Action name not referenced in prompt
* Agent doesn't recognize booking intent
* LLM not performing well with function calling
**Solution:**
* Reference exact auto-generated name (e.g., 'Book 30-Minute Consultation')
* Check the Actions tab to see the actual name
* Verify action is added to the agent
* Add explicit booking flow to your prompt
* Test with clear: "I want to book an appointment"
* Try GPT-4.1 or GPT-4.1-mini for most reliable function calling
* Reduce temperature for more consistent behavior
***
## Next Steps
Learn about all tool types
Build custom booking flows
Route to human schedulers if needed
Test your booking flow end to end
See a full worked example with Cal.com integration
# Calculator
Source: https://docs.itellico.ai/build/tools/calculator
Use the built-in Calculator tool for math during live conversations
Expert Mode
## Overview
The **Calculator** tool lets your agent perform mathematical calculations during a conversation.
Add it from **Tools** → **Add** → **Calculator**.
## Availability
* Built-in tool with no external integration required
* Singleton tool per agent: if one Calculator already exists, the add-menu item is disabled
***
## Current Configuration
Calculator has no advanced setup form.
When you add it, the tool is created with:
* **Name:** `Calculator`
* **Description:** `Perform mathematical calculations`
You can reopen the dialog to keep or delete the tool, but there are no extra fields to configure today.
***
## Supported Calculations
The Calculator evaluates safe mathematical expressions. It supports:
* arithmetic operators: `+`, `-`, `*`, `/`, `//`, `%`, `**`
* parentheses for grouping
* functions: `abs`, `round`, `min`, `max`, `sum`, `sqrt`, `ceil`, `floor`, `log`, `log10`, `sin`, `cos`, `tan`
* constants: `pi`, `e`
There is no special percent operator. Express percentages as arithmetic, such as `price * 0.2` for 20% of a price.
Calculator expressions are capped at 200 characters and do not support symbolic math, derivatives, integrals, or arbitrary code execution.
Use your prompt to tell the agent when it should rely on Calculator instead of answering from memory.
***
## Recommended Prompt Pattern
```text theme={null}
When the caller asks for a total, discount, repayment amount, or percentage,
use the Calculator tool before answering.
Always state the result clearly and confirm the currency or units if relevant.
```
***
## Good Use Cases
* quoting totals after discounts or fees
* calculating installment amounts
* comparing percentage changes
* converting simple pricing logic into a precise spoken answer
Use **Custom Action** instead if the value must come from your backend, CRM, billing system, or another source of truth.
***
## Testing Checklist
1. Add the tool in **Expert Mode**.
2. Run a test conversation.
3. Ask the agent to solve a few realistic calculations.
4. Confirm the spoken answer matches the expected value.
5. Check that the agent still explains the result in business language, not just raw numbers.
***
## Next Steps
* [Tools Overview](/build/tools/overview)
* [Custom Action](/build/tools/custom-api-actions)
* [Prompt Engineering Guide](/build/conversation/prompt-engineering-guide)
# Custom API Actions
Source: https://docs.itellico.ai/build/tools/custom-api-actions
Connect your agents to external systems via HTTP integrations
**In this guide, you'll learn to:**
* Connect your agent to any external API
* Configure authentication (Bearer, Basic, API Key)
* Define parameters the agent collects from callers
* Test and debug tool execution
***
## How Custom Actions Work
Custom Actions let your AI agents integrate with external systems during conversations. Your agents can retrieve customer data, update CRM records, check inventory, create tickets, and execute business logic -- all in real time while talking to customers.
**How it works:**
1. **Configure the API endpoint** - Set up HTTP method, URL, authentication, headers, and request body
2. **Define variables** - Specify what information the agent needs to collect before calling the API
3. **Agent uses it** - During conversation, agent collects the variables and calls your API
4. **API responds** - Your system returns data that the agent uses to continue the conversation
Custom Actions execute **synchronously** during conversations. For operations that do not need immediate responses, such as logging, analytics, or post-call processing, use [Webhooks](/accounts/integrations#webhooks) instead.
***
## Example Flow
```
Customer: "What's the status of my order?"
Agent: (collects order number from customer)
[Agent calls API]
-> GET https://api.company.com/orders/12345
<- { "status": "shipped", "tracking": "1Z999AA10123456789" }
Agent: "Your order has shipped! Your tracking number is
1Z999AA10123456789 and it should arrive by Friday."
```
**Security: Verify customer identity before exposing sensitive data.** Always authenticate customers before calling APIs that return personal information, order details, or account data.
***
## Create a Custom API Action
Go to your agent editor, then **Tools** tab > **Add** > **Custom Action**.
* **Name**: Descriptive name (e.g., "Lookup Order Status")
* **Description**: When to use this tool (10-200 characters). This helps the AI decide when to invoke it.
Select the HTTP method and enter the endpoint URL. See Endpoint Configuration below.
Choose an authentication method. See Authentication Methods below.
Configure custom headers, query parameters, and the request body on the Parameters tab.
Add variables the agent should collect from the conversation. See Variables below.
Save and test the action through **Test Agent** using a Web call, Phone call, or Chat session.
***
## Endpoint Configuration
### HTTP Method
| Method | Use Case |
| ---------- | ------------------------------------------- |
| **GET** | Retrieve data (order status, customer info) |
| **POST** | Create records (tickets, leads, orders) |
| **PUT** | Replace entire records |
| **PATCH** | Update specific fields |
| **DELETE** | Remove records |
### Endpoint URL
Enter the full API URL. The platform auto-prepends `https://` if you omit the protocol.
```text theme={null}
https://api.company.com/customers
```
The endpoint URL itself is static. Use query parameters or the JSON request body for `{{variable_name}}` substitutions.
***
## Authentication Methods
No authentication required. Use for public APIs or internal endpoints on private networks.
Most common for modern APIs. Sends `Authorization: Bearer {your_token}` header.
**Use for:** OAuth 2.0 access tokens, JWT authentication, modern REST APIs.
Username/password authentication. Sends `Authorization: Basic {base64(username:password)}` header.
**Use for:** Legacy APIs, simple authentication schemes.
Custom header-based auth (e.g., `X-API-Key: {your_api_key}`).
**Use for:** API key authentication, custom auth schemes.
Credentials sent in the request body (e.g., `{"api_key": "{your_key}"}`).
**Use for:** Non-standard auth schemes, login endpoints.
For Bearer, Basic password, Header value, and Body value authentication, select or create a saved credential from **Secrets**. Existing credentials are preserved when editing; select a new credential only when you want to replace them.
***
## Parameters Configuration
Expert Mode
### Headers
Add custom HTTP headers as key-value pairs. Example: `Content-Type: application/json`
### Query Parameters (GET requests)
Add URL query parameters as key-value pairs. Template variables are supported in query parameter values.
Example:
```text theme={null}
order_id={{order_id}}
include=tracking
```
### Request Body (POST/PUT/PATCH)
Write your JSON request body in the editor. Use `{{variable_name}}` syntax to insert values collected from the conversation.
```json theme={null}
{
"customer_id": "{{customer_id}}",
"status": "contacted",
"timestamp": "{{current_datetime}}"
}
```
***
## Variables - Parameter Mapping from Conversation Context
Expert Mode
Variables define what information your agent needs to collect from the conversation before calling the API. Each variable tells the AI what information to collect from the caller before making the request.
### Variable Fields
| Field | Description |
| ----------------- | ---------------------------------------------------------------------- |
| **Name** | Variable name (e.g., `order_number`, `customer_email`) |
| **Type** | Data type: string, integer, float, boolean, date, email, phone |
| **Description** | What this variable is for (helps the AI understand when to collect it) |
| **Example** | Example value (guides the AI on expected format) |
| **Required** | If true, the AI must collect this before calling the API |
| **Default Value** | Used if not required and not provided by the customer |
### Example Variable
```
Name: order_number
Type: string
Description: Customer's order number, usually starts with ORD-
Example: ORD-12345
Required: Yes
```
The AI knows to ask the customer for their order number before making the request.
### Runtime Variables
Custom Action templates use flat `{{variable_name}}` placeholders in headers, query parameters, and the request body. These runtime values are available when present:
```text theme={null}
{{agent_number}}
{{agent_uuid}}
{{contact_number}}
{{direction}}
{{medium}}
{{current_datetime}}
{{timezone}}
```
Values returned by [Dynamic Context](/build/advanced/dynamic-context) are also available by their top-level key, such as `{{account_id}}` or `{{cal_email}}`.
Dotted prompt variables such as `{{contact.email}}` are for prompt rendering, not Custom Action payload substitution. If the action needs a caller name or email, define a variable for the agent to collect or return a flat key from Dynamic Context.
***
## Testing Tools
Use Postman or cURL to verify the endpoint is reachable, authentication works, and the request format is correct.
Configure the action with hardcoded values first (no variables) to verify basic functionality.
Replace hardcoded values with flat template variables such as `{{order_id}}`.
Start **Test Agent** and run a Web call, Phone call, or Chat session. Trigger the action through conversation and verify:
* Agent collects variables correctly
* API is called with correct data
* Agent uses the response appropriately
Verify agent behavior when the API returns errors:
* 404 (not found)
* 401 (authentication failed)
* 500 (server error)
* Timeout
***
## Error Handling
Configure your agent prompt to handle API errors gracefully:
```
When using the 'Lookup Order Status' tool:
If the tool returns an error:
- 404: "I don't see an order with that number. Could you double-check?"
- 500: "I'm having trouble accessing the system right now."
- Timeout: "The system is taking longer than expected."
- For any error, offer to have someone call them back.
```
***
## Troubleshooting
**Cause:** Invalid credentials or wrong auth type.
**Solution:** Verify credentials are correct, check auth type matches API requirements, test with Postman using the same credentials, verify token has not expired.
**Cause:** Incorrect URL or resource does not exist.
**Solution:** Verify the static endpoint URL, check that query parameters or body variables populate correctly, and test with static values first.
**Cause:** Variables not configured or descriptions are unclear.
**Solution:** Verify variables are defined in the Variables tab, add clear descriptions and examples, set required=true for essential variables, reference the tool by exact name in your prompt.
**Cause:** Incorrect syntax or variable does not exist.
**Solution:** Use exact syntax `{{variable_name}}`, verify the variable is defined, and avoid dotted placeholders such as `{{contact.email}}` in Custom Action request templates.
**Cause:** API responding too slowly.
**Solution:** Optimize API response time, consider using webhooks for slow operations, cache frequently accessed data.
***
## Security Best Practices
* **Use HTTPS only** for all API endpoints
* **Secure credentials** - never hardcode in URLs, rotate keys regularly
* **Limit permissions** - use read-only keys for lookup actions
* **Validate inputs** - your API should check for injection attempts and validate data types
* **Verify identity** - authenticate customers before exposing sensitive data
***
## Real-World Examples
* **Method:** GET
* **URL:** `https://api.salesforce.com/customers`
* **Auth:** Bearer token
* **Variable:** `customer_id` (string, required)
* **Query parameter:** `customer_id={{customer_id}}`
* **Method:** POST
* **URL:** `https://company.zendesk.com/api/v2/tickets`
* **Auth:** Basic (email/token)
* **Variables:** `issue_description` (string), `priority_level` (string)
* **Body:**
```json theme={null}
{
"ticket": {
"subject": "Call with {{caller_name}}",
"description": "{{issue_description}}",
"priority": "{{priority_level}}"
}
}
```
* **Method:** GET
* **URL:** `https://inventory.company.com/products/availability`
* **Auth:** Header (`X-API-Key`)
* **Variable:** `sku` (string, required, example: "PROD-12345")
* **Query parameter:** `sku={{sku}}`
***
## Next Steps
Learn about all tool types
Diagnose auth, payload, timeout, and response issues
Set up Cal.com appointment scheduling
Understand where variables come from and what happens after tool execution
Master template variables
Connect MCP servers for advanced integrations
# Tools Overview
Source: https://docs.itellico.ai/build/tools/overview
Enable your AI agents to execute real business tasks during conversations
## Overview
Tools let your AI agents do more than answer questions. With tools configured, your agents can schedule appointments, transfer calls, update systems, and connect to your existing business workflows — all during a live conversation.
Tools execute automatically based on conversation context and the prompt you provide to the agent. You define when and how tools should be used through [prompt engineering](/build/conversation/prompt-engineering-guide).
## What Are Tools?
Tools are pre-configured capabilities that your agent can invoke during conversations to accomplish specific tasks. When a customer requests something like booking an appointment or speaking to a specialist, your agent executes the appropriate tool automatically.
### How Tools Work
During conversations, your agent decides whether to respond directly or execute a tool:
```mermaid theme={null}
graph TD
A[Customer Message] --> B[AI Agent
Evaluates Context]
B --> C{Tool Needed?}
C -->|No| D[Respond Directly]
C -->|Yes| E[Execute Tool]
E --> F[Continue with Results]
D --> G[Continue Conversation]
F --> G
```
The agent uses **tool names and descriptions** to understand what each tool does. These details help the model select the right tool at the right moment.
**Best practices:**
* Give tools clear, descriptive names (e.g., "book\_appointment" not "tool1")
* Write detailed descriptions explaining what the tool does
* Add explicit guidance in your [agent prompt](/build/conversation/prompt-engineering-guide) about **when** to use each tool
While tool names and descriptions tell the agent **what** a tool does, your agent prompt should specify **when** to use it. For example: "When a customer asks to speak to a human, use the transfer\_to\_support tool."
***
## Available Tool Types
In the agent editor, the **Tools** tab add menu includes:
* **Transfer Call**
* **Calendar Booking**
* **Custom Action**
* **Web Search** *(Alpha)*
* **Calculator** (Expert Mode)
* **MCP Server** (Expert Mode)
Call ending is no longer a separate addable tool. Configure it in **Conversation** → **Call End** with **Allow AI to hang up**.
For tool-specific setup, see [Transfer Tools](/build/tools/transfer-tools), [Calendar Booking](/build/tools/booking-calendar), [Custom Action](/build/tools/custom-api-actions), [Web Search](/build/tools/web-search), [Calculator](/build/tools/calculator), and [MCP Servers](/build/advanced/mcp-servers).
For live variable and result flow, read [Conversation Data Flow](/build/conversation/runtime-data-flow).
***
## When Tools Execute
Tools execute **during the conversation** when triggered by your agent based on its prompt. Unlike traditional IVR systems that follow rigid scripts, AI agents use contextual understanding to determine when tools are appropriate.
### Trigger Mechanisms
**Instruction-Based Triggers:**
```text wrap theme={null}
When the customer asks to speak to a human, use the 'Transfer to Support' tool.
When the customer wants to schedule, use the 'Book Consultation' tool after you have the required details.
When the customer asks for up-to-date external information, use the 'Web Search' tool.
```
**Conditional Triggers:**
```jinja theme={null}
If the customer reports a billing issue:
1. Use the 'Lookup Account' tool to retrieve their information
2. If balance is overdue, transfer to billing department
3. If balance is current, troubleshoot the issue
{% if contact.contact_status == "vip" %}
Always offer to transfer VIP customers to dedicated support immediately.
{% endif %}
```
**Multi-Step Workflows:**
```text wrap theme={null}
Appointment Booking Flow:
1. Gather required information (name, email, preferred date)
2. Use 'Check Availability' tool to query Cal.com
3. Present options to customer
4. Use 'Book Appointment' tool to confirm
5. Confirm the booked slot and next steps clearly
6. End the conversation naturally or rely on **Allow AI to hang up** if you have enabled it in **Conversation** → **Call End**
```
Tools execute in real time during the call. Ensure connected systems are reliable and respond quickly to avoid awkward pauses in conversation.
***
## Configuring Tools
All tool configuration happens in your agent editor under the **Tools** tab.
Open your agent in the editor and click the **Tools** tab
Browse the available tools and click **Add** to configure a tool
Fill in the tool-specific configuration form:
* **Name**: Give your tool a clear, descriptive name
* **Description**: Explain what this tool does
* **Tool-specific settings**: Configure parameters based on the tool type
Save the tool to add it to your agent's toolkit
***
## Tools Table
Configured tools appear in a single table in the **Tools** tab.
Typical columns include:
* **Name** - Tool display name
* **Type** - Tool type (for example Transfer, Booking, Custom, Web Search, MCP Server)
* **Category** - Subtype or provider detail
* **Details** - Key configuration details
Use **Add** to create more tools, click a row to edit, and use the remove action to delete.
***
## Referencing Tools in Your Prompt
To use tools, reference them **by exact name** in your agent's prompt:
### Direct Reference
```text wrap theme={null}
When a customer asks to speak to someone about billing,
use the 'Transfer to Billing Department' tool.
```
### With Conditions
```text wrap theme={null}
If the customer's issue cannot be resolved:
1. Apologize for the inconvenience
2. Explain you're connecting them to a specialist
3. Use the 'Transfer to Support' tool
```
### With Parameters
```text wrap theme={null}
After gathering the customer's email and preferred date,
use the 'Book Consultation' tool to schedule the meeting.
```
Tool names are case-sensitive and must match exactly as configured. If you rename a tool, update all references in your prompt.
***
## Configuration Best Practices
Begin with basic tools before adding complex integrations. Add one tool at a time, test thoroughly, then add the next.
**Example progression:**
1. Add Transfer to Support
2. Add Booking or Web Search
3. Add Custom Action
4. Add MCP Server only if you need external tool catalogs
Tool names are critical because the model uses them to understand what each tool does. Use descriptive, action-oriented names that clearly convey the function's purpose.
**Why this matters:** The model relies on function names and descriptions to detect when a function needs to be called and choose the right tool for the task.
**Good names:**
* "Get Customer Account" - Clear action verb + specific target
* "Transfer to Billing Department" - Specific destination included
* "Book 30-Minute Consultation" - Includes relevant details
**Poor names:**
* "Tool 1" - No context about what it does
* "Transfer" - Too generic, unclear where
* "API Call" - Doesn't describe the tool
Tool descriptions help the model understand **what** the tool does. The description should explain the tool's purpose, what it returns, and what parameters it uses.
**Best practices from [OpenAI function calling](https://platform.openai.com/docs/guides/function-calling):**
* Clearly describe what the tool does and what it returns
* Explain what parameters or data it uses
* Use precise language that guides the model's understanding
* Keep it concise yet comprehensive
**Example:**
```
Name: Get Customer Account
Description: Retrieves customer account data from Salesforce CRM using
their phone number. Returns account status, balance, and recent orders.
```
**Note:** Describe **what** the tool does in the description. Specify **when** to use it in your [agent prompt](/build/conversation/prompt-engineering-guide).
Test each tool in the agent test interface before going live:
* Verify tool executes correctly
* Test success scenarios
* Test failure scenarios
* Verify error handling
* Check conversation flow
Configure fallback behaviors for when tools fail. Instruct your agent what to do when tools don't work.
```
If the 'Book Appointment' tool fails:
1. Apologize sincerely
2. Offer to have someone call back to schedule
3. Collect their preferred callback number
4. Summarize the fallback plan before ending the conversation
```
Ensure agents gather required data before executing tools. Don't attempt to book appointments without email addresses or transfer calls without explaining why.
```
Before using the 'Book Consultation' tool:
1. Confirm the customer wants to schedule
2. Ask for their email address if not in contact record
3. Discuss their preferred dates and times
4. Explain what the consultation will cover
5. Only then execute the booking tool
```
Use appropriate authentication for all custom tools. Never expose API keys or credentials in URLs or unencrypted fields.
* Use Bearer tokens for API authentication
* Use Basic auth over HTTPS only
* Store sensitive credentials securely
* Rotate credentials regularly
***
## Testing Tools
Some tools only work during a real phone call. Transfers to a phone number or SIP address cannot be tested in the web simulator — the transfer action requires an actual telephony connection. Use **Test Agent → Phone call** to test these.
Before deploying agents with tools, thoroughly test in the dashboard test interface:
Click **Test Agent** in the agent editor's top-right corner
Click **Start web call** to begin a test conversation
Run through scenarios that trigger each configured tool
Check that tools execute correctly and handle responses appropriately
Simulate failures to verify error handling works as expected
Examine the conversation transcript to ensure flow is natural and tools integrate smoothly
### What to Test
**For Transfer Tools:**
* Transfer executes to correct destination
* Agent-transfer hold music plays if configured
* Transfer message is appropriate
* Cold transfer behavior and fallback handling work correctly
**For Booking Tools:**
* Availability is retrieved correctly
* Booking confirms successfully
* Email/SMS notifications send properly
* Timezone handling is accurate
**For Custom Actions:**
* Connected systems respond successfully
* Authentication works
* Response data is available to agent
* Error responses are handled gracefully
**For All Tools:**
* Agent references tool by correct name
* Agent gathers required information first
* Conversation flow remains natural
* Failures don't break the conversation
Test calls use real integrations. If you're testing a booking tool, it will create real appointments in your Cal.com account. Clean up test data afterward.
***
## Common Use Cases
### Customer Support Workflow
```text wrap theme={null}
Agent Configuration:
- Transfer to Support (for complex issues)
- Lookup Customer Account (custom API)
- Create Support Ticket (custom API)
- **Allow AI to hang up** enabled in **Conversation** → **Call End**
Instructions:
When a customer calls:
1. Greet them warmly
2. Use 'Lookup Customer Account' to retrieve their information
3. Ask about their issue
4. If you can resolve it, do so using knowledge base
5. If it's complex, use 'Create Support Ticket' and provide ticket number
6. If customer requests human, use 'Transfer to Support'
7. When resolved, confirm next steps and close naturally
```
### Appointment Booking Workflow
```text wrap theme={null}
Agent Configuration:
- Book Consultation (Cal.com booking)
- Transfer to Scheduling (fallback)
- **Allow AI to hang up** enabled in **Conversation** → **Call End**
Instructions:
When a customer wants to book:
1. Ask what type of appointment they need
2. Collect email address if not in contact record
3. Discuss their preferred dates
4. Use 'Book Consultation' to show availability and confirm
5. If booking succeeds, confirm details verbally
6. If booking fails, use 'Transfer to Scheduling'
7. Close the conversation naturally after confirming the outcome
```
### Sales Qualification Workflow
```text wrap theme={null}
Agent Configuration:
- Lookup Company Data (custom API)
- Update CRM Lead (custom API)
- Transfer to Sales (for qualified leads)
- **Allow AI to hang up** enabled in **Conversation** → **Call End**
Instructions:
For outbound sales calls:
1. Introduce yourself and purpose
2. Use 'Lookup Company Data' to retrieve firmographics
3. Ask qualifying questions (budget, timeline, authority)
4. Use 'Update CRM Lead' with qualification status
5. If qualified, use 'Transfer to Sales' with context
6. If not qualified, thank them and close the conversation naturally
```
***
## Troubleshooting Common Issues
**Problem:** Agent doesn't use the tool even though it should.
**Solutions:**
* Verify the tool name in your prompt matches exactly (case-sensitive)
* Verify the tool exists in the **Tools** table and any required integration is connected
* Make your prompt more explicit about when to use the tool
* Test in isolation by explicitly asking the agent to use the tool
* Review the conversation transcript to see the agent's reasoning
**Problem:** Agent verbally confirms it's executing a tool (e.g., "I'm transferring you now") but the tool doesn't execute until the next conversation turn.
**Why this happens:** The agent generates a response and executes the tool in the same turn, but only one can happen per turn.
**Solution:** Prompt the agent to ask for user confirmation before executing tools:
```jinja theme={null}
Before using the 'Transfer to Support' tool:
1. Explain why you're transferring them
2. Ask "Would you like me to transfer you now?"
3. Wait for confirmation
4. Once confirmed, execute the 'Transfer to Support' tool
```
This ensures the agent executes the tool immediately after receiving confirmation, not in the same turn as announcing it.
**Problem:** Custom tools fail with 401/403 errors.
**Solutions:**
* Verify credentials are correct and not expired
* Check authentication type matches the connected system's requirements
* Ensure Bearer tokens include "Bearer" prefix if needed
* Ask the owner of the connected system to confirm the connection works outside the agent
* Review the connected system's authentication requirements
**Problem:** Cal.com booking tool returns errors.
**Solutions:**
* Verify Cal.com integration is connected
* Check event type exists and is active
* Ensure meeting platform is configured in Cal.com
* Verify scheduling windows allow requested dates
* Check timezone configuration
* Test booking manually in Cal.com to verify availability
**Problem:** Transfer tool executes but doesn't connect.
**Solutions:**
* Verify destination is in correct E.164 format (e.g., +15551234567)
* Ensure phone number is reachable (for phone transfers)
* Verify SIP address is correct (for SIP transfers)
* Test destination independently
***
## Next Steps
Configure destinations, modes, routing patterns, and call end
Set up Cal.com appointment scheduling with email and SMS notifications
Connect your agents to external systems and APIs
Understand how values move into live tools and post-call workflows
Learn how to write an effective agent prompt
Master advanced prompting techniques for reliable agent behavior
***
## Common Questions
Yes. The agent selects tools based on the name and description you provide. Use clear, descriptive names like "Transfer to Sales" or "Book Appointment" — not "Tool 1" or "Action A". Names are case-sensitive.
Built-in tools (Transfer Call, Calendar Booking, Web Search) require no code. Custom API Actions need an API endpoint to call, but you configure them entirely in the UI — no SDK or server-side code required.
The agent receives the error response and can handle it gracefully if your prompt includes fallback instructions. Check the conversation timeline to see the exact request and response for any tool call.
# Transfer Tools
Source: https://docs.itellico.ai/build/tools/transfer-tools
Route active calls to agents, phone numbers, or SIP destinations
**Access:** Open your agent editor and go to the **Tools** tab.
Phone number and SIP transfers only work during a real phone call. They cannot be tested in the web simulator — use **Test Agent → Phone call** to test these.
***
## Adding a Transfer Tool
In your agent editor, go to the **Tools** tab and click **Add** → **Transfer**.
Use a clear, descriptive name — your prompt will reference it by exact name.
**Good:** "Transfer to Billing", "Transfer to On-Call Manager"
**Poor:** "Transfer 1", "Escalate"
Select **Agent**, **Phone**, or **SIP** (see [Transfer Destinations](#transfer-destinations) below).
Fill in the destination details for the chosen type.
Click **Save**. The transfer tool appears in the tools table and can be referenced in your prompt.
### Using in Your Prompt
Reference the transfer tool by its exact name:
```text theme={null}
When a customer asks to speak with a human:
1. Explain why you're transferring them
2. Ask "Would you like me to transfer you now?"
3. Wait for confirmation
4. Use the 'Transfer to Support' tool
```
***
## Transfer Destinations
| Destination | Best when | Example |
| -------------------- | ----------------------------------------------------------------------------- | ---------------------------------------- |
| **Another AI agent** | You want to stay inside itellicoAI and route to a more specialized agent | Billing agent, language-specific agent |
| **Phone number** | You need to connect to a human or external destination over the phone network | Live support queue, on-call manager |
| **SIP address** | You need to route into a PBX, contact center, or SIP-enabled system | Contact center queue, internal extension |
Transfer to another AI agent in your itellicoAI account.
**Configuration:**
Choose **Agent**
Select the target agent from the dropdown
In Expert mode, configure audio to play while connecting (0–300 seconds each).
**Benefits:** The receiving agent can access the prior conversation history. No telephony costs. Works on all call types including web calls.
Expert Mode
**Audio settings:** You can add hold music and a ring tone for agent transfers. For instant AI-to-AI routing, disable both for immediate connection.
Transfer to an external phone number — mobile, landline, or business number.
**Configuration:**
Choose **Phone**
Use E.164 format: `+14155551234`
* Must include country code (`+1` for US/Canada)
* No spaces, dashes, or parentheses
Phone transfers incur outbound calling costs and **only work during active phone calls**. They do not work in web calls or widget conversations.
Expert Mode
Transfer to a SIP URI for integration with PBX systems and contact centers.
**Configuration:**
Ensure a SIP trunk is configured in itellicoAI and the destination endpoint is reachable.
Choose **SIP**
Use a valid SIP URI: `sip:support@pbx.company.com`
SIP transfers **only work during active phone calls**. They cannot be used during web calls or widget conversations.
***
## Multiple Transfer Tools
Write fallback logic directly in the prompt:
```text theme={null}
1. Attempt 'Transfer to Technical Support'
2. If that fails, attempt 'Transfer to General Support'
3. If all fail, apologize and collect a callback number
```
Use variables to route based on customer data:
```jinja theme={null}
{% if contact_account_type == "enterprise" %}
Route to 'Transfer to Enterprise Support'
{% else %}
Route to 'Transfer to General Support'
{% endif %}
```
```jinja theme={null}
{% set current_hour = current_datetime | date('H') | int %}
{% if current_hour >= 9 and current_hour < 17 %}
Business hours: use 'Transfer to Support Team'
{% else %}
After hours: use 'Transfer to On-Call Support'
{% endif %}
```
***
## Call End
Call ending is configured in **Call Flow**, not in the **Tools** tab.
When **Allow AI to hang up** is enabled, the agent gets a default `end_conversation` capability it can use when the task is complete or the caller says goodbye.
**To enable:** Open **Call Flow** → scroll to **Call End** → turn on **Allow AI to hang up**.
```text theme={null}
Once you've successfully completed their request:
1. Ask "Is there anything else I can help you with?"
2. If they say no, thank them and end the call naturally
```
The call ends after the agent finishes the closing turn. Make sure your prompt tells the agent to confirm the caller is done before ending.
***
## Best Practices
Never transfer without context. Explain who you're connecting them to and why, then confirm.
**Good:**
```
"I understand you need help with billing. Our billing team can access
your account details. Would you like me to connect you now?"
```
**Poor:**
```
"Hold please." [immediate transfer]
```
Prompt the agent to wait for a yes before transferring to avoid announcing a transfer that happens on the next turn.
```
"I can transfer you to our billing team. Would you like me to do that now?"
[Wait for response]
[Execute transfer after confirmation]
```
Collect a name, account number, and brief issue summary before transferring so the recipient doesn't need to ask again.
Every transfer path needs a fallback for when the destination is unavailable.
```
If 'Transfer to Support' fails:
1. Apologize: "I'm having trouble connecting right now"
2. Offer a callback: collect number and best time
3. Confirm: "Expect a call from us within the hour"
```
* ✅ `+14155551234`
* ❌ `(415) 555-1234`
* ❌ `415-555-1234`
* ❌ `14155551234` (missing +)
***
## Testing
Phone number and SIP transfers require a real phone call to test. Use **Test Agent → Phone call** for these. The web simulator cannot execute telephony transfers.
Before going live, verify:
* Transfer executes to the correct destination
* Agent explains the transfer and confirms before executing
* Failure scenarios are handled gracefully (no answer, busy, invalid destination)
* Hold music and ring tone play as expected (agent transfers, Expert mode)
* Conversation timeline shows the transfer event in [Conversations](/manage/conversations/detail)
***
## Troubleshooting
* Verify destination agent is active and published
* Test the destination phone number independently
* Check SIP trunk configuration and firewall rules
* Verify RTP ports are open (typically 10000–20000)
* Check NAT configuration on SIP endpoints
* Ensure compatible codecs are configured (G.711, Opus)
* Verify E.164 format: `+14155551234`
* Check account balance and telephony credits
* Confirm the destination country is supported
* Verify both agents are in the same itellicoAI account
* Confirm the transfer is configured as an agent transfer, not phone
* Check the receiving agent's prompt for context-handling instructions
* Enable **Play Music** in the transfer settings (Expert mode)
* Set a non-zero music duration
* Hold music only applies to agent transfers
* Verify SIP URI format: `sip:user@domain.com`
* Check that the SIP trunk is configured in itellicoAI
* Review firewall rules for SIP traffic (port 5060/5061)
* Test the SIP endpoint with a SIP client independently
***
## Next Steps
See all available tool types
Set up appointment scheduling
Connect to external systems
Validate phone and SIP transfer behavior
# Web Search
Source: https://docs.itellico.ai/build/tools/web-search
Enable your agent to search the web for real-time information
## How Web Search Works
The Web Search tool enables your agent to search the internet for real-time information during conversations. It provides up-to-date answers for questions beyond your agent's training data or knowledge base.
Web Search is currently in alpha. Each search incurs an additional charge of €0.01.
***
## Use Cases
Answer questions about recent news, updates, or time-sensitive information
Look up current pricing, features, or offerings during sales calls
Find specifications, availability, or reviews not in your knowledge base
Search for addresses, hours, directions, or local information
***
## Configuration
Navigate to **Tools** in your agent editor and add a new Web Search tool.
### Basic Settings
| Setting | Description | Default |
| --------------------- | ----------------------------------------------- | -------------------------------- |
| **Filler Phrase** | What the agent says while searching | "Let me look that up for you..." |
| **Max Results** | Maximum search results to return (1-10) | 3 |
| **Search Depth** | Basic (faster) or Advanced (more comprehensive) | Basic |
| **Include AI Answer** | Include an AI-generated summary of results | Enabled |
### Filler Phrase
Customize the phrase your agent says while performing the search. The search typically takes 2-5 seconds.
**Examples:**
* "Let me search for that..."
* "One moment while I look this up..."
* "I'll find the latest information on that..."
### Search Depth
**Faster results, less comprehensive**
* Response time: 1-2 seconds
* Best for: Simple factual queries
* Cost: Lower per search
**Use when:**
* Quick answers are more important than depth
* Simple factual questions
* High call volume where speed matters
**More comprehensive, slightly slower**
* Response time: 2-4 seconds
* Best for: Complex queries requiring thorough research
* Cost: Higher per search
**Use when:**
* Detailed information is required
* Complex multi-part questions
* Research-heavy conversations
### Domain Restrictions
Optionally restrict searches to specific domains:
```json theme={null}
["example.com", "docs.example.com", "help.example.com"]
```
**Use cases for domain restrictions:**
* Limit to your own documentation sites
* Restrict to trusted sources only
* Focus on specific industry publications
Leave empty to search the entire web.
At runtime, domains are normalized and capped at 25 entries.
***
## How It Works
```mermaid theme={null}
sequenceDiagram
participant User
participant Agent
participant Search as Web Search
User->>Agent: "What's the current price of..."
Agent->>Agent: Decides to search
Agent->>User: "Let me look that up..."
Agent->>Search: Search query
Search-->>Agent: Search results + AI summary
Agent->>User: Provides answer with sources
```
1. You ask a question requiring current information
2. Agent determines web search is needed
3. Agent speaks the filler phrase
4. The search runs
5. Agent synthesizes results into a natural response
***
## Best Practices
**Write clear triggers:** In your agent's prompt, specify when to use web search:
```text theme={null}
Use web search when:
- Asked about current events, news, or recent developments
- Questions about competitor pricing or features
- Information not in your knowledge base
- Time-sensitive data (stocks, weather, schedules)
Do NOT use web search when:
- Information is in the knowledge base
- General knowledge questions
- Company-specific information you already have
```
**Keep filler phrases natural:** Match the phrase to your agent's personality and the situation.
**Use domain restrictions wisely:** Only restrict if you have a specific reason. Open search provides more comprehensive results.
**Consider search depth:** Start with Basic for speed, switch to Advanced if results are insufficient.
***
## Limitations
* **Internet access required:** Requires network connectivity
* **Search takes time:** 2-5 seconds per search
* **Results vary:** Search quality depends on query clarity
* **Query length:** Search queries are capped at 500 characters
* **Cost per search:** Each successful search is tracked as a billable usage event
***
## Combining with Knowledge Base
Web Search and Knowledge Base work together:
| Source | Best for |
| -------------- | ---------------------------------------------------- |
| Knowledge Base | Company-specific, curated, controlled information |
| Web Search | Current events, external data, real-time information |
**Recommendation:** Use your knowledge base for stable company information and web search for dynamic external data.
***
## Next Steps
Explore all available tools
Build custom integrations
Add curated information sources
Test web search in conversations
# AI Pipeline Guide
Source: https://docs.itellico.ai/build/voice-speech/ai-pipeline-guide
Understand how transcriber, AI model, voice, timing, and pronunciation work together as one pipeline
Your callers do not experience your transcriber, voice, model, and timing settings separately.
They experience one conversation.
This guide helps you treat the AI pipeline as one system so you can make better tradeoffs before launch.
## Why This Matters
Most voice-quality problems are not caused by one bad setting.
They usually come from the interaction between:
* how accurately the caller is transcribed
* how quickly the model decides what to say
* how natural the chosen voice sounds
* how the system handles pauses, interruptions, and pronunciation
If you only optimize one layer, the conversation can still feel slow, robotic, or error-prone.
## The Five Parts Of The AI Pipeline
| Part | What it controls | Main doc |
| ------------------ | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Transcriber** | How caller audio becomes text | [Transcriber](/build/voice-speech/transcriber) |
| **AI model** | How the agent reasons and responds | [Choose AI Model](/build/voice-speech/choose-ai-model) |
| **Voice** | How the response sounds to the caller | [Select Voice](/build/voice-speech/select-voice) |
| **Voice behavior** | Speed, stability, style, and pronunciation | [Voice Settings](/build/voice-speech/voice-settings) and [Custom Pronunciations](/build/voice-speech/custom-pronunciations) |
| **Timing** | Interruptions, pauses, silence, and turn-taking feel | [Turn-Taking and Timing](/build/advanced/turn-taking-and-timing) |
## Start With The Outcome You Need
Choose the pipeline configuration based on the actual conversation you are deploying.
Prioritize low latency, clear pronunciation, and interruption handling.
Start with:
* a fast [transcriber](/build/voice-speech/transcriber)
* a clear, neutral voice
* conservative [turn-taking](/build/advanced/turn-taking-and-timing) tuning
* minimal ambient effects
Prioritize warmth, brand fit, and consistent pacing.
Start with:
* a voice that matches your tone and audience
* stronger [voice prompting](/build/conversation/prompt-engineering-guide)
* pronunciation rules for product and company names
* test calls with realistic objections and interruptions
Prioritize language coverage and locale accuracy.
Start with:
* language support in the [transcriber](/build/voice-speech/transcriber)
* locale-matched voices in [Select Voice](/build/voice-speech/select-voice)
* test scripts for each target language
* explicit prompt instructions if tone or phrasing changes by region
Prioritize clarity, consent, and predictable behavior.
Start with:
* short, direct voices with minimal embellishment
* clear [announcements](/build/advanced/announcements)
* explicit [privacy controls](/build/advanced/conversation-privacy-controls)
* conservative timing settings so callers can interrupt easily
## Configuration Order
Work through the pipeline in this order. Each layer depends on the one before it.
| Step | What to configure | Why first |
| ------------------------ | -------------------------------------------------------- | --------------------------------------------------------- |
| **1. Transcriber** | Language, provider, model | If the caller is misheard, nothing downstream can recover |
| **2. Voice** | Provider, voice, cloning | Pick what callers hear once transcription is solid |
| **3. Voice refinements** | Settings, pronunciations, ambient sound, thinking sounds | Fine-tune after the core voice is chosen |
| **4. Timing** | Turn-taking, silence, interruptions | Tune last — timing sliders can mask deeper problems |
Do not start with timing. If the transcriber, voice, or prompt is already causing friction, adjusting timing hides the real problem instead of fixing it.
**Where to go for each step:**
* [Transcriber](/build/voice-speech/transcriber) — provider and language breakdown
* [Select Voice](/build/voice-speech/select-voice) — catalog and provider guidance
* [Voice Settings](/build/voice-speech/voice-settings), [Custom Pronunciations](/build/voice-speech/custom-pronunciations), [Ambient Sound](/build/voice-speech/ambient-sound), [Thinking Sounds](/build/voice-speech/thinking-sounds)
* [Turn-Taking and Timing](/build/advanced/turn-taking-and-timing)
## Common Symptoms And Where To Look First
| Symptom | First place to look | Then check |
| ----------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------ |
| Agent mishears names, addresses, or numbers | [Transcriber](/build/voice-speech/transcriber) | [Custom Pronunciations](/build/voice-speech/custom-pronunciations) |
| Voice sounds wrong for the brand | [Select Voice](/build/voice-speech/select-voice) | [Prompt Engineering Guide](/build/conversation/prompt-engineering-guide) |
| Speech sounds robotic or uneven | [Voice Settings](/build/voice-speech/voice-settings) | [Select Voice](/build/voice-speech/select-voice) |
| Agent cuts callers off | [Turn-Taking and Timing](/build/advanced/turn-taking-and-timing) | [Transcriber](/build/voice-speech/transcriber) |
| Agent feels slow after the caller stops talking | [Turn-Taking and Timing](/build/advanced/turn-taking-and-timing) | [Choose AI Model](/build/voice-speech/choose-ai-model) |
| Product names or company names are spoken badly | [Custom Pronunciations](/build/voice-speech/custom-pronunciations) | [Prompt Engineering Guide](/build/conversation/prompt-engineering-guide) |
| Cloned voice sounds inconsistent | [Voice Cloning](/build/voice-speech/voice-cloning) | [Voice Settings](/build/voice-speech/voice-settings) |
## A Practical Rollout Sequence
Confirm the prompt, tools, and knowledge work before you spend time on voice tuning.
Listen for pace, pronunciation, and interruption feel in the browser.
Run at least one real phone call. Phone audio and network behavior often change the result.
Check the transcript, timing, tool execution, and any post-call automation before launch.
## Common Mistakes
A beautiful voice does not help if the caller is transcribed inaccurately. Start with recognition quality, then optimize style.
Ambient sound can improve feel, but it does not solve slow model responses, slow tools, or high-latency transcription.
Always test with the kinds of callers you actually expect: different accents, speeds, noise levels, and interruption patterns.
If you change the transcriber, voice, prompt, and timing together, you will not know what actually improved or broke the conversation.
## Next Steps
Browse, preview, and choose the voice your callers hear
Pick the speech-to-text layer that fits your languages and latency needs
Create and evaluate custom branded voices
Tune pauses, interruptions, and silence handling
# Ambient Sound
Source: https://docs.itellico.ai/build/voice-speech/ambient-sound
Add background ambience to create natural-sounding conversations
## What Ambient Sound Does
Ambient sound adds subtle background audio behind your agent's voice, making conversations feel more natural and less sterile. From office ambience to café sounds, these audio layers create a sense of presence.
Access ambient sound settings by navigating to your agent in the [agent editor](/build/getting-started/agent-editor), then the **General** tab, then **Sounds** section.
***
## How It Works
Ambient sound plays continuously in the background during conversations:
**What it does:**
* Adds environmental context (office, café, call center)
* Reduces the "sterile AI" feeling
* Makes pauses feel more natural (not dead silence)
* Creates atmosphere and personality
**What it shouldn't do:**
* Replace or drown out the agent's voice
* Distract customers from the conversation
When done right, customers barely notice it consciously—but the conversation feels more natural.
***
## Adding Ambient Sound
### Select Background Sound
1. Navigate to **General** → **Sounds** in your agent editor
2. Open the **Preset sounds** dropdown
3. Choose from the preset ambient sounds:
No ambient sound
Gentle office sounds, keyboard typing, paper shuffling, distant conversations
Active call center ambience, multiple agents talking in background, phones ringing occasionally
Coffee shop atmosphere, gentle chatter, espresso machines, casual background noise
Urban environment, distant traffic, pedestrians, city ambience
Nature sounds, birds chirping, gentle breeze, peaceful outdoor atmosphere
Subtle air conditioning or fan noise, gentle white noise
4. Changes save automatically
### Adjust Volume Level
After selecting a preset or uploading a custom sound, adjust its volume:
1. Use the **Volume Level** slider
2. Range: **0% to 200%**
* **0%**: Muted
* **100%**: Default ambient mix
* **200%**: Stronger background bed
3. Changes save automatically as you adjust
***
## Use Cases by Environment
**Best for:**
* Corporate customer support
* Professional services (accounting, legal, consulting)
* B2B sales agents
* Administrative assistants
**Atmosphere:**
* Professional and organized
* "You're calling a real office" feeling
* Trustworthy and established
**Best for:**
* High-volume support centers
* Order processing
* Technical support
* Emergency hotlines
**Atmosphere:**
* Busy, responsive organization
* "High-volume operation" credibility
* Energetic and capable
**Best for:**
* Lifestyle brands
* Hospitality/restaurant booking
* Creative services
* Informal customer service
**Atmosphere:**
* Friendly and approachable
* Relaxed and comfortable
* Human and personal
**Best for:**
* Healthcare and medical
* Financial services
* Legal services
* When maximum clarity is critical
**Why:**
* Some industries prefer pristine audio
* Regulatory or compliance reasons
* Customer preference for minimal distractions
**Recommendation:** Set to **None**
***
## Custom Ambient Sounds
In addition to the preset ambient sounds, you can upload your own custom audio files to create a unique atmosphere for your agent.
### Supported Formats
Custom ambient sounds support the following audio formats:
| Format | Extension | Notes |
| ----------------- | --------- | ---------------------------------- |
| MP3 | `.mp3` | Recommended for best compatibility |
| WAV | `.wav` | Uncompressed, larger file size |
| OGG | `.ogg` | Good compression, smaller files |
| **Requirements:** | | |
* **Maximum file size:** 10 MB
* **Recommended length:** 30 seconds to 2 minutes (audio loops automatically)
* **Audio quality:** 44.1 kHz sample rate, stereo or mono
### Adding a Custom Sound
1. Navigate to **General** → **Sounds** in your agent editor
2. In **Ambient Sounds**, click **Upload custom sound**
3. Select an MP3, WAV, or OGG file
4. Once uploaded, the custom sound overrides the preset sound selection for this agent
### Tips for Custom Sounds
**Create seamless loops:** Ensure your audio loops smoothly without noticeable cuts or pops at the start/end points.
**Keep it subtle:** Custom sounds should enhance, not distract. Avoid music with lyrics or dramatic changes.
**Test extensively:** Custom audio may behave differently than presets. Test on multiple devices and call types.
**Consider licensing:** Ensure you have the rights to use any audio you upload.
Need help creating custom ambient sounds? Free resources like [freesound.org](https://freesound.org) offer Creative Commons licensed ambient recordings suitable for agent backgrounds.
***
## Best Practices
**Start subtle:** Begin with lower volumes (-80% to -60%) and increase only if needed. Ambience should be barely noticeable.
**Match your brand:** Choose sounds that align with your company's personality and industry.
**Test with real calls:** Make test calls to hear how ambience sounds in actual conversations, not just samples.
**Consider your audience:** Older customers or those with hearing difficulties may prefer no ambience or very low volumes.
**Avoid overuse:** Not every agent needs ambience. Use it when it enhances the experience, not by default.
***
## Testing Ambient Sound
After adding ambient sound:
1. Make test calls to your agent on different channels ([phone](/launch/phone-numbers) and [web](/manage/web-widgets/overview))
2. Listen for the background ambience during pauses and while the agent speaks
3. Verify the volume is appropriate (not too loud or distracting)
4. Adjust volume if needed
5. Test with team members for feedback
**What to check:**
* Can you still clearly understand the agent's voice?
* Does the ambience feel natural or forced?
* Is the volume appropriate during pauses?
* Does it match your brand atmosphere?
* Does it work consistently across phone and web calls?
***
## Coming Soon: Backchanneling
Backchanneling (audio cues like "uh-huh", "yeah", "I see") will be available soon. These cues signal active listening and make conversations feel more natural.
Currently displayed in the UI under **Backchanneling** with a "Coming Soon" badge.
***
## Next Steps
Fine-tune voice parameters
Choose a different voice
Correct pronunciation of specific terms
Test ambient sound with web calls
# Choose AI Model
Source: https://docs.itellico.ai/build/voice-speech/choose-ai-model
Select the language model that powers your agent's reasoning and responses
**Access:** Open an agent and go to **General** → **Thinking**.
## What the Model Does
The AI model reads the conversation transcript and decides what to say next. It follows your prompt, retrieves from knowledge bases, and triggers tools like transfers and bookings. Choosing the right model means balancing response quality, latency, and cost.
Some models incur additional per-minute charges on top of the base rate. Check the cost indicator next to each model in the catalog, or see [Premium Features](/billing/premium-features) for details.
***
| Preset | What it does |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Intelligent** | Higher-quality responses with more latency. Use for complex reasoning, multi-step conversations, or brand-sensitive interactions. |
| **Balanced** | Good quality and speed for most use cases. Recommended for most agents. |
| **Fast** | Lowest latency. Use for high-volume or simple routing and qualification flows. |
Switch only if testing shows you need more quality or speed.
Expert mode opens the full provider catalog under **General → Thinking**. Use it when you need a specific model, EU-hosted processing, or want to compare providers directly.
### Provider Comparison
| Provider | Best for | Notes |
| ---------------- | ----------------------------------------- | ------------------------------------------------------------------------------------- |
| **Azure OpenAI** | Most production agents | Recommended — same GPT models as OpenAI, EU-hosted, lower latency |
| **OpenAI** | When Azure is not available | Same models as Azure OpenAI without EU hosting |
| **Anthropic** | Conversational quality, complex reasoning | Claude models are more verbose and conversational than GPT |
| **Groq** | Maximum speed, simple tasks | Sub-500ms responses; less capable for complex reasoning |
| **Custom** | Bring-your-own model endpoint | OpenAI-compatible endpoint configured with a base URL, model name, and API key secret |
The catalog shows cost, speed, and intelligence ratings for each model. Click a provider to filter the list.
### Custom LLM
Expert Mode
Choose **Custom** when you need to connect an OpenAI-compatible endpoint that is not part of the built-in catalog.
The custom model form asks for:
* **Base URL** — the API base URL for your model provider
* **Model Name** — the model identifier to send with requests
* **API Key Secret** — a saved team secret used to authenticate requests
Custom LLM configuration is only available in Expert mode. If an agent already uses a custom model and you switch back to Simple mode, the model stays configured but appears as an Expert-mode setting.
### Recommended Models
| Model | Use when |
| --------------------------- | ------------------------------------------------------- |
| Azure OpenAI — GPT-4.1 Mini | Best default — fast, reliable, good tool use, EU-hosted |
| Azure OpenAI — GPT-4.1 | Need stronger reasoning or multi-step logic, EU-hosted |
| Claude Haiku 4.5 | Speed-critical or high-volume deployments |
| Claude Sonnet 4.5 | Maximum conversational quality — expect higher latency |
| Groq models | Sub-500ms speed, simple flows only |
***
## Response Style
The **Response Style** slider appears under **General → Thinking** when the selected model supports adjustable temperature.
Temperature controls how consistent or varied the agent's responses are:
| Range | Behavior | Use for |
| ----------- | ------------------- | -------------------------------------------------------- |
| **0.0** | Fully deterministic | Most agents — maximizes reliability for tool calling |
| **0.1–0.3** | Slight variation | Agents that need natural phrasing variation |
| **0.4–0.7** | More creative | Personality-driven agents where consistency matters less |
| **0.8+** | Unpredictable | Avoid in production |
Use 0.0 for agents that transfer calls, book appointments, or call APIs. Higher temperature reduces tool execution reliability.
***
## Next Steps
Choose how your agent sounds to callers
Configure the speech-to-text layer
Fine-tune speed, stability, and style
Test model performance with web calls
# Custom Pronunciations
Source: https://docs.itellico.ai/build/voice-speech/custom-pronunciations
Define pronunciation rules for brand names, technical terms, and difficult words
**Access:** Open an agent, go to **General** → **Speaking**.
## How Custom Pronunciations Work
Expert Mode
Custom pronunciations let you define how specific words should sound, ensuring your agent always pronounces brand names, technical terms, and acronyms correctly. These rules work alongside your [voice selection](/build/voice-speech/select-voice) and [voice settings](/build/voice-speech/voice-settings) to shape how your agent sounds.
## Adding Pronunciations
### Single Replacement
1. Click **Add Replacement**
2. Enter the **target word** (the word to replace)
3. Enter the **pronunciation** (how it should sound)
4. Click **Add**
**Examples:**
* **Target:** Nike → **Pronunciation:** Nai-key
* **Target:** API → **Pronunciation:** A-P-I
* **Target:** 24/7 → **Pronunciation:** twenty-four seven
* **Target:** EST → **Pronunciation:** Eastern Time
**Target words must be single words only** - spaces are not allowed. Use complete words like `Nike` or `API`, not phrases like `customer service`.
### Bulk Import via CSV
For importing many pronunciations at once:
1. Click **Import CSV**
2. Download the template if needed
3. Prepare your CSV with two columns: `target`, `replacement`
4. Drag and drop your CSV file or click to select
5. Review the preview and click **Import**
**CSV format:**
```csv theme={null}
target,replacement
Nike,Nai-key
EST,Eastern Time
24/7,twenty-four seven
API,A-P-I
```
**Limits:**
* Maximum 500 pronunciations per agent
* CSV file max size: 5MB
***
## Phonetic Spelling Tips
### Simple Phonetic Spelling
Write replacements as simple, readable phonetic text:
**Good examples:**
* Nike → Nai-key
* SQL → sequel (or) S-Q-L
* Wi-Fi → why-figh
* iOS → eye-oh-ess
**Tips:**
* Use hyphens to separate syllables: Nai-key, A-P-I
* Spell it like you'd explain pronunciation to someone
* Test with your voice to hear how it sounds
### Common Patterns
**Acronyms (spell out each letter):**
* API → A-P-I
* URL → U-R-L
* HTTP → H-T-T-P
* AWS → A-W-S
**Brand names (phonetic spelling):**
* Nike → Nai-key
* Adidas → ah-dee-dahs
* Chipotle → chih-poht-lay
**Numbers and time:**
* 24/7 → twenty-four seven
* 9am → nine A-M
* EST → Eastern Time
* 5pm → five P-M
**Technical terms:**
* SQL → sequel (or) S-Q-L
* API → A-P-I
* URL → you-are-ell
* WiFi → why-figh
***
## Advanced: Provider-Specific Markup
Pronunciation entries are plain text replacements before speech is synthesized. Simple phonetic spelling works across providers and is the safest default.
Some TTS providers support provider-specific markup such as SSML phoneme tags. If you use markup, test it with the exact voice provider selected for the agent.
**Example:**
```
espresso → ess-press-oh
```
Raw IPA symbols and SSML markup are provider-dependent. Use readable phonetic text first, then move to provider-specific markup only when testing proves it works for your selected voice.
***
## Managing Pronunciations
### Editing Existing Replacements
1. Click on any replacement chip in the list
2. Modify the target or pronunciation
3. Click **Save**
### Deleting Replacements
* Click the **trash icon** on any replacement chip to delete it
* Or click **Clear All** to remove all pronunciations (requires confirmation)
### Exporting Pronunciations
1. Click **Export CSV**
2. CSV file downloads with all your current pronunciations
3. Filename format: `{agent_name}_pronunciations.csv`
Use exported CSV files to back up your pronunciations or copy them to other agents.
***
## Testing Pronunciations
After adding pronunciations:
1. Make a test call to your agent
2. Trigger responses containing the target words
3. Listen to verify the pronunciation sounds correct
4. Adjust the phonetic spelling if needed
**Testing tips:**
* Test in context, not isolation
* Have team members listen
* Adjust hyphenation or spelling if it doesn't sound right
***
## Best Practices
Add pronunciations for words you know are mispronounced in real calls. Review call transcripts to identify recurring pronunciation problems.
Use phonetic spelling (Nai-key) rather than complex IPA unless necessary. Simple phonetic text is easier to maintain and works well for most cases.
Always test pronunciations with real calls before going live. Make a test call and trigger responses containing the target words to verify they sound correct.
Export your CSV regularly as backup. Use the Export CSV button to save your pronunciations and keep them versioned alongside your agent configuration.
If you have "API" spelled out as "A-P-I", use that format consistently across all your pronunciations. Consistency improves maintainability.
Remember that target words cannot contain spaces - only complete single words work. Use `Nike` or `API`, not phrases like `customer service`.
***
## Next Steps
Fine-tune voice parameters
Choose a different voice
Add background ambience
Test pronunciations with web calls
# Select Voice
Source: https://docs.itellico.ai/build/voice-speech/select-voice
Choose a voice for your agent from multiple voice providers
**Access:** Open an agent and go to **General** → **Speaking** → **Voice**.
Some voices incur additional per-minute charges on top of the base rate. Check the cost indicator next to each voice in the catalog, or see [Premium Features](/billing/premium-features) for details.
***
Browse, filter, and preview voices from the voice table. Each row shows the voice name, provider, language, gender, and a play button to hear a sample.
**To select a voice:**
1. Use the search bar or filters to find candidates
2. Click the play button to preview
3. Click the row to select — the choice saves automatically
**Filters available:** language, provider, gender. Combine filters to narrow results quickly.
Audio preview is available for most voices. For voices without a sample, deploy to a test agent and make a test call to evaluate.
Expert mode keeps the same voice catalog but adds a **Cloned Voices** sidebar where you can create and manage custom voices from audio samples.
See [Voice Cloning](/build/voice-speech/voice-cloning) for how to create and use cloned voices.
### Voice Providers
| Provider | Best for | Notes |
| ---------------- | ---------------------------------------- | -------------------------------------------------------------------------- |
| **ElevenLabs** | Quality-first, customer-facing agents | Most natural sound, strong emotional range, supports voice cloning |
| **Cartesia** | Speed-critical applications | Ultra-low latency, optimized for conversational AI, supports voice cloning |
| **Azure Speech** | Multilingual or EU-compliant deployments | 100+ languages and locales, EU-hosted |
If you would like a specific voice or provider added to your account, email us at [support@itellico.ai](mailto:support@itellico.ai).
***
## Next Steps
Create a custom voice from audio samples
Fine-tune speed, stability, and style
Correct pronunciation of brand names and terms
Configure speech recognition
# Thinking Sounds
Source: https://docs.itellico.ai/build/voice-speech/thinking-sounds
Add audio feedback while your agent processes responses
## What Thinking Sounds Do
Expert Mode
Thinking Sounds play subtle audio cues—like keyboard typing—while your agent processes responses. This adds realism to conversations by filling silence during AI processing, actions like calendar bookings, or tool execution.
When enabled, callers hear realistic keyboard typing sounds during processing, making it feel like someone is actively working on their request.
## How It Works
Thinking Sounds are triggered during:
* **AI processing:** While the agent generates a response
* **Tool execution:** While running tools such as calendar bookings, transfers, or API calls
* **Complex reasoning:** Multi-step processes that take longer
The sounds stop automatically when the agent begins speaking the response.
***
## Configuration
Navigate to **General** → **Sounds** in your agent editor.
### Enable Thinking Sounds
Toggle thinking sounds on or off:
* **Enabled:** Keyboard typing sounds play during processing
* **Disabled:** Silent processing (default)
### Set the Delay Threshold
Use the **Delay threshold** slider to control when thinking sounds begin:
* **0 ms:** Sounds start immediately when the agent begins thinking
* **750 ms:** Default setting, which avoids sounds for very fast responses
* **3000 ms:** Only plays for longer processing pauses
### Upload Custom Thinking Sounds
When thinking sounds are enabled, you can upload up to five custom MP3, WAV, or OGG files. If you do not upload custom files, the default keyboard typing sound is used.
For each uploaded sound, you can adjust:
* **Volume:** 25%, 50%, 75%, or 100%
* **Probability:** 25%, 50%, 75%, or 100%
If you upload custom sounds, the default sound is disabled and the custom sounds are selected randomly based on their probability.
***
## Use Cases
Makes it feel like the agent is actively looking up information in a system
Provides audio feedback while processing calendar integrations
Adds professionalism—sounds like the agent is taking notes
Simulates looking up documentation or running diagnostics
***
## Best Practices
**Use sparingly:** Thinking sounds work best for occasional pauses. If your agent processes frequently, consider combining with Smart Filler instead.
**Match your use case:** Typing sounds work well for business contexts but may feel out of place for casual or entertainment applications.
**Test the experience:** Make several test calls to ensure thinking sounds enhance rather than distract from the conversation.
**Combine with other features:** Use alongside Smart Filler for better latency management — verbal acknowledgment plus audio feedback.
***
## Combining with Smart Filler
Thinking Sounds and Smart Filler complement each other:
| Feature | What it does | Best for |
| --------------- | ----------------------------------------- | ------------------------------ |
| Smart Filler | Verbal acknowledgment ("Let me check...") | Longer pauses (1-3+ seconds) |
| Thinking Sounds | Audio feedback (keyboard typing) | Shorter pauses (0.5-2 seconds) |
| Both together | Verbal + audio feedback | Complex processing |
**Recommendation:** Enable both for the most natural-feeling conversations.
***
## Technical Details
* **Default sound type:** Realistic keyboard typing
* **Trigger:** Automatic during processing states
* **Delay:** Configurable from 0 ms to 3000 ms
* **Custom sounds:** Up to 5 per agent, MP3/WAV/OGG, max 10 MB each
* **Duration:** Matches actual processing time
* **Blending:** Sounds fade naturally when speech begins
***
## Next Steps
Add verbal acknowledgments during processing
Add background atmosphere
Fine-tune voice parameters
Test thinking sounds in the simulator
# Transcriber
Source: https://docs.itellico.ai/build/voice-speech/transcriber
Choose the language and speech-to-text settings your agent uses to understand callers
**Access:** Open an agent and go to **General** → **Understanding**.
## Basics
The transcriber converts caller speech into text before the AI model decides what to say or do next.
This is the first step in the voice pipeline. If the transcriber hears the wrong words, the model, tools, goals, and post-call analysis all receive the wrong input.
Simple mode shows a single **Language** picker under **General → Understanding**. This setting controls what language the agent listens for — it determines which languages your callers can speak and be understood. If a caller speaks a language that is not configured, the agent will not understand them.
Choose one of two options:
* **Multilingual** — the agent understands callers speaking English, Spanish, French, German, Hindi, Russian, Portuguese, Japanese, Italian, or Dutch. Use this when your caller base speaks multiple languages.
* **Single language** — pick the specific language your callers speak. Use this when your agent serves one language only.
The platform picks the recommended model for your selection automatically. There is no provider or model to configure in Simple mode.
If transcriber settings were previously configured in Expert mode, switch to Expert mode to edit them.
Expert mode gives you direct control over the transcription provider and model. Use it when Simple mode does not cover your language, when you need medical transcription, or when you want to select a specific provider for enterprise or regional requirements.
### Providers
| Provider | Best for |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Deepgram** | Most agents. Low-latency, optimized for real-time voice conversations. Multiple models available including medical and specialized variants. |
| **Azure Speech** | Broad language and locale coverage (150+ locales). Use when you need a language Deepgram does not cover, or when one agent needs to detect between multiple caller languages. |
| **Cartesia** | Ink Whisper streaming STT for speed/cost comparisons. Cartesia currently documents a global STT endpoint, so prefer Deepgram or Azure when EU-hosted routing is required. |
| **ElevenLabs** | Scribe v2 Realtime. Useful when you already use ElevenLabs and need broad language coverage with keyterm prompting. |
| **Soniox** | Real-time multilingual STT with strong accuracy on accented speech and code-switching. Useful when callers mix languages within a single utterance. |
### Keywords
Keywords help supported transcribers recognize words that are easy to mishear — company names, product names, acronyms, industry terms, and location names.
1. Open **General → Understanding**
2. Find **Keywords**
3. Add each term and press Enter
Add keywords after reviewing real or test transcripts. Do not add every possible word upfront — add terms the transcriber actually gets wrong or that are business-critical.
***
## Testing Transcription
Test with the words callers will actually say:
* Brand and product names
* Names of people, locations, departments, or services
* Numbers, dates, addresses, and phone numbers
* Common accents from your caller base
* Background noise if the real call environment is noisy
If transcripts are inaccurate:
1. Confirm the language or locale is correct
2. Add missing business terms as keywords in Expert mode
3. Try a more suitable model or provider in Expert mode
4. Retest with the same scenarios before changing other voice settings
***
## Related Docs
Understand how transcription, the AI model, and voice output work together.
Select the model that processes transcribed caller text.
Control how the agent's voice pronounces specific words.
Run calls and review transcripts before going live.
# Voice Cloning
Source: https://docs.itellico.ai/build/voice-speech/voice-cloning
Create custom cloned voices from audio samples or recordings for your AI agents
Expert Mode
Voice cloning lets you create a custom synthetic voice from audio and use it with your AI agents. You can either **upload** a recording or **record** directly in the browser. The platform generates a voice model through your chosen provider, stores it in your account library, and makes it available for any agent in your account.
Cloned voices appear alongside standard voices in the [voice selection](/build/voice-speech/select-voice) panel and can be selected from the **My Cloned Voices** sidebar.
Only clone voices you have explicit written consent to use. You are responsible for ensuring you have the legal right to clone and deploy any voice.
***
## Creating a Cloned Voice
In your agent editor, go to **General** → **Speaking** and click **Clone Voice**. You can also open it from the **My Cloned Voices** sidebar in the voice selection panel.
Select a cloning provider based on your audio sample:
| Provider | Best for | Duration | File size |
| -------------- | -------------------------------------- | ------------------------------------------------- | --------------- |
| **ElevenLabs** | Longer samples, more natural variation | Min **5s**, recommended **1-2 min**, max **180s** | Up to **10 MB** |
| **Cartesia** | Short clean clips, fast cloning | Min **3s**, recommended **5-10s**, max **10s** | Up to **5 MB** |
Choose ElevenLabs when you have a longer clean recording and want the model to learn more tone variation. Choose Cartesia when you want a fast clone from a short clean clip. If unsure, create both and compare them.
**Supported formats:** MP3, WAV, OGG, WebM — ElevenLabs also accepts M4A.
Switch between two input modes using the **Upload** and **Record** tabs:
**Upload** — Drag and drop an audio file or click to browse. The accepted formats and size limit are shown based on the selected provider.
**Record** — Click the record button to capture audio directly from your microphone. A live waveform visualization and duration counter are displayed while recording. Recording automatically stops when the provider's maximum duration is reached.
The form tracks the total duration of your audio and shows whether it meets the provider's requirements.
* **Voice name** (required) — A descriptive name shown in the voice selection panel
* **Language** (required) — The language of the audio sample (English, Spanish, French, German, Italian, Portuguese, Dutch, Japanese, Korean, or Chinese)
* **Description** (optional) — Internal notes about this voice
* **Remove background noise** (optional) — Available for ElevenLabs only — cleans up noise in the sample before cloning
Click **Clone Voice** to start processing. The voice status progresses through these states:
* **Processing** — Provider is generating the voice model
* **Ready** — Voice is available to assign to agents
* **Failed** — Something went wrong — check the error message and try again
***
## Managing Cloned Voices
Cloned voices are shared across your account. All team members with appropriate permissions can view and assign cloned voices to their agents.
### Viewing Cloned Voices
Your cloned voices appear in the **My Cloned Voices** sidebar within the voice selection panel. Each voice shows its name, provider, language, and current status badge.
You can also view all cloned voices in a table that shows:
* **Name** and **Provider**
* **Language**
* **Status** (with color-coded badges)
* **Actions** such as selecting or deleting the voice
### Deleting a Cloned Voice
1. Find the cloned voice in the sidebar or table
2. Click the delete button or select **Delete** from the actions menu
3. Confirm the deletion
Deleting a cloned voice is permanent and cannot be undone. Any agents currently using that voice will need a new voice assigned.
***
## Using Cloned Voices with Agents
Once a cloned voice shows a **Ready** status, assign it to any agent:
In your agent editor, go to **General** → **Speaking**.
Look in the **My Cloned Voices** sidebar on the right side of the voice selection panel. Only voices with **Ready** status can be selected.
Click the cloned voice to assign it. The agent uses this voice for all subsequent conversations. You can further customize the output with [voice settings](/build/voice-speech/voice-settings).
***
## Audio Sample Best Practices
* Use a good quality microphone (USB condenser or better)
* Record in a quiet environment with sound dampening
* Maintain a consistent distance from the microphone (6-12 inches)
* Avoid rooms with echo or reverb
* Use 44.1 kHz sample rate or higher
* Include both short and long sentences
* Cover different tones: questions, statements, explanations
* Read naturally at a conversational pace
* Avoid reading too fast or too slow
* Include pauses between sentences
* Background music or ambient noise
* Multiple speakers in one sample
* Heavy audio processing, compression, or filters
* Whispering or shouting
* Samples shorter than the provider's minimum duration
* Low-quality phone recordings
***
## Sample Strategy
Use the provider you selected to decide how much audio to collect.
### For ElevenLabs
* Aim for **1-2 minutes** when possible
* Include varied phrasing, not one repeated sentence
* Use the **Remove background noise** option if the recording is otherwise good
* Prefer one speaker, one microphone, one room
### For Cartesia
* Aim for a **short, clean 5-10 second clip**
* Do not over-record just to add more material
* Remove room noise before recording because the clone will reflect it closely
* Choose a clip with stable volume and no interruptions
### Good sample script
Read 4-6 natural sentences in the way you want the agent to sound:
* a greeting
* one short factual sentence
* one question
* one longer explanatory sentence
* one closing sentence
This gives the model enough shape to learn pacing and tone without sounding scripted.
***
## Legal Considerations
You must have explicit written consent from any person whose voice you clone. Unauthorized voice cloning may violate privacy laws and intellectual property rights.
**Before cloning, ensure you have:**
* Written consent from the voice owner
* Rights to use the voice commercially
* Clear agreement on how the voice will be used
* Documentation of the consent for your records
**Never clone:**
* Voices without consent
* Voices of public figures without licensing
* Voices for deceptive or impersonation purposes
***
## Troubleshooting
Check the selected provider's duration, file size, and file format limits. Most failed uploads are caused by clips that are too short, too long, or too noisy.
Re-record with less background noise. For ElevenLabs, try enabling **Remove background noise**. For Cartesia, start with a cleaner clip rather than a longer one.
Use a better source sample, not just a different speed or pitch setting. Add clearer phrasing variety and natural intonation, then create a new clone.
Start by cloning the same sample with both providers. Then compare them in the voice picker using the same test script.
***
## Next Steps
Browse and compare all available voices
Fine-tune speed, pitch, and stability
Correct pronunciation for your cloned voice
Test your cloned voice in conversations
# Voice Settings
Source: https://docs.itellico.ai/build/voice-speech/voice-settings
Fine-tune supported voices with provider-specific parameters
## Voice Configuration Parameters
After [selecting your voice](/build/voice-speech/select-voice), you can adjust provider-specific settings to fine-tune how it sounds. The current dashboard exposes adjustable voice parameters for **ElevenLabs** voices. Azure Speech and Cartesia voices use their provider defaults in the itellicoAI interface.
Voice settings are displayed dynamically based on your selected voice. If your selected provider does not expose adjustable settings, choose a different voice or provider instead. Changes apply immediately to new conversations.
***
## ElevenLabs Settings
ElevenLabs voices support the following adjustable parameters:
### Stability
Controls consistency and expressiveness (range: 0.0-1.0, itellicoAI default: 0.71)
**How it works:**
* **Lower values (0.3-0.5):** More expressive and varied, but less consistent between generations
* **Medium values (0.5-0.7):** Balanced expressiveness and consistency (recommended)
* **Higher values (0.7-1.0):** More consistent and predictable, but may sound monotone
**Recommended starting point:** 0.5-0.7
Use lower stability for creative applications where variety is desired, and higher stability (0.6-0.85) for consistent customer service responses.
### Similarity Boost
Controls how closely the voice matches the original speaker (range: 0.0-1.0, itellicoAI default: 0.75)
**How it works:**
* **Lower values (0.5-0.7):** More creative interpretation of the voice
* **Medium values (0.75-0.8):** Balanced adherence to original voice (recommended)
* **Higher values (0.8-1.0):** Strict matching to original voice character
**Recommended starting point:** 0.75-0.8
Higher values increase processing demands and can add latency. They're also more likely to reproduce artifacts if the source voice data is noisy.
### Style
Controls stylistic variation in pacing and intonation (range: 0.0-1.0, itellicoAI default: 0.0)
**How it works:**
* **0.0:** Neutral delivery (recommended)
* **0.5-1.0:** Amplified style of the original speaker
**Recommended starting point:** 0.0
Higher style values can make voices less stable and add latency. Keep this at 0 for most use cases.
### Speaker Boost
Enhances clarity and presence (boolean, itellicoAI default: enabled)
**How it works:**
* **Enabled:** Boosts similarity to the original speaker, improving clarity
* **Disabled:** Standard processing
**Recommended starting point:** Enabled
Increases latency slightly; subtle effect.
### Speed
Controls playback speed (range: 0.7-1.2, itellicoAI default: 1.0)
**Speed values:**
* **0.7-0.9:** Slower, clearer delivery
* **1.0:** Normal speed (default)
* **1.1-1.2:** Faster, more energetic delivery
**Recommended starting point:** 1.0
Adjust in small increments (0.05-0.1) and test with full conversations.
***
## Other Voice Providers
Azure Speech and Cartesia voices do not currently expose adjustable voice-parameter controls in the itellicoAI dashboard. For these providers, focus on choosing the right voice, language, and provider during [voice selection](/build/voice-speech/select-voice).
Provider defaults are still optimized for real-time conversations. If you need a different speaking style, compare multiple voices from the same provider before switching providers.
***
## Adjusting Settings
### How to Change Voice Settings
1. Navigate to **General** → **Speaking** in your agent editor
2. Your currently selected voice is displayed in the "Current Voice" card at the top
3. Click the **gear icon** next to your current voice (available for ElevenLabs voices)
4. A settings panel opens with adjustable parameters for your voice
5. Adjust sliders or toggles as needed
6. Click **Save Changes** to apply
***
## Common Settings by Use Case
**ElevenLabs:**
* Stability: 0.60-0.85
* Similarity: 0.75-0.85
* Style: 0.0
* Speed: 0.95-1.05
**Goal:** Clear, steady, professional
**ElevenLabs:**
* Stability: 0.45-0.70
* Similarity: 0.70-0.80
* Style: 0.0
* Speed: 1.05-1.15
**Goal:** Energetic, confident, engaging
**ElevenLabs:**
* Stability: 0.60-0.85
* Similarity: 0.75-0.85
* Style: 0.0
* Speed: 0.95-1.0
**Goal:** Clear, patient, instructional
**ElevenLabs:**
* Stability: 0.70-0.85
* Similarity: 0.80-0.90
* Style: 0.0
* Speed: 0.9-1.0
**Goal:** Calm, consistent, professional
***
## Best Practices
**Start with recommended defaults:** Itellico defaults are optimized starting points. ElevenLabs recommends stability ≈0.5 and similarity ≈0.75-0.8 as common baselines.
**Make small changes:** Voice settings are sensitive. Adjust in small increments and test after each change.
**Test in context:** Use full conversation scenarios (3-5 minutes), not just single-sentence samples. You can also add [ambient sound](/build/voice-speech/ambient-sound) to create a more natural atmosphere.
**Consider your audience:** Older customers often prefer slightly slower speeds. Younger audiences may prefer slightly faster.
**Understand response time trade-offs:** Higher similarity boost and speaker boost increase latency. Style values >0 can also add latency and reduce stability.
**Document your settings:** Keep track of what works for each use case and voice combination.
***
## Next Steps
Correct pronunciation of brand names and technical terms
Add background ambience to calls
Choose a different voice
Test your voice settings with web calls
# Appointment Booking Agent
Source: https://docs.itellico.ai/examples/appointment-booking
Build an AI agent that schedules appointments with calendar integration
An AI booking agent checks your calendar in real time, offers available slots, collects the caller's details, and confirms the appointment — all during a live call. Setup takes about 20 minutes.
**Prerequisites:** A [Cal.com](https://cal.com) account with at least one event type. Connect it in **Developers → Integrations** first.
***
## Prompt
```
# Role
You are Sarah, the booking assistant for [Business Name]. You are warm, organized, and focused on making scheduling convenient for callers.
# Objective
Help callers book, confirm, or reschedule appointments while gathering necessary pre-appointment information.
# Response Format
- Keep responses to one to three sentences
- End each response with a question when you need the caller to choose or confirm
- Spell out times clearly, such as "Tuesday at two thirty"
- Confirm key details by repeating them back
- Use natural acknowledgments like "Got it", "Perfect", and "Great"
# Conversation Flow
## Phase 1: Opening
Start with: "Hello, this is Sarah from [Business Name]. How can I help with scheduling today?"
## Phase 2: Appointment Type
Ask what type of appointment the caller needs. If there are multiple services, confirm the correct service before checking availability.
## Phase 3: Availability Search
Ask for the caller's preferred date and time. Check calendar availability using the booking tool.
Offer no more than three available slots at a time.
## Phase 4: Information Collection
Collect the caller's full name and email address.
Read back: "Just to confirm, [name], [date] at [time], and I'll send confirmation to [email]. Is that correct?"
## Phase 5: Booking Confirmation
Create the appointment only after the caller confirms.
Confirm: "You're all set. You'll receive a confirmation email shortly."
# If No Slots Are Available
- Suggest the closest alternative dates
- Ask if a different day or time works
- If nothing works, offer to take their details for a callback
# Scheduling Reference
- Always confirm date, time, name, and email before booking
- Never book outside business hours
- Be patient — some callers need help finding a time
- For cancellations or reschedules, tell them to use the link in their confirmation email
# Escalation Triggers
Transfer to a human or create a callback request if:
- The caller is upset about a previous appointment
- The caller needs a time that is not available after three attempts
- The request involves billing, refunds, or account-specific details
- The caller asks for a manager or specific staff member
Escalation phrase: "I understand this is important. Let me connect you with someone who can help resolve this."
# Off-Limits Topics
If the caller asks about anything outside scheduling, say you're focused on bookings and offer to transfer or take a message.
# Business Hours
Monday-Friday: 9:00 AM - 6:00 PM
Saturday: 9:00 AM - 1:00 PM
Sunday: Closed
```
***
## Tools
In the **Tools** tab, add **Calendar Booking**:
| Setting | Value |
| ------------------------- | --------------------------------------------------------- |
| **Event Type** | Select your Cal.com event type |
| **Meeting Platform** | Cal Video, Zoom, Google Meet, In Person, or Caller Number |
| **Timezone** | Must match your Cal.com availability |
| **Days to look ahead** | 1-3 days per availability search |
| **Time slots per day** | 3-5 |
| **Send SMS confirmation** | Enable for automatic confirmation |
If the agent's timezone does not match your Cal.com timezone, it will offer wrong slots. Double-check both.
***
## Knowledge (Optional)
If callers ask about your services, pricing, or cancellation policy, add a knowledge base with that info. Otherwise, the booking tool handles everything.
***
## Analytics
| Type | Name | What it measures |
| ---------------- | ------------------ | ---------------------------------------------- |
| **Primary Goal** | Appointment Booked | Did the agent create the booking successfully? |
| **Insight** | Appointment Type | What type of appointment was requested? |
***
## Deploy
1. Test with **Web Call** — book a test appointment and verify it appears in Cal.com
2. Test with **Phone Call** — check that slot offers sound natural over voice
3. Check SMS confirmation arrives (if enabled)
4. Assign the agent to a [phone number](/launch/phone-numbers) or [web widget](/manage/web-widgets/overview)
***
## Common Fixes
| Problem | Solution |
| --------------------------------- | ------------------------------------------------------------ |
| Wrong timezone in slots | Check timezone in both General settings and the booking tool |
| Too many slots offered | Reduce **Max Slots** to 3 |
| Agent books without confirming | Add "Always confirm before booking" to the prompt |
| Booking doesn't appear in Cal.com | Re-check the integration in Developers → Integrations |
## Next Steps
Configure the booking tool
Manage your Cal.com connection
Configure availability windows
Complete pre-launch verification
# Lead Qualification Agent
Source: https://docs.itellico.ai/examples/lead-qualification
Build an AI agent that qualifies inbound leads and routes hot prospects to sales
Build an AI agent that qualifies inbound leads by asking the right questions, scoring their fit, and routing hot prospects to your sales team.
## What You Will Build
An agent that handles:
* Greeting inbound leads warmly
* Asking qualifying questions (budget, timeline, needs)
* Assessing lead fit based on responses
* Routing qualified leads to sales via live transfer
* Capturing lead details for follow-up
**Estimated setup time:** 20 minutes
***
## Step 1: Create the Agent
1. **AI Agents → Create Agent**
2. Name your agent (e.g., "Lead Qualifier - \[Product/Service]") and click **Create**
3. Configure the agent in the Agent Editor
## Step 2: Write the Prompt
```
# Role
You are Alex, a Business Development Representative at [Company Name]. You are consultative, friendly, and genuinely interested in understanding customer needs.
# Objective
Qualify potential customers using fit, authority, need, and timeline criteria, then route qualified leads to sales or capture details for follow-up.
# Response Format
- Keep responses to one to three sentences
- End each response with a question when guiding discovery
- Ask one qualification question at a time
- Be conversational, not scripted
- Never pressure the caller
# Conversation Flow
## Phase 1: Opening
Greet the caller warmly and ask what brought them to call.
## Phase 2: Discovery
Understand their situation and what problem they are trying to solve.
Ask qualifying questions naturally:
- What is their current setup or process?
- How many people, users, or locations are involved?
- What is their timeline for making a change?
- Have they looked at other solutions?
## Phase 3: Fit Assessment
Based on their answers, determine whether they are qualified, not yet qualified, or not a fit.
# Qualification Criteria
**Qualified Lead (transfer to sales):**
- Has a clear need that our product solves
- Has decision-making authority or access to it
- Has a timeline within the next 3 months
- Company size fits our target market
**Not Yet Qualified (capture info for follow-up):**
- Interested but early stage — no timeline
- Needs to involve other stakeholders
- Budget not yet defined
**Not a Fit (politely redirect):**
- Needs something we don't offer
- Too small or too large for our solution
# Next-Step Rules
- If qualified: "I'd love to connect you with one of our specialists who can walk you through exactly how this would work for your team. Let me transfer you now."
- If not yet qualified: Collect their email and name, explain we'll follow up with relevant information
- If not a fit: Be honest and helpful — suggest alternatives if possible
# Escalation Triggers
Transfer to a human immediately if:
- The caller is a qualified lead ready to speak with sales
- The caller asks for specific pricing, legal commitments, or contract terms
- The caller has technical questions beyond your knowledge
- The caller asks to speak with a human
Escalation phrase: "I'd love to connect you with one of our specialists who can walk you through the details."
# Information to Capture
- Always collect: name, company, email, phone (if not already captured)
- Use your knowledge base for product questions
# Off-Limits Topics
If the caller asks about any of the following, say you're not able to go into detail and offer to have a specialist follow up:
- Specific contract terms or legal commitments
- Competitor comparisons with claims you can't verify
- Custom pricing or discounts (let the sales team handle this)
- Internal company information
```
## Step 3: Add Tools
| Tool | Purpose |
| ------------------------------ | ------------------------------------------------------------------- |
| **Transfer Call** (Sales Team) | Route qualified leads to sales — set destination to your sales line |
| **Custom Action** (CRM) | Optional — log lead details to your CRM via API |
## Step 4: Add Knowledge Base
Create a knowledge base with:
* **Product/service overview** — what you offer, key benefits
* **Pricing tiers** — if shareable, or "pricing depends on needs"
* **Case studies** — brief success stories to build credibility
* **Competitor comparisons** — how you differ (handle objectively)
* **FAQ** — common prospect questions
## Step 5: Configure Analytics
| Type | Name | Description |
| ------------------ | --------------------- | --------------------------------------------------------------------------------------------- |
| **Primary Goal** | Lead Qualified | The caller met qualification criteria and the agent transferred them or scheduled a follow-up |
| **Secondary Goal** | Contact Info Captured | The agent collected name, email, and company |
| **Insight** | Lead Score | Rate the lead quality from 1-5 based on fit and readiness (Rating) |
| **Insight** | Company Size | How many employees or users? (Open) |
| **Insight** | Timeline | When are they looking to make a decision? (Open) |
| **Insight** | Primary Need | What's the main problem they're trying to solve? (Open) |
## Step 6: Set Up Notifications
Add a post-call notification:
* **Trigger:** "The caller showed genuine interest and provided contact information"
* **Recipients:** Your sales team email
* **Template:** Include `{{customer_name}}`, `{{conversation_summary}}`, `{{conversation_url}}`
* **Task creation:** Enable with High priority for qualified leads
## Step 7: Deploy
### For Inbound
1. Buy a number in **Telephony → Buy Number**
2. Use this number in your ads, website, and landing pages
3. Assign routing to your qualification agent
### For Outbound (Optional)
1. Create a campaign with your lead list
2. Adjust the prompt for outbound context ("Hi, this is \[name] from \[company], following up on your interest in...")
## Measuring Success
After the first week, review:
* **Qualification rate** — what percentage of calls result in qualified leads?
* **Transfer success** — are transferred calls connecting to sales?
* **Insight accuracy** — are lead scores and details captured correctly?
* **Conversation quality** — listen to recordings for tone and flow
## Next Steps
Configure sales team routing
Connect to your CRM
Extract structured lead data
Run outbound qualification campaigns
# Front Desk Receptionist
Source: https://docs.itellico.ai/examples/receptionist
Build an AI receptionist that answers calls, routes inquiries, and handles common questions
An AI receptionist answers your phone, handles common questions, routes callers to the right person, and takes messages when nobody is available. Most teams get this running in 15-20 minutes.
***
## Prompt
Copy this into your agent's **Prompt** tab and replace the `[placeholders]`.
```
# Role
You are Jamie, the front desk receptionist for [Business Name], a [type of business] in [location]. You are calm, professional, and helpful.
# Objective
Answer inbound calls, identify the caller's intent, handle common front desk requests, and route or capture details for follow-up.
# Response Format
- Keep responses to one to three sentences
- End with a guiding question when possible
- Repeat back critical details, including name, callback number, and reason for calling
- Use natural acknowledgments like "Got it" and "Absolutely"
# Conversation Flow
## Phase 1: Welcome
Start with: "Thank you for calling [Business Name], this is Jamie. How can I help you today?"
## Phase 2: Intent Detection
Classify the call intent:
- New customer inquiry
- Existing customer support
- Appointment request
- Billing question
- Vendor or partnership call
- General information
## Phase 3: Handle or Route
- Greet callers warmly and professionally
- Answer questions about the business using your knowledge base
- Route calls to the right person or department
- Take messages when someone is unavailable
## Phase 4: Call Routing
- Sales inquiries → Transfer to [Sales Contact Name]
- Support issues → Transfer to [Support Contact Name]
- Billing questions → Transfer to [Billing Contact Name]
- General inquiries → Answer directly or take a message
- Emergencies → Transfer to [Manager Name] immediately
## Phase 5: Information Capture
If the transfer doesn't connect or nobody picks up:
1. Apologize: "I'm sorry, they're not available right now."
2. Ask for the caller's full name
3. Ask for a callback number
4. Ask them to briefly describe their request
5. Confirm: "I'll make sure [name] gets your message."
## Phase 6: Confirm and Close
Confirm the captured details and next step.
Close with: "You're all set. Is there anything else I can help with today?"
# Business Hours
Monday-Friday: 9:00 AM - 5:00 PM
Saturday: 10:00 AM - 2:00 PM
Sunday: Closed
# Escalation Triggers
Transfer to a human immediately if:
- The caller mentions an emergency
- The caller asks for a manager
- The caller becomes frustrated after two attempts to help
- The request involves legal, medical, billing, or account-specific issues
Escalation phrase: "I want to get you to the right person quickly. Let me connect you now."
# Off-Limits Topics
If the caller asks about any of the following, politely say you can't help and offer to take a message:
- Legal advice
- Medical information
- Pricing negotiations or custom discounts
- Complaints about specific employees
- Political or religious topics
```
***
## Tools
Add one **Transfer Call** per department in the **Tools** tab:
| Name | Destination |
| ------------------- | ---------------------------- |
| Transfer to Sales | +43... (your sales number) |
| Transfer to Support | +43... (your support number) |
| Transfer to Manager | +43... (for emergencies) |
Optional: Add **Calendar Booking** if you want the agent to schedule appointments via [Cal.com](/build/tools/booking-calendar).
***
## Knowledge
Create a knowledge base with the information callers ask about most:
* Business hours, location, parking directions
* Staff names and roles (so the agent knows who to transfer to)
* Services you offer and basic pricing
* Cancellation, refund, or return policies
Connect it in the **Knowledge** tab.
***
## Analytics
| Type | Name | What it measures |
| ---------------- | ------------------- | ---------------------------------------------------------------------- |
| **Primary Goal** | Caller Helped | Did the agent answer the caller's question or route them successfully? |
| **Insight** | Call Reason | What was the primary reason for the call? |
| **Insight** | Caller Satisfaction | How satisfied did the caller seem? (1-5) |
***
## Call Flow
* **Greeting:** "Thank you for calling \[Business Name]. How can I help you today?"
* **Silence reminders:** Enable after 15 seconds
* **Max duration:** 10-15 minutes
***
## Deploy
1. Test with **Web Call** — verify the greeting, FAQ answers, and transfer behavior
2. Test with a real **Phone Call** — check voice quality and timing
3. [Buy a phone number](/launch/buy-numbers) and assign this agent
4. Monitor [Conversations](/manage/conversations/overview) for the first week
***
## After Launch
* Review 5-10 calls in the first week — look for unanswered questions
* Add missing info to the knowledge base as gaps appear
* Use [Quality Studio](/manage/quality-studio/overview) to flag and fix recurring issues
* Check the [Dashboard](/manage/dashboard) for call volume patterns
## Next Steps
Configure call routing destinations
Add appointment scheduling
Structure your business information
Complete pre-launch verification steps
# FAQ
Source: https://docs.itellico.ai/faq
Answers to the most frequently asked questions about itellicoAI — setup, agents, voice, telephony, knowledge bases, billing, and more.
Answers to the most common questions about itellicoAI. Use this page for quick answers before reading the full setup guides. If your question isn't covered here, contact [support@itellico.ai](mailto:support@itellico.ai).
***
## Quick Answers
You can usually create and test your first AI agent in a few minutes. Start in [Quickstart](/quickstart), create an agent in **AI Agents**, then use **Test Agent** before deploying to phone or web.
No. You can build agents in the [Agent Editor](/build/getting-started/agent-editor) and deploy them through **Phone Numbers** or **Web Widgets** without writing code. The API and SDKs are available if your team wants deeper automation.
Yes. itellicoAI supports inbound phone handling, outbound [campaigns](/manage/campaigns/overview), and browser-based voice or chat through [Web Widgets](/manage/web-widgets/overview).
Yes. Use **Connect Your Own** in **Telephony → Phone Numbers** to import existing numbers and route them through your SIP carrier. See [Phone Numbers](/launch/phone-numbers).
Test before launch, review live [conversations](/manage/conversations/overview), refine prompts or knowledge, and use tools like [call transfer](/build/tools/transfer-tools) when a human should take over. [Quality Studio](/manage/quality-studio/overview) helps you track patterns and improve over time.
Yes. Create a widget in **Web Widgets**, configure it in the visual editor, then copy the generated script from **Export**. See [Web Widgets](/manage/web-widgets/overview).
***
## Agents and Setup
Open **AI Agents**, click **Create Agent**, and configure your agent in the [Agent Editor](/build/getting-started/agent-editor). Set up identity, voice, prompt, knowledge, and tools — then test before deploying.
Yes. Create as many AI agents as you need — there's no limit on the number of agents. Each one has its own identity, voice, prompt, knowledge base, and tools. Manage them from the [AI Agents](/build/getting-started/agent-editor).
Yes. From **AI Agents**, open the actions menu on an agent and select **Duplicate**. This creates a copy with the same settings, which you can then customize.
Configure your transcriber, model, and voice to support the languages you need. In the Agent Editor you can choose providers and settings with multilingual support, and in Expert Mode you can control those selections more precisely. See [Transcriber Configuration](/build/voice-speech/transcriber) for details.
itellicoAI supports multiple AI models that balance speed, accuracy, and cost. You can choose the model for each agent in [Choose AI Model](/build/voice-speech/choose-ai-model). Higher-tier models generally produce more nuanced responses but may incur extra cost.
This setting controls how creative or consistent your agent's responses are. Lower values produce predictable, focused answers. Higher values produce more varied responses. For most business use cases, a lower setting works best. For tool calling, 0 is most reliable — it makes transfers, bookings, and API calls more consistent. Temperature is the underlying LLM parameter that drives this behavior.
Prompts can be several thousand words. However, longer prompts increase both latency and cost. Too short and your agent lacks context; too long and performance suffers. A well-structured prompt of 1,000-4,000 words tends to hit the sweet spot. Focus on clear rules and examples. See [writing effective prompts](/build/conversation/prompt).
***
## Voice and Speech
Browse the voice library in the [agent editor](/build/voice-speech/select-voice) to preview and select from dozens of voices. Filter by language, gender, and style. Most voices offer an audio preview so you can hear them before selecting.
Yes. Upload a voice sample or record one directly to create a custom voice clone that matches your brand. See [voice cloning](/build/voice-speech/voice-cloning) for requirements and steps.
Yes. Voice Activity Detection (VAD) and AI-based turn detection let your agent detect when a caller starts speaking and pause its own speech. You can adjust interruption sensitivity in the agent editor's [voice settings](/build/advanced/vad-turn-detection).
Response time depends on your transcriber, AI model, voice provider, network path, and enabled tools. You can reduce perceived latency by enabling [thinking sounds](/build/voice-speech/thinking-sounds) or [smart filler](/build/advanced/smart-filler) to fill processing time naturally.
Yes, for phone calls when **Enable DTMF during calls** is turned on in **Call Flow → Keypad Input**. DTMF lets the agent send keypad tones and collect caller keypad input. See [DTMF controls](/build/advanced/dtmf-controls).
***
## Phone Numbers and Telephony
Go to **Telephony → Phone Numbers**, click **Add Number**, then choose **Buy a Number**. After purchase, assign the number to your agent. See [Buy Numbers](/launch/buy-numbers).
Yes. Use **Connect Your Own** to import existing numbers and connect them through SIP (Session Initiation Protocol). Some technical material may still shorten this to **BYOC**. See [SIP Trunks](/launch/sip-trunks).
Yes. Set up [campaigns](/manage/campaigns/overview) to have your agent call a list of contacts automatically. You can also trigger outbound calls via the API.
Your agent can handle multiple simultaneous calls. The exact limit depends on your plan. Each call runs independently with its own conversation context.
Yes. Configure [call transfer](/build/tools/transfer-tools) to route calls to a human agent, department, or external number. Transfers can be triggered by the AI based on conversation context or caller request.
For outbound calls, Answering Machine Detection (AMD) identifies whether a person or voicemail system answered. Currently, the agent hangs up when voicemail is detected. See [voicemail detection](/build/advanced/voicemail-handling).
All phone numbers use the E.164 international format, which includes the country code (e.g., +15551234567). This ensures consistent routing across all countries.
***
## Knowledge Bases
A knowledge base is a collection of documents, text, and web content that your agent references to answer questions accurately. Instead of relying solely on its AI training, your agent searches your knowledge base for business-specific information. See [creating knowledge bases](/build/knowledge/create-knowledge-bases).
You can upload PDFs, Word documents, text files, and web pages. The platform extracts text using OCR and LLM-based parsing, so even scanned or complex documents are handled. See [content types](/build/knowledge/content-types) for the full list.
**Context mode** injects selected content directly into the conversation context. Best for small, high-priority content like pricing tables or key policies. Increases prompt size, which can affect latency and cost. **RAG mode** (Retrieval-Augmented Generation) searches your knowledge base and retrieves only the relevant parts for each question. Best for larger content sets like FAQs, product catalogs, or documentation. See [Context vs RAG](/build/knowledge/context-vs-rag).
Each knowledge base supports up to 500 URL items, 50 text items, 25 file uploads, and 50 folders. Individual files can be up to 10 MB. For context mode, the total content budget is 10,000 tokens (roughly 7,500 words). For RAG mode, the system retrieves only the relevant parts for each conversation.
Yes. For website content, you can configure an automatic refresh interval (daily, weekly, or monthly) to keep knowledge fresh. You can also use the [API](/api-reference/introduction) to add, update, or remove content programmatically.
***
## Tools and Integrations
Your agent can use tools such as call transfer, calendar booking, custom API actions, and web search. Browse available tools in the [tools overview](/build/tools/overview) and configure them in the Agent Editor.
Yes. Use [custom API tools](/build/tools/custom-api-actions) to connect your agent to any system with an API — CRMs, ERPs, helpdesks, databases, and more. Your agent can read and write data during conversations.
Yes. We integrate with [Cal.com](https://cal.com), which supports Google Calendar, Outlook, and many other calendar providers. Your agent can check availability and book appointments in real time. See [booking and calendar](/build/tools/booking-calendar).
Model Context Protocol (MCP) is a standard way to connect your agents to external tools and data sources. It extends your agent's capabilities beyond built-in tools. See [MCP servers](/build/advanced/mcp-servers).
Yes. Enable the [web search tool](/build/tools/web-search) to let your agent look up real-time information from the internet during conversations.
***
## Web Widget
Yes. [Web Widgets](/manage/web-widgets/overview) let you embed a voice and chat interface directly on your website so visitors can talk to your agent without leaving the page.
Use the visual [Web Widgets editor](/manage/web-widgets/configuration) to adjust setup, appearance, content, features, actions, privacy, share links, and export settings. The editor generates the embed script you paste into your site.
Yes. Web Widgets are responsive and work on desktop and mobile browsers. They use WebRTC (Web Real-Time Communication) for browser-based voice calls without plugins.
***
## Campaigns and Outbound
A campaign is automated outbound calling — your agent calls a list of contacts with scheduling, retries, and tracking. Use campaigns for follow-ups, surveys, appointment reminders, sales outreach, and more. See [campaigns overview](/manage/campaigns/overview).
Upload a CSV file with contact details. You can also add contacts manually or sync them through the API. See [contact import](/manage/contacts/import-export).
Yes. The [Campaign Management](/manage/campaigns/overview) page includes a Dashboard tab showing call outcomes, engagement rates, contact-level results, and more.
***
## Conversations and Quality
Yes. The [conversations page](/manage/conversations/overview) lists all calls with filters for date, agent, status, and more. Open any conversation to see the full transcript, audio playback, and analysis.
Open the conversation in [Conversations](/manage/conversations/overview) and flag the entire call or a specific message that went wrong. This creates an issue in [Quality Studio](/manage/quality-studio/overview) where you can assign it to a team member and track the fix.
Call recording is configurable per agent and per account. Use [Trust Center](/manage/trust-center/overview) for account-level defaults and [Data Retention](/build/advanced/data-retention) for per-agent settings.
[Quality Studio](/manage/quality-studio/overview) is the built-in quality assurance dashboard. It monitors conversations for issues, tracks resolution, and helps you improve agent performance over time.
***
## Privacy, Compliance, and Security
Yes. The platform includes tools for General Data Protection Regulation (GDPR) compliance, including data subject access requests, GDPR exports, retention policies, and public trust settings. See the [Trust Center](/manage/trust-center/overview).
Retention is controlled in two places: [Trust Center](/manage/trust-center/overview) sets account-wide defaults, and each agent's [Privacy tab](/build/advanced/data-retention) can set stricter rules for that specific agent. If an agent has its own retention settings, those take priority over the account defaults.
You control this through your agent's prompt or greeting. You can include a disclosure like "You'll be speaking with our AI assistant" in either place. Regulations like the EU AI Act require that callers are told they are interacting with AI — check your local requirements.
Yes. Enable two-factor authentication (2FA) in **Settings → Profile → Security** for an additional layer of protection.
***
## Billing and Plans
itellicoAI offers subscription plans with included minutes, plus a pay-as-you-go option. Usage beyond your included minutes is billed at a per-minute rate. See [plans](/billing/plans) and [usage pricing](/billing/overview) for details.
New accounts include trial minutes so you can test the platform before committing. Trial accounts do not include telephony (phone numbers) — you can test with web calls and chat. Check the current offer at [itellico.ai](https://itellico.ai).
Manage your plan, payment methods, and invoices from **Account → Billing**. Upgrade, downgrade, or cancel at any time.
Yes. Purchased phone numbers have monthly fees that vary by country and number type, and telephony-related usage charges may also apply depending on your setup. See [Phone Number Pricing](/billing/phone-numbers).
***
## Teams and Accounts
Yes. Invite team members from **Account → Members** and assign roles with different permission levels. Each person uses their own login.
Subaccounts let you manage multiple isolated customer accounts from one parent account via **Account → Subaccounts**. Each subaccount has its own agents, contacts, and conversations. In the parent/subaccount model, itellicoAI bills the parent account centrally, and the parent can bill or rebill its own customers separately.
Agency access is different: the client owns and pays for its own itellicoAI account, while an agency, consultant, or service team gets elevated access to set up, manage, or maintain it. Some organizations use both models for different customers. See [Subaccounts](/accounts/subaccounts) and [Client Service Models](/accounts/agency-playbook).
Yes. Use the account switcher in the top left to switch between accounts. Each account has its own agents, contacts, conversations, and settings.
***
## API and Development
Yes. The [REST API](/api-reference/introduction) lets you manage agents, trigger calls, access conversations, and integrate itellicoAI into your workflows programmatically. Authenticate with an API key sent in the `X-API-Key` header.
Yes. Official SDK docs are available for Python and TypeScript. See the [SDK documentation](/api-reference/sdks) for installation and usage.
Yes. Use [dynamic context](/build/advanced/dynamic-context) to pass caller-specific data (like account details or order history) to your agent at the start of each conversation. This enables personalized responses without manual input.
Yes. Configure [webhooks](/accounts/webhooks) to receive real-time notifications when conversations start, end, or when other events occur in your account. See [webhook events](/reference/webhook-events) for available event types and payload examples.
***
## Still Have Questions?
If your question is not answered here, reach out to the team:
* **Email:** [support@itellico.ai](mailto:support@itellico.ai)
Build your first agent
Find technical terms and definitions
Explore developer documentation
# Glossary
Source: https://docs.itellico.ai/glossary
Definitions of technical terms, acronyms, and concepts used throughout the itellicoAI documentation.
A quick reference for technical terms and acronyms you may encounter across the itellicoAI documentation and platform. Use this page when a UI label, acronym, or telephony term is unfamiliar and you need a fast definition without leaving the docs flow.
***
## Voice and Speech
| Term | Definition |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **AMD** | Answering Machine Detection — technology that identifies whether a call is answered by a person or a voicemail system. Used in outbound campaigns to skip voicemails. |
| **Backchannel** | Short audio cues like "mm-hmm" or "uh-huh" that signal the agent is listening without interrupting the caller. |
| **Barge-in / Interruption** | When a caller speaks while the agent is still talking. The agent detects this and stops its response to listen. Controlled via turn detection settings. |
| **DTMF** | Dual-Tone Multi-Frequency — the tones generated when you press buttons on a phone keypad. Used for menu navigation and input collection. |
| **Endpointing** | The process of detecting when a speaker has finished their turn. The agent uses silence duration, speech patterns, and AI to decide when to respond. |
| **Filler phrases** | Short phrases like "Let me check that..." spoken by the agent while processing a response. Reduces perceived latency. See [Smart Filler](/build/advanced/smart-filler). |
| **IVR** | Interactive Voice Response — traditional automated phone menu systems (e.g., "Press 1 for sales"). itellicoAI agents replace rigid IVR menus with natural conversation. |
| **Latency** | The delay between when a caller finishes speaking and when the agent starts responding. Made up of transcription time + AI processing + voice synthesis + network. |
| **STT** | Speech-to-Text — converts spoken audio into written text. Also called transcription. This is how your agent understands what callers say. |
| **Transcriber** | The speech-to-text engine that converts caller audio into text. itellicoAI supports multiple providers like Deepgram and Azure Speech. |
| **TTS** | Text-to-Speech — converts written text into spoken audio. This is how your agent speaks to callers. Also called voice synthesis. |
| **Turn detection** | How the agent decides when the caller has finished speaking and it's the agent's turn to respond. Combines VAD (silence detection) with AI-based understanding of conversation flow. |
| **VAD** | Voice Activity Detection — technology that detects when someone is speaking versus when there is silence. The foundation of turn detection — controls how long the agent waits after silence before responding. |
| **Voice cloning** | Creating a custom synthetic voice from an audio sample so your agent sounds like a specific person or brand voice. |
| **Voice provider** | The service that generates the agent's spoken voice (e.g., ElevenLabs, Cartesia). Different providers offer different voices, languages, and latency characteristics. |
## AI and Knowledge
| Term | Definition |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **AI model** | The artificial intelligence that powers your agent's understanding and responses. You can choose different models that balance speed, accuracy, and cost. |
| **LLM** | Large Language Model — an AI model trained on large amounts of text that can understand and generate human language. Powers your agent's reasoning and responses. |
| **Context mode** | A knowledge access method where selected source content is injected directly into runtime context. Best for small, high-priority content. |
| **Jinja** | A template system used in itellicoAI to insert dynamic information (like caller names, dates, or account details) into your agent's messages. Uses `{{ }}` and `{% %}` syntax. See [Template Syntax](/build/conversation/template-syntax). |
| **OCR** | Optical Character Recognition — technology that reads text from scanned images and PDFs, making the content available to your agent. |
| **RAG** | Retrieval-Augmented Generation — a smart search system that finds only the most relevant information from your knowledge base for each conversation. Best for large content collections. |
| **Temperature** | A setting that controls how creative or consistent your agent's responses are. Lower values produce more predictable answers; higher values produce more varied ones. |
| **Token** | A unit of text that AI models use to process language. Roughly 1 token equals 0.75 words, so 10,000 tokens is approximately 7,500 words. |
## Telephony and Networking
| Term | Definition |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **BYOC** | Bring Your Own Carrier — an older technical label for what the product now calls **Connect Your Own**. It means importing your existing phone numbers through your SIP carrier instead of buying new ones in itellicoAI. |
| **Compliance Profile** | A reusable verification profile used when buying phone numbers in regulated countries. Some carrier systems still call the underlying package a regulatory bundle. |
| **E.164** | The international phone number format that includes a country code (e.g., +15551234567). Required for phone number configuration. |
| **PBX** | Private Branch Exchange — a business phone system that routes calls internally to different extensions and departments. |
| **PSTN** | Public Switched Telephone Network — the traditional phone network that carries voice calls over dedicated circuits. |
| **SIP** | Session Initiation Protocol — a method for routing phone calls over the internet. SIP trunks connect your existing phone carrier to itellicoAI. |
| **WebRTC** | Web Real-Time Communication — technology that enables voice and video calls directly in a web browser without plugins. Powers itellicoAI Web Widgets. |
## Data and Development
| Term | Definition |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **API** | Application Programming Interface — a way for software systems to communicate with each other. itellicoAI provides APIs for custom integrations and automation. |
| **HTTP / HTTPS** | Hypertext Transfer Protocol (Secure) — the standard method for sending data over the web. HTTPS adds encryption for security. |
| **JSON** | JavaScript Object Notation — a structured data format commonly used for exchanging information between systems. |
| **MCP** | Model Context Protocol — a standard way to connect your agents to external tools and data sources, extending their capabilities beyond built-in tools. |
| **SDK** | Software Development Kit — pre-built code libraries that make it easier for developers to integrate with the itellicoAI platform. |
| **URI** | Uniform Resource Identifier — an address used to identify a resource, such as a SIP destination for call transfers. |
## Compliance and Legal
| Term | Definition |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **BAA** | Business Associate Agreement — a contract required for HIPAA-compliant healthcare applications that handle protected health information. |
| **CCPA** | California Consumer Privacy Act — a California law that gives residents rights over their personal data, including the right to know, delete, and opt out of data sales. |
| **DPA** | Data Processing Agreement — a contract between a data controller and a data processor that outlines how personal data is handled, required under GDPR. |
| **DSAR** | Data Subject Access Request — a request under GDPR for an organization to provide or delete a person's personal data. |
| **GDPR / DSGVO** | General Data Protection Regulation (Datenschutz-Grundverordnung in German) — the European Union's data privacy law governing how personal data is collected, stored, and processed. Applies across the EU and EEA; Switzerland has equivalent rules under the revDSG. |
| **UWG** | Gesetz gegen den unlauteren Wettbewerb — Germany's Unfair Competition Act. Regulates telemarketing and cold calling. Prohibits unsolicited B2C calls without prior consent. |
| **TKG** | Telekommunikationsgesetz — Austria's Telecommunications Act (TKG 2021). Governs cold calling rules and requires explicit opt-in for B2C calls. |
| **DSG / revDSG** | Datenschutzgesetz — Switzerland's Federal Data Protection Act, revised in September 2023. Requires transparency about automated decision-making and data processing. |
| **AVV** | Auftragsverarbeitungsvertrag — the German term for a Data Processing Agreement (DPA) under GDPR/DSGVO. Required when a third party processes personal data on your behalf. |
| **EU AI Act** | The European Union's Artificial Intelligence Act (Regulation 2024/1689). Requires that users interacting with an AI system are informed they are communicating with AI, not a human. Voice AI agents fall under transparency obligations — callers must be told they are speaking with an AI. |
| **HIPAA** | Health Insurance Portability and Accountability Act — a US law that sets standards for protecting sensitive patient health information. |
| **SLA** | Service Level Agreement — a contract defining guaranteed uptime, support response times, and other service commitments. |
| **TCPA** | Telephone Consumer Protection Act — a US law regulating telemarketing calls, auto-dialed calls, and pre-recorded messages. |
## Platform Concepts
| Term | Definition |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Agent Editor** | The configuration surface for AI agents. Create an agent from **AI Agents → Create Agent**, then configure every aspect in the Agent Editor. |
| **AI Agent** | An AI-powered voice assistant configured on the itellicoAI platform. Each agent has its own identity, prompt, knowledge, voice, and tools. Documentation may sometimes shorten this to just "agent." |
| **Campaign** | An outbound calling initiative where your agent automatically calls a list of contacts for purposes like follow-ups, surveys, or sales outreach. |
| **Connect Your Own** | The current product label for importing existing phone numbers into itellicoAI through your SIP carrier. This is the user-facing term for BYOC setup. |
| **Dynamic Context** | Real-time data sent to your agent at the start of each conversation (e.g., caller account details), enabling personalized responses. Usually requires technical setup by someone on your team. |
| **Knowledge Base** | A collection of documents, text, and web content that your agent references to answer questions accurately. |
| **Account** | A top-level account in itellicoAI with independent billing, agents, knowledge bases, phone numbers, and team members. Also called a main or parent account. |
| **Agency Access** | A model where a client owns and pays for its own itellicoAI account, while an agency or service provider gets elevated access to help manage setup, maintenance, or operations. |
| **Subaccount** | A nested account under a parent account with its own agents, numbers, and team. In the parent/subaccount model, itellicoAI bills the parent account centrally, and the parent may handle downstream customer billing separately. |
| **Schedules** | Shared time-based availability configurations used for campaign windows, routing logic, agent tool availability, and business-hours rules. |
| **Secrets** | Reusable credentials and references stored centrally for integrations, automations, and technical workflows. |
| **Profile** | Your personal user identity in itellicoAI. A single profile can belong to multiple accounts and switch between them using the account switcher. |
| **Tool** | A capability your agent can use during a conversation, such as transferring a call, booking an appointment, or looking up information in an external system. |
| **Trust Center** | The compliance and transparency surface in itellicoAI. At the account level, it covers data retention, GDPR-style data requests, and public trust settings. Web Widgets can also expose a public Trust Center page for visitors. |
| **Web Widget** | An embeddable component that adds AI-powered voice and chat to your website. Configured through the visual Web Widgets editor. Documentation may sometimes shorten this to just "widget." |
***
## Related Pages
Explore the platform overview
Build your first agent
Configure your agent in the agent editor
# Introduction
Source: https://docs.itellico.ai/introduction
Build, deploy, and manage AI voice agents for phone and web conversations
Build, deploy, and manage AI voice agents for phone calls and web conversations.
Create your first agent in 5 minutes
Set up client accounts and billing
Integrate via REST API and SDKs
***
## What do you want to do?
| Goal | Guide |
| ---------------------------------------- | ------------------------------------------------------------ |
| Create my first agent | [Quickstart](/quickstart) |
| Configure voice, prompt, and tools | [Agent Editor](/build/getting-started/agent-editor) |
| Write a good prompt | [Prompt Guide](/build/conversation/prompt-engineering-guide) |
| Add knowledge for the agent to reference | [Knowledge Bases](/build/knowledge/architecture) |
| Set up call transfers or bookings | [Tools](/build/tools/overview) |
| Buy a phone number | [Phone Numbers](/launch/buy-numbers) |
| Launch an outbound campaign | [Campaigns](/launch/campaign-outbound-launch) |
| Embed voice on my website | [Web Widgets](/launch/web-widget-deployment) |
| Review how calls are going | [Conversations](/manage/conversations/overview) |
| Fix agent issues | [Quality Studio](/manage/quality-studio/overview) |
| Connect via API | [API Reference](/api-reference/introduction) |
| Manage client accounts | [Client Service Models](/accounts/agency-playbook) |
***
## Build
Configure your agent's voice, prompt, knowledge, and tools.
Go from zero to a working agent
Configure every aspect of your agent in one place
## Test
Validate your agent before it talks to real customers.
Iterate quickly in the browser
Verify voice quality with a real call
## Deploy
Connect your agent to phone numbers, campaigns, or your website.
Buy or import numbers for inbound calls
Automate outbound calling at scale
Embed voice and chat on your site
Verify everything before going live
## Manage
Monitor live operations, handle follow-ups, and improve agents from production data.
Track call volume, goals, and trends
Review transcripts, recordings, and outcomes
Manage caller records and history
Track follow-up work from calls
Flag issues in calls and resolve them with AI assistance
Track outbound campaign progress and outcomes
Manage website widget experiences
Manage retention, data requests, and public trust settings
# Buy Numbers
Source: https://docs.itellico.ai/launch/buy-numbers
Purchase phone numbers from the itellicoAI marketplace
Buying numbers through the interface is straightforward for most cases, but compliance requirements can sometimes make it tricky — especially for certain countries or number types. If you run into any issues or just want help, contact us at [support@itellico.ai](mailto:support@itellico.ai) and let us know what you need. We'll take care of it.
The fastest way to get phone numbers for your AI agents is buying them directly from the itellicoAI marketplace. Numbers are yours once purchased; you can use them for as long as your subscription is active. We handle the telephony infrastructure — you just pick a number and assign an agent.
**Access:** Go to **Telephony → Buy Number**, or open **Telephony → Phone Numbers** and click **Add Number → Buy a Number**.
The current marketplace UI exposes supported DACH countries: Austria, Germany, and Switzerland. Additional countries may be added as carrier coverage expands.
## How to Buy a Number
Go to **Telephony → Buy Number**, or open **Telephony → Phone Numbers** and click **Add Number → Buy a Number**.
Choose a supported country from the dropdown, then select one or more number types such as local, national, mobile, or toll-free. Available types depend on the country.
The marketplace shows the **monthly price** for your selection. If a [compliance profile](/phone-numbers/regulatory-bundles) is required for that country, you'll see a notice — you must have an approved profile before purchasing.
Optionally search by digits or prefix (e.g., "720" or "555") to find specific numbers. Results show up to 50 matching numbers with type, location, monthly price, and purchase action.
Click **Purchase** on your chosen number. Checkout opens in a separate secure payment flow. After checkout, you return to [Phone Numbers](/launch/phone-numbers), where the number can briefly show as provisioning before it is fully available.
Some countries show masked numbers (partially hidden) until purchase. You'll see the prefix and area code, but the full number is assigned after checkout.
## After Purchase
Once your number is provisioned:
1. Open [Phone Numbers](/launch/phone-numbers) to find your new number
2. Open the number's **Routing** settings to assign an agent
3. Optionally add a **Label** for easy identification
4. Test a call to verify everything works
If checkout succeeds but provisioning is still running, the Phone Numbers page shows a temporary status notice until the number is ready.
## Next Steps
Manage and configure your numbers
Meet compliance requirements for regulated countries
Configure the agent that answers calls
# Campaign & Outbound Launch
Source: https://docs.itellico.ai/launch/campaign-outbound-launch
Deploy automated outbound calling campaigns at scale
**In this guide, you'll learn to:**
* Create an outbound campaign with an agent and phone number
* Add contacts and choose calling windows
* Set up goals and insights to track outcomes
* Launch the campaign and know where to monitor it
***
Outbound campaigns automate high-volume calling for sales, reminders, surveys, and notifications. Each campaign connects your agent to a contact list, calling window, and outcome tracking.
## Use Campaign Launch When You Need To
* call a list of contacts at scale
* run a repeatable outbound program instead of manual one-off calls
* track answer rates, retries, and outcomes across many contacts
* control when calls happen and which number is used
Campaigns are usually owned by sales, operations, success, or marketing teams that care about both execution and measurable results.
For detailed campaign management and analytics after launch, see the [Campaign Management](/manage/campaigns/overview) guide.
## Key Features
Dials contacts progressively with configurable retry logic
Enforce calling windows and timezone scheduling
Skip voicemails with text or [Answering Machine Detection](/glossary#voice-and-speech) using machine learning detection
Moves contacts through dialing, retry, and completion states automatically
Configure campaign goals and analyses before launch
Use Campaign Management after launch for dashboards, contacts, exports, and tuning
## Creating Your First Campaign
Go to **Campaigns** and click **Create Campaign** (or **Create First Campaign** if this is your first one).
**Campaign Name**: Descriptive name for internal use (e.g., "Q1 Sales Outreach")
**Agent**: Select which AI agent will handle the calls
**Phone Number**: Choose a phone number for this campaign. Numbers already assigned to active or paused campaigns won't appear in the list. If you haven't set up a phone number yet, see [Phone Numbers](/launch/phone-numbers).
**Business Hours**: Limit calling to a specific schedule (default is 24/7). For schedule setup and timezone behavior, see [Schedules](/launch/schedules).
Click **Create Campaign** to continue.
After creation, go to the **Settings** tab to fine-tune:
**Scheduling:**
* **Start Date & Time**: When to begin calling
* **Call Interval**: Wait time between calls
* **Max Concurrent Calls**: Maximum simultaneous outbound calls for this campaign
* **Ring Timeout**: Expert-mode setting for how long to let the phone ring
* **Business Hours**: Schedule that controls when calls are allowed
* **Local legal compliance window**: Keeps the campaign inside recipient-region calling windows when enabled
For schedule creation, timezone behavior, and local calling windows, see [Schedules](/launch/schedules).
**Retry Logic:**
* **Max Retry Attempts**: How many times to retry (0-10, default: 2)
* **Retry Interval**: Calendar time between retries. Configure with unit selector (minutes, hours, or days)
* **Contact Completion Timeout**: Expert-mode setting. After a call completes, the platform waits this long before running analysis — giving the contact a window to call back or be called again before the outcome is finalized. Configure with unit selector (minutes, hours, or days).
**Answering Machine Detection (AMD):**
* **AMD Mode**: Expert-mode setting with **Text-based** and **ML-based** options. [Learn more about AMD](#answering-machine-detection).
For full settings documentation, see [Campaign Management](/manage/campaigns/overview).
Go to the **Contacts** tab to manage your campaign contacts.
Click **Add Contacts** and choose one of the tabs:
* **Add from Existing**: Search and filter contacts already in your account
* **Import CSV**: Upload a new contact list for the campaign
**Adding contacts**:
* Select individual rows and click **Add Selected**
* Use **Add All Filtered** to add the current filtered result set
* Use search and tag filters to narrow down contacts before adding
Large batches run in the background.
Open the **Analytics** tab to define the primary goal, any secondary goals, and the analysis questions you need after each call.
Keep the launch configuration focused on what you need to measure from day one. For detailed goal and analysis management after launch, see [Campaign Management](/manage/campaigns/overview).
Campaigns are created in **Paused** status by default. Set the status to **Active** to start dialing. Once active, the campaign begins at the configured start time.
Use [Campaign Management](/manage/campaigns/overview) after launch to monitor the Dashboard, Contacts, Settings, and Analytics tabs.
## After Launch
Once a campaign is active, the contact lifecycle, dashboard metrics, exports, and per-contact actions are handled in [Campaign Management](/manage/campaigns/overview).
| Need | Use |
| ------------------------------------ | ---------------------- |
| See whether calls are running | Campaign **Dashboard** |
| Review individual contact state | Campaign **Contacts** |
| Tune retry, phone numbers, or timing | Campaign **Settings** |
| Review goals and analyses | Campaign **Analytics** |
## Answering Machine Detection
AMD prevents your agent from leaving voicemails or talking to answering machines:
| Mode | Speed | Accuracy | Best For |
| -------------- | ------ | -------- | ----------------------------------------- |
| **Text-based** | Fast | Good | High-volume campaigns where speed matters |
| **ML-based** | Slower | Higher | Campaigns where accuracy is critical |
## Inbound Call Integration
When contacts call back, the system automatically links the call to the campaign contact using two matching methods:
**Primary Match (phone number matching)**:
* Matches contact's phone number (calling number) with campaign's phone number (called number)
* Works for active or paused campaigns
**Fallback Match (Agent-based)**:
* Activates if no Direct Inward Dialing (DID) match found and contact has a recent outbound call (within 30 days)
* Matches contact's phone number with campaigns using the same agent
**Status Updates**: When an inbound call is matched, contacts in Retry, Completed, or No Conversation status automatically move to **Called**, allowing callbacks to reopen contact opportunities.
## Best Practices
### Start Small
Always start with a pilot batch of 10-20 contacts before scaling to thousands. This validates configuration and prevents large-scale mistakes.
**Pilot workflow**:
1. Create a test list with friendly contacts (colleagues, test numbers)
2. Launch the campaign and monitor the campaign **Dashboard** and **Conversations** list
3. Review outcomes:
* Answer rate
* AMD accuracy
* Goal achievement rate
* Average call duration
4. Adjust your agent prompt, AMD settings, or schedules as needed
5. Scale gradually: 50 > 200 > 1,000+ contacts
### Contact List Quality
Before uploading contacts:
* Remove duplicate numbers
* Validate phone number format (international format with country code, e.g., +1234567890)
* Check against your internal Do Not Call list
* Verify against national DNC registries if applicable
### Timezone Optimization
For contacts across multiple time zones, assign a schedule that matches the recipient region, then review the campaign **Dashboard** and **Analytics** tabs after your pilot batch. If your view includes a heatmap, use it to refine the best calling windows per region.
For schedule setup, see [Schedules](/launch/schedules).
### Segmentation
Create separate campaigns for:
* Different customer segments (trial vs. paid customers)
* Different scripts or objectives
* Different languages
* A/B testing variations
Track performance and optimize each segment independently.
## Next Steps
Manage campaign settings, contacts, and analytics
Configure calling schedules and timezone handling
Optimize campaign performance and customer satisfaction
Review consent, calling-window, and compliance responsibilities
***
## Common Questions
Start with a pilot batch of 20-30 contacts to establish baseline answer rates and validate your agent's outbound greeting. Scale up after reviewing the first results.
itellicoAI matches inbound callbacks to the campaign contact by phone number. If matched, the contact's status updates automatically. If the agent is assigned to the phone number, it handles the call like a normal inbound conversation.
A phone number can only be assigned to one active or paused campaign at a time. Use multiple numbers with rotation if you need to run parallel campaigns.
# Outbound Calling Compliance
Source: https://docs.itellico.ai/launch/outbound-compliance
Legal requirements and regulations for outbound calling campaigns across DACH, EU, US, and international markets
This page provides general guidance, not legal advice. Regulations change frequently. Consult a qualified legal professional for compliance decisions specific to your business and target markets.
## Why Compliance Matters
Outbound calling is regulated in most countries. Non-compliance is not just a policy issue — it is a financial and legal risk.
| Region | Regulation | Consequence |
| ------------- | ---------------------------- | ------------------------------------------------------------------------------------ |
| **Germany** | UWG (Unfair Competition Act) | Up to **€300,000** per violation for unsolicited B2C calls |
| **Austria** | TKG (Telecommunications Act) | Up to **€50,000** per violation |
| **EU** | GDPR / ePrivacy | Up to **4% of annual global revenue** or **€20 million** |
| **EU** | AI Act | Mandatory disclosure that callers are speaking with AI |
| **US** | TCPA | **$500–$1,500 per call** in statutory damages; class action lawyers actively monitor |
| **US** | FCC rules | Automated dialing systems require prior express consent |
| **Canada** | CASL | Up to **\$10 million** per violation for organizations |
| **Australia** | Do Not Call Register Act | Heavy fines enforced by ACMA |
itellicoAI provides [schedules](/launch/schedules), campaign Settings, and the **Local legal compliance window** control to help you stay compliant, but it is your responsibility to ensure your campaigns meet local requirements.
***
## DACH Region (Germany, Austria, Switzerland)
Germany, Austria, and Switzerland have strict regulations on outbound calling. Cold calling to consumers without prior consent can result in fines up to €300,000 (Germany) or €50,000 per violation.
Germany's [Gesetz gegen den unlauteren Wettbewerb (UWG)](https://www.gesetze-im-internet.de/englisch_uwg/) governs telemarketing alongside [General Data Protection Regulation (GDPR) (DSGVO)](https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng).
**Business-to-Consumer (B2C):**
* **Prior explicit consent required** — Cold calling to consumers is prohibited without consent
* No presumed consent exists
* **Business Hours**: 8 AM to 9 PM local time (weekdays recommended)
* Providing a phone number in public directories does NOT constitute consent
**Business-to-Business (B2B):**
* Allowed under **presumed consent** if:
* Prospect has documented interest in your product/service
* Interest must be concrete, not abstract
* You can demonstrate presumed agreement to be called
* **Documentation is critical** — Keep records of demonstrated interest
**Enforcement:**
* BNetzA (Federal Network Agency) enforces violations
* Fines up to €300,000 per violation
* Automated dialing systems (robocalls) prohibited without consent
**Recommended setup:**
1. Verify you have documented consent or legitimate business interest
2. Set business hours to 8 AM – 9 PM (Europe/Berlin timezone)
3. Keep detailed records of consent source and date
4. Never call numbers on opt-out lists
Austria's [Telecommunications Act (TKG 2021)](https://ris.bka.gv.at/Dokumente/Erv/ERV_2021_1_190/ERV_2021_1_190.pdf) implements strict cold calling rules.
**B2C:**
* **Cold calling is prohibited** — No presumed consent framework exists
* Stricter than Germany — explicit opt-in required
* **ECG opt-out list** — National do-not-call registry
**B2B:**
* More lenient than B2C but still requires justifiable business relationship
* Document business connection before calling
**Business Hours:**
* While not explicitly mandated, follow German standards: 8 AM – 9 PM local time
* Avoid weekends for cold outreach
**Recommended setup:**
* Use Europe/Vienna timezone
* Configure Mon–Fri 9 AM – 6 PM for conservative compliance
* Verify contacts are not on ECG opt-out list
Switzerland's [Unfair Competition Act (UCA)](https://www.fedlex.admin.ch/eli/cc/1988/223_223_223/en) governs telemarketing.
**Key requirements:**
* **Asterisk opt-out**: Anyone can register their number with an asterisk (\*) in the phone directory to opt out
* Calling opted-out numbers is unfair unless **pre-existing business relationship** exists
* **Caller ID display required**: Must show registered, authorized phone number
**Business Hours:**
* No specific legal hours, but best practice: 8 AM – 8 PM weekdays
* Respect business relationship context for timing
**GDPR note:**
* Switzerland is not EU, but Swiss law is heavily influenced by GDPR
* Apply similar data protection standards
**Recommended setup:**
* Use Europe/Zurich timezone
* Configure Mon–Fri 9 AM – 6 PM
* Ensure your caller ID is properly registered
* Keep records of business relationships
***
## European Union
For campaigns targeting EU countries, comply with the [ePrivacy Directive (2002/58/EC)](https://eur-lex.europa.eu/eli/dir/2002/58/oj/eng) and [GDPR (2016/679)](https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng):
* **Prior opt-in required** for marketing calls in most EU countries
* **Business Hours**: No EU-wide standard, but respect cultural norms
* **Recommended**: Mon–Fri 9 AM – 6 PM local time
* Avoid lunch hours (12–2 PM in many countries, especially France, Spain, Italy)
***
## International
For campaigns targeting U.S. consumers, comply with the [Telephone Consumer Protection Act (47 USC § 227)](https://www.law.cornell.edu/uscode/text/47/227):
* **Time restrictions**: 8 AM – 9 PM recipient's local time
* Applies to B2C marketing/sales calls
* Exemptions: Transactional calls, B2B, prior consent
* **Fines**: Up to \$43,792 per violation
* [FCC TCPA Rules](https://www.fcc.gov/sites/default/files/tcpa-rules.pdf)
**Recommended setup**: Use 8 AM – 9 PM with the contact's timezone (America/New\_York, America/Chicago, etc.)
Canada's [Anti-Spam Legislation (CASL)](https://fightspam.gc.ca/) governs commercial electronic messages:
* Prior consent required for commercial calls
* Provincial regulations vary
* Best practice: 8 AM – 9 PM local time
* Quebec has additional consumer protection rules
* Enforced by [CRTC](https://crtc.gc.ca/eng/internet/anti.htm)
Australia's [Do Not Call Register Act 2006](https://www.legislation.gov.au/C2006A00088/latest/text) establishes strict telemarketing rules:
* **Time restrictions**: Mon–Fri 9 AM – 8 PM, Sat 9 AM – 5 PM (no Sunday calls)
* Based on recipient's local time
* Heavy fines for violations
* Must check against [Do Not Call Register](https://www.donotcall.gov.au/)
* Managed by the Australian Communications and Media Authority (ACMA)
***
## Next Steps
Configure calling schedules for your campaigns
Create your first outbound campaign
# Launch Overview
Source: https://docs.itellico.ai/launch/overview
Move from testing to live phone numbers and widgets
Once your agent is tested and ready, choose how you want to deploy it. You can launch on [phone lines](/launch/phone-numbers), run [outbound campaigns](/launch/campaign-outbound-launch), or embed a [web widget](/launch/web-widget-deployment) on your site. Make sure to configure [business hours](/launch/schedules) before going live.
## Use This Section When
Use this section when your agent is already working in tests and you are deciding how to take it live. It helps business teams choose the right channel, complete the operational setup, and avoid missing go-live steps.
## Choose the Right Launch Path
| If you want to... | Use... | Best for |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | --------------------------------------------------- |
| Receive inbound calls from customers | [Phone Numbers](/launch/phone-numbers) | Front desk, support, routing, booking |
| Run outbound programs from a contact list or trigger calls via API | [Campaigns](/launch/campaign-outbound-launch) / [API](/api-reference/introduction) | Sales outreach, reminders, surveys, follow-up |
| Let visitors talk to your agent on your site | [Web Widget](/launch/web-widget-deployment) | Website assistance, lead capture, product questions |
Many businesses start with one channel, learn from real conversations, then expand to additional channels later.
## Deployment Methods
Buy phone numbers, manage compliance, or use **Connect Your Own**
Launch automated outbound calling campaigns
Embed voice and chat with your agent on your website
## Next Steps
Verify everything before going live
Fix common deployment issues
# Phone Numbers
Source: https://docs.itellico.ai/launch/phone-numbers
View, edit, and manage all your phone numbers in one place
The Phone Numbers list shows all your numbers — both purchased through the marketplace and imported through **Connect Your Own**.
**Access:** Navigate to **Telephony → Phone Numbers**
## List Columns
| Column | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Number** | Phone number with country flag |
| **Label** | Optional name you've assigned (for example, "Support Line") |
| **Forwarded From** | If you use number forwarding, enter the customer-facing number that forwards calls to this AI number. Helps you track the forwarding source and is automatically displayed on your public [Trust Center](/manage/trust-center/overview). Leave blank if not using forwarding. |
| **SIP Trunk** | Managed marketplace trunk for purchased numbers, or the linked SIP trunk for imported numbers in **Connect Your Own** flows. Imported-number trunks are editable inline via dropdown. |
| **Routing** | Direct inbound agent assignment or schedule-based routing rules. The settings button opens detailed inbound routing. |
| **Spam Status** | Spam risk score (1-10 scale) with color coding: green (clean), yellow (neutral), orange (suspicious), red (spam). Links to a detailed report. |
| **Actions** | Copy ID, Edit, Delete |
Use the search bar to find numbers by number or friendly name, and sort by date, number, or name.
Use **Add Number** to open the two main acquisition paths:
* **Buy a Number** for marketplace purchases
* **Connect Your Own** to import an existing number through a SIP trunk
## Editing a Number
Click **Edit** or use the inline dropdowns to update:
* **Label** — Optional name for easy identification
* **Forwarded From** — If you use number forwarding, the customer-facing number that forwards to this AI number. Used for internal tracking and displayed on your public [Trust Center](/manage/trust-center/overview). Leave blank if not using forwarding.
* **SIP Trunk** — Which SIP trunk handles calls for imported numbers in **Connect Your Own** flows
* **Routing** — Fallback agent and optional schedule-based routing rules
## Routing Calls
You can configure routing in two places:
* **Phone Numbers list** — Use the **Routing** column or the settings button on a row
* **Connect Your Own / Edit dialog** — Set the fallback agent and add schedule-based routing rules
Routing works like this:
* the **Fallback Agent** handles calls when no schedule rule matches
* optional routing rules are checked in order
* each rule maps a **Schedule** to a target **Agent**
If no routing rule matches, the fallback agent handles the call.
Use [Schedules](/launch/schedules) when you need different agents during open, after-hours, or weekend windows.
## Next Steps
Purchase new numbers from the marketplace
Import existing numbers via Connect Your Own
Verify identity for regulated countries
Configure routing schedules
# Production Checklist
Source: https://docs.itellico.ai/launch/production-checklist
Pre-launch and post-launch checklist for deploying AI voice agents to production
Use this checklist before going live with any deployment channel. Complete the relevant sections based on your launch path.
***
## Universal Pre-Launch
Complete these steps regardless of deployment channel.
### Agent Configuration
* [ ] Agent name is professional and customer-appropriate
* [ ] AI model is selected (start with Balanced if unsure)
* [ ] Voice is selected and sounds natural for your use case
* [ ] Prompt is clear, structured, and tested
* [ ] Response Style (temperature) is set appropriately (lower = more consistent)
* [ ] Timezone is set correctly for your business
### Knowledge Base
* [ ] All knowledge items show green (ready to use)
* [ ] Knowledge base is assigned to the agent
* [ ] Test questions return accurate, grounded answers
* [ ] No outdated information in knowledge items
* [ ] Agent says "I don't know" for questions outside knowledge scope
### Tools
* [ ] Each tool is tested individually (transfer, booking, custom actions)
* [ ] Tool names match exactly in your prompt (case-sensitive)
* [ ] Authentication credentials are current (check Secrets)
* [ ] Transfer destinations answer and are staffed during business hours
* [ ] Calendar integration shows correct availability (if using booking)
### Analytics
* [ ] At least one Primary Goal is defined
* [ ] Insights are configured for key metrics
* [ ] Post-call notifications are set up for critical events (escalations, complaints)
### Privacy & Compliance
* [ ] Data retention policies are configured in Privacy tab
* [ ] Pre-call announcement is set up if required by law
* [ ] Recording opt-out is enabled if required
* [ ] Trust Center is configured with privacy policy URL
***
## Phone Channel Checklist
* [ ] Phone number is purchased or imported and shows Active status
* [ ] Routing is configured — correct agent assigned
* [ ] Schedule-based routing is set up if using business hours
* [ ] Spam score is green (clean) on the phone number
* [ ] Test call completed from an external phone
* [ ] Greeting sounds correct over phone (not just web)
* [ ] Transfer destinations work from a real phone call
* [ ] Voicemail/AMD behavior is acceptable
* [ ] Inactivity timeout is configured (max duration, silence reminders)
***
## Web Widget Checklist
* [ ] Widget is created and linked to the correct agent
* [ ] Appearance matches your website branding
* [ ] Content labels and messages are in the correct language
* [ ] Features are configured (voice, text, transcript, feedback)
* [ ] Allowed domains are set (or left empty for all domains)
* [ ] Privacy / Trust Center settings are configured
* [ ] Embed script is placed before `