# AI Prompt Editor Source: https://docs.lacy.ai/ai-assistants/ai-prompt-editor Edit and improve your assistant's prompts using AI-powered suggestions through a conversational interface The AI Prompt Editor is an intelligent tool that allows you to edit and improve your AI assistant's prompts using natural language. Instead of manually editing text, you can chat with an AI assistant that understands your requests and suggests intelligent modifications. ## Overview The AI Prompt Editor provides: * **Conversational editing** - Describe changes in plain language * **Smart suggestions** - AI understands context and makes relevant changes * **Review before apply** - Accept or reject each change individually * **Variable management** - Easily manage pre-call and post-call data * **Template library** - Start with proven prompt templates AI Prompt Editor Interface ## Getting Started Navigate to **Assistants** in the sidebar and click on the assistant you want to edit. In the edit form, scroll to the **System Prompt** section and find the **AI Prompt Editor** tab. Click the **Launch AI Prompt Editor** button. A modal window will open with the editor interface. You must save your assistant at least once before you can use the AI Prompt Editor. ## Interface Overview The AI Prompt Editor has three main areas: ### Chat Panel (Left Side) This is where you interact with the AI: * Type your requests in the input box at the bottom * View conversation history above * Use quick suggestion chips for common actions: * **Make it more concise** - Shorten the prompt * **Add more detail** - Expand with specifics * **Improve clarity** - Make instructions clearer * **Add instructions** - Add new behavioral guidelines ### Editor Panel (Right Side) This shows your current prompt with two tabs: * **System Prompt** - The main instructions for your assistant * **Initial Message** - The greeting message when calls start Toggle between **Edit** mode (textarea) and **Preview** mode (formatted view with diff highlights). ### Side Tabs * **Variables** - Manage pre-call data variables * **Post-Call** - Define data to collect after calls ## Using the Chat ### Making Requests Simply describe what you want to change: **You:** "Make the tone more friendly and casual" **AI:** The AI will suggest changes to make greetings warmer, use more conversational language, and soften formal phrases. **You:** "Add information about our return policy - 30 days no questions asked" **AI:** The AI will find the appropriate place in your prompt and add the return policy details. **You:** "Add instructions for handling angry customers" **AI:** The AI will add behavioral guidelines for de-escalation and when to transfer to a human. ### Tips for Better Results * **Be specific** - "Add a 10% discount mention" is better than "add discount info" * **Provide context** - "When asked about pricing, mention..." gives AI better understanding * **One change at a time** - Break complex changes into multiple requests ## Reviewing Changes When the AI suggests changes, they appear in the diff view: * **Green highlighting** - New text being added * **Red highlighting** - Text being removed * **Blue highlighting** - Text being modified ### Accept or Reject Changes Each change has two buttons: * **✓ Accept** - Apply this specific change * **✗ Reject** - Discard this change You can also use bulk actions: * **Accept All** - Apply all pending changes * **Reject All** - Discard all pending changes Always review changes before accepting. The AI makes intelligent suggestions, but you know your business best. Reviewing Changes with Diff View ## Variables Variables allow you to personalize calls with dynamic data. ### Adding Variables 1. Click the **Variables** tab 2. Click **Add Variable** 3. Enter a name (e.g., `customer_name`, `appointment_time`) 4. Set a default value ### Using Variables in Prompts Type variables directly in your prompt using curly braces: `{variable_name}` **Example prompt:** ``` Hello {customer_name}, I'm calling from {company_name} about your appointment on {appointment_date}. ``` ## Post-Call Schema Define structured data you want to collect during or after calls. ### Adding Post-Call Fields 1. Click the **Post-Call** tab 2. Click **Add Field** 3. Configure: * **Name** - Field identifier (e.g., `meeting_scheduled`) * **Type** - `string`, `number`, or `boolean` * **Description** - What this field captures ### Example Fields | Name | Type | Description | | ------------------- | ------- | ------------------------------------ | | `meeting_scheduled` | boolean | Whether a meeting was booked | | `interest_level` | string | Customer's interest: hot, warm, cold | | `callback_time` | string | Preferred callback date/time | | `objection_reason` | string | Main objection if not interested | The AI can suggest post-call fields based on your prompt. Just ask: "What data should I collect from these calls?" Post-Call Fields Configuration ## Templates When you first open the AI Prompt Editor, you can choose to start with a template: * **Continue with existing** - Keep your current prompt * **Start from scratch** - Begin with a blank prompt * **Start with template** - Choose from pre-built templates Templates are organized by use case: * Sales calls * Customer support * Appointment scheduling * Surveys and feedback * Lead qualification Template Selection Screen ## Saving Your Work Click the **Save** button in the top-right to save all changes to your assistant. The editor auto-detects unsaved changes. If you try to close with unsaved work, you'll be prompted to save or discard. ## Best Practices Templates provide proven starting points. Customize rather than starting from zero. Make small changes, test, and refine. Don't overhaul everything at once. The AI is helpful but not perfect. Always review suggestions before accepting. Make test calls after changes to verify the assistant behaves as expected. ## Related Resources * [System Prompts Guide](/ai-assistants/system-prompt) - Deep dive into prompt writing * [Flow Builder](/ai-assistants/flow-builder) - Visual alternative for conversation design * [Testing Your Assistant](/ai-assistants/testing) - How to test your changes # Assistant best practices Source: https://docs.lacy.ai/ai-assistants/assistant-configuration Quick guide to fine-tune mode, transcriber, model, and other settings for the best call experience. > **Last updated:** September 1, 2025 Getting great results often comes down to **picking the right engine settings**. Use this checklist when configuring an assistant: ## 1. Pick a Mode | Mode | Why choose it? | Notes | | --------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | **Dualplex (Beta)** | Fast turn-taking + premium/cloned voices | Recommended default. Pair with **Gemini Flash 2.0/2.5** or **GPT‑5 Realtime**. | | **Speech-to-Speech (Multimodal)** | Fastest turn-taking & most natural flow | Recommended model: **GPT‑5 Realtime**. | | **Pipeline** | Maximum control over voice & long-form replies | Recommended model: **GPT‑5 Mini**. If you select Pipeline, continue to the **Transcriber** step below. | Want to know more about the differences between the modes? Read the Assistant modes guide. Experiment with all three modes: record the same scenario in each and compare response time and caller satisfaction.
## 2. Choose a Transcriber (Pipeline only) | Transcriber | Accuracy | Latency | Best for | | ------------ | -------- | --------------- | -------------------------------------------------------------------------------- | | **Azure** | ⭐⭐⭐⭐ | ⏱️⏱️⏱️ (slower) | When you need the highest transcription fidelity. | | **Gladia** | ⭐⭐⭐ | ⏱️ (faster) | Good all-rounder for most languages. | | **Deepgram** | ⭐⭐⭐ | ⏱️ (faster) | Another solid choice—test which performs better for your language & audio setup. | > **Tip:** Different languages, accents, or background noise can impact each engine differently. Run a quick A/B test and keep the best performer. ## 3. Select an LLM Model | Model | Strengths | Trade-offs | | -------------------------- | ------------------------------------------------- | --------------------------------------------------------- | | **GPT-5 Mini** | Balanced reasoning with low latency | May be slower than realtime models for rapid turn-taking. | | **GPT-5 Realtime** | Designed for ultra-low-latency voice turns | Best for **Speech-to-Speech** and **Dualplex**. | | **GPT-4o** | Strong reasoning and multimodal understanding | Higher latency. | | **Gemini Flash 2.0 / 2.5** | Ultra-fast for voice turns in Dualplex/Multimodal | Excellent for minimizing perceived latency. | If speed is critical, use **GPT‑5 Realtime** (great for **Speech-to-Speech**) or **Gemini Flash 2.0/2.5** (great with **Dualplex**). For richer reasoning, use **GPT-4o** or **GPT-5 Mini** and offset latency by using filler audios. ## 4. Noise Cancellation If callers are on speaker phone or in a quiet environment, keep **noise cancellation ON**. If your call volume is low or some words are "clipped," **turn it OFF** so the transcriber gets the full waveform. If your assistant is not hearing you well, you can try to turn off noise cancellation. ## 5. Conversation Timers | Parameter | Recommended | Why | | ------------------------ | ----------- | ------------------------------------------------------------------ | | **Re-engagement** | `≈ 30 s` | Gives callers enough time to think. Lower values can feel pushy. | | **Max silence duration** | `≈ 60 s` | Prevents premature hang-ups while still ending truly silent calls. | Test different values in real calls—too low can interrupt, too high leaves awkward gaps. ## 6. Initial Message | Mode | How it's used | Best practice | | -------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | **Pipeline** | Read **exactly** as written (converted by TTS). | Write the greeting verbatim: "Hello, this is Alex from …". | | **Dualplex** | Read **exactly** as written (rendered via ElevenLabs TTS). | Write the greeting verbatim, then select your cloned voice. | | **Speech-to-Speech** | Interpreted as a **prompt** by the model. | Include instructions like "Greet the customer and say …" *or* prepend `say exactly: ` to ensure literal output. | ## 7. Ambient sound Enabled by default, ambient sound is a feature that adds background noise to the assistant's voice. If the assistant is not hearing you well, you can try to turn off ambient sound or turn the volume lower. ## 8. Endpointing sliders **Control when your assistant starts talking** with the endpointing sensitivity slider at the bottom of assistant settings. | Setting | Effect | Use when | | ---------------------- | --------------------------------------------------------- | ------------------------------------------ | | **Lower sensitivity** | Assistant responds **faster** after caller stops speaking | You want snappy, quick-turn conversations | | **Higher sensitivity** | Assistant waits **longer** before responding | Callers give longer, more detailed replies | **Pro tip:** If your assistant cuts off callers mid-sentence, **increase** the sensitivity. If responses feel sluggish, **decrease** it. ## 9. Debug using call transcript If you are having issues with your assistant, you can use the call transcript to debug the issue. 1. Go to the Call history page. 2. Click on the last call you tested 3. The call transcript will be shown including function calls and its parameters. ## 10. Still have questions? If you have any questions, please contact our support team via the chat widget inside the app. Test different settings with real calls—the right balance depends on your conversation flow and caller behavior patterns. *** Need a complete list of every toggle and slider? See the full Assistant settings reference. # Assistant Modes Source: https://docs.lacy.ai/ai-assistants/assistant-modes Understand the three voice generation modes available for your AI assistants and when to use each one. AI assistants on lacy.ai can speak in **three distinct modes**. Each mode determines how a caller's speech is understood and how the assistant's reply is generated: Choosing the right mode can improve response time, naturalness, and overall call experience. ## 1. Pipeline | | | | ---------------- | ---------------------------------------------------------- | | **Label in UI** | `Pipeline` | | **How it works** | Speech-to-Text → LLM → Text-to-Speech | | **Latency** | \~800 – 1500 ms (depends on language & model) | | **Best for** | Complex reasoning, dynamic prompts, multi-sentence replies | Pipeline mode first transcribes the caller's words into text, runs that text through the language model, then converts the response back to audio. It's a tried-and-true approach that offers maximum flexibility: * Supports **all voices** in the library (including custom-cloned voices). * Handles **long-form answers** or paragraph-style responses well. * Allows the LLM to **inject variables** and reference earlier context cleanly. ### When to choose Pipeline 1. You need rich, multi-sentence answers (e.g. support queries, detailed explanations). 2. The assistant must reason over **structured data** or complex prompts. 3. You prefer absolute control of the spoken voice (clone or brand voice). ## 2. Speech-to-Speech (Multimodal) | | | | ---------------- | ------------------------------------------------------------- | | **Label in UI** | `Speech-to-speech` | | **How it works** | Direct **speech-to-speech** generation (no intermediate text) | | **Latency** | \~300 – 600 ms (ultra low) | | **Best for** | Natural back-and-forth, short & reactive replies | Speech-to-speech mode skips separate transcription and TTS. Instead, it uses a **multimodal model** that listens and speaks directly, producing more conversational flow: * **Fast turn-taking** – callers experience near-instant responses. * Generates **more expressive prosody** natively (intonation, fillers). * Currently supports a **limited voice set**, but more are added regularly. ### When to choose Speech-to-Speech 1. The conversation needs to feel **snappy** (sales, booking confirmations). 2. Your replies are generally **short sentences** or quick acknowledgements. 3. You're okay with the system-provided voice options for faster interaction. Speech-to-speech is evolving rapidly. If you need a custom cloned voice with low latency, try **Dualplex**. ## 3. Dualplex (Beta) | | | | ---------------- | ------------------------------------------------------------------ | | **Label in UI** | `Dualplex` | | **How it works** | Multimodal STT + LLM (speech-to-speech) with ElevenLabs TTS output | | **Latency** | Low (varies by voice and model) | | **Best for** | Fast, natural replies with high-quality/brand voices (cloned) | Dualplex blends the responsiveness of speech-to-speech with the premium voices and cloning from ElevenLabs used in Pipeline. The assistant uses the multimodal model to understand the caller and plan the reply, then renders the final speech through ElevenLabs for consistent, high‑fidelity output. * **Near-instant turn-taking** similar to speech-to-speech. * Access to **ElevenLabs** voice library, including **custom-cloned voices**. * Great for **short to medium** replies with expressive prosody. * **Recommended default** for most use-cases today; currently in **Beta**. ### When to choose Dualplex 1. You want fast back-and-forth but need a branded or cloned voice. 2. You want more expressive delivery without giving up precise voice choice. 3. You're comfortable using a new feature that is still in Beta. ## Switching modes You can pick the mode for each assistant in **Assistant → Settings → Voice Engine**. Test all three modes to see which delivers the best balance of speed and quality for your use-case. `Dualplex` is currently labeled **Beta**. *** **Pro Tip:** Record two calls – one in each mode – and compare the caller's perceived latency and engagement level to decide which fits your flow. # Cal.com Appointment Scheduling Source: https://docs.lacy.ai/ai-assistants/cal-com-scheduling Learn how to enable your AI assistant to schedule appointments using Cal.com integration Enable your AI assistant to seamlessly schedule meetings and appointments using Cal.com integration. This powerful feature allows your AI to check availability and book meetings directly during calls. Do not make any new fields required in your Cal.com event settings. The integration only supports default fields and the optional phone field. Adding required custom fields will cause the integration to fail. ## Prerequisites Before setting up Cal.com integration, you'll need: * A Cal.com account (either hosted or self-hosted) * An event type configured in Cal.com * An API key from Cal.com ## Setup Process ### 1. Cal.com Configuration 1. Sign up or log in to your [Cal.com](https://cal.com/) account 2. Create a new event type specifically for AI assistant bookings * Give it a clear name like "Meeting with AI Assistant" * Configure duration, availability, and other settings 3. Once created, note down the event ID from the URL 4. Generate an API key: * Go to Cal.com settings * Navigate to Developer Settings * Create a new API key * Copy and securely store the API key ### 2. Customer Contact Information #### Email Configuration To send calendar invites to customers: 1. Define `email` in your assistant's input variables 2. Pass the customer's email as the `email` variable when creating the lead 3. The system will automatically use this email for calendar invitations #### Phone Number in Calendar Events To include the caller's phone number in calendar events: 1. Go to your event settings in Cal.com 2. Click on "Add a question" 3. Configure the field with these exact values: * Identifier: `phone` (this must be exact) 4. Save your changes ### 3. Adding Cal.com to Your Assistant 1. In your AI assistant settings, locate the Tools section 2. Add the Cal.com integration 3. Configure the tool with: * Your Cal.com API key * The event type ID ## Best Practices * Create dedicated event types for AI bookings to track their usage * Set clear buffer times between meetings * Configure appropriate meeting durations * Use descriptive event names that make sense to your customers * Keep only default fields and the phone field optional * Always include customer email in lead creation for calendar invites ## Testing After setup, we recommend: 1. Making a test call to your AI assistant 2. Requesting to schedule a meeting 3. Verifying the booking appears in your Cal.com dashboard 4. Checking that the phone number appears in the calendar event 5. Verifying the customer receives the calendar invitation email 6. Checking the confirmation emails are received ## Troubleshooting If you encounter issues: * Verify your API key is active and has the correct permissions * Ensure the event type ID is correct * Check that your Cal.com availability is properly configured * Confirm no required custom fields are added * Verify the phone field identifier is exactly "phone" * Confirm the `email` variable is properly set in assistant settings * Check that customer email is being passed correctly in leads * Confirm your timezone settings are correct # Creating and Editing an AI Assistant Source: https://docs.lacy.ai/ai-assistants/creating-and-editing Step-by-step guide on how to create, configure, and modify your AI assistants for both inbound and outbound calls Ready to set up your first AI assistant? Follow these steps: ## 1. Go to "Assistants" In your Lacy.ai dashboard, find the **Assistants** page (sometimes labeled "AI Assistants" or similar). ## 2. Click "Create New Assistant" * Choose **Inbound** if you want it to answer incoming calls. * Choose **Outbound** if it's for campaigns calling out to leads/customers. ## 3. Fill Out Basic Info * **Assistant Name**: Internal label, e.g. "Support Bot" or "Sales Bot." * **System Prompt**: Outline the assistant's role, tone, and key instructions. * **Initial Message**: The first line the AI will speak (inbound calls usually need a quick greeting). ## 4. Language & Voice * Select a **Voice** from the built-in library, or pick a cloned voice if you've created one. * (Optional) Configure speech speed, filler usage, or "voice activity detection" if you need specialized settings. ## 5. Tools & Functions * Add or remove items like **transfer call**, **end call**, or **appointment scheduling** (more in [Tools & Functions](/ai-assistants/tools-and-functions)). ## 6. Save & Test * Click **Save** and your assistant is ready! * For inbound, you'll need to assign a phone number. * For outbound, attach the assistant to a campaign or test with your own phone number. ## Editing an Assistant * Return to **Assistants** in the dashboard. * Click on the assistant name. * Adjust prompts, voice, or add new tools—then **Save**. *** **Tip:** Always test your changes by calling the assistant or running a small outbound campaign to confirm it behaves as expected. # Custom Mid-Call Tools Source: https://docs.lacy.ai/ai-assistants/custom-tools Learn how to create and configure custom API integrations that your AI assistant can use during calls Custom Mid-Call Tools let your AI assistant interact with external systems during calls. Whether checking inventory, verifying customer data, or fetching real-time information, these tools make your AI more powerful and connected. ## Overview Custom Mid-Call Tools enable your AI assistant to: * Make real-time API calls during conversations * Fetch or submit data to your systems * Make informed decisions based on live data * Provide accurate, up-to-date information to callers - No coding required - just configure the API endpoint and parameters - AI automatically knows when and how to use the tools - Real-time data access during calls - Seamless integration with your existing systems ## Setting Up Your Tool ### 1. Basic Configuration Main Tool Configuration Navigate to **Mid call tools** and click **Create Mid-Call Tool** Fill in the essential details: * **Name**: Use lowercase and underscores (e.g., `check_order_status`) * **Description**: Explain when and how the AI should use this tool * **Endpoint**: Your API URL (e.g., `https://api.yourcompany.com/orders`) * **Timeout**: How long to wait for responses (in seconds) * **Method**: Choose GET, POST, PUT, PATCH, or DELETE Common headers you might need: ```yaml theme={null} Content-Type: application/json Authorization: Bearer your_token ``` ### 2. Variable Configuration Variable Configuration These are the pieces of information your AI will collect during the call: ```yaml theme={null} Name: order_number Type: string Description: "10-digit order number from the customer" ``` Add format requirements in the description: ```yaml theme={null} "Date in dd/mm/yyyy format" "Phone number without spaces" "Email address for confirmation" ``` ## Understanding Parameter Types Text values like names, addresses, or reference numbers ```yaml theme={null} Type: string Examples: "John Doe", "123 Main St" ``` Numeric values like amounts, quantities, or IDs ```yaml theme={null} Type: number Examples: 42, 99.99 ``` Boolean values for yes/no situations ```yaml theme={null} Type: true_false Examples: true, false ``` Add format instructions in descriptions ```yaml theme={null} "Date in dd/mm/yyyy" "Phone without spaces" ``` ## Dynamic Endpoints When using variables in your endpoint URL, make sure to enclose them in curly braces and use the exact parameter name. You can make your endpoints dynamic using variables: ```yaml theme={null} Basic URL: https://api.example.com/orders/status With Variables: https://api.example.com/orders/{order_id}/status ``` The AI will automatically replace `{order_id}` with the actual value collected during the conversation. ## Testing Made Easy Click "Test Tool" to run a test with dummy data: * String parameters: "test" * Number parameters: 1 * Boolean parameters: true You'll see the response code and body, helping you verify everything works. ## Power User Feature: Automation Platform Integration Need more complex logic? Connect your tool to the automation platform for advanced workflows. For advanced integrations and complex workflows, you can combine custom tools with our [Automation Platform](/automation-platform/introduction). Here's how to create powerful integrations: 1. In the automation platform: * Create a new flow * Add a webhook trigger * Build your logic (API calls, data transformation, etc.) * End with "Return Response" 2. In your custom tool: * Use the webhook URL as your endpoint * Add `/sync` at the end * Example: `https://automation.lacy.ai/webhook/abc123/sync` This lets you: * Transform data before/after API calls * Make multiple API calls in sequence * Apply complex business logic * Handle errors gracefully ## Real-World Examples ```yaml theme={null} Name: check_order Endpoint: https://api.yourshop.com/orders/{order_number} Parameters: - Name: order_number Type: string Description: "Order reference (format: ORD-XXXXX)" ``` The AI will: 1. Ask for the order number 2. Fetch the status 3. Explain delivery dates and status to the customer ```yaml theme={null} Name: check_slots Endpoint: https://api.calendar.com/availability Parameters: - Name: service Type: string Description: "Service type (haircut, massage, consultation)" - Name: date Type: string Description: "Preferred date (dd/mm/yyyy)" ``` The AI will: 1. Ask about the desired service 2. Get preferred date 3. Show available time slots ```yaml theme={null} Name: verify_customer Endpoint: https://api.crm.com/verify Parameters: - Name: phone Type: string Description: "10-digit phone number" - Name: email Type: string Description: "Email address for verification" ``` The AI will: 1. Collect contact details 2. Verify against your CRM 3. Proceed based on verification status ## Configuring Your AI The AI needs clear instructions in its system prompt to effectively use your custom tools. Example prompt section: ```yaml theme={null} When to use check_order tool: 1. Customer asks about order status 2. Mentions tracking or delivery 3. Wants to know where their package is How to use it: 1. Ask for order number if not provided 2. Verify format (ORD-XXXXX) 3. Use tool to fetch status 4. Explain results in simple terms ``` Test your tools with various conversation flows to ensure the AI handles all scenarios smoothly. Start with simple test calls before going live. # Filler Audio Source: https://docs.lacy.ai/ai-assistants/filler-audio Learn how to use filler audio to create more natural conversations with your AI assistant Filler audio adds natural conversation sounds (like "hmm" or "one moment") while your AI assistant processes responses. This creates a more human-like interaction by eliminating awkward silences. ## How It Works When enabled, your AI assistant will: * Use short audio fillers during processing time * Maintain engagement while formulating responses * Signal active listening to the caller ## Benefits 1. **Improved Conversation Flow** * Eliminates dead air * Keeps callers engaged * Reduces hang-ups * Creates natural dialogue rhythm 2. **Enhanced User Experience** * More human-like interaction * Less awkward waiting * Better caller retention * Increased trust ## Setup 1. Go to your AI assistant settings 2. Find the "Filler Audio" option 3. Toggle it on 4. Save your changes ## Best Practices ### Combine with Fast Engine * Use filler audio with the Fast Engine setting * Creates the most natural conversation flow * Minimizes perceived response time ### Use Cases * **Sales Calls**: Keep prospects engaged * **Customer Service**: Show active listening * **Lead Qualification**: Maintain natural flow ## Testing After enabling filler audio: 1. Make a test call 2. Listen for natural transition sounds 3. Verify timing and appropriateness 4. Adjust if needed *** **Tip:** Start with filler audio enabled - you can always disable it if it doesn't suit your use case. # Flow Builder Source: https://docs.lacy.ai/ai-assistants/flow-builder Design conversation flows visually with an intuitive drag-and-drop interface Flow Builder is a visual, drag-and-drop conversation flow editor that lets you design AI assistant scripts without writing code. Create multi-step conversation flows by connecting nodes that represent different actions and decision points. ## Overview Flow Builder provides: * **Visual design** - Drag-and-drop nodes on a canvas * **Multiple node types** - Messages, prompts, actions, and more * **Branching logic** - Create different paths based on responses * **Settings panel** - Configure agent personality and behavior * **Import/Export** - Save and share flows as JSON files Flow Builder Interface ## When to Use Flow Builder * Structured conversation scripts * Multi-path decision trees * Complex call flows with branches * Visual thinkers who prefer diagrams * Simple, linear conversations * Highly dynamic AI responses * Quick prompt iterations * Text-focused editing ## Getting Started Navigate to **Assistants** and click on the assistant you want to edit. In the edit form, scroll to the **System Prompt** section and click the **Flow Builder** tab. Click **Launch Flow Builder**. A full-screen editor will open. * **Continue with existing** - Edit your current flow * **Start from scratch** - Begin with just a Start node * **Start with template** - Load a pre-built flow template ## Interface Overview ### Canvas Area (Center) The main workspace where you build your flow: * **Nodes** - Drag to reposition * **Connections** - Lines showing flow between nodes * **Grid background** - Helps with alignment * **Zoom controls** - Zoom in/out and fit to view * **Pan** - Click and drag on empty space to move around ### Bottom Toolbar Quick actions for managing your flow: | Button | Action | | -------------- | ---------------------------------- | | ⚡ Auto Layout | Automatically arrange nodes neatly | | 📋 Duplicate | Copy selected node | | 🗑️ Delete | Remove selected node or connection | | **+ Add Node** | Add a new node to the canvas | ### Settings Panel (Right Side) Configure your assistant's personality and behavior: * **Agent Name** - The name your AI will use * **Agent Type** - Sales, Support, Survey, etc. * **Language** - Spoken language for calls * **Assertiveness** - How pushy the AI should be * **Humor** - Level of humor in responses * **Variables** - Pre-call data fields * **Post-Call Fields** - Data to collect after calls ## Node Types Flow Builder has 5 node types, each with a specific purpose: Flow Builder Node Types ### Start Node (Green) The entry point of every conversation. Every flow must have exactly one Start node. **Properties:** * **Greeting** - The initial message when the call begins **Example:** "Hi, this is Sarah from Acme Insurance. How are you today?" ### Speak Node (Blue) Delivers a pre-written message exactly as specified. Use when you need precise wording. **Properties:** * **Text** - The exact message to speak * **Outcomes** - Different paths based on customer response **Example:** "We're offering a limited-time 20% discount on all plans. Would you like to hear more?" ### Prompt Node (Purple) Gives the AI instructions on how to respond. More flexible than Speak nodes - the AI generates contextual responses. **Properties:** * **Prompt** - Instructions for the AI * **Outcomes** - Different paths based on response categories **Example prompt:** "Ask the customer about their current insurance coverage. Be conversational and empathetic. Listen for mentions of their family size, budget concerns, or timeline." ### Action Node (Orange) Executes special actions during the call. **Action Types:** * **Call Forward** - Transfer to another number * **Book Appointment** - Schedule using connected calendar * **Custom Action** - Trigger a custom mid-call tool **Example:** Forward to sales team at +1-555-123-4567 when customer is ready to purchase. ### End Node (Red) Terminates the call or transfers to another destination. **End Types:** * **End Call** - Hang up with a closing message * **Forward Call** - Transfer to a phone number * **Transfer Agent** - Hand off to another assistant **Example closing:** "Thank you for your time today. Have a great day!" ## Working with Nodes ### Adding Nodes 1. Click **+ Add Node** in the bottom toolbar 2. Select the node type from the dropdown 3. The node appears on the canvas 4. Drag it to your desired position ### Connecting Nodes 1. Hover over a node's bottom edge to see the **output handle** (small circle) 2. Click and drag from the output handle 3. Connect to another node's **input handle** (top edge) 4. Release to create the connection ### Editing Nodes 1. Click on any node to select it 2. The node's properties appear in a panel 3. Edit the text, prompt, or settings 4. Changes save automatically to the canvas ### Deleting Nodes * Select a node and press **Delete** key, or * Select a node and click the 🗑️ button in the toolbar The Start node cannot be deleted. Every flow must have one Start node. ## Outcomes (Multiple Paths) Speak and Prompt nodes can have multiple **outcomes** - different paths based on how the customer responds. ### Adding Outcomes 1. Select a Speak or Prompt node 2. In the properties panel, find **Outcomes** 3. Click **Add Outcome** 4. Name the outcome (e.g., "Interested", "Not interested", "Wants callback") ### Connecting Outcomes Each outcome appears as a colored dot at the bottom of the node. Connect each outcome to a different destination node to create branching logic. Conversation Branching with Outcomes **Example flow:** ``` [Start] → [Ask about interest] ↓ [Prompt: "Ask if interested"] ↓ ┌─────────┼─────────┐ ↓ ↓ ↓ [Interested] [Maybe] [Not Interested] ↓ ↓ ↓ [Book Demo] [Send Info] [Thank & End] ``` ## Settings Panel Flow Builder Settings Panel ### Agent Identity | Setting | Description | | -------------- | ------------------------------------------------ | | **Agent Name** | Name the AI uses to introduce itself | | **Agent Type** | Preset personality: Sales, Support, Survey, etc. | | **Language** | Primary language for the conversation | ### Personality | Setting | Options | Description | | ----------------- | ------------------------- | --------------------------- | | **Assertiveness** | Low / Medium / High | How persistent the AI is | | **Humor** | Off / Low / Medium / High | Level of humor in responses | ### Variables Add pre-call data that can be used in your messages: 1. Click **Add Variable** 2. Enter a **Name** (e.g., `product_interest`) 3. Set a **Default Value** Use variables in messages with curly braces: `{variable_name}` **Example:** "Hi , I see you were interested in our ." ### Post-Call Fields Define data to extract from calls: 1. Click **Add Field** 2. Enter **Name**, **Type**, and **Description** 3. The AI will attempt to fill these based on the conversation **Types:** `string`, `number`, `boolean` ## Import/Export ### Export Your Flow 1. Open the Settings panel 2. Scroll to the bottom 3. Click **Export JSON** 4. Save the `.json` file ### Import a Flow 1. Click **Import JSON** in settings 2. Select your `.json` file 3. The flow loads on the canvas Export your flows regularly as backups. You can also share flows with team members this way. ## Voicemail Settings Configure what happens when voicemail is detected: * **Voicemail Message** - Message to leave if voicemail answers * **End Call on Voicemail** - Toggle to automatically hang up on voicemail ## Saving Your Flow Click the **Save** button in the top-right corner to save your flow to the assistant. The flow is stored as JSON in your assistant's system prompt field. If you switch to the Classic Editor, you'll see the raw JSON data. ## Best Practices Begin with a basic flow and add complexity gradually. Test at each step. Prompt nodes give the AI flexibility. Use them for dynamic, context-aware responses. Before building, sketch the main paths: positive, negative, and neutral responses. Make test calls covering all paths. Verify each outcome leads to the right destination. ## Troubleshooting * Ensure you're dragging from an **output handle** (bottom) to an **input handle** (top) * Check that you're not creating a circular connection * The Start node only has an output, End node only has an input * Check your internet connection * Ensure you have at least one node (besides Start) * Look for any validation errors in the settings panel * Use Speak nodes for exact wording requirements * Make Prompt node instructions more specific * Check that outcomes are clearly defined and connected ## Related Resources * [AI Prompt Editor](/ai-assistants/ai-prompt-editor) - Chat-based alternative for prompt editing * [System Prompts Guide](/ai-assistants/system-prompt) - Understanding prompt fundamentals * [Testing Your Assistant](/ai-assistants/testing) - How to test your flows # Initial Message & Audio Source: https://docs.lacy.ai/ai-assistants/initial-message Learn how to create effective initial messages and use custom audio files for the best first impression The first few seconds of a call are crucial - they determine whether the customer stays on the line. You have two options for your assistant's first greeting: text-based initial message or custom initial audio. ## Initial Message This is the first thing your AI assistant says when starting a call. The message is read exactly as written, so: ### Best Practices 1. **Keep it Short** * Aim for 5-10 seconds * Get to the point quickly * Avoid long company introductions 2. **Write Exactly as Needed** * Include proper diacritics (é, ñ, ü, etc.) * Use punctuation for proper pausing * Write numbers as they should be spoken 3. **Example Formats** ``` Good: "Hi! This is Sarah from ABC Company. How can I help you today?" Better with pausing: "Hi! This is Sarah from ABC Company... How can I help you today?" With diacritics: "¡Hola! Soy María de ABC Company. ¿Cómo puedo ayudarte?" ``` ## Initial Audio For the best first impression, you can use a pre-recorded audio file: ### Benefits * Professional quality * Perfect pronunciation * Human warmth * Consistent delivery * Higher customer retention ### Setup Process 1. Record your greeting with a professional voice actor 2. Upload the audio file in assistant settings 3. Clone the same voice for the rest of the conversation 4. Enable initial audio playback ### Best Practices 1. **Recording Quality** * Use professional equipment * Record in a quiet environment * Maintain consistent volume * Save in high quality format 2. **Voice Matching** * Use the same voice actor for cloning * Maintain consistent tone and style * Match energy levels 3. **Content Guidelines** * Keep under 10 seconds * Include company name * State purpose clearly * Sound welcoming ### Example Script Structure ``` [Greeting] + [Company Name] + [Purpose/Question] "Hello! This is ABC Company calling about your recent inquiry. How are you today?" ``` ## Combining Both Methods You can set up both: * Initial audio as primary greeting * Initial message as backup * System will use audio when available ## Testing Before going live: 1. Call your assistant 2. Listen for: * Clear pronunciation * Natural pauses * Proper volume * Smooth transition to AI conversation ## Language Considerations * Each language needs its own initial message/audio * Use native speakers for recordings * Consider regional accents * Test with target audience *** **Pro Tip:** Record several versions of your initial audio and test which one gets better response rates. # System Prompts Source: https://docs.lacy.ai/ai-assistants/system-prompt Learn how to create effective system prompts - the core intelligence of your AI assistant The system prompt is the most crucial component of your AI assistant. It defines your assistant's personality, behavior, knowledge, and capabilities. Think of it as the "brain" and "training manual" combined. ## Quick Start with Templates To get started quickly: 1. Go to your assistant settings 2. Find the system prompt field 3. Click the "Templates" button nearby 4. Choose a template that matches your use case 5. Customize it for your needs ## Language Support Your system prompt can be written in any language, regardless of the spoken language setting: * Write the prompt in your preferred language * Set the spoken language separately in assistant settings * The AI will follow the prompt's instructions while speaking in the selected language For example: * System prompt in English, spoken language set to Spanish * System prompt in German, spoken language set to French * System prompt in Chinese, spoken language set to English ## Why They Matter Your system prompt: * Shapes how the AI thinks and responds * Defines conversation boundaries * Provides essential knowledge * Controls behavior and tone * Determines handling of edge cases ## Key Components A good system prompt should include: ### 1. Role & Identity ``` You are a professional sales representative for [Company]. You specialize in [Product/Service] and have extensive knowledge of our offerings. ``` ### 2. Conversation Style ``` Maintain a friendly, professional tone. Use clear, concise language. Avoid technical jargon unless specifically asked. ``` ### 3. Key Information ``` Our main products are: - Product A ($X/month): [features] - Product B ($Y/month): [features] Current promotion: 20% off first 3 months ``` ### 4. Behavioral Guidelines ``` - Always verify customer information before discussing account details - Transfer to a human agent if the customer seems frustrated - Don't make promises about delivery dates ``` ### 5. Response Framework ``` When asked about pricing: 1. First understand their needs 2. Present relevant package options 3. Explain the value proposition 4. Share any applicable discounts ``` ## Best Practices 1. **Be Specific** * Clear instructions get better results * Include examples of good responses * Define what NOT to do 2. **Structure Matters** * Organize information logically * Use bullet points and sections * Keep related information together 3. **Test and Iterate** * Start with a basic prompt * Test various scenarios * Refine based on call recordings * Add handling for edge cases ## Common Mistakes * **Too Vague**: "Be helpful and professional" (Not specific enough) * **Too Rigid**: Scripting every possible response (Reduces natural flow) * **Information Overload**: Including unnecessary details * **Missing Guidelines**: Not specifying how to handle common situations ## Example Structure ``` # Role and Purpose [Define who the AI is and its main goals] # Core Knowledge [Essential information about products/services] # Conversation Guidelines [How to interact with customers] # Response Patterns [How to handle specific situations] # Limitations and Boundaries [What the AI should NOT do] ``` ## Testing Your Prompt 1. Make test calls covering: * Common scenarios * Edge cases * Difficult situations * Various customer personalities 2. Review and adjust: * Listen to call recordings * Check response accuracy * Verify tone consistency * Test knowledge retention ## Optimization Tips * Start with Fast Engine for quick iterations * Use call recordings to identify gaps * Add examples of good/bad responses * Include handling for unexpected questions *** **Pro Tip:** Your system prompt is a living document - regularly update it based on actual call experiences and customer interactions. # Test Chat Interface Source: https://docs.lacy.ai/ai-assistants/test-chat Test your assistant with a text-based chat interface for rapid iteration The Test Chat interface provides a quick way to test your assistant's conversation flow without making actual phone calls. ## Accessing Test Chat 1. Navigate to your assistant's page 2. Click the **"Test Assistant"** button with the chat icon 3. A chat interface will open in a slide-over panel Test Assistant Button ## How It Works The Test Chat interface simulates a conversation with your assistant: * **Text-based interaction:** Type messages instead of speaking * **Real AI responses:** Your assistant processes messages using the same logic as phone calls * **Variable testing:** Test how your assistant handles variables and data collection * **Tool execution:** See how your assistant uses configured tools and functions * **Fast iteration:** Quickly test prompt changes without phone calls ## When to Use Test Chat **Ideal for:** * Testing conversation flow and logic * Verifying prompt behavior and responses * Debugging variable collection * Testing tool/function calls * Rapid prompt iteration **Not suitable for:** * Testing voice quality or speech recognition * Testing call transfers (use phone testing) * Testing phone-specific features * Evaluating conversation timing and pacing ## Testing Workflow **1. Test conversation flow with chat interface:** * Verify your assistant understands user intents * Check that variables are collected correctly * Ensure tools execute as expected * Validate response quality **2. Test voice quality with Web Call:** * Verify voice clarity and tone * Check response timing and pacing * Test interruption handling **3. Final testing with Phone Call:** * Test all features including call transfers * Verify real-world call quality * Test edge cases and error handling Test Chat creates conversation records that appear in your **Conversations** page, helping you review and analyze test sessions. ## Cost Considerations Test Chat interactions: * Use AI processing credits from your account balance * Are typically more cost-effective than phone testing * Allow for faster iteration with immediate feedback * Create conversation records for later review Use Test Chat for initial prompt development, then move to phone testing for final validation before deploying to production. # Testing Your Assistant Source: https://docs.lacy.ai/ai-assistants/testing Learn how to quickly test your AI assistant for both inbound and outbound calls There are two ways to test your AI assistant, depending on whether you want to test inbound or outbound functionality. ## Testing Outbound Calls The fastest way to test your assistant's outbound capabilities: 1. Go to your assistant's settings 2. Find the "Make test call" purple button 3. Enter your phone number 4. Click to initiate the test 5. You'll receive a call from your AI assistant immediately ## Testing Inbound Calls To test how your assistant handles incoming calls: 1. Make sure you have a phone number assigned to your assistant 2. Call that number from any phone 3. Your AI assistant will answer and handle the call *** **Tip:** Save your AI's phone number in your contacts to easily make inbound test calls whenever needed. # Tools & Functions Source: https://docs.lacy.ai/ai-assistants/tools-and-functions Explore the built-in tools and functions that enhance your AI assistant's capabilities during calls Lacy.ai offers built-in "tools" that your AI assistant can use during a call. These help you shape the conversation flow and automate actions like transferring calls or scheduling appointments. ## 1. End Call Tool * **Purpose**: Tells the AI to politely wrap up the conversation. * **How It Works**: You can specify in the system prompt or logic, for instance: "If the user says `goodbye`, end the call." * **Configuration**: In the assistant's settings, you can define any conditions that should trigger the end call. ## 2. Transfer Tool * **Purpose**: Moves the caller from the AI assistant to a human agent or external phone number. * **Use Cases**: Warm leads on a sales call, escalations on a support call, etc. * **Settings**: In the assistant's config, add the phone number or department the call should go to, and optionally a short hold message. ## 3. Appointment Scheduler * **Purpose**: Lets the AI check your calendar availability (e.g. via Cal.com or Google Calendar) and book an appointment. * **Typical Flow**: 1. AI offers scheduling. 2. Caller selects date/time. 3. AI confirms and sends a confirmation (using email or SMS if configured). ## 4. No-Code Automation Platform * **Purpose**: After or during calls, the AI can trigger actions in the automation platform (like updating a CRM, sending an email, or logging results in Google Sheets). * **Setup**: Link your assistant with the "Automation" tab, choose triggers ("Call Ended," "Customer Agrees," etc.), and pick the action (send a Slack notification or add a row in Sheets). *** **Note:** Tools can be combined. For instance, the AI can schedule an appointment, then if the caller wants more info, it can transfer them to a human agent. # Voice Selection & Voice Cloning Source: https://docs.lacy.ai/ai-assistants/voice-selection Learn how to select built-in voices or clone your own voice for your AI assistants Your AI assistant can speak with **built-in voices** or a **custom cloned voice**. Natural, realistic voices increase customer trust and engagement. ## 1. Built-In Voice Library * **Powered by**: ElevenLabs. * **Selection**: Choose male/female, accent, or language from our default list. * **Customization**: Adjust pitch, speed, or filler usage if desired. ## 2. Cloning Your Own Voice * **Why Clone?**: For brand consistency or a familiar voice to your audience. * **Audio Sample Requirements**: Provide a clear audio recording (usually 1–5 minutes). * **Process**: 1. Record yourself reading a script (no background noise). 2. Upload it in the "Clone Voice" section. 3. Wait for training to complete (could be minutes or hours). 4. Test the new voice with small sample texts. ## 3. Best Practices 1. **High-Quality Audio**: The clearer your sample, the better the cloned result. 2. **Steady Delivery**: Speak in a natural tone, avoid abrupt changes. 3. **Check for Legal**: Ensure you have permission to clone any voice if it's not yours. *** **Tip:** After selecting or cloning a voice, always do a quick test call to confirm it sounds as expected. # Web Widget Source: https://docs.lacy.ai/ai-assistants/web-widget Embed your AI assistant on your website with voice and chat capabilities Add your AI assistant to any website with a customizable widget that supports voice calls, text chat, or both. ## Overview The Web Widget allows website visitors to interact with your AI assistant directly through: * **Voice conversations:** Real-time voice calls in the browser * **Text chat:** Messaging interface for text-based interactions * **Hybrid mode:** Seamless switching between voice and chat ## Accessing Widget Configuration 1. Navigate to your assistant's edit page 2. Click the **"Web widget"** button (yellow/warning color) 3. The widget configuration panel opens with live preview Web Widget Button Location Web Widget is a premium feature. Ensure your plan includes web widget access before configuration. ## Widget Modes Choose how visitors interact with your assistant: ### Voice & Chat (Recommended) Users can seamlessly switch between voice and text during conversations. **Best for:** * Maximum flexibility for users * Accessibility (voice for mobile, chat for quiet environments) * Complex interactions requiring both modes ### Chat Only Text-based messaging interface only. **Best for:** * Customer support and FAQs * Environments where voice isn't appropriate * Lead capture and qualification forms ### Voice Only Real-time voice conversations only. **Best for:** * Phone-like experience on website * Voice-first use cases * Hands-free interactions ## Configuration Options ### General Tab Widget General Tab **Widget Mode:** Voice, Chat, or Voice & Chat **Widget Size:** Choose between standard or **extra large** layout * **Standard**: Compact floating widget suitable for most use cases * **Extra Large**: Half-screen panel on desktop, full-screen on mobile — ideal for detailed conversations **Position:** Choose from 8 positions (bottom-right, bottom-left, bottom-center, middle-right, middle-left, top-right, top-left, top-center) **Primary Color:** Brand color for buttons and accents **Toggle Button Size:** Small or Normal **Toggle Button Style:** Animated (glass morphism) or Simple (flat design) **Auto-Open on Page Load:** When enabled, the widget automatically expands when the page loads — no click required from the visitor. ### Button Tab Widget Button Tab **Custom Avatar:** Upload your own avatar image to replace the default widget icon. Appears on the toggle button and in the chat header. Max file size: 512KB, 1:1 aspect ratio (square). **Button Main Text** (default: "Need help?") — primary text on the widget button **Button Sub Text** (default: "Chat with us") — secondary text, hidden when using the small button size **Tab Labels (Voice & Chat mode only):** * Voice Tab Label (default: "Voice") — rename to match your brand language (e.g., "Call Us", "Speak") * Chat Tab Label (default: "Chat") — rename to match your brand language (e.g., "Message", "Text") ### Header & Modal Tab Widget Header & Modal Tab **Header Title** (default: "AI Assistant") **Header Subtitle** (default: "Ready to help you ✨") **Modal Title** (default: "Ready to chat?") **Start Button Text** (default: "Start Voice Chat") **Modal Description** (default: "Click below to start your conversation") ### Chat Settings Tab Widget Chat Settings Tab This tab is only visible when the widget mode includes chat (Chat Only or Voice & Chat). **Chat Placeholder** (default: "Type your message...") **Send Button Label** (default: "Send message") — accessibility label for the send button **Show Function Calls:** When disabled (default), LLM tool calls (e.g., calendar lookups, knowledge base queries) are hidden from the chat, keeping the conversation clean for end users. Enable to show tool usage details. ### Clickable Links in Chat The chat widget supports **markdown formatting**, so your AI assistant can send clickable links, bold text, lists, and more. To include clickable URLs in chat messages, use markdown link format in your assistant's prompt or initial message: ``` Check out our [latest offers](https://example.com/offers) or visit our [help center](https://example.com/help). ``` Add an instruction to your assistant's prompt like: *"When sharing links or URLs, always format them as clickable markdown links: [link text](url)"* — this ensures the AI consistently outputs clickable links instead of plain text URLs. ### Voice Settings Tab Widget Voice Settings Tab This tab is only visible when the widget mode includes voice (Voice Only or Voice & Chat). **Connecting Text** (default: "Connecting...") **Disconnect Text** (default: "Disconnect") **Error Text** (default: "Connection failed. Please try again.") ### Pre-Chat Form Pre-Chat Form Configuration Collect information before starting conversations: **Form Configuration:** * Pre-form Title (default: "Before we start...") * Pre-form Description (default: "Please provide some information to help us assist you better") * Submit Button Text (default: "Continue") **Form Fields:** Add custom fields to collect data: * **Variable Name:** Internal variable name (maps to assistant variables). Only letters, numbers, dashes, and underscores allowed. * **Field Label:** Display label shown to users * **Field Type:** Text, Email, Phone, or Textarea * **Required:** Make field mandatory * **Placeholder:** Placeholder text shown in the field * **Helper Text:** Optional description below the field **Variable Mapping:** Form field names automatically map to your assistant's variables, making collected data available during conversations. **Example Form Fields:** ``` Name: Full Name (required, text) Email: Email Address (required, email) Company: Company Name (optional, text) Message: How can we help? (optional, textarea) ``` ### AI Response Settings Widget AI Response Settings **AI Enabled:** When toggled on (default), the AI assistant automatically responds to incoming messages. Turn this off if you want to use the widget for manual-only conversations — messages are collected but the AI does not reply. ### Conversation Webhook Widget Conversation Webhook **Webhook URL:** Enter a URL to receive a webhook notification whenever a new conversation starts via the widget. Use this to trigger automation flows, log events to your CRM, or notify your team in real-time. ### Widget Display Widget Display Toggle **Enable Widget:** Master toggle that controls whether the widget loads on your website. When disabled, the widget will not appear even if the embed script is installed on your site. Use this to temporarily hide the widget without removing code from your website. ## Live Widget Preview Widget Live Preview At the top of the configuration panel, a live preview shows exactly how your widget will look and behave on a website. The preview updates in real-time as you change any setting. **Copy Preview URL** — copies the preview URL to your clipboard so you can open it in a separate browser tab or share it with your team for review. **Reset Data** — clears all stored conversation history, form submissions, and preferences in the preview. Use this to simulate a first-time visitor experience after testing. The preview is fully interactive — you can click the widget button, fill out the pre-chat form, and start a real conversation to test your configuration before deploying. ### Embed Code Widget Embed Code The embed code section provides a ready-to-copy script tag. Click **Copy** to copy it to your clipboard, then paste it into your website before the closing `` tag: ```html theme={null} ``` Save your widget settings **before** copying the embed code. The script loads all configuration from the server, so any unsaved changes won't appear on your website. ## Installation 1. Configure and save your widget settings 2. Copy the embed code from the **Embed Code** section 3. Paste the script tag before the closing `` tag on your website 4. Visit your website and verify the widget appears in the configured position 5. Test voice/chat functionality and pre-chat form (if configured) ## Widget Behavior ### First Visit * Widget button appears in configured position * Click opens modal/chat interface * Pre-chat form displays (if configured) * After form submission, conversation starts ### Return Visits * Previous conversation state may be restored * Form data remembered (if visitor hasn't cleared cookies) * Seamless continuation of support experience ### Conversation Tracking All widget conversations appear in your [Conversations](/conversations/overview) page for review and analysis. HTTPS (SSL certificate) is required for voice functionality. HTTP sites can only use chat mode due to browser security restrictions. ## Troubleshooting For setup and configuration issues, see [Web Widget Troubleshooting](/troubleshooting/web-widget). ## Next Steps * Test widget using the live preview * Embed code on your website * Monitor conversations in the [Conversations](/conversations/overview) page # What is an AI Assistant? Source: https://docs.lacy.ai/ai-assistants/what-is-ai-assistant Understand what an AI Assistant is, its key components, and how it can help automate your phone interactions An **AI Assistant** (sometimes called an agent) is your configurable bot that speaks with customers or leads over the phone—either when they call you (**inbound**) or when your system calls them (**outbound**). ## Why Use an AI Assistant? * **Automate Common Interactions**: Answer FAQs, book appointments, or qualify leads 24/7. * **Reduce Workload**: Free your human team from repetitive tasks like verifying contact info or taking messages. * **Scalable**: One assistant can handle many calls in parallel, allowing you to grow without adding more agents. ## Key Components 1. **System Prompt**: The core instructions guiding how your assistant behaves. 2. **Initial Message**: The very first phrase the AI says (especially critical for inbound calls). 3. **Voice Settings**: Choose a built-in voice or clone your own. 4. **Tools** (Optional): Transfer, end call, scheduling, and more. *** **Next Steps** * Learn how to [Create and Edit an AI Assistant](/ai-assistants/creating-and-editing). * Explore the various [Tools & Functions](/ai-assistants/tools-and-functions) you can add to your assistant. # Create assistant Source: https://docs.lacy.ai/api-reference/assistants/create-assistant POST /user/assistant Create a new AI assistant with specified configuration This endpoint allows you to create a new AI assistant with comprehensive configuration options. ## Engine Modes The API supports three engine modes, each with different capabilities: | Mode | Description | Required Fields | | ------------ | ------------------------------------ | --------------------- | | `pipeline` | Traditional STT → LLM → TTS pipeline | `llm_model_id` | | `multimodal` | Real-time multimodal AI | `multimodal_model_id` | | `dualplex` | Multimodal brain + custom TTS voice | `multimodal_model_id` | ### Request Body #### Core Required Fields The name of the assistant (max 255 characters) The voice ID to use for the assistant. Use the [Get Voices](/api-reference/assistants/get-voices) endpoint with the `mode` parameter to get compatible voices for your engine mode. The language ID for the assistant. Use the [Get Languages](/api-reference/assistants/get-languages) endpoint to get available languages. The assistant type. Options: `inbound`, `outbound` The engine mode. Options: `pipeline`, `multimodal`, `dualplex` The timezone for the assistant (e.g., "Europe/Bucharest", "America/New\_York") The initial message the assistant will speak when the call starts (max 200 characters) The system prompt that defines the assistant's behavior and personality #### Mode-Specific Fields The LLM model ID to use. **Required for `pipeline` mode.** Use the [Get Models](/api-reference/assistants/get-models) endpoint to get available models. The multimodal model ID. **Required for `multimodal` and `dualplex` modes.** Use the [Get Models](/api-reference/assistants/get-models) endpoint to get available multimodal models. Fallback LLM model ID for tool calls in multimodal/dualplex modes. Optional. Turn detection sensitivity for multimodal/dualplex modes (0-1). Default: auto #### Secondary Languages Array of additional language IDs the assistant can speak. The assistant will auto-detect and switch languages. ```json theme={null} "secondary_language_ids": [2, 3, 4] ``` #### Knowledgebase Settings The knowledgebase ID to attach to this assistant How to use the knowledgebase. Options: * `function_call` - AI calls a function to search (required for multimodal/dualplex) * `prompt` - Knowledge is injected into prompt (pipeline only) #### Phone Number The ID of a phone number to assign to the assistant. Must belong to your account. For `inbound` assistants, the phone number cannot be a Caller ID type and cannot be already assigned to another inbound assistant. #### Custom Mid-Call Tools Array of custom mid-call tool IDs to attach. Each tool must belong to your account. ```json theme={null} "tool_ids": [1, 5, 12] ``` #### Built-in Tools Array of built-in tools to enable. Each tool has a `type` and tool-specific fields. **call\_transfer** - Transfer the call to another phone number * `phone_number` (required): Phone number to transfer to (e.g., "+1234567890") * `description`: When to transfer the call * `custom`: If true, AI can determine transfer number dynamically * `timezone`: Timezone for transfer availability * `warm_transfer`: Send a message to the customer before transferring (default: `false`) * `warm_transfer_message`: Prompt telling the AI what to say before transferring (e.g., "Tell the customer that the call is being transferred.") **warm\_call\_transfer** - Warm transfer with supervisor briefing * `supervisor_phone` (required): Phone number to dial for the warm transfer (e.g., "+14155552001"). If `custom_sip` is enabled, this is a SIP address or internal extension instead. * `outbound_phone_id` (required): ID of the phone number used to dial the supervisor. Use [Get Phone Numbers](/api-reference/assistants/get-phone-numbers) to find available numbers. * `description` (required): **When to transfer** — describes when the AI should initiate the warm transfer (e.g., "Transfer the call to a human supervisor when the customer requests to speak with a real person.") * `custom_sip`: Enable to enter a custom SIP address or internal extension instead of a phone number (default: `false`) * `caller_id_mode`: What phone number the supervisor sees when receiving the call. Options: `outbound_number` (default — shows the outbound phone number), `customer_number` (shows the caller's number), `custom` (shows a custom number) * `custom_caller_id`: Custom phone number shown to supervisor. Only used when `caller_id_mode` is `custom`. * `hold_music`: Audio played to the caller while on hold. Options: `hold_music` (default — plays default hold music), `none` (silence, no music) * `hold_music_volume`: Volume level for hold music, 0-100 (default: `80`) * `hold_message`: Message spoken to caller before placing them on hold (default: "Please hold while I connect you with a supervisor.") * `summary_instructions`: Instructions for how the AI should brief the supervisor about the call (default: "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).") * `briefing_initial_message`: The first message the AI says to the supervisor when they answer (default: "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?") * `connected_message`: Message spoken to caller after supervisor is connected (default: "You are now connected with a supervisor. I'll leave you to it.") **end\_call** - End the call programmatically * `description`: When the AI should end the call **dtmf\_input** - Send DTMF tones (keypad input) * `description`: When to use DTMF input (for IVR navigation) **collect\_keypad** - Collect keypad input from the caller * `timeout`: Seconds to wait for input, 1-30 (default: 5) * `stop_key`: Key that ends input. Options: `#` (default), `*` **calendar\_integration** - Schedule appointments via Cal.com * `calcom_api_key` (required): Your Cal.com API key * `calcom_event_slug` (required): The event type slug from Cal.com * `calcom_team_slug`: Team slug if the event belongs to a Cal.com team * `calcom_endpoint`: Cal.com API region. Options: `us` (default — `https://api.cal.com`), `eu` (`https://api.cal.eu`), `custom` (uses `calcom_custom_endpoint`) * `calcom_custom_endpoint`: Custom Cal.com API base URL. Only used when `calcom_endpoint` is `custom` (e.g., `https://my-calcom-instance.com`). * `calcom_booking_fields`: Array of custom booking fields for the event. Each field has: * `slug` (required): Field identifier * `type` (required): Field type (e.g., "text", "email", "phone", "select") * `label` (required): Display label * `required`: Whether the field is required (default: `false`) * `options`: Array of options for select fields * `description`: When to offer scheduling ```json theme={null} "tools": [ { "type": "call_transfer", "phone_number": "+1234567890", "description": "Transfer when customer requests human support" }, { "type": "warm_call_transfer", "supervisor_phone": "+1234567891", "outbound_phone_id": 7, "description": "Transfer the call to a human supervisor when the customer requests to speak with a real person.", "custom_sip": false, "caller_id_mode": "outbound_number", "hold_music": "hold_music", "hold_music_volume": 80, "hold_message": "Please hold while I connect you with a supervisor.", "summary_instructions": "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).", "briefing_initial_message": "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?", "connected_message": "You are now connected with a supervisor. I'll leave you to it." }, { "type": "collect_keypad", "timeout": 5, "stop_key": "#" }, { "type": "end_call", "description": "End call when customer confirms satisfaction" } ] ``` #### Voice and TTS Settings Whether to enable emotional text-to-speech synthesis Voice stability setting (0-1). Higher = more consistent voice Voice similarity setting (0-1). Higher = closer to original voice Speech speed multiplier (0.7-1.2) LLM temperature setting (0-1). Lower = more deterministic Custom TTS provider ID. Auto-selected based on language if not provided. Use the [Get Synthesizer Providers](/api-reference/assistants/get-synthesizer-providers) endpoint to discover available providers. Custom STT provider ID. Auto-selected based on language if not provided. Pipeline mode only. Use the [Get Transcriber Providers](/api-reference/assistants/get-transcriber-providers) endpoint to discover available providers. #### Call Behavior Settings Whether to allow caller interruptions. Cannot be disabled for `multimodal` and `dualplex` modes. Whether to use filler audio during processing (e.g., "um", "let me check"). Only available for `pipeline` mode. Custom filler word profiles per category. If not provided, defaults are set based on the assistant's language. Each category is an array of short phrases. * `positive`: Filler words for positive/affirmative responses (e.g., "Great!", "Perfect!") * `negative`: Filler words for negative/neutral responses (e.g., "Hmm.", "Mhm.") * `question`: Filler words when processing a question (e.g., "Hmm.", "Let me think.") * `neutral`: Filler words for neutral acknowledgments (e.g., "Ok.", "I understand.") ```json theme={null} "filler_config": { "positive": ["Super!", "Great!", "Perfect!"], "negative": ["Hmm.", "Mhm.", "I see."], "question": ["Hmm.", "Let me check.", "Good question."], "neutral": ["Ok.", "I understand.", "Noted."] } ``` Whether to record the call Whether to enable noise cancellation If true, the assistant waits for the customer to speak first #### Timing Settings Maximum call duration in seconds (20-1200) Maximum silence duration before re-engagement in seconds (1-360) Maximum silence at call start before ending (1-120 seconds). Optional. Maximum ringing time before giving up (1-60 seconds) #### Re-engagement Settings Re-engagement interval in seconds (7-600) Custom prompt for re-engagement messages (max 1000 characters) Example: `"Are you still there? Do you have any other questions?"` #### Voicemail Settings Whether to end call when voicemail is detected Message to leave on voicemail before hanging up (max 1000 characters) #### Endpoint Detection Voice activity detection type. Options: `vad`, `ai` Endpoint sensitivity level (0-5) Interrupt sensitivity level (0-5) Minimum words before interruption is allowed (0-10). Set to enable. #### Ambient Sound Background ambient sound. Options: `off`, `office`, `city`, `forest`, `crowded_room`, `cafe`, `nature` Ambient sound volume level (0-1) #### Webhook Configuration Whether webhook notifications are enabled The webhook URL for post-call notifications. **Required if `is_webhook_active` is true.** Whether to send webhooks only on completed calls (not failed/no-answer) Whether to include recording URL in webhook payload #### Post-Call Evaluation Whether to enable AI post-call evaluation Schema definition for post-call data extraction Field name (3-16 chars, lowercase, alphanumeric and underscores only) Data type. Options: `string`, `number`, `bool` Description of what this field represents (3-255 characters) ```json theme={null} "post_call_schema": [ {"name": "status", "type": "bool", "description": "Was the call objective achieved"}, {"name": "summary", "type": "string", "description": "Brief summary of the call"} ] ``` #### Variables Key-value pairs of custom variables accessible in prompts via `{{variable_name}}` ```json theme={null} "variables": { "company_name": "Acme Corp", "product": "Premium Widget", "support_email": "support@acme.com" } ``` #### Conversation Ended Settings Minutes of chat inactivity before the conversation is considered ended (1-1440) Whether to allow re-triggering the conversation after it ends due to inactivity Webhook URL called when a chat conversation ends due to inactivity. Separate from the main call webhook. *** ## Example Requests ### Pipeline Mode Assistant ```json theme={null} { "name": "Sales Assistant", "voice_id": 1, "language_id": 1, "type": "outbound", "mode": "pipeline", "timezone": "Europe/Bucharest", "initial_message": "Hello! How can I help you today?", "system_prompt": "You are a professional sales assistant...", "llm_model_id": 2, "secondary_language_ids": [2, 3], "knowledgebase_id": 1, "knowledgebase_mode": "prompt", "fillers": true, "filler_config": { "positive": ["Great!", "Perfect!", "Awesome!"], "negative": ["Hmm.", "I see."], "question": ["Good question.", "Let me check."], "neutral": ["Ok.", "Noted.", "I understand."] }, "tool_ids": [1, 5], "tools": [ { "type": "end_call", "description": "End call when customer is satisfied" }, { "type": "call_transfer", "phone_number": "+1234567890", "description": "Transfer to support" }, { "type": "warm_call_transfer", "supervisor_phone": "+1234567891", "outbound_phone_id": 7, "description": "Transfer the call to a human supervisor when the customer requests to speak with a real person.", "custom_sip": false, "caller_id_mode": "outbound_number", "hold_music": "hold_music", "hold_music_volume": 80, "hold_message": "Please hold while I connect you with a supervisor.", "summary_instructions": "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).", "briefing_initial_message": "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?", "connected_message": "You are now connected with a supervisor. I'll leave you to it." }, { "type": "collect_keypad", "timeout": 5, "stop_key": "#" } ], "reengagement_interval": 20, "reengagement_prompt": "Are you still there?" } ``` ### Multimodal Mode Assistant ```json theme={null} { "name": "Support Bot", "voice_id": 41, "language_id": 1, "type": "inbound", "mode": "multimodal", "timezone": "America/New_York", "initial_message": "Hi! Welcome to support.", "system_prompt": "You are a helpful support agent...", "multimodal_model_id": 1, "chat_llm_fallback_id": 2, "turn_detection_threshold": 0.7, "knowledgebase_id": 1, "knowledgebase_mode": "function_call", "tts_emotion_enabled": false } ``` ### Dualplex Mode Assistant ```json theme={null} { "name": "Premium Agent", "voice_id": 1, "language_id": 2, "type": "outbound", "mode": "dualplex", "timezone": "Europe/Bucharest", "initial_message": "Buna ziua!", "system_prompt": "Esti un asistent profesionist...", "multimodal_model_id": 4, "chat_llm_fallback_id": 2, "secondary_language_ids": [1, 3], "knowledgebase_id": 1, "knowledgebase_mode": "function_call", "ambient_sound": "office", "ambient_sound_volume": 0.3 } ``` *** ## Response Success message confirming assistant creation The unique identifier of the created assistant The name of the assistant The current status (`inactive` for new assistants) The type (`inbound` or `outbound`) The engine mode (`pipeline`, `multimodal`, or `dualplex`) ```json 201 Success Response theme={null} { "message": "Assistant created successfully", "data": { "id": 789, "name": "Sales Assistant", "status": "inactive", "type": "outbound", "mode": "pipeline" } } ``` ```json 422 Validation Error theme={null} { "message": "Validation failed", "errors": { "name": ["The name field is required."], "voice_id": ["The selected voice is not compatible with the chosen engine type."], "knowledgebase_mode": ["Only function_call mode is available for multimodal assistants."] } } ``` *** ## Notes * All required fields must be provided for successful assistant creation * Use the Get Voices endpoint with `mode` parameter to get compatible voices * For multimodal/dualplex modes, `knowledgebase_mode` must be `function_call` * For multimodal/dualplex modes, `allow_interruptions` is always enabled * Fillers are only available in pipeline mode * The assistant is created with `inactive` status by default # List assistants Source: https://docs.lacy.ai/api-reference/assistants/get-assistants GET /user/assistants/get List all assistants for the authenticated user with pagination This endpoint allows you to retrieve all AI assistants belonging to the authenticated user. ### Query Parameters Number of assistants per page (1-100, default: 10) Page number (default: 1) ### Response fields The unique identifier of the assistant The ID of the user who owns this assistant The ID of the phone number assigned to the assistant Engine ID Synthesizer ID Transcriber ID The ID of the voice used by the assistant The instance ID for the assistant The name of the assistant Custom variables defined for the assistant Whether post-call evaluation is enabled Whether filler audio is enabled (1 = enabled, 0 = disabled) Schema definition for post-call data extraction The name of the schema field The data type (string, number, bool) Description of what this field represents Array of tools available to the assistant Whether webhook notifications are enabled The webhook URL for post-call notifications The webhook URL for inbound call notifications Language The type of assistant (inbound or outbound) The current status of the assistant (active or inactive) Maximum call duration in seconds Whether to record calls The initial message the assistant will speak The system prompt that defines the assistant's behavior ID for flows platform integration The timezone setting for the assistant The date and time when the assistant was created The date and time when the assistant was last updated Maximum silence duration in seconds before re-engagement Re-engagement interval in seconds Soft deletion timestamp (null if not deleted) Whether to end call when voicemail is detected (1 = yes, 0 = no) LLM temperature setting as string Voice stability setting as string Voice similarity setting as string Whether to allow caller interruptions Whether noise cancellation is enabled Endpoint sensitivity level Speech speed multiplier as string Voice activity detection type (vad or ai) Whether to wait for customer to speak first The engine mode (pipeline or multimodal) The ID of the language used by the assistant ID of the transcriber provider ID of the synthesizer provider ID of the LLM model used ID of the multimodal model used Ambient sound setting Unique UUID for the assistant Whether to send webhooks only on completed calls Whether to include recording URL in webhook payload Interrupt sensitivity level Configuration for filler audio responses Array of neutral filler responses Array of negative filler responses Array of positive filler responses Array of question filler responses ID of the associated knowledge base Knowledge base mode setting Minimum number of words before interruption is allowed Ambient sound volume level as string Settings for web widget integration The current page number Number of items per page Total number of assistants The last page number ```json 200 Response theme={null} { "current_page": 1, "data": [ { "id": 127, "user_id": 1, "phone_number_id": 45, "engine_id": null, "synthesizer_id": null, "transcriber_id": null, "voice_id": 8, "instance_id": 1, "name": "Sales Outreach Assistant", "variables": { "company_name": "Your Company", "product_line": "Premium Services", "rep_name": "Assistant" }, "post_call_evaluation": true, "fillers": 1, "post_call_schema": [ { "name": "interest_level", "type": "string", "description": "Customer's level of interest (high, medium, low)" }, { "name": "budget_qualified", "type": "bool", "description": "Whether the prospect has adequate budget" }, { "name": "follow_up_date", "type": "string", "description": "Preferred date for follow-up contact" } ], "tools": [], "is_webhook_active": true, "webhook_url": "https://yourcompany.com/api/webhooks/sales-calls", "inbound_webhook_url": null, "language": null, "type": "outbound", "status": "active", "max_duration": 900, "record": true, "initial_message": "Hi, this is an assistant from Your Company. I hope I'm catching you at a good time. How are you doing today?", "system_prompt": "You are a sales representative for Your Company. Be professional, friendly, and focus on qualifying leads for premium services.", "flows_platform_id": null, "timezone": "America/Los_Angeles", "created_at": "2025-07-15T14:32:15.000000Z", "updated_at": "2025-08-02T09:18:42.000000Z", "max_silence_duration": 25, "reengagement_interval": 45, "deleted_at": null, "end_call_on_voicemail": 1, "llm_temperature": "0.35", "voice_stability": "0.75", "voice_similarity": "0.85", "allow_interruptions": true, "enable_noise_cancellation": true, "endpoint_sensitivity": 1.8, "speech_speed": "1.10", "endpoint_type": "vad", "wait_for_customer": true, "mode": "pipeline", "language_id": 1, "transcriber_provider_id": null, "synthesizer_provider_id": null, "llm_model_id": 3, "multimodal_model_id": null, "ambient_sound": "office", "uuid": "a7b3c942-5f1e-4d28-8c59-2e4f7a8b9c3d", "send_webhook_only_on_completed": true, "include_recording_in_webhook": true, "interrupt_sensitivity": 1.2, "filler_config": { "neutral": [ "I see.", "Understood.", "Right.", "Got it.", "Okay." ], "negative": [ "I understand.", "Hmm.", "I see.", "Okay." ], "positive": [ "Excellent!", "That's great!", "Wonderful!", "Perfect!" ], "question": [ "Let me think...", "Good question.", "Hmm.", "Right." ] }, "knowledgebase_id": 12, "knowledgebase_mode": "hybrid", "min_interrupt_words": 3, "ambient_sound_volume": "0.30", "widget_settings": { "theme": "modern", "color": "#2563eb", "position": "bottom-right" } } ], "first_page_url": "https://app.lacy.ai/api/user/assistants/get?page=1", "from": 1, "last_page": 5, "last_page_url": "https://app.lacy.ai/api/user/assistants/get?page=5", "links": [ { "url": null, "label": "« Previous", "active": false }, { "url": "https://app.lacy.ai/api/user/assistants/get?page=1", "label": "1", "active": true }, { "url": "https://app.lacy.ai/api/user/assistants/get?page=2", "label": "2", "active": false } ], "next_page_url": "https://app.lacy.ai/api/user/assistants/get?page=2", "path": "https://app.lacy.ai/api/user/assistants/get", "per_page": 10, "prev_page_url": null, "to": 10, "total": 47 } ``` # Authentication Source: https://docs.lacy.ai/api-reference/authentication Learn how to authenticate your API requests The Lacy.ai API uses API keys to authenticate requests. You need to include your API key in the header of each request you make to the API. ## Obtaining an API Key To obtain an API key: 1. Log in to your Lacy.ai account at [https://app.lacy.ai](https://app.lacy.ai) 2. Navigate to the "API Keys" page 3. Click on the "Create new API Key" button 4. Copy your new API key and store it securely Keep your API key confidential and secure. Do not share it publicly or commit it to version control systems. ## Using the API Key Include your API key in the `Authorization` header of each request: ``` Authorization: Bearer YOUR_API_KEY ``` Replace `YOUR_API_KEY` with your actual API key. ## Example Request Here's an example of how to include the API key in a cURL request: ```bash theme={null} curl -X GET "https://api.lacy.ai/api/user/campaigns" \ -H "Authorization: Bearer YOUR_API_KEY" ``` Replace `YOUR_API_KEY` with your actual API key when making requests. # List calls Source: https://docs.lacy.ai/api-reference/calls/get-calls GET /user/calls List all calls for the authenticated user with filtering options This endpoint allows you to list all calls belonging to the authenticated user with various filtering options. ### Query Parameters Filter calls by status. Possible values: `initiated`, `ringing`, `busy`, `in-progress`, `ended`, `completed`, `ended_by_customer`, `ended_by_assistant`, `no-answer`, `failed` Filter calls by type. Possible values: `inbound`, `outbound`, `web` Filter calls by client phone number Filter calls by assistant ID Filter calls by campaign ID Filter calls from this date (YYYY-MM-DD format) Filter calls until this date (YYYY-MM-DD format) Number of calls per page (1-100, default: 15) Page number (default: 1) ### Response fields The unique identifier of the call The name of the assistant that handled the call The name of the campaign this call belongs to (if applicable) The type of the call (`inbound`, `outbound`, or `web`) The duration of the call in seconds The phone number used by the assistant The phone number of the client The current status of the call The transcript of the call conversation Variables collected during the call Evaluation data for the call performance Response from any configured webhooks The cost charged by the carrier for this call The total cost of the call including all fees Who answered the call (`human`, `machine`, or `unknown`) URL to the call recording (if available and enabled) The date and time when the call was created The date and time when the call was last updated The current page number Number of items per page Total number of calls matching the criteria The last page number ```json 200 Response theme={null} { "current_page": 1, "data": [ { "id": 123, "assistant_name": "Sales Assistant", "campaign_name": "Q4 Outreach Campaign", "type": "outbound", "duration": 245, "assistant_phone_number": "+1234567890", "client_phone_number": "+1987654321", "status": "completed", "transcript": "Hello, this is Sarah from lacy. How are you doing today?...", "variables": { "customer_name": "John Smith", "interest_level": "high", "follow_up_date": "2025-08-15" }, "evaluation": { "sentiment": "positive", "outcome": "qualified_lead", "score": 8.5 }, "webhook_response": { "status": "success", "data": { "crm_contact_id": "abc123" } }, "carrier_cost": 0.02, "total_cost": 0.025, "answered_by": "human", "recording_url": "https://recordings.lacy.ai/calls/123.mp3", "created_at": "2025-08-04 14:30:00", "updated_at": "2025-08-04 14:34:05" } ], "first_page_url": "https://app.lacy.ai/api/user/calls?page=1", "from": 1, "last_page": 10, "last_page_url": "https://app.lacy.ai/api/user/calls?page=10", "links": [ { "url": null, "label": "« Previous", "active": false }, { "url": "https://app.lacy.ai/api/user/calls?page=1", "label": "1", "active": true }, { "url": "https://app.lacy.ai/api/user/calls?page=2", "label": "2", "active": false } ], "next_page_url": "https://app.lacy.ai/api/user/calls?page=2", "path": "https://app.lacy.ai/api/user/calls", "per_page": 15, "prev_page_url": null, "to": 15, "total": 150 } ``` # List campaigns Source: https://docs.lacy.ai/api-reference/campaigns/index GET /user/campaigns List all campaigns This endpoint allows you to list all campaigns. ### Response fields The id of the campaign The name of the campaign The created at date of the campaign The updated at date of the campaign The status of the campaign # List Conversations Source: https://docs.lacy.ai/api-reference/conversations/list-conversations GET /user/conversations List all conversations for the authenticated user with filtering and pagination This endpoint returns a paginated list of conversations belonging to the authenticated user's assistants. Use this to display conversation history, filter by type, or integrate with your CRM. This endpoint requires authentication. Pass your API key in the `Authorization` header as a Bearer token. ### Query Parameters Filter conversations by type. Possible values: `test`, `widget`, `whatsapp`, `api` Filter conversations by assistant ID (must belong to the authenticated user) Filter conversations from this date (YYYY-MM-DD format) Filter conversations until this date (YYYY-MM-DD format) Number of conversations per page (1-100, default: 15) Page number (default: 1) ### Response Fields The unique UUID identifier of the conversation The UUID of the assistant handling this conversation The name of the assistant handling this conversation The conversation type: `test`, `widget`, `whatsapp`, or `api` Total number of messages in the conversation The total cost of the conversation in USD Whether AI responses are enabled for this conversation The date and time when the conversation was created The date and time when the conversation was last updated The current page number Number of items per page Total number of conversations matching the criteria The last page number ```bash cURL theme={null} curl -X GET "https://app.lacy.ai/api/user/conversations?type=widget&per_page=10" \ -H "Authorization: Bearer YOUR_API_KEY" ``` ```javascript JavaScript theme={null} const response = await fetch( 'https://app.lacy.ai/api/user/conversations?type=widget&per_page=10', { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } } ); const data = await response.json(); console.log(data.data); // Array of conversations ``` ```python Python theme={null} import requests response = requests.get( 'https://app.lacy.ai/api/user/conversations', headers={'Authorization': 'Bearer YOUR_API_KEY'}, params={ 'type': 'widget', 'per_page': 10 } ) data = response.json() print(data['data']) ``` ```json 200 Response theme={null} { "current_page": 1, "data": [ { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "assistant_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "assistant_name": "Support Assistant", "type": "widget", "message_count": 12, "total_cost": 0.0045, "ai_enabled": true, "created_at": "2025-01-25 14:30:00", "updated_at": "2025-01-25 14:45:22" }, { "id": "8d0f7780-8536-51ef-055c-f18fd2g01bf8", "assistant_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "assistant_name": "Support Assistant", "type": "whatsapp", "message_count": 8, "total_cost": 0.0032, "ai_enabled": true, "created_at": "2025-01-25 10:15:00", "updated_at": "2025-01-25 10:28:45" } ], "first_page_url": "https://app.lacy.ai/api/user/conversations?page=1", "from": 1, "last_page": 5, "last_page_url": "https://app.lacy.ai/api/user/conversations?page=5", "links": [ { "url": null, "label": "« Previous", "active": false }, { "url": "https://app.lacy.ai/api/user/conversations?page=1", "label": "1", "active": true }, { "url": "https://app.lacy.ai/api/user/conversations?page=2", "label": "2", "active": false } ], "next_page_url": "https://app.lacy.ai/api/user/conversations?page=2", "path": "https://app.lacy.ai/api/user/conversations", "per_page": 15, "prev_page_url": null, "to": 15, "total": 68 } ``` ## Conversation Types | Type | Description | | ---------- | ---------------------------------------------------------------- | | `test` | Internal test conversations from the assistant testing interface | | `widget` | Conversations from the web chat widget | | `whatsapp` | WhatsApp Business conversations | | `api` | Conversations created via the API | ## Use Cases * **Analytics Dashboard**: Display conversation metrics and trends * **CRM Integration**: Sync conversation data with your customer database * **Quality Monitoring**: Review conversation volumes by type and assistant * **Billing Review**: Track conversation costs across your organization # Introduction Source: https://docs.lacy.ai/api-reference/introduction Welcome to the Lacy.ai API Welcome to the Lacy.ai API documentation. Our API allows you to programmatically interact with the Lacy.ai platform, enabling you to create and manage leads, schedule calls, and more. ## Base URL All API requests should be made to the following base URL: ``` https://app.lacy.ai/api ``` # Create lead Source: https://docs.lacy.ai/api-reference/leads/create POST /user/lead Create a new lead in the Lacy.ai system This endpoint allows you to create a new lead in the Lacy.ai system. ### Request body The phone number of the lead in E.164 format (e.g. +1234567890) The ID of the campaign to create the lead for The variables to pass to the lead Whether to allow duplicate leads in a campaign. ### Response fields The message of the response The data of the response The id of the lead ```json Request theme={null} { "phone_number": "+1234567890", "campaign_id": 1, "variables": [ { "customer_name": "John Doe", "email": "john.doe@example.com" } ], "allow_dupplicate": false } ``` ```json 200 Response theme={null} { "message": "Lead created successfully", "data": { "id": "1234569" } } ``` # Send SMS Source: https://docs.lacy.ai/api-reference/sms/send-sms POST /user/sms Send an SMS message using your phone number This endpoint allows you to send SMS messages using your purchased phone numbers. The SMS will be sent via Twilio and costs will be automatically deducted from your account balance. ### Request Body The ID of your phone number to send the SMS from (must be SMS-capable) The recipient's phone number in international format (e.g., "+1234567890") The SMS message content (max 300 characters) ### Response Success message confirming SMS was sent The unique identifier of the SMS record The ID of the phone number used to send the SMS The recipient's phone number in E.164 format The SMS message content The ID of the user who sent the SMS Number of SMS segments (for billing purposes) Cost per SMS segment Total cost of the SMS (segment\_price \* segments) The current status of the SMS Twilio SMS SID for tracking The date and time when the SMS was created The date and time when the SMS was last updated ### Error Responses Error message describing the issue (invalid phone number, insufficient balance, etc.) Error message indicating SMS sending failure Detailed error information ```json 201 Success Response theme={null} { "message": "SMS sent successfully", "data": { "id": 456, "phone_number_id": 78, "to": "+1234567890", "body": "Hello! This is a test message from Your Company. How can we help you today?", "user_id": 1, "segments": 1, "segment_price": 0.0075, "total_cost": 0.0075, "status": "sent", "sms_sid": "SM1234567890abcdef1234567890abcdef", "created_at": "2025-08-04 15:30:00", "updated_at": "2025-08-04 15:30:02" } } ``` ```json 400 Bad Request theme={null} { "message": "From number not found" } ``` ```json 400 Bad Request theme={null} { "message": "Invalid to phone number" } ``` ```json 400 Bad Request theme={null} { "message": "Insufficient balance" } ``` ```json 400 Bad Request theme={null} { "message": "From number is not SMS capable" } ``` ```json 500 Internal Server Error theme={null} { "message": "Failed to send SMS", "error": "Twilio API error details" } ``` ### Notes * The sender phone number must belong to the authenticated user * The sender phone number must be SMS-capable * The phone number subscription must be active (not expired) * Sufficient account balance is required to cover SMS costs * Phone numbers are automatically formatted to E.164 format * SMS costs vary by destination country and are charged per segment * Long messages may be split into multiple segments, increasing the cost * The recipient phone number must be valid according to international standards # Get current user Source: https://docs.lacy.ai/api-reference/user/me GET /user/me Get the authenticated user's profile information This endpoint returns the profile information for the currently authenticated user, including their account balance. ### Response The user's full name The user's email address The user's current account balance in USD ```json 200 Response theme={null} { "name": "John Doe", "email": "john.doe@example.com", "total_balance": 125.50 } ``` ### Use Cases This endpoint is useful for: * **Verifying authentication** - Confirm the API key is valid and belongs to the expected user * **Checking account balance** - Monitor available credits before making API calls * **Displaying user info** - Show the current user in your application's UI # Introduction Source: https://docs.lacy.ai/automation-platform/introduction Learn How to Automate Your AI Call Workflows with Lacy.ai # Automation Platform The Lacy.ai Automation Platform helps you create powerful AI call automation workflows without coding. Build flows that enhance your AI calling system by processing variables before calls, handling post-call actions, and creating seamless integrations with your existing tools. Flow Builder ## Key Features ### AI Call-Based Triggers 1. **Call Ended Trigger** * Activates immediately when an AI call completes * Access full conversation transcript and AI responses * Use call duration, status, and detailed metadata * Perfect for post-call automation like CRM updates * Trigger follow-up actions based on call outcomes 2. **Inbound Call Variable Injection** * Triggers before AI assistant picks up the call * Enriches AI context with real-time customer data * Customizes AI behavior based on caller information * Returns variables that get injected into AI prompts * Enables personalized conversation flows ### Essential Actions 1. **Hubspot Integration** * Update contact records with call outcomes * Create new contacts from inbound calls * Sync conversation insights to CRM * Track AI interaction history * Automate lead qualification 2. **Campaign Management** * Add qualified leads to AI calling campaigns * Schedule AI follow-up calls * Manage call priorities based on outcomes * Track conversion rates per campaign * Automate campaign assignments 3. **External Systems** * Send post-call summary emails * Update spreadsheets with call data * Trigger webhooks for custom integrations * Connect with your business tools * Automate multi-step workflows ## How It Works 1. **Choose Your Call Trigger** * "Call Ended" for post-conversation automation * "Inbound Call" for real-time AI context injection 2. **Configure Call Variables** * Map AI conversation data and transcripts * Access caller details and history * Define AI routing logic * Set up custom conversation variables 3. **Add Smart Actions** * Update CRM with call outcomes * Send automated notifications * Schedule follow-up activities * Return enriched context to AI ## Example Use Cases ### Intelligent CRM Update ```javascript theme={null} Trigger: AI Call Ended ↓ Process Conversation Insights ↓ Update Hubspot Contact ↓ Schedule Next AI Interaction ``` ### Smart Inbound Call Handling ```javascript theme={null} Trigger: Inbound Call to AI ↓ Lookup Customer in Hubspot ↓ Return Enriched Context ↓ AI Assistant Personalizes Conversation ``` # Overview of No-Code Automation Source: https://docs.lacy.ai/automation/overview Learn about Lacy.ai's built-in automation engine for creating workflows without coding This is a brief overview of our automation capabilities. For in-depth documentation, tutorials, and advanced features, visit our dedicated [Automation Platform Documentation](/automation-platform/introduction). Lacy.ai includes an internal automation engine (similar to Zapier or Make) that lets you build flows—no coding required. For instance: 1. **Trigger**: A call ends. 2. **Action**: A Slack notification is sent with call outcome and transcript. ## Key Concepts * **Triggers**: Events inside Lacy.ai (e.g., "call ended," "inbound call context injection"). * **Actions**: Steps that happen in response (e.g., "send email," "update Google Sheets," "webhook to CRM"). ## Common Use Cases * **Post-Call Data Handling**: Log transcripts in a database or notify your team of new leads. * **Lead Import**: Automatically fetch new leads from a Google Sheet or CRM into an outbound campaign. * **Appointment Scheduling**: Once a caller confirms a time with the AI, you create or update a calendar event. ## Setting Up a Workflow 1. Go to **Automations** in your dashboard. 2. Click **Create Workflow**. 3. Pick a **trigger** (like "Call Ended") and select the **assistant**. 4. Add **actions** (like "Send Email to Team," "Add Row in Sheets," etc.). 5. Test and monitor logs to ensure everything runs smoothly. *** **Tip:** Keep your workflows simple at first. Complex logic is possible, but it's best to start with a single trigger → single action until you get comfortable. **Want to learn more?** Check out our [detailed automation documentation](/automation-platform/introduction) for advanced features, tutorials, and best practices. # Phone System Integrations Source: https://docs.lacy.ai/automation/phone-system Learn how to integrate Lacy.ai with your existing PBX or VOIP infrastructure through SIP trunks For businesses with existing PBX or VOIP infrastructure, Lacy.ai can integrate through SIP trunks or direct connections: ## 1. SIP Trunk * **How It Works**: You share your SIP credentials (server, username, password). Lacy.ai configures a trunk internally. * **Inbound/Outbound**: AI can pick up inbound calls from your PBX or place outbound calls using your existing number ranges. ## 2. Caller ID Forwarding * If your PBX already handles call routing, pass the call to Lacy.ai only when certain conditions are met (like after IVR selection). ## 3. Hybrid Model * Some advanced setups keep human agents on your PBX but leverage the AI for high-volume or after-hours calls. * Example: *During business hours, normal agents handle calls. After hours, calls route to the AI assistant via SIP trunk.* ## 4. Things to Note * SIP sometimes requires opening firewall ports or whitelisting IPs. * Carrier charges from your PBX provider still apply, plus any Lacy.ai usage fees. *** **Tip:** Contact support for guidance if you're new to SIP or PBX integration. We can assist with the config steps. # Webhook & API Source: https://docs.lacy.ai/automation/webhook-api Learn how to use webhooks and the REST API for custom integrations and automation If you want deeper customization beyond no-code blocks, Lacy.ai supports **webhooks** and a **REST API**. ## 1. Webhooks * **When to Use**: Trigger events in external systems the moment something happens in Lacy.ai (e.g., "Call Ended,"). * **Configuration**: Set a webhook URL in your assistant/campaign settings or the automation platform. * **Payload**: Typically includes call ID, transcript, call outcome, or any user data collected. ## 2. REST API * **Key Functions**: 1. **Create/Update Leads** 2. **Manage Campaigns** * **Auth & Rate Limits**: Usually uses API tokens. Check [API docs](/api-reference/introduction) for details on endpoints and usage quotas. ## 3. Example Use Cases * **Real-Time CRM Sync**: For each new call, post data to your CRM's endpoint. * **Custom Dashboards**: Pull call data into your own analytics dashboard. *** **Note:** You'll find the official API reference in a dedicated docs section or via your Lacy.ai dashboard. Always secure your tokens and test endpoints in a dev environment. # Creating a Campaign Source: https://docs.lacy.ai/campaigns/creating-campaigns Step-by-step guide to setting up your first automated calling campaign Create and configure automated calling campaigns to efficiently reach multiple leads with your AI assistant. ## Prerequisites Before creating a campaign, ensure you have: * **AI assistant** configured for outbound calls * **Phone number** assigned to your assistant * **Account balance** sufficient for call costs * **Leads ready** to import or add manually ## Campaign Setup ### 1. Basic Information **Campaign Name:** Choose a descriptive name for easy identification **Assistant Selection:** Select which AI assistant will make the calls The assistant's configuration (voice, prompt, tools) will be used for all campaign calls. ### 2. Scheduling Configuration #### Allowed Calling Hours Set when your campaign can make calls: * **Start time:** Earliest time to begin calling (default: 00:00) * **End time:** Latest time to stop calling (default: 23:59) * **Timezone:** Uses assistant's configured timezone #### Allowed Days Select which days of the week to make calls: * **Default:** Monday through Sunday * **Business only:** Monday through Friday * **Custom:** Choose specific days **Recommendation:** For business calls, use Monday-Friday 9:00 AM - 6:00 PM in the prospect's timezone. ### 3. Retry Settings #### Basic Retry Options * **Max retries:** 1-5 attempts for unanswered calls (default: 3) * **Retry interval:** 10-4320 minutes between attempts (default: 60 minutes) #### Advanced Retry Conditions **Retry on Voicemail:** * **Enabled:** Continue calling until human answers * **Disabled:** Count voicemail as attempted contact **Retry Until Goal Completed:** * **Enabled:** Keep calling until objective is achieved * **Goal variable:** Select boolean variable from assistant's post-call schema * **Use case:** Sales calls, appointment booking, lead qualification **Goal-based retry** requires your assistant to have post-call variables configured with boolean fields (true/false). ### 4. Lead Management #### Adding Leads **Manual Entry:** * Add individual leads with phone numbers * Include names and additional contact information **CSV Import:** * Upload spreadsheet with lead information * Required: Phone number column * Optional: Name, email, additional fields **Integration Import:** * Import from GoHighLevel, Google Sheets, or other connected platforms * Automatic sync with external lead sources #### Secondary Contacts Add additional phone numbers for the same lead: * **Use case:** Multiple decision-makers, backup contacts * **Logic:** Campaign will try all numbers for each lead * **Status:** Independent tracking for each contact ## Starting Your Campaign ### Pre-launch Checklist * [ ] Assistant has phone number configured * [ ] Sufficient account balance * [ ] Leads added with valid phone numbers * [ ] Schedule configured appropriately * [ ] Retry logic matches campaign goals ### Launch Process 1. **Review settings** one final time 2. **Click "Start Campaign"** to begin 3. **Monitor progress** in campaign dashboard 4. **Adjust settings** if needed (pause campaign first) ## Campaign Monitoring ### Real-time Status * **Calls in progress:** Currently active calls * **Calls completed:** Finished calls with outcomes * **Leads remaining:** Contacts still to be called * **Next call time:** When next call will be made ### Monitoring Progress Track lead status and call results in the campaign dashboard. See [Campaign Overview](/campaigns/index#campaign-monitoring) for detailed status explanations. ## Managing Active Campaigns ### Pausing a Campaign * **Immediate stop:** Current call completes, no new calls start * **Resume capability:** Can restart without losing progress * **Use cases:** Adjust settings, review results, temporary pause ### Modifying Settings 1. **Pause the campaign** first 2. **Edit configuration** as needed 3. **Save changes** 4. **Resume campaign** to continue with new settings ### Adding More Leads * **Add to active campaign:** New leads join existing retry queue * **Import additional contacts:** CSV or integration import * **Secondary contacts:** Add backup numbers for existing leads ## Best Practices * **Conservative scheduling:** Business hours, respect time zones * **Start with 2-3 retries:** Monitor and adjust based on feedback * **Clean lead data:** Valid numbers, remove duplicates * **Compliance:** Follow local regulations and opt-out requests For troubleshooting common issues, see [Campaign Troubleshooting](/troubleshooting/campaigns). # Campaigns Overview Source: https://docs.lacy.ai/campaigns/index Learn how to create and manage automated calling campaigns to reach multiple leads efficiently Campaigns enable you to automate calls to multiple leads using your AI assistant. Set up scheduling, retry logic, and lead management to run efficient outbound calling operations. ## What is a Campaign? A campaign is an automated system that calls multiple leads on your behalf using a configured AI assistant. Each campaign includes: **Primary and secondary contacts** for comprehensive outreach Import leads from CSV, integrations, or add manually **Time and day restrictions** to respect customer preferences Set allowed calling hours and days of the week **Intelligent retry system** for unanswered calls Configure retry attempts, intervals, and conditions **Success measurement** with completion variables Track campaign objectives and lead conversion ## Campaign Status Campaign is being configured but not yet active. Add leads and configure settings. Campaign is actively making calls according to your schedule and retry settings. Campaign is temporarily stopped. Can be resumed without losing progress. All leads have been successfully contacted or marked complete. ## Key Features ### Scheduling & Timing * **Allowed calling hours:** Set start and end times (e.g., 9:00 AM - 6:00 PM) * **Allowed days:** Choose specific days of the week for calling * **Timezone support:** Uses assistant's configured timezone * **Call window validation:** System automatically respects time restrictions ### Retry System * **Max retries:** 1-5 attempts for unanswered calls (default: 3) * **Retry interval:** 10-4320 minutes between attempts (default: 60 minutes) * **Retry on voicemail:** Continue calling until human answers * **Goal-based retry:** Keep calling until objective is achieved (requires [post-call variables](/ai-assistants/settings/post-call-actions#post-call-variables) with boolean type) ### Lead Types * **Primary leads:** Main contacts imported or added to campaign * **Secondary contacts:** Additional contacts linked to primary leads * **Lead status tracking:** Monitor call progress and outcomes ## Requirements Before starting a campaign: **Phone Number Required:** Your assistant must have a [phone number configured](/ai-assistants/settings/general#phone-number-configuration) for outbound calls. * **Configured AI assistant** with outbound calling capability * **Sufficient account balance** for call costs * **Leads added** to the campaign (manual, import, or integration) * **Valid phone numbers** for all leads ## Quick Start 1. **Create Campaign:** Choose a name and select your AI assistant 2. **Set Schedule:** Define allowed calling hours and days 3. **Configure Retries:** Set retry attempts and intervals 4. **Add Leads:** Import from CSV or add manually 5. **Start Campaign:** Click start when ready to begin calling For detailed setup instructions, see [Creating a Campaign](/campaigns/creating-campaigns). ## Campaign Monitoring ### Lead Status Tracking Monitor individual lead progress through the campaign: * **Created:** Ready to be called * **Scheduled:** Queued for next call attempt * **Processing:** Currently being called * **Completed:** Successfully contacted or goal achieved * **Rescheduled:** Scheduled for retry attempt * **Max Retries:** Reached maximum retry attempts **Manual lead management:** You can change lead status in the leads table: * **Set to "Created":** Reset lead to be called again * **Set to "Completed":** Mark lead as finished to stop calling ### Call Results Individual call outcomes with detailed status: * **Initiated:** Call started * **Ringing:** Phone is ringing * **In Progress:** Call connected and active * **Completed:** Call finished successfully * **Busy:** Line was busy * **Unanswered:** No one answered * **Failed:** Technical issue prevented call ## Troubleshooting **Campaign won't start:** * Check if assistant has phone number configured * Verify sufficient account balance * Ensure leads are added to campaign **No calls being made:** * Wait 10-15 minutes after starting - campaigns take time to initialize * Check if current time is within allowed calling hours * Verify allowed days include current day * Confirm leads have valid phone numbers **Too many/few retries:** * Adjust max retries setting (1-5 attempts) * Modify retry interval (10-4320 minutes) * Review retry conditions (voicemail, goal completion) **Best Practice:** Start with conservative retry settings and adjust based on campaign performance and customer feedback. For detailed troubleshooting guidance, see [Campaign Troubleshooting](/troubleshooting/campaigns). # Handling Interruptions & Speech Sensitivity Source: https://docs.lacy.ai/conversation-design/interruptions Configure how your AI assistant handles interruptions, voice activity detection, and speech patterns Phone conversations can be messy—callers may interrupt the AI or have background noise. Lacy.ai provides **voice activity detection** and **speech settings** to handle these situations. ## 1. Voice Activity Detection (VAD) * **What It Is**: A setting that helps the AI wait for the user to finish talking before responding. * **Configuration**: In the assistant's advanced settings, you can enable or disable VAD. * *High Sensitivity*: AI might interrupt less, but could lead to awkward pauses. * *Low Sensitivity*: AI might talk over the user if they pause mid-sentence. ## 2. Speech Speed & Filler Usage * **Speech Speed**: Some voices allow you to slow down or speed up how quickly the AI talks. * **Filler Usage**: Decide if the AI uses "umm," "uhh," or short "mhm" acknowledgments to sound more natural. ## 3. Interruptions * If a user starts speaking while the AI is talking, the AI can attempt to stop and listen. However, perfect interruption handling can't be guaranteed due to phone audio overlap. * Encourage shorter AI responses in your prompt to reduce collision with the caller's speech. *** **Tip:** Conduct test calls to find the right balance of sensitivity and speed. Overly fast responses or overly long monologues can frustrate callers. # Inserting Knowledge Bases Source: https://docs.lacy.ai/conversation-design/knowledge-bases Learn how to provide your AI assistant with access to FAQs, documents, and other knowledge sources For more advanced usage, you may want the AI to reference detailed FAQs or documents. Below are current approaches: ## 1. Copy-Paste into Prompt * **Pros**: Quick to set up. * **Cons**: Large texts can slow down responses or risk partial "hallucination." * **Usage**: Useful for short references, like top 10 FAQs. ## 2. Knowledge-Base Feature * Lacy.ai plans to introduce a dedicated "Knowledge Base" or doc upload feature. * This would let you store PDFs or text docs that the AI can query on demand. * This feature is currently in development and will be available soon. **However, you can contact our support team and send us your documents to manually embed them.** ## 3. Best Practices * Keep info concise, use bullet points. * Separate topics with clear headings so the AI can parse more effectively. * Monitor call transcripts to confirm the AI references your data correctly. *** **Note:** If you have an urgent need for large doc integration, contact our support about possible custom solutions or partial "manual" embeddings. # Language & Accent Support Source: https://docs.lacy.ai/conversation-design/language-support Explore available languages and accents for your AI assistant, and learn how to request new ones Lacy.ai offers multiple languages and accents for your AI assistant. Choose from built-in sets or request new ones if needed. ## 1. Available Languages * English (various accents: US, UK, Australian, etc.) * Spanish (Latin American, Spain accent) * French, German, Italian * **Others**: +40 languages supported, [play samples here](https://Lacy.ai/#languages-available) ## 2. Requesting a New Language * If your language is missing, contact support. We may add it if feasible. Some might require a one-time fee for model training or verification. ## 3. Accent Tuning * Within a language, you can pick certain accents (like US English vs. British English). * Speed and pitch settings can further localize the sound. ## 4. Testing & Verification * Always run sample calls in your chosen language to ensure recognition is solid. * AI recognition quality can vary; watch transcripts for repeated errors and refine your prompt or speech speed. *** **Note:** Additional fees or wait times might apply for lesser-known languages or custom accent requests. # Prompt Writing Basics Source: https://docs.lacy.ai/conversation-design/prompt-basics Learn how to write effective system prompts and initial messages for your AI assistants Lacy.ai uses a **System Prompt** to guide how your AI assistant interacts with callers. Crafting an effective prompt is key to smoother, more accurate phone conversations. ## 1. System Prompt vs. Initial Message * **System Prompt**: Overall instructions and context. Example:\ *"You are the Support Bot for TechMasters Inc. Greet politely, ask for a name, handle basic troubleshooting, and transfer the call if the issue is complex."* * **Initial Message**: The first thing the AI says, especially for inbound. Example:\ *"Thank you for calling TechMasters! How can I assist you today?"* ## 2. Clarity & Structure * **Be Specific**: Outline the main purpose, tone, and steps you want the AI to follow. * **Use Examples**: Show sample dialogues. *"If the user says they have a billing question, ask them for their invoice number."* ## 3. Handling "Unknown" Cases * If a user asks about something off-topic, decide whether the AI should: * Provide a default response: *"I'm not sure, let me transfer you…"* * Gather more details. ## 4. Keep It Short & Focused * A short prompt often works best; too-long instructions can make the AI slower or prone to "hallucination." * If you have lengthy content, consider a knowledge-base or chunk your text with headings. *** **Tip:** Periodically review your transcripts to see where the AI might need more or fewer instructions. # Conversations Overview Source: https://docs.lacy.ai/conversations/overview Track and review text-based conversations with your AI assistant Conversations provide a record of all text-based interactions with your AI assistants through web widgets, WhatsApp, and test interfaces. ## What Are Conversations? Conversations are text-based chat sessions between users and your AI assistants through web widgets, WhatsApp Business, and test interfaces. ## Conversation Sources Conversations are created through: ### Web Widget Interactions When website visitors use your embedded web widget in chat or voice & chat mode, each session creates a conversation record. **Includes:** * All messages exchanged * Variables collected from pre-chat forms * Variables extracted during conversation * Total cost and token usage * Session timestamps ### WhatsApp Conversations When customers message your WhatsApp Business number, each conversation thread creates a conversation record. **Includes:** * Complete message history * Customer phone number * AI assistant responses * Cost and usage metrics * 24-hour messaging window status WhatsApp conversations follow Meta's 24-hour messaging window rules. Within this window, your AI can send free-form replies. After 24 hours, you must use approved template messages to re-engage. Learn more in our [WhatsApp documentation](/whatsapp/overview). ### Test Chat Sessions When you test your assistant using the Test Chat interface, each test session creates a conversation record marked as "Test." **Useful for:** * Reviewing test sessions * Debugging conversation flow * Analyzing assistant responses * Validating variable collection ## Conversation Types | Type | Badge Color | Source | | -------------- | ----------- | -------------------------- | | **Test** | Orange | Test Chat interface | | **Web Widget** | Purple | Website embedded widget | | **WhatsApp** | Green | WhatsApp Business messages | **Test Conversations** * Created from Test Chat interface * Marked with orange "Test" badge * Used for development and testing **Web Widget Conversations** * Created from website widget * Marked with purple "Web widget" badge * Real customer interactions **WhatsApp Conversations** * Created from WhatsApp Business messages * Marked with green "WhatsApp" badge * Customer interactions via WhatsApp ## Why Track Conversations? * Review customer interactions and improve assistant responses * Monitor assistant performance and conversation quality * Track costs, token usage, and engagement metrics * Debug conversation flow and validate variable collection ## Conversation Data Each conversation includes: * Message history with timestamps * Variables collected (from pre-chat forms or extracted by AI) * Cost and token usage metrics * Conversation type (Test, Web Widget, or WhatsApp) * Customer identifier (phone number for WhatsApp) ## Accessing Conversations Navigate to the **Conversations (chat)** page from your dashboard to view all conversation records. The navigation badge shows your total conversation count, helping you track activity at a glance. Conversations are tracked separately from phone calls. Phone calls are tracked in the **Calls** page, while conversations (text-based chat) are tracked here. ## Next Steps * Learn how to [view and manage conversations](/conversations/viewing-and-managing) * Set up a [web widget](/ai-assistants/web-widget) to start collecting conversations * Connect [WhatsApp Business](/whatsapp/overview) for messaging conversations * Use [test chat](/ai-assistants/test-chat) to create test conversations # Viewing & Managing Conversations Source: https://docs.lacy.ai/conversations/viewing-and-managing How to view, filter, and manage your conversation history Access and manage all your text-based conversations with your AI assistants. ## Accessing Conversations 1. Navigate to **Conversations (chat)** in your sidebar 2. View the list of all conversations 3. The badge shows your total conversation count If you don't have any conversations yet, you'll see an empty state. Conversations will appear once customers interact with your [web widget](/ai-assistants/web-widget), [WhatsApp Business](/whatsapp/overview), or when you use [test chat](/ai-assistants/test-chat). Conversations List View ## Conversations Table The conversations table displays: **Type:** Badge showing "Test", "Web widget", or "WhatsApp" **Last Messages:** Preview of recent messages in the conversation **Variables:** Variables collected during the conversation **Message Count:** Number of messages exchanged **Cost:** Total cost of the conversation **Assistant:** Which assistant handled the conversation **Started:** When the conversation started **Last Activity:** Last message timestamp ## Filtering Conversations Use filters to find specific conversations: ### By Type Filter by conversation source: * **Test:** Only test chat sessions * **Web widget:** Only website widget conversations * **WhatsApp:** Only WhatsApp Business conversations ### By Assistant Select specific assistant to view only their conversations. ### By Date Range Use the date range picker to filter conversations by creation date: * Last 7 days * Last 30 days * Last 90 days * Custom date range ## Viewing Conversation Details Click on any conversation to view complete details: Conversation Detail View ### Info Section View conversation details and metrics: * **Type:** Badge showing source (Test, Web widget, or WhatsApp) * **Assistant:** Which assistant handled the conversation * **Customer Identifier:** Phone number (for WhatsApp) or session ID * **Total Messages:** All messages in conversation * **User Messages:** Messages that incurred charges * **Total Cost:** Cost of the conversation * **Created At:** When conversation started * **Updated At:** Last activity timestamp For WhatsApp conversations, you'll also see the customer's phone number and messaging window status (whether free-form replies are available or if templates are required). ### Messages Section Complete conversation timeline showing: * User messages and assistant responses * Message content and timestamps * Chronological conversation flow ### Variables Section Variables collected during the conversation: * Pre-chat form data * Variable names and values ## Managing Conversations ### Deleting Conversations Remove unwanted conversation records: 1. Select conversation(s) from the table 2. Click the delete action 3. Confirm deletion Deleting conversations is permanent and cannot be undone. The conversation history and all associated data will be permanently removed. ### Bulk Actions Manage multiple conversations at once: * Select multiple conversations using checkboxes * Apply bulk delete to clean up test conversations ## Sorting Click column headers to sort conversations: * Sort by creation date (newest/oldest first) * Sort by cost (highest/lowest) * Sort by message count * Sort by last update ## Best Practices * Review conversations regularly to improve assistant responses * Delete test conversations to keep data clean * Monitor conversation costs and token usage * Use filters to find specific conversation types ## Next Steps * Set up [web widget](/ai-assistants/web-widget) to collect more conversations * Connect [WhatsApp Business](/whatsapp/overview) for messaging conversations * Use [test chat](/ai-assistants/test-chat) to test improvements * Review conversation data regularly to improve assistant performance # Custom Dashboards Source: https://docs.lacy.ai/custom-dashboards/overview Create personalized dashboards with widgets to track your call metrics and performance Custom Dashboards let you build tailored analytics views with drag-and-drop widgets. Track the metrics that matter most to your business with stats, charts, and tables. ## What are Custom Dashboards? Personalized analytics pages you create with widgets displaying your call data. Each dashboard contains multiple widgets showing different data views. Single metrics like total calls, averages, or success rates Visual trends with 8 chart types (line, bar, pie, etc.) Detailed records with custom columns and filters ## Quick Start ### Create a Dashboard 1. Click **"Create Custom Dashboard"** in sidebar 2. Enter name (e.g., "Sales Performance") 3. Choose icon 4. Click **"Create Dashboard"** ### Add Widgets **Option 1: Use Presets** (21 ready-made widgets) 1. Click **"Unlock to customize"** 2. Click **"Add"** button 3. Select preset widget (marked with emoji 📊📈📋) 4. Click **"Save"** **Option 2: Create Custom Widget** 1. Click **"Manage Widgets"** → **"Create New Widget"** 2. Choose type: Statistic, Chart, or Table 3. Configure data source and options 4. Save widget 5. Add to dashboard ## Widget Types ### Stat Widget 📊 Single number with optional comparison and mini-chart. **Example uses:** * Total calls this month * Average call duration * Success rate percentage **Key options:** * Data source: calls, leads, campaigns, assistants, phone\_numbers, sms * Aggregation: COUNT, SUM, AVG, MAX, MIN * Color: Primary (Blue), Success (Green), Warning (Orange), Danger (Red), Info (Cyan), Gray * Label and description text * Show mini chart (daily trend) * Compare with previous period (percentage change) * Date range: Today, Yesterday, Last 7/14/30/60/90 days, Last 6 months, Last year * Conditions (filters) ### Chart Widget 📈 Visualize trends and distributions. **Chart types:** * **Line** - Trends over time * **Bar** - Compare categories or time periods * **Area** - Filled trend chart * **Pie** - Proportions (requires Group By) * **Donut** - Pie with center hole (requires Group By) * **Polar Area** - Circular with varying radius (requires Group By) * **Radar** - Multi-axis comparison * **Radial Bar** - Single progress/percentage indicator **Key options:** * Data source: calls, leads, campaigns, assistants, phone\_numbers, sms * Aggregation: COUNT, SUM, AVG, MAX, MIN * Chart type: Line Chart, Bar Chart, Area Chart, Pie Chart, Donut Chart, Polar Area, Radar, Radial Bar * Color: Primary (Blue), Success (Green), Warning (Orange), Danger (Red), Info (Cyan), Gray * Group by period: Hourly, Daily, Weekly, Monthly (for time-series) * Group by field: status, campaign, assistant, any column (for categories) * Chart height: 200-800px * Show grid lines, legend, tooltips, data labels, toolbar * Line curve: smooth, straight, stepline * Line width: 1-10px * Gradient (radialBar only) * Date range: Today, Yesterday, Last 7/14/30/60/90 days, Last 6 months, Last year * Conditions (filters) ### Table Widget 📋 Detailed records with sortable columns. **Example uses:** * Recent calls with details * Failed calls for review * Lead contact history **Key options:** * Data source: calls, leads, campaigns, assistants, phone\_numbers, sms * Campaign filter (for leads - enables variable columns) * Assistant filter (for calls - enables evaluation field columns) * Column selection: basic, relationships, evaluation fields, lead variables * Sort by: any basic column * Sort direction: desc (newest first), asc (oldest first) * Rows per page: 1-100 * Date range: Today, Yesterday, Last 7/14/30/60/90 days, Last 6 months, Last year * Conditions (filters) ## Filtering Data All widgets support powerful filters: **Date ranges:** Today, Yesterday, Last 7/14/30/60/90 days, Last 6 months, Last year **Conditions:** Multiple AND filters * Status equals "completed" * Duration greater than 60 seconds * Assistant name equals "Sales Bot" **Evaluation fields:** Filter by post-call evaluation values * Column: Extracted Variables * Extracted Variable Name: Custom variable * Custom Variable Name: appointment\_booked * Operator: = * Variable Value: true ## Layout Management ### Edit Mode 1. Click **"Unlock to customize"** 2. Drag widgets to reorder 3. Resize widgets (1-12 columns wide) 4. Remove widgets with X button 5. Click **"Save"** to persist 6. Click **"Lock"** to exit edit mode ### Best Practices **Widget sizing:** * Stats: 3-4 columns (fit 3-4 per row) * Charts: 6-12 columns * Tables: 12 columns (full width) **Layout tips:** * Put KPIs at top * Group related metrics * Place tables at bottom ## Common Use Cases ### Sales Dashboard * Stat: Successful calls (filter by evaluation field "appointment\_booked") * Chart: Daily trend of successful calls * Table: Recent successful calls with appointment details ### Support Quality * Stat: Average call duration * Chart: Call status breakdown (pie chart) * Table: Recent calls with evaluation scores ### Campaign Performance * Stat: Total campaign calls * Chart: Calls per campaign (bar chart) * Table: Top performing campaigns ## Troubleshooting **Widget shows "No data":** * Expand date range * Check filters aren't too restrictive * Verify you have records **Slow loading:** * Reduce widget count (keep under 20) * Use date range filters * Clear browser cache **Dashboard not in sidebar:** * Refresh page * Check plan includes feature For detailed configuration, see individual widget type guides. # Widget Configuration Source: https://docs.lacy.ai/custom-dashboards/widget-types Complete guide for configuring Stat, Chart, and Table widgets with all available options Learn how to configure each widget type with detailed explanations of every option. ## Creating Widgets 1. Navigate to custom dashboard 2. Click **"Manage Widgets"** then **"Create New Widget"** 3. Select widget type 4. Follow 2-3 step wizard 5. Save and add to dashboard ## Stat Widgets Single metric display with optional comparison and trend chart. ### Step 1: Basics **Widget Name** * Internal identifier for widget list * Not displayed on dashboard * Example: "Total Calls This Month" **Data Table** * Choose data source: calls, leads, campaigns, assistants, phone\_numbers, sms * Determines available columns **Aggregation** * `COUNT` - Total number of records (no column needed) * `SUM` - Sum of values (requires column selection) * `AVG` - Average of values (requires column selection) * `MAX` - Maximum value (requires column selection) * `MIN` - Minimum value (requires column selection) **Column** (if SUM/AVG/MAX/MIN selected) * Select numeric column to aggregate * Example: `duration` for average call length * Not needed for COUNT ### Step 2: Display & Filters **Label** (required) * Main heading shown on widget * Example: "Total Calls" **Description** * Optional text below the value * Hidden if comparison enabled * Example: "Calls made this month" **Color** * primary (blue), success (green), warning (yellow), danger (red), info (cyan), gray * Choose based on metric type (green for positive, red for negative) **Show Mini Chart** * Displays small line chart showing daily trend * Uses same date range as stat **Compare with Previous Period** * Shows percentage change from previous period * Example: Last 7 days vs previous 7 days * Displays "+15%" or "-8%" with up/down arrow * Overrides description field **Date Range** * Filter by creation date * Options: Today, 1, 7, 14, 30, 60, 90, 180, 365 days **Conditions** (optional) * Add filters to narrow data * Multiple conditions combined with AND * See [Filtering Data](#filtering-data) section ### Examples **Total Calls** ``` Aggregation: COUNT Table: calls Label: "Total Calls" Description: "Last 30 days" Color: primary Date Range: 30 days ``` **Average Call Duration** ``` Aggregation: AVG Table: calls Column: duration Label: "Avg Duration" Color: info Show Mini Chart: Yes Date Range: 30 days ``` **Successful Appointments** ``` Aggregation: COUNT Table: calls Label: "Appointments Booked" Color: success Compare: Yes Date Range: 7 days Conditions: - status = completed - evaluation.appointment_booked = true ``` ## Chart Widgets Visualize trends with 8 chart types. ### Step 1: Basics Same as Stat widgets, plus: **Chart Type** * `line` - Trends over time * `bar` - Compare categories or time periods * `area` - Filled trend chart * `pie` - Proportions (requires Group By) * `donut` - Pie with center hole (requires Group By) * `polarArea` - Circular with varying radius (requires Group By) * `radar` - Multi-axis comparison * `radialBar` - Single progress indicator ### Step 2: Display & Filters **Label** (required) * Chart title **Description** * Optional subheading text below the chart * Example: "Last 30 days performance" **Color** * Chart primary color * For pie/donut, uses multi-color palette (blue, green, orange, red, purple, pink) **Date Range** * Same as stats **Group By** OR **Group By Period** (mutually exclusive) **Group By** - Categorical grouping * Group data by column values * Examples: Status, Campaign Id, Assistant Name * **Required** for pie/donut/polarArea charts * Optional for bar/radar charts * **Cannot use** with Group By Period **Group By Period** - Time-based grouping * Group by time buckets * Options: hour, day, week, month * Used for line/bar/area charts * **Cannot use** with Group By **Conditions** * Same as stats ### Step 3: Advanced (Charts Only) **Show Grid Lines** (line/bar/area only) * Background horizontal/vertical lines * Helps read exact values * Default: Yes **Show Legend** * Color-coded labels * Default: Yes for pie/donut/polarArea, No for others * Position: Bottom of chart **Show Tooltips** * Hover popups with exact values * Default: Yes (recommended) **Show Data Labels** * Values displayed directly on chart elements * Default: Yes for pie/donut/polarArea, No for others * Can clutter line/bar charts **Show Toolbar** (line/bar/area only) * Zoom and download controls * Default: No **Line Curve** (line/area only) * `smooth` - Rounded curves (default, visually appealing) * `straight` - Direct lines (precise) * `stepline` - Step-wise (good for discrete events) **Line Width** (line/bar/area only) * Thickness in pixels (1-10) * Default: 2px **Chart Height** * Vertical space in pixels (200-800) * Default: 300px * Taller charts better for more data points **Enable Gradient** (radialBar only) * Color gradient effect * Default: No **Gradient Color** (if gradient enabled) * End color for gradient * Default: Green (#10b981) **Calculate as Percentage** (radialBar only) * Automatically calculates percentage from conditions * Formula: (conditions met / total) × 100 * **Requires:** At least one condition must be added first * Example: Condition "status = completed" calculates completed leads / total leads × 100 * Appears after adding conditions in Step 2 **Show Footer with Numbers** (radialBar only) * Displays "X achieved / Y total" below the radialBar chart * Only visible when "Calculate as Percentage" is enabled * Shows exact numbers alongside the percentage * Example footer: "150 achieved / 1,000 total" **Start Angle** (radialBar only) * Where the arc begins in degrees (-360° to 360°) * Default: -140° * Common values: -140° (default), -90° (left semicircle), 0° (bottom) **End Angle** (radialBar only) * Where the arc ends in degrees (-360° to 360°) * Default: 130° * **Validation:** Total arc (end - start) cannot exceed 360° * Common values: 130° (default), 90° (right semicircle), 180° (half circle), 270° (three-quarters) **Hollow Size** (radialBar only) * Inner circle size as percentage (0-100%) * Default: 60% * Higher value = thinner ring, lower value = thicker ring **Dash Array** (radialBar only) * Spacing for dashed ring pattern (0-50) * Default: 10 * 0 = solid line, higher numbers = more spacing between dashes ### Chart Type Guide **Line Chart** * **Use for:** Daily/weekly trends, continuous data * **Requires:** Group By Period * **Example:** Calls per day last 30 days **Bar Chart** * **Use for:** Category comparison, time periods * **Can use:** Group By (categories) OR Group By Period (time) * **Example:** Calls per campaign, hourly distribution **Area Chart** * **Use for:** Same as line, emphasizes volume * **Requires:** Group By Period * **Example:** Call volume trend **Pie/Donut Chart** * **Use for:** Proportions, percentages * **Requires:** Group By (NOT Group By Period) * **Example:** Call status breakdown **Polar Area** * **Use for:** Like pie but shows magnitude via radius * **Requires:** Group By * **Example:** Campaign contribution **Radar Chart** * **Use for:** Multi-variable comparison * **Requires:** Group By * **Example:** Performance across metrics **Radial Bar** * **Use for:** Circular progress indicators showing percentages (0-100%) * **Does not use:** Group By or Group By Period * **Percentage Calculation:** Add conditions, then enable "Calculate as Percentage" to automatically compute (conditions met / total) × 100 * **Example:** Lead conversion rate (15%), SMS delivery success (82.8%), goal completion ### Examples **Daily Call Volume (Line)** ``` Table: calls Aggregation: COUNT Chart Type: line Label: "Daily Calls" Group By Period: day Show Grid: Yes Stroke Curve: smooth Date Range: 30 days ``` **Status Breakdown (Pie)** ``` Table: calls Aggregation: COUNT Chart Type: pie Label: "Call Status" Group By: status Show Legend: Yes Show Data Labels: Yes Date Range: 7 days ``` **Hourly Pattern (Bar)** ``` Table: calls Aggregation: COUNT Chart Type: bar Label: "Calls By Hour" Group By Period: hour Date Range: 7 days ``` **Campaign Comparison (Bar)** ``` Table: calls Aggregation: COUNT Chart Type: bar Label: "Calls Per Campaign" Group By: campaign.name Date Range: 30 days ``` **Lead Conversion Rate (Radial Bar with Percentage)** ``` Table: leads Aggregation: COUNT Chart Type: radialBar Label: "Conversion Rate" Description: "Completed leads" Color: success Date Range: 30 days Step 2 - Conditions: Field: status Operator: = Value: completed Step 2 - Percentage (appears after adding condition): Calculate as Percentage: Yes Show Footer with Numbers: Yes Step 3 - Advanced (optional): Start Angle: -140° End Angle: 130° Hollow Size: 60% Dash Array: 10 How it works: - Counts leads where status = completed (e.g., 150) - Counts total leads (e.g., 1,000) - Calculates: 150 / 1,000 × 100 = 15% - Displays: "15%" with footer "150 achieved / 1,000 total" ``` **SMS Delivery Success (Radial Bar with Gradient)** ``` Table: sms Aggregation: COUNT Chart Type: radialBar Label: "SMS Delivered" Description: "Delivery success rate" Color: info Date Range: 7 days Step 2 - Conditions: Field: status Operator: = Value: delivered Step 2 - Percentage: Calculate as Percentage: Yes Show Footer with Numbers: Yes Step 3 - Advanced: Enable Gradient: Yes Gradient To Color: #10b981 (green) Start Angle: -90° End Angle: 270° (creates three-quarter circle) Hollow Size: 55% Dash Array: 12 Result: "82.8%" with footer "120 achieved / 145 total" Visual: Blue to green gradient, three-quarter circle ``` **Quality Calls (Multiple Conditions)** ``` Table: calls Aggregation: COUNT Chart Type: radialBar Label: "Quality Calls" Description: "Long completed outbound calls" Color: success Date Range: 30 days Step 2 - Conditions (all must be true): Condition 1: Field: status Operator: = Value: completed Condition 2: Field: duration Operator: > Value: 180 Condition 3: Field: type Operator: = Value: outbound Step 2 - Percentage: Calculate as Percentage: Yes Show Footer with Numbers: Yes Step 3 - Advanced: Enable Gradient: Yes Gradient To Color: #3b82f6 Dash Array: 8 How it works: - Counts calls meeting ALL three conditions (e.g., 45) - Counts total calls (e.g., 100) - Calculates: 45 / 100 × 100 = 45% - Displays: "45%" with footer "45 achieved / 100 total" ``` **Qualified Leads (Semicircle Style)** ``` Table: leads Aggregation: COUNT Chart Type: radialBar Label: "Qualified Leads" Color: info Date Range: 30 days Step 2 - Conditions: Field: status Operator: = Value: scheduled Step 2 - Percentage: Calculate as Percentage: Yes Show Footer with Numbers: Yes Step 3 - Advanced (semicircle design): Enable Gradient: Yes Gradient To Color: #10b981 Start Angle: -90° End Angle: 90° (creates perfect semicircle) Hollow Size: 70% (thinner ring) Dash Array: 0 (solid line) Result: "2.2%" with footer "4,841 achieved / 220,073 total" Visual: Clean semicircle from left to right, blue to green gradient ``` ## Table Widgets Display detailed records with custom columns. ### Step 1: Basics **Data Table** * Choose source: calls, leads, campaigns, assistants, phone\_numbers, sms **Campaign Filter** (leads table only) * Select campaign to: * Filter table to that campaign * Enable custom variable columns * Optional **Assistant Filter** (calls table only) * Select assistant to: * Filter table to that assistant * Enable evaluation field columns * Optional **Column Selection** * Basic columns: Id, Status, Created At, etc. * Relationship columns: Assistant Name, Campaign Name * Evaluation fields: evaluation. (if assistant selected) * Lead variables: variables. (if campaign selected) * Default if none selected: Id, Status, Created At ### Step 2: Display & Filters **Label** (required) * Table heading **Description** * Optional subheading **Date Range** * Same as stats/charts **Sort By** * Default sort column * Only simple columns (not relationships) * Default: created\_at **Sort Direction** * desc (newest first) - default * asc (oldest first) **Rows Per Page** * Number of rows to display (1-100) * Default: 10 **Conditions** * Same as stats/charts ### Interactive Features **Clickable Rows** * Table rows are clickable * Automatically links to detail/edit page for the record * Works for: Calls, Leads, Campaigns, Assistants **Live Date Filter** * Change date range directly on the widget * Overrides the configured default date range * Useful for exploring different time periods **Status Filter** * Multi-select dropdown to filter by status * Available for: Calls, Leads, Campaigns, Assistants, SMS * Select multiple statuses at once **Text Display** * Long text automatically truncates at 50 characters * Hover over truncated text shows full content in tooltip ### Column Types **Phone Number Columns** * International format (+1 555 123 4567) * Country flag prefix * Examples: client\_phone\_number, phone\_number **Status Columns** * Colored badges * Examples: status field on any table **Date Columns** * "3 hours ago" format * Hover shows full datetime * Examples: created\_at, updated\_at **Evaluation Columns** (calls table with assistant) * Boolean fields: checkmark or X with green/red badge * Non-boolean fields: value with gray badge * Hover shows field description * Format: evaluation. **Variable Columns** (leads table with campaign) * Custom lead data * Format: variables. * Examples: customer\_name, company **Relationship Columns** * Access related data * Examples: Assistant Name, Campaign Name * Cannot sort by these ### Examples **Recent Calls** ``` Table: calls Columns: - Client Phone Number - Assistant Name - Duration - Status - Created At Sort: Created At desc Rows: 25 Date Range: 7 days ``` **Successful Appointments** ``` Table: calls Assistant: [Select to load fields] Columns: - Client Phone Number - Assistant Name - evaluation.appointment_booked - Created At Sort: Created At desc Rows: 50 Date Range: 30 days Conditions: - Status = completed - Column: Extracted Variables Extracted Variable Name: Custom variable Custom Variable Name: appointment_booked Operator: = Variable Value: true ``` ## Filtering Data All widgets support conditions to filter data. ### Operators * `=` - Equals * `!=` - Not equals * `>` - Greater than * `>=` - Greater or equal * `<` - Less than * `<=` - Less or equal * `like` - Contains text * `in` - One of (comma-separated) * `not in` - Not one of * `is null` - No value * `is not null` - Has value ### Basic Filtering **Status Filter** ``` Column: Status Operator: = Value: completed ``` **Duration Filter** ``` Column: Duration Operator: > Value: 60 ``` **Multiple Values** ``` Column: Status Operator: in Value: completed,in-progress ``` ### Evaluation Field Filtering Filter by post-call evaluation values. **Setup:** 1. Column: Extracted Variables 2. Extracted Variable Name: Status or Custom variable 3. If Custom variable: Enter field name in Custom Variable Name 4. Variable Value: true/false for booleans, or any + custom value **Boolean Example - Appointment Booked** ``` Column: Extracted Variables Extracted Variable Name: Custom variable Custom Variable Name: appointment_booked Operator: = Variable Value: true ``` **Non-Boolean Example - Sentiment** ``` Column: Extracted Variables Extracted Variable Name: Custom variable Custom Variable Name: sentiment Operator: = Variable Value: any Custom Value: positive ``` **Check Field Exists** ``` Column: Extracted Variables Extracted Variable Name: Custom variable Custom Variable Name: interested Operator: = Variable Value: any ``` ### Multiple Conditions Conditions combined with AND: ``` Filter for successful long calls: Condition 1: - Column: Status - Operator: = - Value: completed Condition 2: - Column: Duration - Operator: > - Value: 120 Condition 3: - Column: Extracted Variables - Extracted Variable Name: Custom variable - Custom Variable Name: appointment_booked - Operator: = - Variable Value: true ``` ## Best Practices ### Widget Naming Use descriptive internal names: * ✅ "Sales Calls - Last 30 Days" * ✅ "Support Duration Average" * ❌ "Widget 1" ### Date Ranges Match range to use case: * **Today:** Real-time monitoring * **7 days:** Weekly performance * **30 days:** Monthly trends * **90+ days:** Long-term analysis ### Colors Strategic color usage: * **Green (success):** Positive metrics * **Red (danger):** Alert metrics * **Blue (primary):** Neutral metrics * **Yellow (warning):** Attention needed * **Gray (info):** Secondary info ### Performance Keep dashboards fast: * Use date range filters * Limit widgets per dashboard to under 20 * Use COUNT when possible (faster) * Avoid very long date ranges ## Troubleshooting **Widget shows "No data"** * Expand date range * Remove/adjust filters * Verify table has records **Evaluation fields not showing** * Select assistant in widget config * Ensure assistant has post-call schema * Check field names match **Chart shows empty** * Pie/donut: Must use Group By (not Period) * Line/area: Must use Group By Period (not Category) * Check date range includes data **Table missing columns** * Relationship columns need related records * Evaluation columns need assistant selection * Variable columns need campaign selection **"Group By required" error** * Pie/donut/polarArea charts MUST have Group By * Cannot use Group By Period with these chart types **Cannot sort by column** * Relationship columns (with .) not sortable * Evaluation fields not sortable * Use basic columns for sorting For dashboard creation and layout management, see [Custom Dashboards Overview](/custom-dashboards/overview). # Core Concepts Source: https://docs.lacy.ai/getting-started/core-concepts Learn the fundamental building blocks of Lacy.ai, including system prompts, voices, and AI assistants Welcome to the fundamentals of Lacy.ai. Here, we explore the essential building blocks that you need to understand before configuring your AI assistant and calls. ## 1. System Prompt & Initial Message **System Prompt** * The "brain" of your AI assistant. You write a short (or long) set of instructions that guide the assistant's behavior and tone of voice. * This includes any important business info, disclaimers, or how you want the AI to handle edge cases. * For example: *"You are a helpful phone assistant for XYZ Company, you greet in a friendly manner, confirm the caller's info, etc."* **Initial Message** * The very first thing the AI says. * Typically short, like "Hello, thanks for calling XYZ Company!" ## 2. Voices * Lacy.ai integrates with **ElevenLabs** voices for natural-sounding speech. * You can **clone** your own voice by providing audio samples or pick from built-in voices. * Each voice can have adjustable parameters like speech speed, filler usage, or accent (if available). ## 3. Putting It All Together * An **AI Assistant** is built by combining a system prompt, an initial message, and a chosen voice. * Optionally, you add tools (like "transfer call" or "end call"). * Once the assistant is set, you assign it to a phone number (for inbound) or a campaign (for outbound). **Next Steps** * Learn how [call minutes and billing](/getting-started/understanding-billing) work to plan your usage. * Or, jump to [AI Assistants Overview](/ai-assistants/what-is-an-ai-assistant) to start building your first assistant. # Understanding Call Minutes & Billing Source: https://docs.lacy.ai/getting-started/understanding-billing Learn how Lacy.ai billing works, including call minutes calculation, phone number rentals, and usage monitoring Lacy.ai operates on a **usage-based** model. You pay primarily for two things: 1. The **minutes** your AI spends in calls. 2. Any **dedicated phone number** rentals. ## 1. Included Minutes vs. Pay-as-You-Go * **Included Minutes**: Some plans may come with a set of monthly minutes. These are consumed first. * **Pay-as-You-Go**: If you exceed included minutes (or if you're on a usage-based plan), you pay for each additional minute used. ## 2. How We Calculate Minutes * **Per-Second Billing**: Typically, Lacy.ai bills by the second (converted to minutes). For example, a 90-second call is 1.5 minutes. * **Rounding**: Make sure you check your plan's rounding rules. Some might round up to the nearest 30 seconds, while others do pure per-second. ## 3. Monthly Usage & Purchasing Extra * **Monthly Reset**: If your plan includes minutes, those reset monthly on your billing date. * **Buying Add-Ons**: You can purchase extra minute bundles if you expect a spike in call volume. ## 4. Additional Costs * **Phone Number Rental**: A monthly fee for each dedicated inbound/outbound number you rent (varies by region). * **Possible Carrier Surcharges**: Some countries may have unique taxes or surcharges—check the [Costs & Pricing](../../costs-and-pricing/cost-overview.md) section for more details. ## 5. Monitoring Usage * **Dashboard**: The platform displays your current usage, how many minutes are left, and your estimated cost so far. * **Notifications**: You can set up alerts (e.g., "Email me when I hit 80% of monthly minutes") using the no-code automation platform. **Next Steps** * Check out our [Costs & Pricing](../../costs-and-pricing/cost-overview.md) section for a deeper breakdown of number rentals, international rates, inbound vs. outbound cost differences, and more. * Or proceed to [AI Assistants Overview](../../ai-assistants-overview/what-is-an-ai-assistant.md) to build your first agent. # Configuring the Inbound Assistant Source: https://docs.lacy.ai/inbound-calls/configuring Set up your inbound AI assistant with prompts, voices, and tools for handling incoming calls An "Inbound Assistant" is simply an AI assistant set to **inbound** mode. Key steps: 1. **Prompt & Voice** * Provide a clear system prompt. Example:\ *"You are the Support Bot for Acme Inc. Greet politely, ask for the customer's need, and attempt to answer basic FAQs."* * Choose a voice from the built-in library or a cloned voice. 2. **Initial Message** * The first line of dialogue once the AI picks up. * Example: *"Hi, thank you for calling Acme Inc. How may I help you?"* 3. **Add Tools (Optional)** * **Transfer**: If the caller needs a human agent. * **End Call**: Condition to end the call politely. * **Appointment Scheduler**: If you want them to book a slot on your calendar. 4. **Call Flow** * In the system prompt, mention potential dialogues, e.g., "If they mention billing, ask for their invoice number." 5. **Save & Test** * Dial the inbound number from your cell phone. * Confirm the AI greets and responds according to your instructions. *** **Tip:** Revisit your assistant's settings regularly to improve the conversation flow—especially if you see frequent hang-ups or missed info. # Inbound Call Insights Source: https://docs.lacy.ai/inbound-calls/insights Access and analyze inbound call data, including transcripts, recordings, and automation triggers After an inbound call, Lacy.ai provides transcripts, analytics, and possible automation triggers. ## 1. Recording & Transcription * **Recording**: Typically saved in the call logs, so you can replay. * **Transcription**: The AI's recognized text, which is used to generate its responses. ## 2. Post-Call Data (Summary & Extracted Variables) * The AI can store or forward call info (e.g., name, reason for calling) to a connected CRM or spreadsheet. * Summaries may include "intent" or "call outcome." ## 3. Automation Triggers * Using the built-in no-code platform, you can do things like: 1. **Email or Slack** the transcript to your team. 2. **Log** the call outcome in Google Sheets. 3. **Notify** a human agent if follow-up is needed. ## 4. Viewing Insights * In your Lacy.ai dashboard, go to **Calls** or **History**. * Filter by inbound calls. * Click a specific call to see the transcript, recording, or final notes. *** **Note:** For advanced analytics (like call sentiment or deeper classification), watch out for upcoming features or use the webhook/API to feed transcripts into external tools. # Inbound Calls Overview Source: https://docs.lacy.ai/inbound-calls/overview Learn how AI assistants handle incoming calls, from answering to call completion and analytics When someone dials your dedicated (or SIP-integrated) number, Lacy.ai can answer automatically through an AI Assistant. This section covers the big-picture flow of inbound calling: 1. **Caller Dials Your Number** * A local, international, or toll-free line assigned to your AI assistant. 2. **AI Assistant Answers** * Greets the caller using your configured voice and initial message. * Follows the **system prompt** to handle inquiries or gather information. 3. **Optional Actions** * Transfer to a human operator (if configured). * Schedule appointments, check order statuses, or collect data for later use. 4. **Call Completion** * AI ends the call politely or transfers to a queue/agent if needed. * You get transcripts and call analytics afterward. *** **Tip:** Start by renting or provisioning a phone number and linking it to an inbound-type AI Assistant. # Provisioning & Managing Phone Numbers Source: https://docs.lacy.ai/inbound-calls/provisioning Learn how to provision, assign, and manage phone numbers for inbound AI calls If you haven't already, check out our [Phone Numbers](../../phone-numbers/types-of-phone-numbers.md) section to learn how to obtain or integrate a number. Once you have a number: 1. **Assign It to Your AI Assistant** * Go to **Assistants** > **(Your Inbound Assistant)**. * Under **Phone Number**, pick the number you want to use. 2. **Verify Functionality** * Test by calling the number from an external phone. * The AI should answer with your configured greeting. 3. **Monitoring Inbound Lines** * In the **Phone Numbers** page, you can see active lines, monthly cost, and usage. * Release lines you no longer need to avoid extra rental fees. ## Handling Country-Specific Requirements Some regions may require: * **Local address or business registration** * **ID documents** for toll-free or special lines If so, you'll be prompted to upload documents for **custom provisioning** before your number is activated. # How It Works (Quick Overview) Source: https://docs.lacy.ai/introduction/how-it-works Understand the technical flow of how Lacy.ai processes and handles phone conversations using AI Lacy.ai blends **AI voice recognition** with **LLM-based replies** to conduct live phone conversations. Below is a simplified flow: 1. **Caller or Lead is Dialed** * **Inbound**: A customer dials your assigned phone number. * **Outbound**: Lacy.ai's system calls a list of phone numbers from your campaign. 2. **Speech Recognition**\ The AI listens to what the person says and transcribes it into text in real time. 3. **LLM Decision**\ Lacy.ai uses a large language model (LLM) and your configured "system prompt" to craft a reply or decide the next action (like transferring the call). 4. **Voice Output**\ The AI's response is converted to natural-sounding speech via our voice engine (ElevenLabs voices). 5. **Result & Actions** * For **Inbound**: The AI may answer questions, verify info, or take a message. * For **Outbound**: The AI can pitch a product, qualify leads, or transfer interested callers to a human agent. 6. **Data & Reporting**\ You get transcripts, call recordings, call outcomes (like "no answer" or "success"), and the ability to automate follow-up actions. ## Distinctions: Inbound vs. Outbound * **Inbound** * Caller dials a number you rented or integrated. * AI picks up, greets, and handles queries or routes the caller if needed. * **Outbound** * You upload or sync leads. * AI dials each number, follows your call script, possibly transfers if the lead is interested. ## Next Steps * Learn about [**Key Terminology**](/terminology) (like "AI Assistant," "Campaign," etc.). * Jump into [**Getting Started**](/getting-started) to set up your first AI assistant. # Key Terminology Source: https://docs.lacy.ai/introduction/key-terminology Essential terms and concepts you need to know to use Lacy.ai effectively Understanding these terms will help you navigate Lacy.ai more easily: ## [AI Assistant / Agent](/ai-assistants/voice-selection) A customizable bot you configure to handle inbound or outbound calls. Defines conversation style, voice, and behavior via a "system prompt." ## [Campaign (Outbound)](/outbound-calls/campaigns) A sequence or batch of calls to a list of contacts or leads. You can upload a CSV, connect Google Sheets, or integrate your CRM to launch these calls. ## [Inbound Number](/phone-numbers/types) A dedicated phone number that customers dial to reach your AI assistant. You can get one from the platform or integrate via SIP/PBX. ## [Outbound Caller ID](/outbound-calls/caller-id) The number displayed on the customer's phone when your AI calls them. You can rent one or verify an existing number to use as Caller ID. ## [No-Code Automation Platform](/automation-platform/sms-capabilities) Lacy.ai's built-in workflow platform, similar to Zapier/Make. It lets you connect triggers (like "call ended") to actions (like "send an email" or "update a Google Sheet") without writing code. [Learn more about automating your workflows](/automation). ## [Tools / Integrations](/getting-started/core-concepts) Refers to the specialized features your AI assistant can use, like transferring a call, ending a call, scheduling an appointment, or webhooks to external apps. *** **Tip:** Keep these definitions in mind as you proceed through the docs. They'll pop up in various setup steps or feature explanations. # What is Lacy.ai? Source: https://docs.lacy.ai/introduction/what-is-lacy Learn about Lacy.ai, a voice automation platform that uses AI to handle real-time phone conversations Lacy.ai is a voice automation platform that leverages AI to handle phone calls in real time. It allows you to create AI-driven assistants (or "agents") that can speak with your customers over the phone—both inbound and outbound. ## Core Features * **Inbound & Outbound Calls**\ Handle both incoming support calls or automated outbound campaigns to reach leads and customers. * **AI-Powered Conversations**\ Uses advanced language models (LLMs) and speech recognition for natural-sounding interactions. * **No-Code Flows**\ Built-in automation platform to connect with Google Sheets, CRMs, calendars, and more—no coding required. ## Key Benefits * **24/7 Availability**\ Your AI agent can handle calls around the clock, reducing missed calls or wait times. * **Scalability**\ The same number can handle multiple calls in parallel, perfect for high-volume scenarios. * **Time & Cost Savings**\ Free up human agents for complex tasks while the AI handles repetitive or basic inquiries. ## Why Choose Lacy.ai? * **Real-Time Phone Call Automation**: The AI transcribes, understands, and responds live, just like a human agent. * **Multiple Language & Voice Options**: Built-in library or custom voice cloning, plus support for many languages. * **Easy Setup**: Create your first assistant in minutes. Testing and iterating are straightforward. # Importing Leads Source: https://docs.lacy.ai/leads/importing-leads Import leads from CSV and Excel files with validation and error handling Import large numbers of leads from CSV or Excel files with automatic validation, background processing, and comprehensive error reporting. ## Import Process Overview The lead import system supports: * **CSV and Excel files** (.csv, .xlsx, .xls) * **Background processing** for large files * **Automatic validation** with error reporting * **Secondary contacts** in same import * **Variable mapping** from assistant configuration ## Preparing Your Import File ### Required Columns Your import file must include: * **phone\_number:** Primary contact phone number (required) * **Variables:** Columns matching your [assistant's configured variables](/ai-assistants/settings/prompt-and-tools#call-variables) ### Optional Columns * **Secondary contact columns:** Additional phone numbers * **Variable overrides:** Custom values for specific leads ### File Format Example ```csv theme={null} phone_number,customer_name,company,budget_range,secondary_phone_1,secondary_phone_2 +14155551234,John Smith,ABC Corp,10k-50k,+14155551235,+14155551236 +14155557890,Jane Doe,XYZ Inc,50k-100k,+14155557891, +14155554567,Bob Johnson,Tech Start,5k-10k,, ``` ## Import Configuration ### 1. Select Campaign Choose the target campaign from the dropdown. The assistant's variables will determine what columns are expected during mapping. ### 2. Secondary Contacts Select how many secondary phone numbers per lead (0-10). If your file contains additional phone numbers beyond the primary contact, specify the count here. ### 3. Phone Number Format Choose the format of your phone numbers: **International Format (Recommended)** * Numbers already include country code with + prefix * Example: `+40741234567`, `+14155551234` * No country selection needed * Can mix multiple countries in same file **National Format** * Numbers without country code prefix * Example: `0741234567`, `7775551234` * **Must select country code** during import * **Important:** Separate your file by country - all numbers must be from the same country per file * System will add the selected country code to all numbers When using national format, you must import one file per country. Do not mix numbers from different countries in the same file. ### 4. Country Code Selection Only appears when "National Format" is selected. Choose the country that matches all phone numbers in your file. The system will automatically prepend the country code to all numbers. ## Import Steps ### 1. Start Import Process 1. **Navigate to Leads** section or Campaign leads tab 2. **Click "Import Leads"** button 3. **Select campaign** for lead assignment 4. **Download sample** file to see expected format ### 2. Upload and Map Columns 1. **Choose file:** Select your CSV or Excel file 2. **Column mapping:** Map your file columns to system fields: * **Phone Number (required):** Select the column containing phone numbers * **Assistant variables:** Map each variable to its corresponding column * **Secondary contacts:** If configured, map secondary phone numbers and variables 3. **Auto-detection:** System auto-detects mappings based on common header names 4. **Review and import:** Confirm mappings and click "Import" to begin ### 3. Background Processing * **Queue processing:** Large files processed in background * **Progress tracking:** Import status updates automatically * **Notification:** Email notification when import completes * **Error reporting:** Download report of any failed rows ## Validation Rules ### Phone Number Validation * **Format checking:** International format preferred (+1234567890) * **Duplicate detection:** Prevents duplicate phone numbers * **Invalid numbers:** Automatically flagged and skipped ### Variable Validation * **Required fields:** Variables marked as required must have values * **Data types:** Text, number, boolean validation where applicable * **Length limits:** Maximum character limits enforced ### Secondary Contact Validation * **Phone format:** Same validation as primary numbers * **Unique numbers:** Secondary contacts must differ from primary * **Variable consistency:** Secondary contact variables validated independently ## Error Handling ### Automatic Error Handling The import system automatically handles validation errors: * **Valid rows imported:** Successfully validated leads are added to the campaign * **Invalid rows skipped:** Rows that fail validation are automatically excluded * **Error report generated:** Detailed report of all failed rows is created * **Partial success:** Import completes successfully with all valid leads, failed rows are recorded ### Common Validation Errors * **Invalid phone numbers:** Incorrect format or impossible numbers * **Missing required fields:** Empty values for required variables * **Duplicate phone numbers:** Phone number already exists in system * **File format issues:** Corrupted or unsupported file format ### Error Report Download After import completion: * **Download link** provided in notification * **Detailed error descriptions** for each failed row * **Correction guidance** for fixing issues * **Re-import capability** with corrected data ## Secondary Contacts Import ### Multiple Phone Numbers per Lead Include additional columns for secondary contacts: ```csv theme={null} phone_number,customer_name,secondary_phone_1,secondary_phone_2,secondary_phone_3 +14155551234,John Smith,+14155551235,+14155551236,+14155551237 ``` ### Secondary Contact Variables Add variables specific to secondary contacts: ```csv theme={null} phone_number,customer_name,secondary_phone_1,secondary_1_name,secondary_1_role +14155551234,John Smith,+14155551235,Jane Smith,Decision Maker ``` ### Contact Ordering * **Primary contact:** Always called first * **Secondary order:** Called in column order (secondary\_phone\_1, then secondary\_phone\_2, etc.) * **Campaign coordination:** Respects campaign retry settings between contacts ## Large File Handling ### Background Processing * **Automatic queuing:** Files over 1000 rows processed in background * **Memory efficiency:** Streaming processing prevents timeouts * **Progress tracking:** Real-time status updates * **System performance:** No impact on platform performance during import ### Notification System * **Email notifications:** Sent when import completes * **Success summary:** Number of leads imported successfully * **Error summary:** Count and details of failed rows * **Download links:** Access to error reports and imported data ### Processing Time * **Small files (\< 100 rows):** Usually complete within 1 minute * **Medium files (100-1000 rows):** 2-5 minutes typical * **Large files (1000+ rows):** 10-30 minutes depending on complexity * **Very large files (10k+ rows):** May take several hours ## Best Practices * **Use sample file:** Download provided template for correct format * **Phone format:** International format without separators (+1234567890) * **Clean data:** Remove empty rows and validate content * **Test first:** Start with small batch to verify format * **Match variables:** Ensure columns align with assistant configuration For detailed troubleshooting and common import issues, see [Leads Troubleshooting](/troubleshooting/leads). For information about managing imported leads, see [Managing Leads](/leads/managing-leads). # Leads Overview Source: https://docs.lacy.ai/leads/index Manage your campaign contacts with primary leads, secondary contacts, and custom variables Leads are the contacts that your campaigns will call. Each lead can have multiple phone numbers (secondary contacts) and custom variables that your AI assistant can use during conversations. ## What are Leads? Leads represent the people or businesses you want to contact through your campaigns. The lead system supports: **Main contact** for each lead The primary phone number and contact information **Additional phone numbers** for the same lead Backup contacts, decision makers, or alternative numbers **Personalized information** for AI conversations Names, preferences, history, or any data your assistant needs **Progress monitoring** through campaign lifecycle Track call attempts, completions, and retry status ## Lead Status System Every lead moves through different statuses during campaign execution: **Ready to call** - Lead is queued for first contact attempt **Queued for retry** - Scheduled for next call attempt based on campaign settings **Currently being called** - Call is in progress **Waiting for retry** - Will be called again after retry interval **Retry limit reached** - Maximum call attempts exceeded **Successfully contacted** - Call completed or goal achieved ## Primary vs Secondary Contacts ### Primary Contacts * **Main lead record** with complete information * **First to be called** in campaign sequence * **Inherits campaign variables** from assistant settings * **Controls overall lead status** and completion ### Secondary Contacts * **Additional phone numbers** for the same person/business * **Called if primary doesn't answer** (based on campaign retry settings) * **Independent status tracking** from primary contact * **Can have unique variables** different from primary **Use case example:** A business lead might have the main office number as primary contact, with the decision maker's direct line and mobile as secondary contacts. ## Variables System Variables personalize AI conversations with lead-specific information. They are inherited from [assistant configuration](/ai-assistants/settings/prompt-and-tools#call-variables) and can be customized per lead. **Usage in conversations:** Assistant uses variables like `{customer_name}` and `{company}` for personalized responses. ## Key Features ### Lead Management * **Manual creation** or **CSV/Excel import** with validation * **Status tracking** through campaign lifecycle * **Export capabilities** with filtering options ### Campaign Integration * **Single campaign** assignment per lead * **Automatic status updates** based on call outcomes * **Manual status control** for campaign management ### Best Practices * **Phone format:** International format without spaces (+1234567890) * **Clean data:** Accurate, current contact information * **Logical organization:** Prioritize secondary contacts appropriately For troubleshooting lead management issues, see [Leads Troubleshooting](/troubleshooting/leads). For detailed setup instructions, see [Managing Leads](/leads/managing-leads) and [Importing Leads](/leads/importing-leads). # Managing Leads Source: https://docs.lacy.ai/leads/managing-leads Create, edit, and organize leads with custom variables and secondary contacts Learn how to create, edit, and manage leads effectively for your campaigns with proper variable setup and secondary contact management. ## Creating a New Lead ### Basic Information 1. **Phone Number:** Enter the primary contact number in international format 2. **Campaign Assignment:** Select which campaign this lead belongs to 3. **Status:** Automatically set to "Created" for new leads **Phone number format:** Use international format without spaces or parentheses (+1234567890) for automation imports and file uploads. ### Variable Setup #### Assistant Default Variables When you select a campaign, the lead automatically inherits variables from the [assistant configuration](/ai-assistants/settings/prompt-and-tools#call-variables): * **Pre-filled values:** Assistant's default variables appear in the form * **Customization:** Modify values specific to this lead * **Required fields:** Some variables may be required for campaign functionality #### Custom Variables Add personalized information for your AI assistant to use: **Common variable types:** * **customer\_name:** Person's name for personalized greetings * **company:** Business name for B2B conversations * **last\_interaction:** Previous conversation context * **preferences:** Customer preferences or requirements * **budget\_range:** Financial information for sales calls **Variable format example:** ```json theme={null} { "customer_name": "Sarah Johnson", "company": "TechStart Solutions", "last_interaction": "Requested demo of premium features", "preferred_contact_time": "Afternoon EST", "industry": "Software Development" } ``` ### Secondary Contacts Add additional phone numbers for the same lead when you have multiple ways to reach them. #### When to Use Secondary Contacts * **Decision makers:** Multiple people involved in the decision * **Backup numbers:** Mobile, office, home numbers for same person * **Department contacts:** Different departments in same company * **Time-based contacts:** Different numbers for different times #### Secondary Contact Setup 1. **Add Secondary Contact:** Click "Add Secondary Contact" in the form 2. **Phone Number:** Enter additional phone number 3. **Variables:** Set specific variables for this contact (optional) 4. **Order:** Contacts are tried in the order you add them **Contact order matters:** Campaign will try contacts in sequence. Put the most likely to answer first. #### Secondary Contact Variables Each secondary contact can have unique variables: * **Different person:** Use different name and role variables * **Same person:** Use same personal info but different contact preferences * **Department-specific:** Customize for specific department needs **Example - Multiple decision makers:** ```json theme={null} // Primary: CEO { "contact_name": "John Smith", "role": "CEO", "decision_authority": "Final approval" } // Secondary: CTO { "contact_name": "Jane Doe", "role": "CTO", "decision_authority": "Technical decisions" } ``` ## Editing Existing Leads ### Modifying Lead Information * **Phone number:** Update if contact information changes * **Campaign:** Move lead to different campaign if needed * **Status:** Manually change status for campaign control ### Variable Management * **Update values:** Modify existing variable values * **Add variables:** Include new information for better AI context * **Remove variables:** Delete outdated or irrelevant data **Campaign compatibility:** When changing campaigns, ensure variables match the new assistant's configuration. ### Secondary Contact Management * **Add contacts:** Include additional phone numbers * **Remove contacts:** Delete invalid or unnecessary numbers * **Reorder contacts:** Change calling sequence priority * **Update variables:** Modify contact-specific information ## Lead Status Management ### Understanding Status Changes Lead status automatically updates based on campaign activity: * **Created → Processing:** When campaign starts calling * **Processing → Completed:** When call succeeds or goal achieved * **Processing → Rescheduled:** When call needs retry * **Rescheduled → Max Retries:** When retry limit reached ### Manual Status Control You can manually change lead status when needed: #### Reset for Re-calling **Set to "Created":** Resets lead to be called again * **Use case:** Lead requested callback at specific time * **Effect:** Lead rejoins campaign queue * **Considerations:** Respects campaign retry limits #### Mark as Complete **Set to "Completed":** Stops campaign from calling this lead * **Use case:** Goal achieved through other channels * **Effect:** Lead excluded from future campaign calls * **Considerations:** Cannot be automatically reset by campaign #### Other Status Changes * **"Scheduled":** Queue for next retry attempt * **"Max Retries":** Manually mark as exhausted * **"Rescheduled":** Reset retry timer **Status strategy:** Use manual status changes sparingly. Let campaign automation handle most status updates for consistent behavior. ## Bulk Operations ### Bulk Delete Select multiple leads and delete them: 1. **Filter leads:** Use table filters to select specific leads 2. **Select leads:** Check boxes for leads to delete 3. **Bulk delete:** Choose delete action from bulk actions menu 4. **Confirm:** Review changes before applying ### Bulk Export Export filtered lead data for external processing: * **Apply filters:** Filter by campaign, status, date range * **Select columns:** Choose which data to export * **Include secondary:** Option to include secondary contacts * **Download:** CSV format for spreadsheet compatibility ## Lead Organization Use table filters, sorting, and search to organize leads by campaign, status, date range, or variable content. ## Campaign Integration * **Single campaign** assignment per lead * **Variable inheritance** from assistant configuration * **Automatic coordination** with campaign schedule and retry logic ## Best Practices ### Key Points * **Phone format:** International format without spaces (+1234567890) * **Variables:** Use consistent naming and relevant information * **Secondary contacts:** Order by priority, avoid duplicates * **Privacy:** Follow data protection requirements For troubleshooting common lead issues, see [Leads Troubleshooting](/troubleshooting/leads). For information about importing leads in bulk, see [Importing Leads](/leads/importing-leads). # Caller ID & Handling Source: https://docs.lacy.ai/outbound-calls/caller-id Learn how to configure and manage caller ID for outbound campaigns When you launch an outbound campaign, you can choose which number appears on recipients' phones. ## 1. Dedicated Number * If you've rented a local or toll-free number, you can select it as the "Phone number" in the assistant settings. * Good for brand consistency or if you also accept inbound calls on the same line. * **No OTP verification needed** for numbers rented through Lacy.ai. ## 2. Verified Existing Number (Caller ID Only) * If you want your personal or company phone line to appear, verify it with an **OTP** or short call. * This won't handle inbound calls for the AI, but the lead sees that recognized number on caller ID. * **Note**: OTP verification is ONLY required when using your own existing number as Caller ID. ## 3. SIP Integration * If you use a PBX or VOIP platform, you might pass a custom caller ID from your existing system. * Make sure your trunk or provider is set to allow a specific outbound Caller ID. ## 4. Country-Specific Rules * Some regions prevent using numbers you don't own as Caller ID. * Always ensure you have the right to present that number to avoid spam or legal issues. *** **Tip:** Test by calling your own phone or a friendly colleague to confirm the correct caller ID is displayed before launching a big campaign. # Creating & Managing Campaigns Source: https://docs.lacy.ai/outbound-calls/campaigns Step-by-step guide to creating and managing outbound call campaigns, including lead imports and monitoring An outbound "campaign" determines when, how, and to whom calls are made. ## 1. Setup a Campaign 1. **Go to Outbound / Campaigns** in your dashboard. 2. Click **Create New Campaign**: * **Name**: e.g. "January Promo," "Payment Reminder," etc. * **Assistant**: which AI assistant will handle these calls? * **Window**: choose the time window for the campaign ## 2. Importing Leads * **CSV File**: Upload phone numbers (plus any extra columns, like name or account number). * **Google Sheets**: Connect via the no-code platform or direct integration to pull leads. * **CRM**: Some CRMs (HubSpot, GHL, etc.) can send leads directly to Lacy.ai via API or automation. ## 3. Call Retries & Scheduling * **Max Retries**: e.g., attempt each lead up to 2 times if they don't answer. * **Retry Interval**: minutes/hours between retries. * **Time Window**: e.g., only call between 9 AM and 6 PM local time to avoid inconveniencing leads. ## 4. Monitoring & Pausing * Once the campaign is live, calls happen automatically during the allowed hours. * You can **pause** or **stop** the campaign anytime to revise your script or leads list. ## 5. Analyzing Results * Visit **Campaign Reports** to see: * How many calls were answered vs. no-answer. * Number of successful vs. failed calls. * Average call duration, etc. *** **Note:** Large campaigns with thousands of leads can run concurrently, as AI can handle parallel calls. Watch your minute usage to avoid unexpected costs. # Mass/Parallel Dialing Source: https://docs.lacy.ai/outbound-calls/mass-dialing Learn how to manage high-volume outbound campaigns with parallel dialing while maintaining compliance One advantage of AI-driven outbound is that you can dial large batches of leads simultaneously without hiring more human agents. ## 1. Handling High-Volume Campaigns * **Upload Thousands of Contacts**: * If your plan or usage limit allows, you can import big lists from CSV or integrate with your CRM. * **Parallel Calls**: * A single phone number can handle multiple concurrent calls, but watch for compliance (some regions have rules against excessive cold calls). ## 2. Preventing Spam Flags * **Reasonable Call Pace**: * Don't launch 10,000 calls instantly. Stagger them with short intervals to avoid spam detection or network blocks. * **Caller ID Rotation** (Optional): * Some advanced users rotate caller IDs, but ensure they're all verified and within legal guidelines. ## 3. Real-Time Monitoring * **Dashboard**: * See how many calls are active, success/no-answer rates, average call durations, etc. * **Campaign Pause**: * If you spot unusual patterns (like high "no answer" or negative responses), pause the campaign to refine your script or lead quality. *** **Note:** High-volume dialing may ramp up your minute usage quickly. Keep an eye on [Costs & Pricing](../../costs-and-pricing/cost-overview.md) to avoid surprises. # Outbound Calls Overview Source: https://docs.lacy.ai/outbound-calls/overview Learn about outbound call campaigns, including sales calls, reminders, and follow-ups using AI assistants Lacy.ai supports outbound call campaigns where the AI calls leads or customers automatically. Ideal for: * **Sales/Marketing**: Reaching out to potential clients, offering promotions. * **Collections/Reminders**: Checking overdue payments or reminding appointments. * **Customer Follow-Ups**: Post-purchase check-ins, feedback surveys, etc. ## Key Elements 1. **Leads List**\ Usually a list of phone numbers (with optional data like names or IDs). 2. **Campaign**\ A structured way to manage who gets called, how many times, and in which time window. 3. **AI Assistant**\ Handles the conversation, guided by your system prompt and call script. 4. **Caller ID**\ The number shown on recipients' phones. Could be a dedicated number or your verified existing line. *** **Tip:** Each campaign references an AI assistant. If your script changes drastically, you might create a new assistant or edit the existing one. # Scripts & Prompts for Sales or Collections Source: https://docs.lacy.ai/outbound-calls/scripts-and-prompts Learn how to write effective system prompts and scripts for outbound sales and collection calls The power of outbound calling lies in having a clear, well-structured conversation flow. Here's how to craft an effective script. ## 1. System Prompt Best Practices * **Introduce Your Company**: *"You are the Sales Bot for Ace Marketing…"* * **Purpose**: *"…you offer a 20% discount if the user is interested, or schedule a callback if uncertain."* * **Objection Handling**: *"…if they say 'no budget', attempt to collect a reason or set a reminder for next month."* ## 2. Example (Sales Prompt) ```plaintext theme={null} "You are the Sales Bot for ACME Corp. Greet politely, mention the new product launch, and offer a 10% discount if the lead is interested. If they ask for more info, invite them to schedule a call with a human agent. If they refuse or express disinterest, politely end the call." ``` ## 3. Example (Collections Prompt) ```plaintext theme={null} "You are the Collections Bot for ABC Finance. Greet the user, verify their name and last payment date. If they confirm a willingness to pay, gather payment details or schedule a callback. If they refuse, politely note the reason and end the call." ``` ## 4. Handling Yes/No/Maybe * **Yes**: Provide details or transfer to a human for finalizing. * **No**: Respectfully close, mark lead as not interested. * **Maybe**: Offer to schedule a follow-up call or provide more info. *** **Tip:** Keep your script short and direct. The AI can adapt, but a concise prompt helps keep calls focused and efficient. # Voicemail Handling Source: https://docs.lacy.ai/outbound-calls/voicemail-handling Learn how your AI assistant handles voicemail detection in outbound calls When making outbound calls, the AI assistant can automatically detect if it has reached a voicemail or answering machine: ## Voicemail Detection * The AI uses advanced detection to identify voicemail systems * When voicemail is detected, the call is automatically ended * This helps avoid wasting resources and ensures efficient call handling ## Benefits of Auto-Drop * Saves time and call minutes * Prevents awkward or incomplete interactions * Allows for automatic retry scheduling * Maintains professional communication standards ## Best Practices * Monitor call logs to track voicemail rates * Consider time zones when scheduling calls * Plan retries during different hours * Target business hours when people are more likely to answer ## Reporting You can track voicemail detection in your campaign analytics: * Number of detected voicemails * Time of day patterns * Success rates for different calling times *** **Tip:** If you're getting too many voicemails, try adjusting your campaign's calling hours to when people are more likely to answer. # Assigning Numbers to Assistants Source: https://docs.lacy.ai/phone-numbers/assigning-to-assistants Learn how to connect your phone numbers to AI assistants for both inbound and outbound calls After you've acquired a number (or configured SIP or Caller ID), you'll need to assign it to your AI assistant. The process is the same whether you're using the number for inbound or outbound calls. ## Assigning a Number 1. Go to **Assistants** → **(Your Assistant)** → **Settings** 2. Under **Phone Numbers**, select a number from your Lacy.ai inventory 3. Click **Save** to apply the changes ## Number Usage Once assigned, the number can be used for: * **Inbound**: Callers dialing this number will reach your AI assistant * **Outbound**: The number will appear as Caller ID for outbound campaigns * **Both**: The same number can handle both inbound and outbound calls ## Number Verification For numbers not rented from Lacy.ai: * You'll need to verify ownership via **OTP code** or a **verification call** * Once verified, the number can be used for both inbound and outbound * Verification status persists across different assistants ## Testing Before going live: 1. Make an inbound test call to verify the assistant answers 2. Run a test outbound call to check Caller ID display 3. Verify any specific features (call transfers, voicemail, etc.) *** **Tip:** Always test both inbound and outbound functionality after making any changes to number assignments. # Pricing & Regions Source: https://docs.lacy.ai/phone-numbers/pricing-and-regions Understand phone number pricing across different regions, documentation requirements, and additional fees Phone number rental fees vary based on country, number type, and local telecom rules. Below is a general guide: ## 1. Typical Monthly Costs * **US/Canada**: Around \$3.99/month. * **UK**: Typically \~£3/month, but can vary. * **EU Countries**: €3–€5/month, or more for toll-free lines. * **Others**: Some countries can be \$3 or more, depending on local taxes. ## 2. Advanced Documentation * **Business Registration**: Many countries (e.g., France, Germany, Italy) require a local address or company registration to rent a number. * **ID Proof**: Some carriers need a government-issued ID for individuals. ## 3. Additional Fees * Some toll-free lines or special region numbers have higher monthly costs or per-minute surcharges. * Calls to or from certain regions might also incur higher usage rates—see [Costs & Pricing](/pricing/overview) for full details. ## 4. Don't See Your Region? * Contact us through the chat widget in the bottom right corner of the screen inside the app to request a number. * Provide the necessary documentation, and we'll attempt to source a local number through our carrier partners. *** **Note:** If you're integrating **SIP** or using **Caller ID** verification, you do not pay a monthly rental, but usage costs may still apply. # Purchasing & Managing Numbers Source: https://docs.lacy.ai/phone-numbers/purchasing-and-managing Learn how to purchase, provision, and manage phone numbers for your AI assistants ## Getting Started 1. If you see a number you want in the platform, rent it instantly. 2. If it's not listed, contact us for custom provisioning. We'll let you know which documents are required. 3. Pricing may differ by country, we'll provide final monthly cost once the number is ready. 4. Any type of number (local, national, or toll-free) can be custom-provisioned if not visible in the platform. ## Custom Provisioning * Our team handles the entire process with the carrier. * We'll request any required documents based on the country's regulations. * Typical processing time is 1-3 business days. ## After Purchase * Assign the number to an AI assistant for inbound calls. * Use it as Caller ID for outbound campaigns if desired. * Monitor usage and costs in your dashboard. *** **Tip:** Remember to **assign the purchased number** to an AI assistant. # SMS Capabilities Source: https://docs.lacy.ai/phone-numbers/sms-capabilities Learn about SMS features, requirements, and pricing for your phone numbers This is an overview of SMS features. For detailed instructions on sending SMS through automation flows, check our [Automation Platform Documentation](/automation-platform/calls-related/sms-capabilities). ## Requirements To send SMS messages, you need: * An SMS-capable phone number * Sufficient credits in your account * Proper automation flow setup ## SMS Segments SMS messages are split into segments: * Each segment is 160 characters for standard ASCII text * Or 70 characters for Unicode (special characters, emojis) * Longer messages are automatically split into multiple segments * You are charged per segment sent For example: * "Hello! How are you?" (16 chars) = 1 segment * A message with 200 ASCII chars = 2 segments * A message with emojis and 100 chars = 2 segments ## Costs SMS pricing varies by: * Destination country * Number of segments * Type of content (standard/unicode) ## Monitoring & History Track your SMS activity in the dashboard: * Delivery status * Timestamp * Number of segments * Cost per message * Recipient details * Content preview ## Best Practices 1. **Message Length** * Keep messages concise * Monitor segment count * Use standard characters when possible 2. **Compliance** * Include opt-out instructions * Follow local regulations * Respect quiet hours 3. **Testing** * Verify number capabilities * Test delivery to different carriers * Monitor delivery rates *** **Want to start sending SMS?** Check out our [automation platform documentation](/automation-platform/calls-related/sms-capabilities) to learn how to set up SMS workflows. # Types of Phone Numbers Source: https://docs.lacy.ai/phone-numbers/types Learn about the different types of phone numbers you can use with Lacy.ai: dedicated numbers, SIP integration, and Caller ID Lacy.ai lets you connect three different kinds of phone numbers to your AI assistant: 1. **Normal (Dedicated) Numbers** * Rented directly from Lacy.ai. * Can be used for **both inbound** and **outbound** calls. * Typically charged as a monthly rental, with the ability to handle multiple parallel calls on a single number. 2. **SIP Integration (VOIP/PBX)** * Connect an existing VOIP or PBX number via SIP. * This setup allows you to keep your existing numbers while benefiting from Lacy.ai's AI. * Works for **both inbound and outbound**—but requires you to share SIP credentials or trunk details with us to configure. * To submit a request, contact us through the chat widget in the bottom right corner of the screen inside the app. 3. **Caller ID (Outbound Only)** * When you already have a phone number (e.g., your personal or business line) but don't want to port it or integrate via SIP. * You verify ownership (via OTP or a short call) so that number can appear on people's caller ID. * **Inbound calls won't be answered by the AI** if you use Caller ID alone—it only masks the AI's outbound calls. ## Choosing the Right Option * If you need **inbound** and you don't already have a VOIP solution, consider renting a dedicated number. * If you have an established **PBX** or VOIP provider, use **SIP integration**. * If you just want to do **outbound** calls showing your existing phone line, pick **Caller ID**. # Number Rentals & International Rates Source: https://docs.lacy.ai/pricing/number-rentals Understand phone number rental costs, plus how SIP and Caller ID usage is billed by the minute. Lacy.ai offers multiple ways to handle phone numbers for inbound or outbound calls. You can **rent** a dedicated number from us, use a **SIP** trunk (no monthly fee but carrier costs are on your own PBX), or verify an **existing Caller ID** (also no monthly fee, but region-based per-minute charges). *** ## 1. Renting a Dedicated Number If you want a fully managed inbound/outbound line, you can rent it directly in the platform: * **Monthly Fee**: Typically \$3.99/month for standard local numbers (US/CA/UK). Regions vary: * **EU Countries**: €3–€5/month * **Latin America, Asia, Africa**: \$10+ in some cases, depending on availability or local taxes * **Custom Provisioning**: If you don’t see your desired country or region listed, our team can custom-provision a number after verifying local documents. **Per-Minute Rates** * Outbound calls on a rented number: depends on the country you’re calling—could range from \$0.05/min to \$0.99/min if it’s an expensive destination. * Inbound calls: usually no extra charge unless it’s a special/toll scenario in that region. *** ## 2. SIP Integration (No Monthly Fee) If you already have a VOIP/PBX solution, you can integrate via a **SIP trunk** with **no monthly rental** from Lacy.ai. Instead, you pay: * **SIP Per-Minute**: \$0.00045/min on our side for carrier bridging. Your VOIP provider may also have separate usage fees. * **Your Existing Number**: You’ll continue to use your own phone lines for inbound and outbound, but the carrier layer costs \$0.00045/min with us whenever the AI is on the call. This is ideal if you’re comfortable managing your own phone system or want to keep your existing numbers without renting from us. *** ## 3. Caller ID (No Monthly Fee) You can verify an existing number for **outbound calls** only—no inbound routing. * **Verification**: We confirm ownership via a short OTP or call. * **Per-Minute**: For the telephony used behind the scenes, we charge region-based rates. * **Example**: In the US, Caller ID usage might be \$0.01/min. * Other countries vary; contact support for specifics. > **Note**: Caller ID alone does **not** enable inbound AI; it only masks your outbound calls with your verified number. *** ## 4. International Rates & Regions When making outbound calls: * **Carrier Rates**: Some countries cost \$0.01/min, others \$0.50/min due to local carriers. * **Inbound**: If you rent a number in a high-cost region or special type, inbound calls could have surcharges. Regardless of whether you rent a number or use Caller ID/SIP, the **carrier portion** of the call cost depends on the destination/origin country and is typically added to your overall usage. *** ## 5. Putting It All Together 1. **Rent a Number** * Pay a monthly fee (from \$3.99), plus standard inbound/outbound carrier costs for calls on that line. 2. **Use SIP** * No monthly from us, but a \$0.00045/min AI bridging cost, plus your own PBX fees. 3. **Caller ID** * No monthly from us, but region-based per-minute telephony charges (e.g., \$0.01/min in the US). Outbound only. # Cost Overview Source: https://docs.lacy.ai/pricing/overview Understand the main components of Lacy.ai pricing, including call minutes, number rentals, and optional fees Lacy.ai uses a **credit/minute system** to track usage for both AI processing and carrier network fees. Here's how it breaks down: *** ## 1. Main Components 1. **AI Cost** * Billed in fractional increments by the second (e.g., 0.5 minute for a 30-sec call). * Rate depends on your plan (Core, Pro+, Business+, etc.). 2. **Carrier Cost** * The telecom side of the call, generally **rounded up** to the next minute and converted to your plan’s minute rate. * Region-dependent: e.g., calling US vs. Europe vs. Asia has different carrier rates. 3. **Number Rental** * If you rent a phone number, there’s a monthly fee (e.g., \$3.99 for a standard US number). * If your region isn’t listed, we can custom-provision a number upon verifying documents. * Each number’s cost is billed monthly until released. 4. **Extra Fees (Optional)** * **SMS**: If your number is SMS-capable, standard per-message fees apply. * **Voicemail detection**: Billed as 1 minute per call. * **High-Volume**: Potential bulk discounts if you exceed tens of thousands of minutes monthly. *** ## 2. Visual Example Suppose you have 200 included minutes in your plan. A typical 1-minute call might consume \~1.5 minutes from your balance if carrier cost is half your plan’s rate. This means you’d have about 198.5 left. By the end of the billing cycle, any unused minutes do no rollover. *** ## 3. Checking Call Logs * **Dashboard → Call History**: See each call’s final cost breakdown. * AI usage (seconds → fraction of a minute). * Carrier usage (rounded up → fraction of a minute after conversion). * Summed total in “minutes” deducted from your included or purchased balance. *** ## 4. Monitoring & Alerts * Watch your real-time usage in the **dashboard**. *** ## 5. Putting It All Together 1. **Pick a Plan**: Decide on Core, Pro+, or Business+-higher plans have cheaper AI rates. 2. **Acquire or Verify a Number**: Rent from Lacy.ai or add your own as caller ID for outbound. 3. **Start Making Calls**: Inbound or outbound usage deducts from your minute balance. 4. **SMS & Extras**: If relevant, each text or advanced feature also deducts from your balance or is billed separately. That’s the overall cost structure. For a deeper look at the math behind minute conversion, check our [Pricing Breakdown](/pricing/usage-based) page. # Pricing Breakdown Source: https://docs.lacy.ai/pricing/usage-based Detailed explanation of how call minutes are calculated and billed # Pricing Breakdown Lacy.ai uses a **minutes-based** system for billing. These minutes (or tokens/credits) get **deducted** from your balance each time you make or receive a call. The actual “per-minute cost” depends on your plan, and **carrier costs** are also converted into minutes. Below is how it works. *** ## 1. Inbound vs. Outbound Calls * **Inbound**: You spend minutes as soon as the AI assistant picks up and is engaged in a call. * **Outbound**: Minutes start deducting once the customer answers the call and stays connected. Dial time is not billed. > **Note**: A call is considered active until the AI or the user hangs up, **or** until voicemail detection ends the call if the user’s voicemail answers (for outbound). *** ## 2. How Minutes Are Used ### a) AI Spoken Time * If your AI assistant is actively on the call for 1 minute, you consume **1 minute** of AI time. * The cost is **prorated** by the second, so a 30-second call uses 0.5 minutes from your plan (for AI time). ### b) Carrier Conversion * **Carrier cost** (the telecom network fee) is also deducted from your balance **but** is typically **rounded up** to the next minute. * We convert the carrier’s dollar amount to minutes at your plan’s rate. * **Example**: If your carrier charge is \$0.05 for a 1-minute call, and your plan’s AI rate is \$0.10/min, we convert that \$0.05 to 0.5 minutes from your balance. **So a single 1-minute conversation might consume:** * **1 AI minute** (for the assistant) * **+ 0.5 “carrier minutes”** (converted from the carrier’s \$0.05 to half your AI cost). * **= 1.5 minutes total** deducted from your plan balance. *** ## 3. Per-Second Billing vs. Rounding 1. **AI Time** * **Measured per second**, so 70 seconds is \~1.17 minutes of AI usage. * Deducted exactly from your plan’s minute balance. 2. **Carrier Time** * **Rounded to next full minute** for the network fee. * Then converted into a fraction of your AI plan cost to decide how many “minutes” to deduct from your credit balance. *** ## 4. Included Minutes & Top-Ups * **Each Plan**: Usually includes a monthly allotment of minutes. * **Using Up Minutes**: Once you exceed included minutes, you can **top up** your wallet with additional minutes at your plan’s rate. * **No Rollover**: Unused minutes typically don’t roll over to the next month. **Example** > You’re on the **Core Plan** with 10 included minutes: > > * If you make enough calls that total 8 AI minutes + carrier conversions = 8 used, you have 2 left this month. > * Next month, you reset to 10. If you need 200 minutes, you pay for 190 extra minutes at your plan’s rate. *** ## 5. Volume Discounts or Tiers * Plans vary (e.g., **Core** at \$0.49/min, **Pro+** at \$0.29/min, **Business+** at \$0.23/min). * High-volume usage (like 50,000+ minutes/month) can often get **bulk discounts** by contacting sales. *** ## 6. Quick Usage Examples ### Example A (Outbound Call, Core Plan) * **AI Rate**: \$0.49/min * **Call Duration**: 30 seconds → 0.5 AI minutes = \$0.245 AI cost. * **Carrier**: \$0.01/min, but 30 seconds → 1 minute rounded up → \$0.01. * \$0.01 at your plan’s \$0.49 rate = 0.0204 “plan minutes” used (Or if you do a simpler approach, \$0.01 / \$0.49 = 0.0204 minutes) * **Total**: 0.5 (AI) + 0.0204 (carrier) = 0.5204 minutes from your plan. If you had 10 included, you’d have 9.4796 left. ### Example B (Inbound Call, Pro+ Plan) * **AI Rate**: \$0.29/min * **Call Duration**: 90 seconds → 1.5 AI minutes = \$0.435 AI cost. * **Carrier**: Suppose inbound is \$0.015/min, rounding up to 2 minutes if the call was 1.5 min. That’s \$0.03 total. * \$0.03 / \$0.29 = 0.1034 minutes from your plan. * **Total**: 1.5 (AI) + 0.1034 (carrier) = 1.6034 minutes deducted. *** ### FAQ * **Do I pay double if user + AI talk simultaneously?**\ **No**, it’s based on total call duration, not per speaker concurrency. * **What if someone picks up then instantly hangs up?**\ The AI might register a few seconds; cost is fractional for the AI, but carrier may round up to 1 minute. *** **Bottom Line**\ All calls burn **AI time** plus a **converted carrier cost** from your plan’s minute balance. Keep track of usage in your dashboard, top up if needed, and choose the plan that best suits your volume. # Managing Your Numbers Source: https://docs.lacy.ai/provisioning/managing-numbers Learn how to view, label, release, and manage your provisioned phone numbers After you meet any compliance requirements and purchase or provision your numbers: 1. **View All Numbers** * In your dashboard → **Numbers**. You'll see monthly costs, expiration/renewal dates, etc. 2. **Releasing or Renewing** * Release a number if you no longer need it. * Renewals happen automatically each month unless you release it. 3. **Scaling Up** * If you need multiple lines for different markets, repeat the provisioning steps. # SIP Integration Source: https://docs.lacy.ai/provisioning/sip-integration Connect your existing phone system and numbers to lacy.ai This guide will help you understand and set up SIP integration. If you need clarification during setup, our support team is available to assist. ## What is SIP Integration? SIP (Session Initiation Protocol) integration allows you to connect your existing phone system to lacy.ai. Think of it as building a bridge between your current phone setup and our AI platform. This means you can: * Use your existing phone numbers with our AI assistants * Keep your current phone system and provider * Make and receive calls through your existing setup * Maintain full control of your numbers * Reduce carrier costs by using local VoIP providers with better rates ## How It Works When you integrate your phone system with lacy.ai: 1. **Inbound Calls**: Calls to your numbers are routed through your phone system to our AI assistants 2. **Outbound Calls**: Our AI assistants can make calls appearing from your numbers 3. **Management**: You keep managing your numbers through your current provider 4. **Cost Efficiency**: Leverage your VoIP provider's competitive rates for call termination ## Integration Options You can connect your phone system to lacy.ai in two ways: ### 1. PBX Extension Integration This is like giving our AI platform an "extension" on your phone system: * **What it is**: Connect a specific extension from your PBX/phone system * **Perfect for**: * Testing the integration * Routing specific extensions to AI * Simple setup with existing phone systems * **You'll need**: * Your extension number (e.g., 1000) * Extension username and password * Your PBX server address (e.g., pbx.yourcompany.com) **Real-world example**: ``` Your office uses extensions 1001-1010 for staff You set up extension 1011 for the AI assistant Calls to 1011 go to the AI The AI can make calls appearing as extension 1011 ``` ### 2. Direct Number Integration This connects specific phone numbers to our platform: * **What it is**: Route one or more of your phone numbers to our AI * **Perfect for**: * Dedicated AI phone lines * Customer service numbers * Sales or support lines * **You'll need**: * Your phone number (e.g., +1 555 0123) * SIP credentials from your provider * Provider's SIP server address **Real-world example**: ``` You have a support number: +1 555 0123 You connect this number to our AI All calls to +1 555 0123 are handled by the AI assistant The AI makes outbound calls showing +1 555 0123 ``` ## Authentication & Call Flow ### Bidirectional Configuration The SIP integration uses the same credentials for both inbound and outbound calls: * **Inbound Calls** (VoIP → lacy.ai): ``` Your VoIP system authenticates using username/password ↓ Calls reach our platform ↓ AI assistant answers ``` * **Outbound Calls** (lacy.ai → VoIP): ``` AI initiates call ↓ Our platform authenticates to your VoIP using same username/password ↓ Call reaches destination ``` ### Credential Synchronization For the integration to work properly: 1. The credentials you set in lacy.ai dashboard must match exactly with your VoIP configuration 2. The same username/password combination is used for both directions 3. Any changes to credentials must be updated in both systems If you change credentials in your VoIP system, remember to update them in lacy.ai dashboard (and vice versa) to maintain the connection. ## Setting Up Your Integration ### Step 1: Gather Your Information For PBX Extension: ``` Extension number: e.g., 1000 Server address: e.g., pbx.company.com Username: Your extension username Password: Your extension password ``` For Direct Number: ``` Phone number: e.g., +1 555 0123 SIP server: e.g., sip.provider.com Username: Provided by your phone company Password: Provided by your phone company ``` ### Step 2: Configure in Dashboard 1. Go to your lacy.ai dashboard 2. Navigate to **Phone Numbers** 3. Click "Integrate SIP trunk" 4. Fill in your details based on your integration type ### Step 3: Number Format Configuration This tells our system how to format phone numbers when making calls. Choose based on your provider's requirements: 1. **International with +** ``` Format: +[country][number] Example: +1 202 555 0123 SIP Request: sip:+12025550123@your.pbx.com ``` 2. **International without +** ``` Format: [country][number] Example: 1 202 555 0123 SIP Request: sip:12025550123@your.pbx.com ``` 3. **National format** ``` Format: [local number] Example: 0741926265 SIP Request: sip:0741926265@your.pbx.com ``` ### Step 4: Verify Setup After configuration: 1. Make a test call to your number/extension 2. Check that the AI assistant answers 3. Use the test call feature to verify outbound calling ## Security Requirements Your SIP credentials need to be secure: * **Username**: Your extension number or provider-supplied username * **Password must have**: * 12 or more characters * Numbers * Upper and lowercase letters * Special characters recommended ## Common Questions Yes! You can integrate multiple extensions or direct numbers with our platform. No, you maintain full control through your current provider. The integration only establishes a connection between your system and our platform. Yes, you can set up routing rules in your phone system to decide which calls go to the AI and which go to your regular phone system. You can update your integration settings anytime through the dashboard. All configuration options remain accessible after initial setup. By using your own VoIP provider, you can take advantage of their local rates and existing agreements, which are often more competitive than standard carrier rates. This is especially beneficial for international calls. *** Need help setting up? Our support team specializes in helping customers integrate their phone systems. We'll guide you through the entire process, ensuring a smooth setup with your specific phone system configuration. # DIDLogic Integration Source: https://docs.lacy.ai/provisioning/sip-trunking/didlogic A step by step guide to connect your DIDLogic account via SIP trunking Log in to your DIDLogic dashboard at [app.didlogic.com](https://app.didlogic.com) and go to the **BUY** tab. Search by country and area code, add a number to your cart, and complete checkout. Your new number will appear under the **PURCHASED** tab. DIDLogic BUY tab with country search Go to the **SIP** tab and click **Edit** on your SIP account. DIDLogic SIP tab showing accounts list DIDLogic Edit SIP account Note the **SIP account number** (e.g., `12345`) — this is your **username** that you will use in lacy. Set a password in both the **Password** and **Confirm Password** fields — you will use this same password when importing the number to lacy. DIDLogic SIP password fields Enable **"Restrict to authorized IPs"** and add the IP address `34.195.177.252`, then click **Add** and **Update**. DIDLogic Restrict to authorized IPs with 34.195.177.252 added Scroll down to find your region and copy the **SIP URI** from the regional gateway list. You will need this for the outbound settings in lacy. DIDLogic regional SIP URI selection Go to the **PURCHASED** tab and click **Destination** next to your phone number. DIDLogic Purchased numbers list Delete any existing destination, then change the selector from "SIP device" to **"SIP URI"**. DIDLogic selecting SIP URI type Enter the SIP URI in the following format: ``` @5wed79aeavr.sip.livekit.cloud ``` For example, if your number is `+15551234567`, enter: ``` 15551234567@5wed79aeavr.sip.livekit.cloud ``` Click **Add**. Go to your lacy dashboard → **Your Phone Numbers** → **"Integrate SIP trunk"** and fill in your details: ``` Phone number: Your DIDLogic number in E.164 format (e.g., +15551234567) Username: The SIP account number from Step 2 (e.g., 12345) Password: The password you set in Step 2 ``` Fill in SIP integration details Under **Outbound settings**, paste the regional SIP URI you copied in Step 2. Set **Number format** to **"International with + in front"** and enable **"Outbound call will come from a fixed IP address"**. Outbound SIP settings Under **Inbound settings**, select **"IP Address"** as the authorization type. Add the IP address of your chosen DIDLogic regional gateway from the table below: | Gateway | IP Address | | -------------------- | --------------- | | sip.nl.didlogic.net | 89.149.192.7 | | sip.uk.didlogic.net | 23.19.63.1 | | sip.se.didlogic.net | 5.150.254.205 | | sip.de.didlogic.net | 157.230.96.24 | | sip.fr.didlogic.net | 159.8.84.235 | | sip.hk.didlogic.net | 188.42.84.76 | | sip.sg.didlogic.net | 188.42.84.76 | | sip.au.didlogic.net | 119.9.12.222 | | sip.nz.didlogic.net | 131.203.181.17 | | sip.ir.didlogic.net | 161.202.135.82 | | sip.ca.didlogic.net | 138.197.143.154 | | sip.lax.didlogic.net | 185.118.62.77 | | sip.nyc.didlogic.net | 192.241.183.87 | | sip.za.didlogic.net | 102.130.116.205 | | sip.br.didlogic.net | 169.57.132.146 | Inbound SIP settings Select the **Country** where your SIP trunk is located. SIP country selection Make a test call to your number to verify inbound calling, then use the test call feature to verify outbound calling. ## Security Requirements Your SIP credentials need to be secure. Your password must have at least 12 characters, include numbers, upper and lowercase letters, and special characters are recommended. ## Common Issues * **Verify the SIP URI** — Make sure you copied the correct regional SIP URI from Step 2. Remove any trailing spaces. * **Check your username** — The username is the numeric SIP account number (e.g., `12345`), not your email address or account name. * **Check your password** — Ensure the password in lacy matches exactly what you set in the DIDLogic SIP account settings. * **Verify IP whitelist** — Make sure `34.195.177.252` is added to the authorized IPs in your DIDLogic SIP account. * **Verify the SIP URI destination** — In DIDLogic, make sure the destination is set to SIP URI (not SIP device) and the format is correct: `@5wed79aeavr.sip.livekit.cloud` * **Check the IP whitelist in lacy** — Make sure the IP address you added in the lacy inbound settings matches the regional gateway you are using. Refer to the gateway IP table in Step 4. *** Need help setting up? Our support team specializes in helping customers integrate their phone systems. We'll guide you through the entire process, ensuring a smooth setup with your specific phone system configuration. # Twilio Integration Source: https://docs.lacy.ai/provisioning/sip-trunking/twilio A step by step guide to connect your Twilio phone numbers via Elastic SIP Trunking This guide walks you through connecting your Twilio phone numbers using Elastic SIP Trunking. You'll create a SIP trunk in Twilio, assign your numbers to it, and import them into the platform. **One-time setup:** You only need to create the Elastic SIP Trunk once (Step 1). For each additional phone number after that, you simply add it to your existing trunk (Step 2) and import it (Step 3). ## Step 1: Create Elastic SIP Trunking 1. Log in to your [Twilio Console](https://console.twilio.com) 2. In the **search bar** at the top of the dashboard, type **"Elastic SIP Trunking"** and click the result Alternatively, click the **"..."** menu on the left sidebar for **All Products & Services**, then scroll down and click **Elastic SIP Trunking** 3. Click **Create new SIP Trunk** and give it a **Friendly name** (e.g., `lacy`) Create Elastic SIP Trunking ### Configure Termination (for outbound calls) 4. In the left sidebar, click **Termination** 5. In the **Termination SIP URI** field, enter only a unique name — for example, `yourcompany` Twilio automatically appends `.pstn.twilio.com`, so your full URI will be: `yourcompany.pstn.twilio.com` Setup Termination **Only enter the name part** (e.g., `yourcompany`). The `.pstn.twilio.com` suffix is pre-filled by Twilio. Do not paste a full URI or a localized URI (like `london-ix`) into the input field — this will create a malformed address that won't work. The general URI automatically routes traffic to the nearest region. **Save this URI** — you will need the full Termination SIP URI (`yourcompany.pstn.twilio.com`) later when importing the number in Step 3. 6. For your SIP trunk to accept outbound requests, you need to set up authentication. Scroll down to **Authentication** and configure IP Access Control Lists: Currently the SIP server does not have a static IP, so you need to whitelist all the IP addresses in the range: Twilio New Access Control Twilio New Access Control ### Configure Origination (for inbound calls) 7. In the left sidebar, click **Origination** 8. Click **Add new Origination URI** and enter the SIP server address: ``` sip:5wed79aeavr.sip.livekit.cloud ``` Setup Origination ## Step 2: Assign Numbers to Your SIP Trunk Now assign your Twilio phone numbers to the trunk you just created. 1. In your SIP trunk, click **Numbers** in the left sidebar 2. Click **Add a Number** and select the phone number(s) you want to use Move numbers to Elastic SIP Trunking For future numbers, you only need to repeat this step and Step 3 below. The trunk configuration from Step 1 is already done. ## Step 3: Import Numbers to the Platform Now import the number so the platform knows how to route calls. 1. Go directly to the Phone Numbers page in your dashboard: **[https://app.lacy.ai/phone-numbers](https://app.lacy.ai/phone-numbers)** If it takes you to the login page, log in first — it will automatically redirect you to the Phone Numbers page. 2. Click **"Integrate SIP trunk"** (top-right corner of the page) Import numbers via SIP trunk 3. Fill in your phone number and SIP credentials: ``` Phone number: e.g., +1 555 0123 Username: Your extension username Password: Your extension password ``` Fill in your details based on your integration type 4. Enter the **Termination SIP URI** you created in Step 1: ``` Server address: e.g., yourcompany.pstn.twilio.com ``` Twilio Connect Number via SIP 5. Select the **Authorization type**. If you configured IP-based authentication in Step 1, select IP and add these addresses: ``` 54.244.51.0 54.244.51.1 54.244.51.2 54.244.51.3 54.172.60.0 54.172.60.1 54.172.60.2 54.172.60.3 ``` Credentials IP Type 6. Select the **country** where your SIP trunk is located. SIP Country selection ## Step 4: Verify Setup After configuration: 1. Make a test call to your number 2. Check that the AI assistant answers 3. Use the test call feature to verify outbound calling ## Security Requirements Your SIP credentials need to be secure: * **Username**: Your extension number or provider-supplied username * **Password must have**: * 12 or more characters * Numbers * Upper and lowercase letters * Special characters recommended ## Common Issues No. You only create the Elastic SIP Trunk once (Step 1). For each new number, simply assign it to your existing trunk (Step 2) and import it into the platform (Step 3). * **Check your Termination SIP URI** — make sure there are no spaces and it reads correctly (e.g., `yourcompany.pstn.twilio.com`). Verify you only entered the name part in Twilio and didn't accidentally include a localized URI or duplicate the `.pstn.twilio.com` suffix. * **Check your username and credentials** — the username is **not** the same as the "Friendly name" in the credential list. Double-check you entered the actual username. Twilio outbound not work 1. In the Twilio Console search bar, search for **"geo"** to find **Voice Geographic Permissions**. Twilio setup dialing international 2. Choose **"Elastic SIP Trunking"** in the selector, then select the countries you want to dial. Twilio choose Elastic SIP Trunking for international dialing *** Need help setting up? Our support team specializes in helping customers integrate their phone systems. We'll guide you through the entire process, ensuring a smooth setup with your specific phone system configuration. # Zadarma Integration Source: https://docs.lacy.ai/provisioning/sip-trunking/zadarma A step by step guide to connect your Zadarma phone numbers via SIP trunking This guide walks you through connecting your Zadarma phone numbers using SIP trunking. Zadarma offers two connection types — **PBX** and **SIP Direct** — and the setup differs slightly for each. **Which type do you have?** If you use Zadarma's virtual PBX with extensions (e.g., 100, 101), you have **PBX**. If you use a standalone SIP account without a PBX, you have **SIP Direct**. Select your connection type below and follow the steps: ## Step 1: Gather Your SIP Credentials 1. Log in to your [Zadarma Dashboard](https://my.zadarma.com) 2. Go to **My PBX** → **Extensions** Zadarma My PBX Extensions 3. Find your extension and note these details: ``` Extension: e.g., 510000-100 Server address: pbx.zadarma.com Username: Your extension username (e.g., 510000-100) Password: Your extension password Phone number: Your phone number (e.g., +521151900966) ``` Zadarma PBX Extension Settings ## Step 2: Set Up External Server (for inbound calls) To receive inbound calls, you need to configure an **External Server** in Zadarma that forwards incoming calls to the platform's SIP server. 1. In your [Zadarma Dashboard](https://my.zadarma.com), go to **Settings** → [**Virtual phone numbers**](https://my.zadarma.com/dirnum/active/) Zadarma Settings Virtual phone numbers 2. Find the number you want to connect and click the **gear icon** to open its settings Zadarma Settings Virtual phone numbers Gear Icon 3. Click **External Server** and enable the **SIP URI** checkbox Zadarma PBX External Server SIP URI configuration 4. Enter the SIP server address using your **phone number with the `+` prefix**: ``` +YOUR_PHONE_NUMBER@5wed79aeavr.sip.livekit.cloud ``` For example, if your number is `+551151900966`: ``` +521151900966@5wed79aeavr.sip.livekit.cloud ``` Zadarma PBX Server Address configuration 5. Click **Show IP** below the server address to reveal Zadarma's IP addresses (e.g., `185.45.152.216`, `185.45.155.33`) Zadarma PBX Show IP button Zadarma PBX IP addresses revealed **Save these IPs** — you will need them in Step 3 when configuring inbound authorization in the platform. **PBX users must use the phone number with `+`** in the External Server address. Using the PBX extension number (e.g., `533177-100`) will **not** work for inbound calls. ## Step 3: Import Numbers to the Platform Now import the number so the platform knows how to route calls. 1. Go directly to the Phone Numbers page in your dashboard: **[https://app.lacy.ai/phone-numbers](https://app.lacy.ai/phone-numbers)** If it takes you to the login page, log in first — it will automatically redirect you to the Phone Numbers page. 2. Click **"Integrate SIP trunk"** (top-right corner of the page) Import numbers via SIP trunk 3. Fill in your phone number and SIP credentials: ``` Phone number: e.g., +551151900966 Username: Your PBX extension (e.g., 533100-100) Your SIP Extension: Your phone number (e.g., +551151900966) Password: Your PBX extension password ``` **PBX users:** The **Username** is your PBX extension (e.g., `533100-100`). The **"Your SIP Extension"** field must be your **phone number** — this must match the number you used in the External Server address in Step 2. PBX Extension credentials 4. Enter the **Server address** for outbound calls: ``` pbx.zadarma.com ``` Zadarma outbound server address 5. Select the **Authorization type**. Select **IP** and add the Zadarma IP addresses you noted earlier from **Show IP** in Step 2. Zadarma IP Authorization 6. Select the **country** where your SIP trunk is located. SIP Country selection ## Step 4: Verify Setup 1. Make a test call to your number 2. Check that the AI assistant answers 3. Use the test call feature to verify outbound calling ## Step 1: Gather Your SIP Credentials 1. Log in to your [Zadarma Dashboard](https://my.zadarma.com) 2. Go to **Settings** → **SIP Connection** Zadarma SIP Settings 3. Note these details: ``` Server address: sip.zadarma.com Extension: Your SIP extension number (e.g., 247000) Username: Your SIP username (the same as your extension e.g., 247000) Password: Your SIP password ``` Zadarma SIP Connection Settings ## Step 2: Set Up External Server (for inbound calls) To receive inbound calls, you need to configure an **External Server** in Zadarma that forwards incoming calls to the platform's SIP server. 1. In your [Zadarma Dashboard](https://my.zadarma.com), go to **Settings** → [**Virtual phone numbers**](https://my.zadarma.com/dirnum/active/) Zadarma SIP Settings Virtual phone numbers 2. Find the number you want to connect and click the **gear icon** to open its settings Zadarma SIP Settings Virtual phone numbers Gear Icon 3. Click **External Server** and enable the **SIP URI** checkbox Zadarma SIP External Server SIP URI configuration 4. Enter the SIP server address using your **SIP extension number**: ``` YOUR_EXTENSION@5wed79aeavr.sip.livekit.cloud ``` For example, if your extension is `247000`: ``` 247000@5wed79aeavr.sip.livekit.cloud ``` Zadarma SIP URI 5. Click **Show IP** below the server address to reveal Zadarma's IP addresses (e.g., `185.45.152.216`, `185.45.155.33`) Zadarma SIP Show IP button Zadarma SIP IP addresses revealed **Save these IPs** — you will need them in Step 3 when configuring inbound authorization in the platform. ## Step 3: Import Numbers to the Platform Now import the number so the platform knows how to route calls. 1. Go directly to the Phone Numbers page in your dashboard: **[https://app.lacy.ai/phone-numbers](https://app.lacy.ai/phone-numbers)** If it takes you to the login page, log in first — it will automatically redirect you to the Phone Numbers page. 2. Click **"Integrate SIP trunk"** (top-right corner of the page) Import numbers via SIP trunk 3. Fill in your phone number and SIP credentials: ``` Phone number: e.g., +1 555 0123 Your SIP Extension: Your SIP extension number (e.g., 247000) Username: Your SIP username (the same as your extension e.g., 247000) Password: Your SIP password ``` SIP Direct credentials 4. Enter the **Server address** for outbound calls: ``` sip.zadarma.com ``` Zadarma SIP outbound server address 5. Select the **Authorization type**. Select **IP** and add the Zadarma IP addresses you noted earlier from **Show IP** in Step 2. Zadarma IP Authorization 6. Select the **country** where your SIP trunk is located. SIP Country selection ## Step 4: Verify Setup 1. Make a test call to your number 2. Check that the AI assistant answers 3. Use the test call feature to verify outbound calling ## Security Requirements Your SIP credentials need to be secure: * **Username**: Your extension number or provider-supplied username * **Password must have**: * 12 or more characters * Numbers * Upper and lowercase letters * Special characters recommended ## Call Transfer Limitations **Zadarma does not support SIP REFER**, which means standard cold transfer will not work out of the box. Warm transfer works automatically — the platform handles it via SIP INVITE. For **cold transfer**, you can use the **Custom SIP Transfer** option in your assistant's transfer settings. Set the custom SIP URI to: ``` sip:+DESTINATION_NUMBER@sip.zadarma.com ``` For example: `sip:+15557654321@sip.zadarma.com` Make sure the number is in international E.164 format with the `+` prefix. Do **not** use `tel:` URI format. ## Common Issues * **Check your External Server address** — make sure the format matches your connection type: * **PBX**: `+YOUR_PHONE_NUMBER@5wed79aeavr.sip.livekit.cloud` (phone number with `+`) * **SIP Direct**: `YOUR_EXTENSION@5wed79aeavr.sip.livekit.cloud` (extension number) * **Verify the External Server is enabled** in Zadarma's settings * **Check that the "Your SIP Extension" field** in the platform matches: phone number for PBX, extension for SIP Direct * **Check the Server address** — it should be `pbx.zadarma.com` for PBX or `sip.zadarma.com` for SIP Direct * **Verify your credentials** — make sure the username and password match what's shown in your Zadarma SIP settings * **Check your Zadarma balance** — outbound calls require sufficient credit Zadarma does not support SIP REFER. To enable cold transfer: 1. Go to your assistant's **Transfer Phone Call** tool settings 2. Enable **"Custom SIP transfer"** (under Advanced) 3. Set the SIP URI to `sip:+DESTINATION_NUMBER@sip.zadarma.com` If cold transfer still fails, verify the destination number is in international format with `+`. * **PBX** is recommended if you need multiple extensions, call routing rules, IVR menus, or other PBX features in Zadarma * **SIP Direct** is simpler if you just need a single number connected without PBX features Both work equally well for inbound and outbound AI calls. *** Need help setting up? Our support team specializes in helping customers integrate their phone systems. We'll guide you through the entire process, ensuring a smooth setup with your specific phone system configuration. # Supported Countries Source: https://docs.lacy.ai/provisioning/supported-countries Learn about phone number availability and provisioning across different countries # Phone Number Availability Lacy.ai can provide phone numbers in **any country**. There are two ways to get a number: ## 1. Instant Provisioning Numbers in these regions are available directly from your dashboard: * United States * Canada * United Kingdom * Most Western European countries * Australia * New Zealand * And more... Simply go to **Phone Numbers** in your dashboard and select from the dropdown. ## 2. Custom Provisioning Need a number in a country not shown in the dropdown? No problem! We can help: 1. Contact us via the live chat 2. Let us know: * Which country you need * How many numbers * Your use case (inbound/outbound) 3. We'll handle the provisioning process for you ## Documentation Requirements * **Standard Countries** (in dropdown): Usually just basic account verification * **Other Countries**: May need: * Business registration * Local address * Industry-specific licenses * Other compliance documents We'll guide you through exactly what's needed for your specific case. ## Timeframes * **Dropdown Countries**: Instant provisioning * **Custom Provisioning**: Usually 1-3 business days, depending on: * Country requirements * Document verification * Local regulations *** **Need a specific number?** Just reach out via live chat, and we'll help you get set up in any country you need! # Data Retention Source: https://docs.lacy.ai/settings/data-retention Configure GDPR-compliant data retention periods for your account Data retention settings let you control how long different types of data are stored in your account. This helps you stay compliant with GDPR and other data protection regulations. ## Overview You can configure retention periods for four resource types, each independently adjustable between 1 and 24 months. Data older than the configured retention period is automatically removed on a recurring schedule — no manual action needed. ## Resource Types | Resource | Description | Default | | ---------------- | ----------------------------------------- | --------- | | **Calls** | Call records, transcripts, and recordings | 24 months | | **Leads** | Lead records within campaigns | 24 months | | **Chat History** | WhatsApp and web widget conversations | 24 months | | **SMS** | SMS message records | 24 months | ## Configuring Retention 1. Navigate to your **Profile** settings 2. Find the **Data Retention** section (alongside timezone settings) 3. Set your preferred retention period for each resource type (1-24 months) 4. Save your changes ## How It Works * **Automatic cleanup**: A scheduled process removes data older than your configured retention period * **Soft deletion**: Records are soft-deleted, not permanently destroyed immediately * **Per-resource control**: Each resource type has its own independent retention period ## Best Practices * **Review local regulations**: Different regions may require specific retention periods (e.g., GDPR recommends keeping data only as long as necessary) * **Start with defaults**: The 24-month default provides a good balance for most use cases * **Shorten for sensitive data**: If you handle sensitive customer information, consider shorter retention periods # AI Behavior Issues Source: https://docs.lacy.ai/troubleshooting/ai-behavior Troubleshoot and optimize your AI assistant's conversation behavior and responses Your AI's behavior can be fine-tuned through a combination of engine settings and prompt adjustments. ## Engine Settings Impact Different AI engine modes affect behavior: ### Fast Engine * Quick, more conversational responses * May occasionally miss context * Best for: Simple interactions, sales calls * Works great with Filler Audio for natural flow ### Standard Engine * Balanced understanding and speed * Good for most use cases * Default recommendation for new assistants ### Accurate Engine * Deep context understanding * More thoughtful responses * Best for: Complex support, detailed information gathering * May have longer pauses between responses ## Common Issues & Solutions 1. **AI Misunderstanding Context** * Switch to Accurate Engine * Add more context to your prompt * Include example conversations 2. **Unnatural Conversation Flow** * Enable Filler Audio for smoother transitions * Use Fast Engine for quicker back-and-forth * Add conversation examples in your prompt 3. **Repetitive Responses** * Review and update your system prompt * Add variation examples * Consider switching to Standard/Accurate engine ## Optimization Tips * **Sales Calls**: Fast Engine + Filler Audio for engagement * **Customer Support**: Accurate Engine for better problem solving * **Lead Qualification**: Standard Engine for balanced performance ## Testing Changes After adjusting settings: 1. Use the test call feature 2. Try different conversation scenarios 3. Monitor call recordings for improvement *** **Tip:** Start with Standard Engine and adjust based on your specific needs and feedback. # Billing & Credits Source: https://docs.lacy.ai/troubleshooting/billing Troubleshoot billing issues, understand charges, and learn about refund policies and usage tracking ## 1. Unexpected Charges? * **Large Outbound Campaign?** Possibly your calls used more minutes than expected. * **Did You Rent Multiple Numbers?** Monthly fees stack if you keep multiple lines active. ## 2. Refund / Cancellation Policies * Check your plan's terms. Usually usage-based minutes are non-refundable because resources are used in real-time. * If you have a monthly plan with included minutes, you can often cancel future renewals but not partial months. ## 3. Tracking Usage * **Dashboard**: Real-time usage counters show minutes consumed. * **Notifications**: Set alerts if you near a monthly threshold. *** **Tip:** If usage spiked unexpectedly, see call logs or see if an employee triggered a large campaign by mistake. # Cal.com Issues Source: https://docs.lacy.ai/troubleshooting/cal-com Troubleshoot common Cal.com integration issues Solutions for common Cal.com integration problems. ## Connection Issues ### Invalid API Key **Problem:** Events not loading or sync fails **Solution:** * Verify API key is active in Cal.com → Settings → Developer → API Keys * Ensure key includes `cal_live_` prefix * Generate a new API key if needed ### Events Not Loading **Problem:** Event dropdown is empty after entering API key **Solution:** * Check API key is correct * Click outside the API key field to trigger event loading * Refresh the page if events still don't appear * Verify you have events created in Cal.com ## Sync Issues ### Sync Event Failed **Problem:** "Sync Event" button fails or shows error **Solution:** 1. Click **"Troubleshoot"** button instead 2. This resets all booking fields to correct configuration 3. Verify changes in Cal.com event settings ### Field Configuration Errors **Problem:** Getting errors about required fields or missing fields **Solution:** * Click **"Troubleshoot"** to reset fields * Only name, email, phone should be required * All other fields (location, guests, etc.) should be optional ## Booking Failures ### No Calendar Invites Sent **Problem:** Bookings succeed but customer doesn't receive invite **Solution:** * Define `email` variable in [assistant settings](/ai-assistants/settings/prompt-and-tools#call-variables) * Pass customer email when creating leads * Verify email format is valid ### Phone Number Missing **Problem:** Phone number doesn't appear in calendar events **Solution:** * Click **"Sync Event"** or **"Troubleshoot"** button * This automatically adds the phone field to the event * Phone number is included after sync ### Booking Time Zone Issues **Problem:** Appointments scheduled at wrong time **Solution:** * Check time zone in Cal.com event settings * Verify assistant is getting correct time from customer * Test with specific time mentions during call ## Testing Issues ### Web Call Bookings Fail **Problem:** Bookings work inconsistently with web calls **Solution:** * Use real phone calls for testing (not web calls) * Web calls may not pass phone variable correctly * When using web calls, provide phone in international format with + prefix (e.g., "+1 555-123-4567") * Phone calls ensure all variables are transmitted correctly ### Multiple Calendars Not Working **Problem:** Only one calendar works or events conflict **Solution:** * Each calendar should have different event selected * Use distinct event names (e.g., "15min", "30min") * Sync each event separately after adding ## Getting Help If issues persist: 1. Check call transcripts for booking attempts 2. Verify Cal.com event shows in Cal.com dashboard 3. Test with simple phone call booking 4. Contact support with: * Error message screenshot * Cal.com event settings screenshot * Call transcript showing booking attempt # Calendly Issues Source: https://docs.lacy.ai/troubleshooting/calendly Troubleshoot common Calendly integration issues Solutions for common Calendly integration problems. ## Connection Issues ### OAuth Authorization Fails **Problem:** Unable to connect Calendly account **Solution:** * Try connecting in an incognito/private browser window * Verify you have admin access to your Calendly account * Check that third-party app permissions are enabled in Calendly ### Events Not Loading **Problem:** Event dropdown is empty after connecting **Solution:** * Click **"Load Events"** button to fetch event types * Wait for the sync to complete (may take a few seconds) * Refresh the page if events still don't appear * Verify you have active event types in your Calendly account ## Booking Failures ### Location Kind Error **Problem:** "Failed to book appointment: Specified location kind is not configured for this event type" **Cause:** Your Calendly event type has a location setting (e.g., Google Meet, Zoom) that doesn't match what the voice agent uses when booking. **Solution:** 1. Log in to your Calendly account at [calendly.com](https://calendly.com) 2. Go to **Event Types** and click on the event type linked to your assistant 3. Click **Edit** on that event type 4. Scroll to the **Location** section 5. Change the location to one of these options: * **"Custom"** — this is the safest option and works in all cases * **"Phone Call" → "Inbound call"** — also works well for voice AI use cases * If you have multiple locations, make sure **"Custom"** is included as one of the options 6. **Save** the event type 7. Try booking again through the assistant If your event type is set to a video conferencing location only (Google Meet, Zoom, Microsoft Teams), bookings will fail because the voice agent doesn't generate meeting links. Either switch to "Custom" or add "Custom" as an additional location option. ### Booking Time Zone Issues **Problem:** Appointments scheduled at wrong time **Solution:** * Check the time zone in your Calendly event settings * Verify the assistant's time zone is configured correctly * Test with specific time mentions during a call ## Testing Issues ### Web Call Bookings Fail **Problem:** Bookings work inconsistently with web calls **Solution:** * Use real phone calls for testing (not web calls) * Web calls may not pass the phone variable correctly * When using web calls, provide the phone number in international format with + prefix (e.g., "+1 555-123-4567") ## Getting Help If issues persist: 1. Check call transcripts for booking attempts 2. Verify the event type shows correctly in your Calendly dashboard 3. Test with a simple phone call booking 4. Contact support with: * Error message screenshot * Calendly event type settings screenshot (especially the Location section) * Call transcript showing the booking attempt # Call Quality Issues Source: https://docs.lacy.ai/troubleshooting/call-quality Troubleshoot and optimize call quality, latency, and connection issues Call quality can be affected by both technical factors and AI settings. Here's how to optimize both: ## AI Engine Impact Your choice of AI engine affects perceived call quality: ### Fast Engine + Filler Audio * Minimal latency * Quick back-and-forth * Natural conversation flow * Best for most calls ### Standard/Accurate Engine * Longer processing time * More accurate responses * Better for complex conversations ## Optimization Tips * Start with Fast Engine + Filler Audio * Switch to Standard/Accurate only if needed * Monitor call recordings for quality * Test different voice models ## Quick Fixes If experiencing issues: 1. Try a test call 2. Switch to a faster engine setting 3. Enable filler audio 4. Check network connection *** **Tip:** The combination of Fast Engine and Filler Audio typically provides the best perceived call quality. # Campaign Issues Source: https://docs.lacy.ai/troubleshooting/campaigns Solve common campaign issues and optimize performance Quick solutions for common campaign problems and performance optimization tips. ## Campaign Won't Start ### Phone Number Not Configured **Error:** "Your agent does not have a phone number setup" **Solution:** 1. Go to your [Assistant Settings](/ai-assistants/settings/general#phone-number-configuration) 2. Configure a phone number (Platform number, SIP, or Caller ID) 3. Save assistant settings 4. Try starting campaign again ### Insufficient Balance **Error:** "Insufficient balance to start the campaign" **Solution:** 1. Check your account balance in billing section 2. Add funds to your account 3. Return to campaign and click start ### No Leads to Call **Error:** "No leads to call" **Solution:** 1. Add leads manually or import from CSV 2. Verify leads have valid phone numbers 3. Check that leads aren't all marked as completed 4. Ensure "Mark complete when no leads" setting matches your needs ## No Calls Being Made ### Outside Allowed Hours **Issue:** Campaign shows as running but no calls happening **Check:** * Current time is within allowed calling hours * Today is an allowed calling day * Assistant timezone matches expected schedule **Solution:** Adjust allowed hours or wait until next allowed time window ### All Leads Called **Issue:** Campaign appears idle **Check:** * All primary leads have been attempted maximum times * Secondary contacts have been tried * Goal completion status if using goal-based retry **Solution:** Add more leads or review retry settings ## Call Quality Issues ### High Failure Rate **Symptoms:** Many calls marked as "Failed" **Common causes:** * Invalid phone numbers in lead list * Network connectivity issues * Carrier restrictions **Solutions:** 1. **Clean lead data:** Remove invalid numbers 2. **Test single calls:** Try calling individual leads manually 3. **Check number format:** Ensure proper formatting (+1234567890) 4. **Contact support:** For persistent technical issues ### Low Answer Rate **Symptoms:** Most calls go to voicemail or unanswered **Optimization:** 1. **Adjust calling hours:** Try different time windows 2. **Review retry interval:** Space out attempts more 3. **Check lead quality:** Verify numbers are current 4. **Caller ID setup:** Ensure professional caller ID display ## Retry Logic Problems ### Too Many Retries **Issue:** Leads complaining about excessive calls **Solutions:** 1. **Reduce max retries:** Lower from 5 to 2-3 attempts 2. **Increase retry interval:** Space calls 2-4 hours apart 3. **Disable voicemail retry:** Accept voicemail as contact 4. **Review goal variables:** Ensure proper completion tracking ### Not Enough Retries **Issue:** Missing potential contacts with limited attempts **Solutions:** 1. **Increase max retries:** Up to 5 attempts 2. **Enable voicemail retry:** Continue until human contact 3. **Adjust retry interval:** Try different times of day 4. **Use goal-based retry:** For high-value prospects ## Goal Completion Issues ### Goal Variable Not Working **Issue:** Retry until goal completed not functioning **Requirements:** 1. **Post-call variables** must be configured in assistant 2. **Boolean variable** must exist in post-call schema 3. **Variable name** must match exactly in campaign settings 4. **AI extraction** must be working properly **Solution:** Test assistant's post-call variable extraction with manual calls ### False Goal Completion **Issue:** Leads marked complete incorrectly **Debugging:** 1. **Review call transcripts** for AI extraction errors 2. **Test variable definitions** with sample calls 3. **Adjust AI prompt** for clearer goal criteria 4. **Refine variable descriptions** in assistant settings ## Performance Optimization ### Slow Campaign Progress **Causes:** * Conservative retry intervals * Limited allowed calling hours * High failure rate reducing available leads **Solutions:** 1. **Parallel processing:** Create multiple smaller campaigns 2. **Optimize timing:** Use peak answer hours 3. **Clean data:** Remove problematic numbers 4. **Increase calling window:** Extend allowed hours ### System Resource Issues **Symptoms:** Delayed calls, processing bottlenecks **Solutions:** 1. **Reduce concurrent campaigns:** Limit active campaigns 2. **Stagger campaign starts:** Don't start multiple campaigns simultaneously 3. **Contact support:** For platform performance issues ## Lead Management Issues ### Duplicate Contacts **Issue:** Same person called multiple times from different leads **Prevention:** 1. **Data cleanup:** Remove duplicates before import 2. **Phone number validation:** Check for format variations 3. **Lead deduplication:** Use tools to identify duplicates ### Secondary Contact Confusion **Issue:** Unclear which contact was reached **Solution:** 1. **Clear naming:** Use descriptive names for secondary contacts 2. **Call notes:** Review transcripts to identify who answered 3. **Lead organization:** Group related contacts properly ## Common Error Messages ### "Campaign is already in progress" **Solution:** Campaign is already running. Pause it first to make changes. ### "Campaign is not running" **Solution:** Campaign is paused or stopped. Start it to resume calling. ### "Assistant timezone not set" **Solution:** Configure timezone in assistant settings before creating campaign. ## Getting Help ### Before Contacting Support 1. **Check error messages** for specific guidance 2. **Review campaign settings** for obvious issues 3. **Test with single lead** to isolate problems 4. **Check account status** and billing ### Information to Provide * Campaign ID and name * Error messages received * Steps taken before issue occurred * Expected vs actual behavior * Assistant and phone number configuration **Campaign delays:** Allow 10-15 minutes after starting before expecting calls to begin. The system needs time to initialize and queue leads. For additional help with campaign optimization, see [Campaign Best Practices](/campaigns/best-practices). # GoHighLevel Issues Source: https://docs.lacy.ai/troubleshooting/gohighlevel Common GoHighLevel integration problems and solutions This page covers common issues when using GoHighLevel integrations with lacy.ai. ## Appointment Scheduling Issues ### Missing API Key Error **Problem:** Getting error "missing api\_key location\_id or calendar\_id for GoHighLevel" **Solution:** 1. Go to [assistant settings](/ai-assistants/settings/prompt-and-tools#default-tools) 2. Navigate to **Appointment Scheduling** section 3. Click **Disconnect** to remove current GoHighLevel connection 4. Click **Connect** again to re-authorize 5. **Select an calendar** from the dropdown 6. **Click Save** to apply the configuration 7. **Verify** the connection shows as active after reconnecting ### Connection Problems **OAuth Authorization Fails:** * **Try incognito mode** to resolve authentication conflicts * **Verify account selection** - ensure you selected the correct GoHighLevel account * **Check permissions** - confirm you have admin access to the GoHighLevel account ### Calendar Not Appearing **Calendars don't show in assistant settings:** * **Refresh connection** by disconnecting and reconnecting * **Verify calendar setup** in your GoHighLevel account * **Check account permissions** for calendar access ### Booking Failures **Appointments not being scheduled:** * **Email Required:** Ensure the assistant has an email defined in [assistant settings](/ai-assistants/settings/prompt-and-tools#default-tools) and the lead has an email in inbound variables or from conversation. See [Email Requirement for Appointments](/ai-assistants/gohighlevel-scheduling#email-requirement-for-appointments) for detailed setup. * **Test calendar availability** - verify the calendar has open slots * **Check time zones** - ensure correct time zone configuration in both systems * **Review assistant logs** - check call transcripts for booking attempts * **Verify calendar settings** in GoHighLevel for booking restrictions ### Data Mapping Problems **Lead data not syncing correctly:** * **Verify field mapping** in automation platform * **Check required fields** in GoHighLevel * **Test with sample data** before live campaigns ## Getting Help If these solutions don't resolve your issue: 1. **Check call transcripts** to see exactly what the AI attempted 2. **Test the integration** with a simple appointment booking 3. **Contact support** with specific error messages and screenshots **Common Support Information Needed:** * Screenshot of the error message * Calendar configuration details * Assistant settings configuration # Leads Issues Source: https://docs.lacy.ai/troubleshooting/leads Solve common lead management issues and import problems Quick solutions for common lead management problems and import issues. ## Lead Import Issues ### Import Fails Completely **Error:** "Import failed" or "File format not supported" **Solutions:** 1. **Check file format:** Use CSV or Excel files only 2. **Verify campaign selection:** Ensure a campaign is selected for import 3. **File size limits:** Keep files under 10MB for optimal performance 4. **Encoding issues:** Save CSV with UTF-8 encoding ### No Leads Imported **Issue:** Import completes but no leads appear **Solutions:** 1. **Column mapping:** Verify you mapped the phone number column during import 2. **Data validation:** Check that phone numbers are in correct format 3. **Empty rows:** Remove empty rows from file 4. **Required fields:** Ensure phone number column contains valid data 5. **File headers:** Ensure your CSV/Excel has a header row (any names work) ### Partial Import Success **Issue:** Some leads imported, others failed **Solutions:** 1. **Download error report:** Check failed rows for specific issues 2. **Phone number format:** Ensure international format (+1234567890) 3. **Duplicate detection:** Remove duplicate phone numbers 4. **Invalid data:** Fix malformed phone numbers or missing required data ### Processing Delays **Issue:** Import shows as processing for extended time **Explanation:** * Large files are processed in background * Processing time increases with file size * System queues multiple imports **Solutions:** 1. **Wait for completion:** Check notifications for updates 2. **Break up large files:** Split into smaller batches (500-1000 leads) 3. **Contact support:** If processing exceeds 30 minutes ## Lead Management Issues ### Lead Not Appearing in Campaign **Issue:** Imported lead doesn't show in campaign **Check:** * Lead status (should be "Created" or "Scheduled") * Campaign filters or search settings * Lead marked as completed accidentally **Solutions:** 1. **Reset lead status:** Change status to "Created" to re-queue 2. **Verify campaign assignment:** Check lead is assigned to correct campaign 3. **Refresh interface:** Reload campaign page ### Invalid Phone Numbers **Issue:** Phone numbers rejected during import **Common formats:** * **Correct:** +1234567890 (international format) * **Incorrect:** (123) 456-7890, 123-456-7890, 1234567890 **Solutions:** 1. **Standardize format:** Convert all numbers to +1234567890 format 2. **Remove formatting:** Strip spaces, parentheses, dashes 3. **Country codes:** Add appropriate country code prefix 4. **Validation tools:** Use phone validation before import ### Duplicate Leads **Issue:** Same person appears multiple times **Prevention:** 1. **Data cleanup:** Remove duplicates before import 2. **Phone validation:** Check for format variations of same number 3. **Name matching:** Identify potential duplicates by name + phone 4. **Lead deduplication:** Use tools to identify similar entries ### Secondary Contacts Not Working **Issue:** Secondary contacts not being called **Requirements:** * Secondary contact must have valid phone number * Primary contact must reach max retries first * Campaign must be configured for secondary contacts **Solutions:** 1. **Verify setup:** Check secondary contact configuration 2. **Lead status:** Ensure primary contact has been attempted 3. **Campaign settings:** Confirm secondary contact calling is enabled ## Variable and Data Issues ### Variable Mapping Errors **Issue:** Custom variables not importing correctly **Solutions:** 1. **Column mapping:** Ensure you correctly mapped each variable to its column during import 2. **Auto-detection:** System auto-detects mappings based on common column names 3. **Data types:** Ensure data matches expected variable types 4. **Required variables:** Map all variables defined in [assistant configuration](/ai-assistants/settings/prompt-and-tools#call-variables) 5. **Default values:** Unmapped variables will use assistant's default values ### Missing Lead Information **Issue:** Leads missing names, emails, or custom data **Solutions:** 1. **Column mapping:** Verify all columns are mapped correctly 2. **Optional fields:** Confirm optional fields are included in import 3. **Data validation:** Check source data for completeness 4. **Re-import:** Add missing data and re-import if needed ## Campaign Integration Issues ### Lead Status Problems **Issue:** Leads stuck in wrong status **Status meanings:** * **Created:** Ready to be called * **Scheduled:** Queued for next attempt * **Processing:** Currently being called * **Completed:** Finished or goal achieved * **Max Retries:** Reached retry limit **Solutions:** 1. **Manual status change:** Update status in leads table 2. **Campaign restart:** Pause and restart campaign if needed 3. **Retry settings:** Adjust max retries or intervals ### Variable Inheritance Issues **Issue:** Lead variables not working in calls **Solutions:** 1. **Assistant setup:** Verify variables defined in [assistant settings](/ai-assistants/settings/prompt-and-tools#call-variables) 2. **Variable names:** Ensure exact match between lead data and assistant variables 3. **Data format:** Check variable data is in expected format 4. **Test calls:** Use manual test calls to verify variable passing ## File Format Issues ### CSV Problems **Common issues:** * Wrong delimiter (use comma, not semicolon) * Missing headers in first row * Quoted fields with unescaped quotes * Mixed encoding (use UTF-8) **Solutions:** 1. **Standard format:** Use comma-separated values 2. **Headers required:** First row must contain column names 3. **Text qualification:** Use double quotes for text fields 4. **Encoding:** Save as UTF-8 encoded CSV ### Excel Problems **Common issues:** * Multiple sheets (only first sheet imported) * Merged cells causing data misalignment * Formulas instead of values * Hidden characters or formatting **Solutions:** 1. **Single sheet:** Use only first worksheet 2. **Unmerge cells:** Separate merged cells 3. **Values only:** Convert formulas to values 4. **Clean format:** Remove special formatting ## Getting Help ### Before Contacting Support 1. **Download error report:** Review specific error messages 2. **Check file format:** Verify CSV/Excel format compliance 3. **Test small batch:** Try importing 5-10 leads first 4. **Review documentation:** Check import requirements ### Information to Provide * Error messages received * Sample of import file (with sensitive data removed) * Campaign settings and requirements * Expected vs actual behavior * Assistant variable configuration **Data privacy:** Remove sensitive information from sample files before sharing with support. For lead management best practices, see [Managing Leads](/leads/managing-leads) and [Campaign Setup](/campaigns/creating-campaigns). # SIP Integration Issues Source: https://docs.lacy.ai/troubleshooting/sip-integration Troubleshoot SIP trunk connection problems and configuration issues This guide helps resolve common SIP integration issues when connecting your SIP provider to lacy.ai. ## Testing Strategy 1. **Test Outbound calls first** - easier to configure 2. **Test Inbound calls second** - after outbound works ## Outbound SIP Issues ### Connection Problems **SIP trunk not connecting for outbound calls:** 1. **Verify SIP Credentials** - username, password, server details 2. **Phone Type Selection** - check with provider for correct type 3. **Fixed IP Configuration** - usually enable and enter provider's IP address 4. **Provider Settings** - verify codec, transport, port settings ### SIP Registration Issues **Important:** lacy.ai platform: * **Does NOT send SIP REGISTER** messages to your provider * **Does NOT require receiving SIP REGISTER** from your provider * Uses **direct call authentication** instead ### Testing Outbound 1. Configure SIP trunk settings 2. **Make a direct test call** through platform 3. Check call logs for errors ## Inbound SIP Issues ### Authentication Setup **For inbound calls:** 1. **Use IP Authentication** - instead of username/password 2. **Whitelist Provider IPs** - add ALL provider IPs in our platform 3. **Provider Configuration - IMPORTANT** * **Use our FQDN domain** for routing (NOT the outbound IP) * **Send to domain** - ensures correct routing * **Do NOT send to IP** - causes routing issues ### Common Inbound Issues **Calls not reaching assistant:** * Verify all provider IPs whitelisted * Ensure provider sends to FQDN domain (not IP) * Check destination number format ## General Issues **Network problems:** * Check internet connectivity * Verify no firewall blocking SIP traffic **Provider compatibility:** * Verify provider supports direct calling (no registration) * Check IP authentication support ## Testing Checklist ### Before Contacting Support 1. **Outbound Test:** * [ ] Credentials verified * [ ] Phone type selected correctly * [ ] Fixed IP enabled with provider's IP address * [ ] Direct test call attempted 2. **Inbound Test:** * [ ] IP authentication configured * [ ] All provider IPs whitelisted in our platform * [ ] Provider configured to send to FQDN domain (not direct IP) * [ ] Test call from external number 3. **General:** * [ ] Network connectivity verified ## FAQ ### Transfer Phone Call Not Working **Q: Why is the Transfer Phone Call function not working?** **A:** If call transfers are failing, try these solutions: 1. **Check SIP Transfer Settings:** * Set transfer call to "Advanced" mode * Use SIP URI format: `sip:number@sip-server` * Example: `sip:+1234567890@sip.provider.com:5060` 2. **Verify Provider Support:** * Confirm your SIP provider supports SIP REFER * Check if transfer functionality is enabled on your account * Some providers require specific configuration for transfers 3. **Test Different Formats:** * Try with port: `sip:+1234567890@sip-server:5060` * Try without port: `sip:+1234567890@sip-server` * Try simple format: `sip:+1234567890` 4. **Verify Destination:** * Ensure the target number is reachable * Test if the number answers calls normally * Check if the number is blocked or restricted 5. **Common Issues:** * Provider doesn't support SIP REFER * Incorrect SIP URI format * Network/firewall blocking transfer requests * Destination number not answering **Troubleshooting steps:** 1. Test with a known working number first 2. Try different SIP URI formats 3. Contact your SIP provider to confirm transfer support 4. Check call logs for specific error messages ## Getting Help **When contacting support, provide:** * Error messages from call logs * SIP trunk configuration * Test results (outbound and inbound) * Transfer attempt details and SIP URI format used # Voice & Response Issues Source: https://docs.lacy.ai/troubleshooting/voice-problems Troubleshoot voice quality and response timing issues with your AI assistant If you're experiencing issues with voice quality or response timing, you can adjust several settings to optimize performance. ## Response Speed vs. Accuracy Your AI assistant has adjustable engine settings: * **Fast Engine**: Quicker responses but might be less accurate * **Standard Engine**: Balanced speed and accuracy * **Accurate Engine**: Most accurate but slower responses Adjust these in your assistant's settings under "AI Engine Configuration". ## Filler Audio To minimize silence during processing: * Enable "Filler Audio" in your assistant settings * The AI will use natural sounds (like "hmm" or "one moment") while processing * Works best with the Fast Engine for near-instant perceived responses ## Common Issues & Solutions 1. **Slow Responses** * Switch to Fast Engine mode * Enable Filler Audio * Simplify your system prompt 2. **Inaccurate Responses** * Use the Accurate Engine mode * Provide more context in your prompt * Add specific examples 3. **Voice Quality** * Try different voice models * Adjust speech speed settings * Try cloning a voice ## Optimization Tips * For sales calls: Use Fast Engine + Filler Audio for natural flow * For support: Consider Accurate Engine for better comprehension *** **Need help?** Contact support if these adjustments don't resolve your issues. # Web Widget Issues Source: https://docs.lacy.ai/troubleshooting/web-widget Troubleshoot common web widget problems and integration issues Solutions for common web widget issues. ## Widget Not Appearing **Check these:** * Embed code placed before closing `` tag * Clear browser cache (Ctrl+Shift+R or Cmd+Shift+R) * Test in incognito window * Verify plan includes web widget access * Check browser console (F12) for JavaScript errors * Re-copy embed code from widget configuration ## Voice Not Working **HTTPS Required:** Voice functionality requires HTTPS. HTTP sites can only use chat mode. **Check these:** * Website uses HTTPS (SSL certificate) * Browser has microphone permission * Microphone works in other applications * Using modern browser (Chrome, Firefox, Safari, Edge) * No VPN or firewall blocking WebRTC ## Chat Not Working **Check these:** * Browser console (F12) for errors * Assistant is properly configured * Test assistant with [Test Chat](/ai-assistants/test-chat) * Review conversation in [Conversations](/conversations/overview) page * Reload page to reset widget state ## Pre-Chat Form Issues **Check these:** * Form fields configured in widget settings * Form fields have both name and label * Widget settings were saved * Field names match assistant variables exactly * Clear browser cache and test in incognito ## Display & Styling Issues **Check these:** * Widget position setting in configuration * Website CSS might override widget styles * Change primary color for better visibility * Check if page elements cover the widget (z-index) * Test on actual mobile devices ## Configuration Not Updating **Check these:** * Click "Save widget settings" button * Copy fresh embed code after saving * Replace old embed code on your website * Clear browser cache (Ctrl+Shift+R) * Test in incognito window ## WordPress/CMS Issues **Check these:** * Use Custom HTML block/widget (not visual editor) * Add embed code before closing `` tag * Clear caching plugin cache * Temporarily disable security plugins if needed ## Still Having Issues? 1. Check browser console (F12) for errors 2. Test in incognito mode 3. Try different browser 4. Test assistant with [Test Chat](/ai-assistants/test-chat) 5. Contact support with browser console screenshot ## Related Documentation * [Web Widget Setup](/ai-assistants/web-widget) * [Test Chat Interface](/ai-assistants/test-chat) * [Viewing Conversations](/conversations/viewing-and-managing) # WhatsApp Troubleshooting Source: https://docs.lacy.ai/troubleshooting/whatsapp Common issues and solutions for WhatsApp Business integration ## Sender Issues ### Sender Stuck in "Creating" or "Pending" Status **Symptoms:** * Sender status shows "Creating" for more than a few minutes * Sender stuck on "Pending" after completing Meta signup **Solutions:** 1. **Complete the Meta signup flow** * Make sure you finished all steps in the Facebook popup * You should have seen a confirmation before being redirected back 2. **Check that you created a NEW account** * You must create a new WhatsApp Business Account during signup * Selecting an existing account will cause the integration to fail 3. **Verify phone number selection** * Did you click "Add new number" in the Meta popup? * Did you select the correct pre-verified number? 4. **Wait and refresh** * Sometimes setup takes a few minutes to complete * Refresh the page after 5 minutes 5. **Contact support** * If the issue persists for more than 30 minutes, contact support ### Verification Failed **Symptoms:** * Verification process fails * Error message about verification timeout **Solutions:** 1. **Wait before retrying** * Meta may temporarily rate-limit verification requests * Wait 5-10 minutes before trying again 2. **Try a different number** * Some numbers may have issues with Meta's verification * Try using a different phone number 3. **Check number type** * Only "normal" type numbers can be used for WhatsApp * SIP or special numbers are not supported ### Sender Shows "Offline" **Symptoms:** * Sender was working but now shows "Offline" * Cannot send or receive messages **Solutions:** 1. **Check for policy violations** * Review any emails from Meta about policy issues * High block rates or spam reports can cause offline status 2. **Check quality rating** * Low quality rating can trigger offline status * Review your messaging practices 3. **Re-authenticate** * Sometimes the connection needs to be refreshed * Contact support for assistance ### Sender Suspended **Symptoms:** * Sender status shows "Suspended" * Error mentions policy violation **Solutions:** 1. **Review suspension reason** * Check the error message for specific details * Common reasons: spam reports, prohibited content, high block rates 2. **Address the issue** * Stop any problematic messaging campaigns * Review Meta's commerce policies 3. **Appeal the suspension** * Contact Meta support through Facebook Business Manager * Provide evidence of compliance ## Template Issues ### Template Rejected **Symptoms:** * Template status shows "Rejected" * Rejection reason displayed **Common Rejection Reasons & Solutions:** | Reason | Solution | | ------------------------------ | ----------------------------------- | | Promotional content in Utility | Change category to Marketing | | Missing variable samples | Add clear, realistic sample values | | URL shorteners | Use full, branded URLs | | Aggressive language | Soften tone, remove threats | | Wrong category | Select correct category for content | ### Template Stuck in "Pending" **Symptoms:** * Template has been pending for more than 24 hours **Solutions:** 1. **Wait for review** * Marketing templates can take up to 48 hours * Complex templates may take longer 2. **Check for issues** * Review template content for potential policy issues * Ensure sample values are clear and appropriate 3. **Create an alternative** * If urgent, create a new template with different name * Use simpler content that's more likely to be approved ### Template Disabled **Symptoms:** * Previously approved template now shows "Disabled" **Causes:** * Low quality score from customer feedback * Template received too many blocks or reports **Solutions:** 1. **Review usage patterns** * Were you sending to customers who didn't expect messages? * Was the content relevant to recipients? 2. **Create a new version** * Create a new template with improved content * Consider more targeted audience selection ## Messaging Issues ### Messages Not Delivering **Symptoms:** * Template messages not reaching recipients * No delivery confirmation **Solutions:** 1. **Check phone number format** * Must be E.164 format: +\[country code]\[number] * Examples: +14155551234, +442071234567 2. **Verify recipient has WhatsApp** * The recipient must have WhatsApp installed * Number must be registered with WhatsApp 3. **Check sender status** * Sender must be "Online" to send messages * Verify in WhatsApp Senders page 4. **Review messaging limits** * New senders have limited daily capacity * Check your current tier and limits ### Free-form Messages Failing **Symptoms:** * Can't send free-form message * Error about 24-hour window **Solutions:** 1. **Check the 24-hour window** * Free-form messages only work within 24 hours of customer's last message * Use a template message instead 2. **Verify conversation exists** * The customer must have messaged you first * Check conversation history ### AI Not Responding to Messages **Symptoms:** * Customer messages arrive but no AI response * Messages appear in conversation but no reply sent **Solutions:** 1. **Check assistant connection** * Verify an assistant is connected to the sender * Ensure "AI Enabled" is turned on 2. **Review assistant status** * Assistant must be active and properly configured * Test the assistant in the test chat interface 3. **Check for errors** * Review conversation for any error messages * Check system logs for issues ## Quality & Limits ### Quality Rating Dropped **Symptoms:** * Quality rating changed from High to Medium or Low * Messaging limits reduced **Causes:** * High block rates * Spam reports from recipients * Low response rates **Solutions:** 1. **Review recent campaigns** * Check which messages triggered blocks or reports * Identify problematic content or audiences 2. **Improve targeting** * Only message customers who expect to hear from you * Remove unengaged contacts from lists 3. **Review message content** * Ensure content is valuable and relevant * Avoid aggressive or spammy language 4. **Wait for recovery** * Quality rating can improve over time with good practices * Focus on quality over quantity ### Hitting Message Limits **Symptoms:** * Can't send more messages * Error about daily limit reached **Solutions:** 1. **Wait for reset** * Limits reset daily (24-hour rolling window) * Plan campaigns within your current limits 2. **Improve quality** * Higher quality ratings unlock higher limits * Focus on engagement and avoid blocks 3. **Spread out sends** * Don't send all messages at once * Implement delays in automation flows ## Connection Issues ### Meta Signup Popup Doesn't Appear **Symptoms:** * Clicking "Login with Facebook" does nothing * Popup blocked or not loading **Solutions:** 1. **Allow popups** * Check browser popup blocker settings * Allow popups from the domain 2. **Clear cache** * Clear browser cache and cookies * Try in incognito/private mode 3. **Try different browser** * Some browsers have stricter popup policies * Chrome or Firefox typically work best ### Redirected Back Without Completing Setup **Symptoms:** * Popup closes but sender not created * Stuck on step 3 **Solutions:** 1. **Complete all steps** * The Meta flow has multiple steps * Ensure you completed all of them 2. **Check for errors** * Look for error messages in the popup * Meta may have rejected the request 3. **Retry the process** * Go back to step 2 and select your number again * Complete the Meta signup flow carefully ## Getting Help If you're still experiencing issues: 1. **Check our status page** for any ongoing platform issues 2. **Review Meta's documentation** for WhatsApp-specific policies 3. **Contact support** with: * Your sender ID * Error messages (exact text) * Steps you've already tried * Screenshots if applicable # WhatsApp Automation Source: https://docs.lacy.ai/whatsapp/automation Automate WhatsApp messaging with triggers and actions in the automation platform The automation platform integrates with WhatsApp to let you send messages automatically, trigger flows from WhatsApp events, and generate AI responses programmatically. ## Available Actions ### Send WhatsApp Template Message Send a pre-approved template message to a customer. **Use Cases:** * Send order confirmations after a purchase * Trigger appointment reminders on schedule * Deliver follow-up messages after calls * Re-engage customers who haven't responded **Configuration:** | Field | Description | | ------------------- | ------------------------------------------------- | | **Sender** | Select your WhatsApp sender (must be online) | | **Template** | Choose from approved templates | | **Recipient Phone** | Customer phone number (E.164 format: +1234567890) | | **Recipient Name** | Optional customer name for personalization | | **Variables** | Dynamic values for template placeholders | **E.164 Format** — Phone numbers must be in international format with country code. Examples: * ✅ `+14155551234` * ✅ `+442071234567` * ❌ `(415) 555-1234` * ❌ `07123456789` ### Send WhatsApp Message (Free-form) Send a free-form text message to a customer within the 24-hour messaging window. **24-Hour Window Required** — Free-form messages can only be sent to customers who have messaged you within the last 24 hours. For customers outside this window, use a template message. **Use Cases:** * Send immediate follow-up to recent conversations * Deliver time-sensitive information * Respond to customer inquiries automatically **Configuration:** | Field | Description | | ------------------- | ------------------------------------- | | **Sender** | Select your WhatsApp sender | | **Recipient Phone** | Customer phone number (E.164 format) | | **Message** | Message content (max 4096 characters) | ### Generate AI Reply Generate an AI response using your assistant, identified by an external customer identifier. **Use Cases:** * Build custom chat interfaces * Integrate WhatsApp with external CRM systems * Create multi-channel AI responses * Process messages from external platforms **Configuration:** | Field | Description | | ----------------------- | ------------------------------------------------------ | | **Assistant** | Select the AI assistant to use | | **Customer Identifier** | Unique customer ID (e.g., phone number, email, CRM ID) | | **Message** | The message to respond to | | **Variables** | Optional context variables for the assistant | **How It Works:** 1. The action finds or creates a conversation for the customer identifier 2. Sends the message to your AI assistant 3. Returns the AI-generated response 4. You can then send this response via WhatsApp or other channels ## Triggers ### WhatsApp Message Received Trigger a flow when a customer sends a WhatsApp message. **Available Data:** * Customer phone number * Message content * Sender ID * Timestamp * Conversation ID **Example Use Cases:** * Log messages to a CRM or database * Send notifications to your team * Trigger follow-up sequences * Collect and process customer data ### WhatsApp Conversation Started Trigger a flow when a new WhatsApp conversation begins. **Available Data:** * Customer phone number * First message content * Sender information * Conversation ID ### Conversation Ended Trigger a flow when a WhatsApp conversation ends (due to inactivity timeout or manual closure). **Available Data:** * Full conversation transcript (array of messages and formatted string) * Extracted variables (from AI post-call evaluation) * Input variables passed to the assistant * Customer phone number and name * WhatsApp sender information (phone number, display name) * Conversation ID and type * Message count * Timestamps (created\_at, ended\_at) **Example Use Cases:** * Sync conversation summaries and extracted data to your CRM * Trigger follow-up sequences based on conversation outcomes * Log conversation analytics to external systems * Send satisfaction surveys after conversations end The Conversation Ended trigger provides the same payload as the [Conversation Ended Webhook](/api-reference/webhooks/conversation-ended-webhook). Use the webhook for direct integrations, or this trigger for no-code automation flows. ## Example Workflows ### Post-Call WhatsApp Follow-up Send a WhatsApp template message after a call completes: ```mermaid theme={null} flowchart LR A[Call Completed Trigger] --> B[Wait 5 minutes] B --> C{Call Outcome?} C -->|Interested| D[Send Interested Template] C -->|Follow-up| E[Send Follow-up Template] C -->|Not Interested| F[End] ``` **Setup:** 1. Add **Call Completed** trigger 2. Add **Delay** action (optional) 3. Add **Branch** based on call outcome 4. Add **Send WhatsApp Template** action for each branch 5. Configure template and variables ### Lead Qualification via WhatsApp Qualify leads through WhatsApp conversations: ```mermaid theme={null} flowchart LR A[Form Submission] --> B[Send WhatsApp Template] B --> C[Wait for Reply] C --> D[AI Processes Response] D --> E[Update CRM] ``` ### Appointment Reminder Flow Send automated appointment reminders: ```mermaid theme={null} flowchart LR A[Schedule Trigger] --> B[Fetch Appointments] B --> C[Loop Through Appointments] C --> D[Send Reminder Template] D --> E[Log to Sheet] ``` ## Variable Mapping When sending template messages, map your flow data to template variables: **Template:** ``` Hi {{1}}, your appointment with {{2}} is confirmed for {{3}}. Location: {{4}} ``` **Variable Mapping:** | Template Variable | Flow Data | | ----------------- | ------------------------------ | | `{{1}}` | `{{trigger.customer_name}}` | | `{{2}}` | `{{trigger.agent_name}}` | | `{{3}}` | `{{trigger.appointment_date}}` | | `{{4}}` | `{{trigger.location}}` | ## Error Handling ### Common Errors | Error | Cause | Solution | | -------------------------- | --------------------------------------- | --------------------------------------------- | | **Template not found** | Template ID invalid or not approved | Verify template is approved and ID is correct | | **Sender offline** | WhatsApp sender is not online | Check sender status, ensure it's connected | | **Invalid phone number** | Phone number not in E.164 format | Format as +\[country code]\[number] | | **Outside 24-hour window** | Trying to send free-form outside window | Use a template message instead | | **Rate limited** | Too many messages sent | Implement delays between messages | ### Retry Strategy For failed messages, implement a retry strategy: 1. Wait 1 minute 2. Retry the action 3. If still failing, log the error and notify your team ## Best Practices ### 1. Always Use Templates for Outbound When initiating contact with customers, always use approved templates. Free-form messages only work within the 24-hour window. ### 2. Include Opt-Out Options For marketing messages, include opt-out instructions to comply with regulations and maintain quality rating. ### 3. Respect Rate Limits Don't send too many messages too quickly. Implement reasonable delays between batch sends. ### 4. Handle Errors Gracefully Always add error handling to your flows. Log failures and notify your team of issues. ### 5. Test with Single Recipients First Before running bulk campaigns, test your flow with a single recipient to verify everything works correctly. ### 6. Monitor Quality Rating Keep an eye on your sender's quality rating. Pause campaigns if you notice declining quality. ## Next Steps * Learn about [message templates](/whatsapp/templates) and how to create them * Set up [WhatsApp senders](/whatsapp/senders) for your phone numbers * Explore the [automation platform](/automation-platform/introduction) for more workflow options # WhatsApp Conversations Source: https://docs.lacy.ai/whatsapp/conversations Track and manage AI-powered WhatsApp conversations with customers WhatsApp conversations are tracked alongside your other conversations, allowing you to review message history, monitor AI performance, and manage customer interactions. ## Viewing WhatsApp Conversations WhatsApp conversations appear in your **Conversations** section with a "WhatsApp" type badge. Each conversation includes: * Complete message history * Customer phone number * Connected AI assistant * Timestamps for all messages * Cost and usage metrics ## Conversation Types | Type | Description | | --------------------------- | ----------------------------------------- | | **WhatsApp** | Customer conversations via WhatsApp | | **Web Widget** | Customer conversations via website widget | | **Test** | Test conversations from the dashboard | ## How WhatsApp Conversations Work ### Customer Initiates Contact 1. Customer sends a message to your WhatsApp number 2. System creates or finds existing conversation 3. Message is routed to your AI assistant 4. AI generates and sends response 5. 24-hour messaging window opens ### Within the 24-Hour Window * AI responds automatically to each message * Free-form replies are allowed * Conversation continues naturally ### After 24 Hours * Customer must message again to reopen window * You can send template messages to re-engage * AI remains ready to respond when customer replies ## Conversation Features ### Message History View the complete back-and-forth between customer and AI: * Customer messages (incoming) * AI responses (outgoing) * Timestamps for each message * Function calls made during conversation ### Conversation Variables Variables collected or set during the conversation: * Customer identifier * Data extracted by AI * Context passed from automation flows ### Cost Tracking Each conversation tracks: * Total message count * Cost per message * Overall conversation cost ## Managing Conversations ### Filtering Conversations Filter your conversation list by: * Type (WhatsApp, Web Widget, Test) * Assistant * Date range * Customer identifier ### Exporting Conversation Data Export conversation data for analysis: 1. Navigate to Conversations 2. Apply filters as needed 3. Use export options to download data ## AI Assistant Behavior Your AI assistant handles WhatsApp conversations based on its configuration: ### System Prompt The same system prompt used for voice calls and web widgets applies to WhatsApp. Ensure your prompt works well for text-based communication. **Text-Friendly Prompts** — For assistants that handle both voice and WhatsApp, consider including instructions for text formatting like using bullet points and shorter paragraphs. ### Tools and Functions AI can call tools during WhatsApp conversations: * Lookup information in databases * Schedule appointments * Transfer to human agents * Collect and validate data ### Knowledge Bases Your assistant's knowledge bases are available for WhatsApp conversations, allowing the AI to answer questions using your uploaded content. ## Media in Conversations ### Attachments Gallery All media files received in WhatsApp conversations (images, audio, video, documents) are stored as attachments. Browse received files in the conversation detail view. ### Image Analysis (Vision) When a customer sends an image, your AI assistant can analyze it using vision-capable LLMs (OpenAI, Claude, Gemini). The AI's analysis and response are shown in the conversation alongside the original image. ### Voice Note Transcription Incoming voice messages are automatically transcribed based on your assistant's language settings. The transcribed text appears in the conversation alongside the audio, and the AI responds to the transcribed content. ### Sending Files to Customers Operators can send files back to customers directly from the conversation UI. This is useful for sharing documents, images, or other resources during a conversation. ## Best Practices ### 1. Review Conversations Regularly Monitor AI responses to ensure quality. Look for: * Accurate information * Appropriate tone * Successful goal completion * Customer satisfaction signals ### 2. Train Your AI Use conversation insights to improve your assistant: * Identify common questions * Update knowledge bases * Refine system prompts * Add missing tools or functions ### 3. Monitor Response Times WhatsApp users expect quick responses. Monitor: * AI response latency * Any delays or timeouts * Failed message deliveries ### 4. Handle Escalations Configure escalation paths for complex issues: * Transfer to human agent tool * Collect callback information * Schedule follow-up calls ## Conversation Metrics Track key metrics for your WhatsApp conversations: | Metric | Description | | ----------------------------- | --------------------------------------------- | | **Total Conversations** | Number of unique customer conversations | | **Messages per Conversation** | Average message count | | **Response Rate** | Percentage of messages with AI responses | | **Average Response Time** | Time between customer message and AI response | | **Cost per Conversation** | Average cost including AI usage | ## Integration with Other Channels WhatsApp conversations exist alongside your other communication channels: * **Phone Calls**: Voice conversations tracked separately * **Web Widget**: Text conversations from your website * **API Conversations**: Programmatic chat sessions All conversation types use the same AI assistant, providing consistent experiences across channels. ## Next Steps * Learn about [WhatsApp senders](/whatsapp/senders) and sender configuration * Set up [message templates](/whatsapp/templates) for outbound messaging * Configure [automation](/whatsapp/automation) for WhatsApp workflows * Review [AI assistant settings](/ai-assistants/settings/prompt-and-tools) for optimal responses # WhatsApp Business Integration Source: https://docs.lacy.ai/whatsapp/overview Connect your AI assistants to WhatsApp Business for automated text-based customer conversations **New: External Numbers** — You can now bring your own mobile number to WhatsApp! Use platform numbers or connect your existing mobile number with SMS/voice verification. ## What is WhatsApp Business Integration? WhatsApp Business integration allows you to connect your AI assistants to WhatsApp, enabling automated text-based conversations with customers through the world's most popular messaging platform. With this integration, you can: * **Receive customer messages** and respond automatically with AI * **Send template messages** to start conversations or re-engage customers * **Use AI-powered replies** for 24/7 customer support * **Trigger automation flows** based on WhatsApp conversations * **Track all conversations** in your dashboard ## How It Works ```mermaid theme={null} flowchart LR A[Customer] -->|Sends WhatsApp message| B[Your WhatsApp Sender] B -->|Routes to| C[AI Assistant] C -->|Generates response| B B -->|Replies to| A ``` 1. **Create a WhatsApp Sender** using a platform number or your own external number 2. **Connect an AI Assistant** to handle incoming messages automatically 3. **Create Message Templates** for outbound conversations (required by Meta) 4. **Customers message you** and receive AI-powered responses instantly ## Key Components Phone numbers registered for WhatsApp Business messaging Pre-approved message formats for business-initiated conversations AI-powered automated responses to customer messages Trigger flows and send messages via the automation platform ## Understanding WhatsApp Business Rules WhatsApp has specific rules for business messaging that you need to understand: ### The 24-Hour Messaging Window When a customer messages you, a **24-hour window** opens where you can send free-form messages. After this window closes, you must use an **approved template** to re-engage the customer. * **Within 24 hours**: Send any message directly * **After 24 hours**: Must use a pre-approved template message ### Template Messages Template messages are pre-approved message formats required for: * Starting new conversations with customers * Re-engaging customers after the 24-hour window * Sending notifications, updates, or marketing messages Templates must be submitted to Meta for approval before use (typically takes minutes to 24 hours). ### Quality Rating & Limits Meta monitors your messaging quality. New senders start with limited messaging capacity that increases as you maintain good quality: | Quality Level | Daily Message Limit | | ------------- | ------------------- | | New Sender | \~250 messages | | Low Quality | 1,000 messages | | Medium | 10,000 messages | | High Quality | 100,000+ messages | High block rates or spam reports will lower your quality rating and reduce your messaging limits. Always send relevant, requested content. ## Supported Features ### What's Supported * **Platform numbers** — Use numbers purchased through our platform with automated AI verification * **External numbers** — Bring your own mobile number and verify via SMS or voice call * AI-powered automated replies * Template messages (Utility, Marketing, Authentication) * Voice Call Request templates (request permission to call via WhatsApp) * Conversation history and tracking * Automation platform integration ### Media & Vision * **Image analysis (Vision)** — When customers send images, your AI assistant can analyze them using vision-capable LLMs (OpenAI, Claude, Gemini). The AI describes and responds to image content within the conversation. * **Voice message transcription** — Incoming voice notes are automatically transcribed based on your assistant's language settings. The transcribed text is processed by the AI just like a regular message. * **Media attachments** — All inbound media (images, audio, video, documents) are stored as attachments on the conversation and accessible from your dashboard. ### Coming Soon * WhatsApp voice calls ## Getting Started Decide whether to use a **platform number** (purchased from us) or your own **external mobile number**. External numbers must be able to receive SMS or voice calls for verification. Navigate to **WhatsApp Senders** and follow the setup wizard to connect your number to WhatsApp Business. Link an AI assistant to automatically respond to incoming messages. Set up message templates for outbound conversations and wait for Meta approval. Your WhatsApp sender is ready! Customers can message you and receive AI-powered responses. ## Next Steps * Learn how to [create WhatsApp senders](/whatsapp/senders) * Understand [message templates](/whatsapp/templates) and approval process * Set up [automation triggers](/whatsapp/automation) for WhatsApp # WhatsApp Senders Source: https://docs.lacy.ai/whatsapp/senders Create and manage WhatsApp Business senders for AI-powered messaging A WhatsApp Sender is a phone number registered with WhatsApp Business API that can send and receive messages. Each sender is connected to an AI assistant for automated responses. ## What is a WhatsApp Sender? A WhatsApp Sender is: * A dedicated phone number connected to WhatsApp Business * Connected to an AI assistant for automated responses * Capable of sending template messages and free-form replies ## Number Type Options When creating a WhatsApp sender, you can choose between two types of phone numbers: Use phone numbers purchased through our platform. We handle verification automatically using AI-assisted voice verification. **Best for:** Businesses wanting a dedicated business line with automated setup Use your own mobile number. You verify ownership by receiving an SMS or voice call with a verification code. **Best for:** Businesses wanting to use an existing number they already own ## Creating a WhatsApp Sender Creating a WhatsApp sender starts with choosing your number type, then following the appropriate setup flow. ### Step 1: Choose Your Number Type Navigate to **WhatsApp Senders** → **Create Sender** and select your preferred number type: * **Platform Number** — Use a number purchased from our platform (automated AI verification) * **External Number** — Use your own mobile number (SMS/voice code verification) *** ## Platform Number Setup If you selected **Platform Number**, follow these steps: ### Step 2: Pre-Verify Your Phone Number Before connecting to WhatsApp, your phone number must be verified with Meta. **Call Interception Warning** — During verification, ALL inbound calls to the selected phone number will be intercepted by our verification system for up to 5 minutes. This means: * Your normal AI assistant will NOT answer calls during this time * All calls will go to a silent verification listener * Regular customers calling this number will experience disrupted service **DO NOT run this on a production phone number that is actively receiving customer calls!** 1. Select an available phone number (only "normal" type numbers not already used for WhatsApp are shown) 2. Enter a **Display Name** for your business (this will be shown to customers) 3. Optionally add business profile information (about, description, address, category) 4. Click **Start Verification** The system will automatically verify your number with Meta using AI-assisted voice verification. This typically takes 1-2 minutes. ### Step 3: Select Your Verified Number Once verification completes: 1. You'll see your verified number in the "Verified Numbers Ready" section 2. Select the number you want to connect 3. Click **Continue to WhatsApp Connection** ### Step 4: Connect to WhatsApp Business This step connects your verified number to WhatsApp through Meta's Embedded Signup flow. **CRITICAL: Create a NEW Account** — During the Facebook signup flow, you MUST create a brand new WhatsApp Business Account. Do NOT select an existing WhatsApp Business Account — this will cause the integration to fail. Click Add New Number in Meta signup **Step A: Click "Add new number"** When the Meta popup appears, look for the "Add new number" option. Do NOT enter a phone number manually. Select your pre-verified number **Step B: Select your pre-verified number** From the dropdown, select the phone number you just verified. It will appear in the list because Meta already knows about it from the verification step. After selecting your number, complete the remaining steps in Facebook's flow (business verification, permissions, etc.) and you'll be redirected back automatically. *** ## External Number Setup If you selected **External Number**, follow these steps to connect your own mobile number. ### Requirements Before You Begin Make sure you have the following ready: * **Phone accessible** — You must have your phone nearby to receive a verification code * **SMS or calls enabled** — Your number must be able to receive SMS messages or voice calls * **Not already on WhatsApp** — This number must not be registered with WhatsApp or WhatsApp Business app * **Facebook account** — You'll need a Facebook account to complete the setup ### Step 2: Enter Your Phone Number 1. Enter your phone number in international format (e.g., +1 555 123 4567) 2. Enter a **Display Name** for your business 3. Click **Continue** **Phone Number Format** — Enter your number starting with + and your country code: * US: +1 555 123 4567 * UK: +44 7911 123456 * Germany: +49 151 12345678 ### Step 3: Connect to WhatsApp Business Click **Login with Facebook** to open Meta's Embedded Signup flow. Follow these steps: A popup will open. Make sure popups are allowed for this site. Follow the prompts to create a **new** WhatsApp Business Account. Don't select an existing one. When prompted, enter the same phone number you provided in Step 2. You'll receive a 6-digit code via SMS or voice call. Enter it to verify your number. If you don't receive an SMS within 60 seconds, choose the voice call option. Grant the required permissions and close the popup when finished. You'll be redirected automatically. ### Troubleshooting External Numbers Allow popups for this site in your browser settings, then try again. Wait 60 seconds, then try the voice call option. Make sure your phone has signal. If this number is already on WhatsApp, you'll need to delete that WhatsApp account first before you can use it with WhatsApp Business API. Make sure you're logged into the correct Facebook account, or try a different browser. ## Sender Status Your sender can have different statuses during operation: | Status | Description | | --------------------------- | ------------------------------------------------------- | | **Online** | Fully operational. You can send and receive messages. | | **Connecting** | Being initialized. Usually takes a few seconds. | | **Pending** | Awaiting verification or approval. | | **Offline** | Manually disabled. Messages cannot be sent or received. | | **Suspended** | Suspended by Meta due to policy violations. | | **Failed** | Setup failed. Check error message for details. | ## Sender Configuration ### Connect an AI Assistant Once your sender is online, connect an AI assistant to handle incoming messages automatically: 1. Edit your WhatsApp sender 2. Select an assistant from the dropdown 3. Enable **AI Enabled** toggle 4. Save changes All incoming messages will now be routed to your AI assistant for responses. ### Business Profile Customize how your business appears to customers: * **Display Name** — Your business name shown in WhatsApp * **About** — Short description (max 139 characters) * **Description** — Detailed description of your business * **Address** — Business address * **Business Category** — Industry category (Automotive, Medical, Retail, etc.) * **Logo** — Business logo image * **Banner** — Banner image for your profile * **Websites** — Links to your websites * **Contact Information** — Additional email and phone contacts ## Quality Rating & Messaging Limits Meta tracks your messaging quality and adjusts your limits accordingly. ### Understanding Quality Rating Your quality rating is based on: * Block rates (customers blocking your number) * Spam reports * Response rates * Customer feedback ### Messaging Limits New senders start with limited capacity that increases with good quality: | Tier | Daily Limit | How to Reach | | ------ | ----------------- | --------------------------- | | Tier 1 | \~250 messages | New sender | | Tier 2 | 1,000 messages | Maintain quality for 7 days | | Tier 3 | 10,000 messages | Consistent high quality | | Tier 4 | 100,000+ messages | Enterprise-level quality | **Build Quality First** — Focus on quality conversations before scaling up. Send relevant, requested content to maintain a high quality rating. ## Best Practices ### 1. Choose the Right Number Select a phone number from a country that matches your target audience. Customers are more likely to engage with local or familiar area codes. ### 2. Set Up Your Display Name Carefully Your display name appears in customer chats. Use your business name or a clear identifier that customers will recognize and trust. ### 3. Connect an AI Assistant Link an AI assistant to handle incoming messages automatically. This ensures customers get instant responses 24/7. ### 4. Create Templates Early Message templates require Meta approval which can take up to 24 hours. Create and submit your templates before you need them. ### 5. Start with Quality Conversations New senders have messaging limits that increase over time. Focus on quality conversations to build your sender reputation before scaling up. ## Troubleshooting ### Verification Failed If verification fails, Meta may have temporarily blocked requests. Wait a few minutes before retrying, or try a different phone number. ### Sender Stuck in Pending If your sender stays in "Pending" status for more than a few minutes: 1. Check if you completed the Meta signup flow 2. Ensure you selected the correct pre-verified number 3. Contact support if the issue persists ### Sender Suspended If Meta suspends your sender: 1. Review the suspension reason in your sender details 2. Address any policy violations 3. Contact Meta support for appeals ## Next Steps * Learn about [message templates](/whatsapp/templates) and the approval process * Set up [automation triggers](/whatsapp/automation) for WhatsApp conversations * Review [AI assistant configuration](/ai-assistants/what-is-ai-assistant) for optimal responses # Message Templates Source: https://docs.lacy.ai/whatsapp/templates Create and manage WhatsApp message templates for business-initiated conversations Message templates are pre-approved message formats required by Meta for business-initiated conversations on WhatsApp. You must have approved templates before you can send outbound messages to customers. ## What are Message Templates? Message templates are structured messages that: * Must be submitted to Meta for approval before use * Allow you to start conversations with customers * Can include variables for personalization * Are required for messaging outside the 24-hour window **Why Templates?** — WhatsApp requires templates to prevent spam and ensure businesses send valuable, relevant messages to customers. All business-initiated messages must use approved templates. ## When Do You Need Templates? | Scenario | Template Required? | | ----------------------------- | -------------------------------------------- | | Customer messages you first | No — free-form reply allowed within 24 hours | | Replying within 24 hours | No — send any message | | Starting a new conversation | **Yes** | | Re-engaging after 24 hours | **Yes** | | Sending notifications/updates | **Yes** | | Marketing messages | **Yes** | ## Template Categories Templates are organized into categories that determine their approval requirements and use cases: ### Utility Templates Transactional and service-related messages. **Use for:** * Order confirmations * Shipping updates * Appointment reminders * Account notifications * Payment receipts **Approval:** Usually approved within minutes ### Marketing Templates Promotional and sales-related messages. **Use for:** * Promotional offers * Product announcements * Newsletters * Sales campaigns * Re-engagement messages **Approval:** May take longer, stricter review **No Cross-Category Content** — Do not include promotional content in Utility templates. Meta will reject templates with mismatched category and content. ### Authentication Templates Verification and security messages. **Use for:** * One-time passwords (OTP) * Verification codes * Login confirmations * Security alerts **Approval:** Standard review ### Voice Call Request Templates Special templates to request permission for WhatsApp voice calls. **Use for:** * Requesting permission to call customers via WhatsApp voice * Must include a voice call request button **Approval:** Automatic (when using standard format) ## Creating a Template ### Step 1: Navigate to Templates 1. Go to **WhatsApp Senders** → Select your sender → **Templates** tab 2. Or go to **WhatsApp Templates** directly 3. Click **Create Template** ### Step 2: Configure Basic Settings | Field | Description | | ------------ | --------------------------------------------------------------------------------- | | **Name** | Unique identifier (lowercase, underscores only). Example: `order_confirmation_v1` | | **Category** | Select Utility, Marketing, Authentication, or Voice Call Request | | **Language** | Template language (must match the content) | **Naming Best Practices:** * Use descriptive names: `appointment_reminder`, `order_shipped` * Include version numbers: `welcome_message_v2` * Avoid generic names: ~~`template1`~~, ~~`test`~~ ### Step 3: Write Template Content Templates can include multiple components: #### Header (Optional) * **Text Header**: Short headline (up to 60 characters) * **Media Header**: Image, video, or document (coming soon) #### Body (Required) The main message content. This is where you write your message. **Using Variables:** Use `{{1}}`, `{{2}}`, etc. for dynamic content: ``` Hi {{1}}, your order {{2}} has been shipped! Expected delivery: {{3}} Track your package: {{4}} ``` **Sample Values** — When creating templates, you must provide sample values for each variable. These help Meta understand your template's purpose and are required for approval. #### Footer (Optional) A short line at the bottom (up to 60 characters). Often used for opt-out info or disclaimers. #### Buttons (Optional) Add interactive buttons to your template: * **Quick Reply**: Pre-defined response buttons (e.g., "Yes", "No", "Learn More") * **Call to Action**: Link to website or phone number * **Voice Call Request**: Button to request voice call permission ### Step 4: Submit for Approval 1. Review your template content 2. Click **Submit for Approval** 3. Template status changes to "Pending Approval" 4. Wait for Meta review (minutes to 24 hours) ## Template Approval Process ```mermaid theme={null} flowchart LR A[Create Template] --> B[Submit for Review] B --> C{Meta Reviews} C -->|Approved| D[Ready to Use] C -->|Rejected| E[Edit & Resubmit] E --> B ``` ### Approval Times | Category | Typical Time | | ------------------ | ---------------------- | | Utility | Minutes to a few hours | | Marketing | Hours to 24 hours | | Authentication | Minutes to a few hours | | Voice Call Request | Usually instant | ### Template Statuses | Status | Description | | ------------------------- | ----------------------------------- | | **Draft** | Not yet submitted | | **Pending** | Submitted, awaiting Meta review | | **Approved** | Ready to use | | **Rejected** | Review failed, see rejection reason | | **Disabled** | Disabled by Meta due to low quality | ## Common Rejection Reasons Avoid these common mistakes to improve your approval rate: ### ❌ Promotional Content in Utility Templates **Problem:** Including discounts, offers, or marketing language in Utility templates. **Solution:** Use Marketing category for promotional content. ### ❌ Missing or Unclear Variable Samples **Problem:** Variables like `{{1}}` without clear sample values. **Solution:** Provide realistic sample values that show the variable's purpose: * ✅ `{{1}}` = "John Smith" * ✅ `{{2}}` = "#12345" * ❌ `{{1}}` = "test" ### ❌ Aggressive or Threatening Language **Problem:** Content that could be perceived as harassment, threats, or spam. **Solution:** Use professional, friendly language. Focus on value to the customer. ### ❌ URL Shorteners **Problem:** Using bit.ly, tinyurl, or other URL shorteners. **Solution:** Use full, branded URLs from your domain. ### ❌ Incorrect Category Selection **Problem:** Choosing the wrong category for your content type. **Solution:** Match category to content purpose strictly. ### ❌ Restricted Content **Problem:** Templates about alcohol, gambling, adult content, political messaging, or illegal activities. **Solution:** These are not allowed. Review Meta's commerce policies. ## Using Templates ### Sending Template Messages Once approved, you can send template messages: 1. **Via Automation Platform**: Use the "Send WhatsApp Template" action 2. **Via API**: Call the send endpoint with template ID and variables ### Variable Replacement When sending, replace variables with actual values: **Template:** ``` Hi {{1}}, your appointment is confirmed for {{2}} at {{3}}. ``` **Sent Message:** ``` Hi John, your appointment is confirmed for January 15th at 2:00 PM. ``` ## Best Practices ### 1. Use Descriptive Names ``` ✅ order_confirmation_v1 ✅ appointment_reminder ✅ shipping_update_with_tracking ❌ template1 ❌ test ❌ message ``` ### 2. Keep Messages Concise WhatsApp users expect quick, clear messages. Get to the point and include a clear call-to-action. ### 3. Use Interactive Buttons Add Quick Reply or Call-to-Action buttons to make it easy for customers to respond: * "Track Order" * "Contact Support" * "View Details" * "Confirm Appointment" ### 4. Test Before Bulk Sending Always test your template with a single recipient before sending to a large audience. This helps catch formatting issues. ### 5. Create Templates Early Approval can take up to 24 hours. Create and submit templates before you need them. ### 6. Have Backup Templates Create multiple versions of important templates. If one is rejected or disabled, you have alternatives ready. ## Editing Templates **Limited Editing** — Once a template is approved, you cannot edit it. To make changes, you must create a new template with a different name. **Can Edit:** * Draft templates (not yet submitted) * Rejected templates (fix issues and resubmit) **Cannot Edit:** * Approved templates * Pending templates (must wait for review) ## Template Limits Meta enforces limits on template creation: * Maximum templates per WhatsApp Business Account: Varies by account tier * Template names must be unique per sender * Rejected templates count toward your limit ## Next Steps * Set up [automation triggers](/whatsapp/automation) to send templates automatically * Learn about [WhatsApp senders](/whatsapp/senders) and sender management * Review [AI assistant configuration](/ai-assistants/what-is-ai-assistant) for conversation responses