Agent configuration: prompt, voice, built-in tools, call results, end call, memory, recording, transcription, alerts # Overview This section is how you finish the onboarding agent so it can work a real line - not how you name it or pick a voice. Identity (name, greeting, personality, **Try this agent**) is [Your First Agent](/getting-started/your-first-agent/). Open that first if you have not shaped the agent yet. The editor has no publish step: a change staged from a chat with Claude or ChatGPT is the only kind that waits for a publish (see [Build a reliable phone agent](/agent-configuration/build-a-reliable-agent/)). The header shows **Live / v1** and **Prompt Based - editing the live agent.** Save only when you mean the next caller to hear it. ## What to set up, in order [Section titled “What to set up, in order”](#what-to-set-up-in-order) Do not walk the rail top to bottom on day one. This order is what actually makes an inbound receptionist work. 1. **Identity** - already done on [Your First Agent](/getting-started/your-first-agent/). Greeting + prompt + a test call that sounds like your company. ![Agent editor left rail with Identity selected](/_derived/thumb/getting-started/editor-rail.webp) editor-railExpand 2. **Skills - Knowledge** - attach a library so the agent has facts. Without this, it guesses or says “I don’t know.” [Knowledge](/agent-configuration/memory/). 3. **Call handling - Hang up** - one clear “we’re done” reason, plus a duration ceiling. Otherwise a polite caller sits on a dead line. [Hang up](/agent-configuration/end-call/). 4. **After the call** - set [Call results](/agent-configuration/call-results/) (turn **Call Summary** on if you want Call Memory later; add only properties you will filter on). Then [Alerts](/agent-configuration/alerts/) if someone should be notified. In the rail, **Alerts** appears above **Call results**. 5. **Recording & Privacy** - turn recording on if someone will listen back. Put the consent line in the greeting. [Recording](/agent-configuration/recording/). 6. **Then, only if a test call showed a problem** - [Tools & Workflows](/agent-configuration/built-in-tools/) (SMS, skip-turn, silence, workflows), [Transfer](/telephony/transfer/), [Advanced](/agent-configuration/advanced-config/) (talks-over / can’t-hear), [How the agent hears](/agent-configuration/transcription/). **Required** in the editor header is the go-live checklist. It opens **Not ready for calls** with required items and warnings. Anything required here will fail on a real caller even if **Try this agent** still works. ![Not ready for calls Required checklist](/_derived/thumb/agent-configuration/required.webp) requiredExpand Required Opens **Not ready for calls**. Required items (for example **Telephony** not connected) block real callers. Warnings call out mismatches such as tools mentioned in the prompt that are still off. Edit with AInarrow: AI Opens Claude / ChatGPT against this agent (needs an AI connection). Live on Which channels this agent answers. **0 of 2 channels** means the test line can work while customers still cannot reach it. Try this agentnarrow: Try Rehearse before real callers. Browser or phone + PIN. [Your First Agent](/getting-started/your-first-agent/). ## Where each tab is documented [Section titled “Where each tab is documented”](#where-each-tab-is-documented) The left rail groups match the live editor: [Identity](/getting-started/your-first-agent/) InstructionsVoice & Language First-week tutorial - not repeated here [Skills](/agent-configuration/memory/) KnowledgeTools & Workflows [Call handling](/telephony/transfer/) TransferOutgoingHang upAdvanced Outgoing is under Outbound Calls [Channels](/agent-configuration/website-widget/) Website WidgetTelephony Shows 0 of 2 until connected [After the call](/agent-configuration/call-results/) AlertsCall results Rail order: Alerts, then Call results [Recording & Privacy](/agent-configuration/recording/) Recording, retention, and privacy Do not create a separate Analysis Agent - **Call results** on *this* agent is the analysis. A number answers **one** agent. Turning it on for a second agent takes it off the first. Hearing (vocabulary, lag, interruptions that are really a transcription setting) is [How the agent hears](/agent-configuration/transcription/). ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) # Advanced **Call handling - Advanced** is for *live* conversation problems. Leave every control at the default until a test call shows one of the symptoms below. Recording and retention are a different tab: [Recording & Privacy](/agent-configuration/recording/). Brand names the agent mis-hears belong on **Voice & Language** ([How the agent hears](/agent-configuration/transcription/)), not here. ![Advanced - standby, voice sensitivity, interruption handling](/_derived/thumb/agent-configuration/advanced.webp) advancedExpand ## Do not tune this on day one [Section titled “Do not tune this on day one”](#do-not-tune-this-on-day-one) Shape Identity, attach Knowledge, set Hang up, then **Try this agent**. Come here only with a concrete complaint: The agent talks over me when I say wait or read a number TURN ONInterruption handlingNEEDSAllow interruptions. Also check [Skip Turn](/agent-configuration/built-in-tools/). It stops itself on every breath or a TV in the background TURN ONVoice Sensitivity - raise itNEEDSMove toward Requires loud, clear speech. Harder to trigger on noise. It misses quiet callers TURN ONVoice Sensitivity - lower itNEEDSMove toward Picks up quiet voices. Can also pick up a radio. They were cut off while typing digits TURN ONPhone keypad inputNEEDSRaise how long to wait, keep # as the end key unless your IVR already uses something else. Change the word that wakes the assistant on my calls TURN ONStandby - Wake phrasesNEEDSNew agents start with “Logica” and “Λότζικα”. See [Assistant during calls](/telephony/assistant-during-calls/). ## If you must change something - one symptom at a time [Section titled “If you must change something - one symptom at a time”](#if-you-must-change-something---one-symptom-at-a-time) 1. **Reproduce on Try this agent** Same room noise, same number-reading, same keypad. If you cannot hear the bug, do not move a control. 2. **Change one section, save, try again** Voice Sensitivity and interruptions fight each other if you move both. Keypad is independent. 3. **Standby - the wake words** **Enable standby** is on for every agent. On a call between people (you and a customer on Noema, the Windows app or a desk phone) the agent stays silent and answers only when you say a wake phrase: see [Assistant during calls](/telephony/assistant-during-calls/). It needs a voice and a compatible model - the info on the tab lists the requirements. Wake phrases New agents start with **Logica** and **Λότζικα**; delete either chip to drop it. Empty = nothing wakes the agent. Up to 5. Never a person’s name: the agent would wake every time someone says it. Sleep phrases Only for calls the agent answers itself: what a human says to make it go quiet until a wake phrase. Empty = it never sleeps on those calls. Switch **Enable standby** off and the agent never speaks on calls between people. 4. **Interruption handling** **Prevent interruption during response** (when on): the AI finishes its current sentence before customers can interrupt. **When can customers interrupt the AI?** offers modes with an example conversation on the tab (for example **Allow immediate customer interruptions**). Read the example before you pick. A smart / evaluate mode may add rule + success/fail messages - only if a simple mode is wrong. 5. **Phone keypad input** What happens when the caller presses keys on their phone. How long to wait for keypad input After this many seconds of no input, the AI continues (often **5**). Which key ends the input? Commonly **# (Hash / Pound key)**. Some setups also offer a timeout-style end option such as **Timeout (5 sec)**. Change the end key only when your existing IVR already uses something else. The digits land on [On Key Pressed](/workflows/keyword-pressed/) as `dtmf_input`. ![Phone keypad input on Advanced](/_derived/thumb/agent-configuration/advanced-keypad.webp) advanced-keypadExpand ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Hang up](/agent-configuration/end-call/) - [How the agent hears](/agent-configuration/transcription/) - [On Key Pressed](/workflows/keyword-pressed/) - [Recording & Privacy](/agent-configuration/recording/) # EU AI Act & AI disclosure > How Voice Logica handles Article 50 of the EU AI Act: the AI disclosure setting, what callers hear, the per-call record, the monthly report, and how to turn it on from the editor or from Claude / ChatGPT. Under **Article 50(1) and 50(5)** of the EU AI Act (Regulation (EU) 2024/1689), anyone who talks to an AI must be told so, clearly, at the first interaction. These rules apply from **2 August 2026**. Voice Logica is the **provider** of the voice-agent system. You are the **deployer**: you run the agent under your name, for your callers. Voice Logica gives you the setting, the per-call evidence and the report. Turning it on is up to you. Check your older agents **AI disclosure** is on for every new agent. Agents created before it became the default keep their setting, which may be off. Editing the greeting or the prompt does not change it. If it is off and your greeting does not say the caller is talking to an AI, you may not be compliant. ## What the setting does [Section titled “What the setting does”](#what-the-setting-does) When **AI disclosure** is on, the platform checks the first thing the agent says on each call, after variables are filled in: * **The greeting already says it is an AI** (for example *ψηφιακή βοηθός*, *τεχνητή νοημοσύνη*, *έι άι*, *digital assistant*, *AI*): it is spoken exactly as you wrote it. * **It does not**: one short sentence is added for that call only, in the caller’s language. For example *“Καλησπέρα σας! Είμαι η ψηφιακή βοηθός της Acme. Πώς μπορώ να βοηθήσω;”* or *“I’m Acme’s digital assistant.”* The sentence goes before a closing question, or right after a short hello. Your saved greeting is not changed. It also covers the cases where there is no normal greeting: Greeting skipped (IVR, the caller speaks first) The sentence is added to the agent’s first reply. Chat channels (WhatsApp, Messenger, Instagram, Viber, widget) The sentence is folded into the first reply, so the contact gets one message, not two. Transfer whisper Not added: the person hearing the whisper is your colleague, not the caller. Call resumed after a restart Not repeated: the caller already heard it. When the setting is off, the greeting is spoken exactly as written. The editor then shows a warning, and another one under any greeting that does not mention AI. ## Turn it on in the editor [Section titled “Turn it on in the editor”](#turn-it-on-in-the-editor) 1. **Open the agent** - **Agents** → your agent → **Instructions** (under Identity). 2. **Greeting → AI disclosure** - switch it on. It saves to the live agent straight away. It is not part of staging or versions, so publishing an older version never turns it off. 3. **Optional: say it in your own words** - write the greeting so it already names the AI (*“Γεια σας, είμαι η ψηφιακή βοηθός της Acme…”*). Then nothing is added and callers hear exactly your wording. 4. **Prove it** - call the agent and listen to the first sentence. Then open the call in **Calls**: its logs show *AI disclosure played at offset …ms*. Turning it **off** asks you to confirm. Voice Logica records who turned it off and when. That record stays on the agent and is shown by `get_agent_settings`. ## From Claude or ChatGPT (MCP) [Section titled “From Claude or ChatGPT (MCP)”](#from-claude-or-chatgpt-mcp) Every part of this works from a chat connected to the Voice Logica MCP server: | You say | Tool and section | | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | *“Turn on AI disclosure for my agent”* | `update_agent_settings`, section `ai_disclosure`, `enabled: true` | | *“Is AI disclosure on for all my agents?”* | `get_agent_settings`, section `ai_disclosure` (shows `enabled`, and `disabledBy` / `disabledAt` when off) | | *“How many calls this month told the caller it was an AI?”* | `get_compliance_report` (`format: "csv"` for a file) | When disclosure is off, the response includes the Article 50 warning, so the assistant tells you before you rely on it. The same section also holds **core-providers mode** (`coreProvidersOnly`): the agent’s extra AI features stay on the core model, with no Groq or Gemini, for customers who only accept the core sub-processors. ## Evidence: per call and per month [Section titled “Evidence: per call and per month”](#evidence-per-call-and-per-month) **Every call** stores what happened to the disclosure: required / played Whether the caller had to hear it, and whether they did. source `welcome_text` (your greeting already said it), `composed` (the sentence was added) or `none`. matchedTerm, text, language The term found in your greeting, or the exact sentence spoken, and its language. recordingOffsetMs Where in the recording it was played, so you can play that moment back. skippedReason Why it was not played: `disabled`, `transfer_whisper`, `session_resume`, `welcome_skipped` or `exception`. **Every month**, `get_compliance_report` gives the totals for the company or one agent: calls, the share with a logged disclosure, the split by source and skip reason, and a short list of exceptions to look at. ## What else Article 50 asks of you [Section titled “What else Article 50 asks of you”](#what-else-article-50-asks-of-you) * **Recording.** The AI disclosure is not the recording notice. If you record calls, say so in the greeting as well. See [Recording & Privacy](/agent-configuration/recording/). * **Cloned voices.** If an agent speaks in a cloned human voice, telling callers they are talking to an AI matters even more. Keep the setting on. * **Roles and contract terms.** Provider and deployer obligations, sub-processors and the DPA are on [legal.voicelogica.ai/compliance](https://legal.voicelogica.ai/compliance). This page explains a product setting. It is not legal advice. The binding text is Regulation (EU) 2024/1689 on [EUR-Lex](https://eur-lex.europa.eu/eli/reg/2024/1689/oj). ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Your First Agent](/getting-started/your-first-agent/) (greeting) - [Recording & Privacy](/agent-configuration/recording/) - [Build a reliable agent](/agent-configuration/build-a-reliable-agent/) # Alerts **After the call - Alerts** decides who is *told* after a call. What is extracted lives on [Call results](/agent-configuration/call-results/). Turn Call Summary on there first if you want the email to include a summary - this tab only sends. The page opens with **Stay in the loop after every call** - add an email, a phone number, or a webhook URL. If you skip this tab, nobody on the team knows a leftover happened unless they open every call. ![Alerts with Email SMS and Webhook](/_derived/thumb/agent-configuration/alerts.webp) alertsExpand ## First setup - one inbox, after every call [Section titled “First setup - one inbox, after every call”](#first-setup---one-inbox-after-every-call) 1. **Open After the call - Alerts** Leave Call results with **Call Summary** on if the report should include a summary. This page does not turn that on for you. 2. **Pick one channel** A report in an inbox (analysis + summary) TURN ONEmailNEEDSDetailed call-analysis reports. Add at least one recipient. Start with **After every call (recommended)**. A short poke on a phone TURN ONSMSNEEDSUses credits. Type numbers in international format (for example +30…) and press Enter. The tab warns you until at least one number is added. Your own system TURN ONWebhookNEEDSPOSTs the analysis JSON to your endpoint. Often plan-gated - if you see **API Access isn’t in your current plan**, upgrade in Billing (View subscription). Webhook delivery is not skipped by the duration floors. 3. **Configure Email first** When to send Common options include **After every call (recommended)**, AI decision by evaluation prompt, and AI decision including recipients. Start with after every call until the volume hurts. Recipients Type an address and press Enter (chip). Zero recipients = no email, even if the toggle is on. Advanced - Email Collapsed by default. Duration floor for email can be set here (0-3600 seconds, step 5). Alerts floors interact with the Call results analysis minimum - the longer one wins for email/SMS. ![Email alerts after every call](/_derived/thumb/agent-configuration/alerts-email.webp) alerts-emailExpand Narrow **When to send** once the volume hurts. Do not write a clever AI condition on day one. 4. **Prove it** **Try this agent**, talk longer than any duration floor, hang up. Check the inbox (or the webhook). If nothing arrived: no recipient, floors longer than the call, or the send condition never matched. ## Verify that a webhook came from Voice Logica [Section titled “Verify that a webhook came from Voice Logica”](#verify-that-a-webhook-came-from-voice-logica) Every post-call webhook carries two headers you can check. Verifying them is optional: endpoints that ignore them keep working unchanged. x-voicelogica-timestamp Milliseconds since 1970 when the request was signed. x-voicelogica-signature `sha256=` followed by the HMAC-SHA256 of `timestamp + "." + raw body`, keyed with your signing secret. Copy the secret from **Alerts → Webhook → Advanced → Delivery details → Copy signing secret**. It is one secret per company. Sign the **raw** request body, before any JSON parsing. ```js import crypto from 'node:crypto'; function isFromVoiceLogica(rawBody, headers, secret) { const ts = headers['x-voicelogica-timestamp']; const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(`${ts}.${rawBody}`).digest('hex'); const given = headers['x-voicelogica-signature'] || ''; const fresh = Math.abs(Date.now() - Number(ts)) < 5 * 60 * 1000; // reject replays older than 5 minutes return fresh && given.length === expected.length && crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected)); } ``` Retries are signed again, so each attempt has its own timestamp. ## What “broken” looks like [Section titled “What “broken” looks like”](#what-broken-looks-like) * **Nobody got the email** - no recipient, duration floors longer than the call, or the send condition never matched. A webhook can still have fired. * **Inbox flooded** - still on **After every call (recommended)** after you went live. Narrow the condition, or raise the floor. * **Email has no summary** - Call Summary is off on Call results. This tab cannot invent one. * **SMS never sends** - no numbers added (the tab shows **Add at least one phone number to start sending SMS alerts**). * **Webhook locked** - plan does not include API Access. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Call results - summaries and properties, before you notify.→](/agent-configuration/call-results/)[Knowledge - Call Memory, once the summary is on.→](/agent-configuration/memory/)[Hang up - a finished call is what triggers this tab.→](/agent-configuration/end-call/) # Build a reliable phone agent > A checklist from the job description to the improvement loop after launch, with the Claude / ChatGPT tool that does each step. This is the order that makes an agent dependable on real calls, from the first brief to the weekly review after launch. Each step says what to do and which Voice Logica tool does it from Claude or ChatGPT ([connect your assistant](/integrations/claude-chatgpt/)). The detailed pages are linked; this page is the checklist. ## At a glance [Section titled “At a glance”](#at-a-glance) | Step | From a chat | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Define the job | `get_my_agent`, `get_agent`, `get_company_operating_hours` | | 2. Write the prompt | `get_agent_prompt`, `edit_agent_prompt` | | 3. Greeting | `update_agent_settings` (section `"welcome"`, `"ai_disclosure"`) | | 4. Knowledge | `create_knowledge_file`, `add_knowledge_entries`, `add_knowledge_link`, `knowledge_execute` (action `"assign_knowledge_file_to_agent"`), `search_knowledge` | | 5. Tools and workflows | `list_integrations`, `describe_integration`, `update_agent_settings` (section `"tools"`, `"workflows"`), `create_workflow_from_template` | | 6. Transfers | `update_agent_settings` (section `"transfer"`), `update_company_operating_hours` | | 7. Ending the call | `update_agent_settings` (section `"end_call"`) | | 8. Language and voice | `list_voices`, `update_agent_settings` (section `"voice"`, `"languages"`, `"pronunciation"`) | | 9. Call results | `update_agent_settings` (section `"analysis"`) | | 10. Memory | `update_agent_settings` (section `"memory"`) | | 11. Test | `scenarios_query`, `scenarios_execute`, `run_agent_scenario`, `test_in_browser`, `call_me`, `get_call_result` | | 12. Go live | `get_guide` (guide `"go_live"`), `telephony_execute` (action `"update_number"`) | | 13. Improve | `get_calls`, `knowledge_query` / `knowledge_execute` (unanswered questions) | ## 1. Define the job and the calls it will get [Section titled “1. Define the job and the calls it will get”](#1-define-the-job-and-the-calls-it-will-get) * Write one sentence: who calls, and what the agent must achieve on the call. * List the 5-10 most common reasons people call, each with the approved answer or action. These become the prompt sections, the knowledge entries and the test scenarios. * For each reason decide one outcome: the agent answers, the agent does it (booking, lookup, SMS), the agent takes a message, or a person takes over. * Collect business hours, languages, tone (ask the business; formal is the safe default), who can take transfers and when, and what happens out of hours. * Decide what is out of scope (wrong number, sales pitches, unrelated requests): the agent declines politely and ends the call without collecting details. * One agent, one job. If the prompt still grows past about 20,000 characters after facts move to knowledge, split it: a front-desk agent that transfers to a specialist agent. From a chat: `get_my_agent` or `get_agent` to read what exists, `get_company_operating_hours` / `update_company_operating_hours` for the hours. Sign-up already built a first agent - edit it rather than creating a second one ([Your First Agent](/getting-started/your-first-agent/)). ## 2. Write the prompt [Section titled “2. Write the prompt”](#2-write-the-prompt) The prompt is how the agent behaves. Facts go to knowledge (step 4). Keep it in this order: 1. **Role** - who it is, which company, who calls. 2. **How it speaks** - tone and spoken style (below). 3. **Call reasons** - one section per reason: what to ask, in which order, what to do, when it is finished. 4. **Taking a message** - only for reasons that need a follow-up. 5. **Transfers** - when a transfer is allowed and to whom (step 6). 6. **Ending** - what to say before hanging up. 7. **General rules** - last. **Spoken style, Greek and English** * Short sentences, one idea each. One question per turn, then wait for the answer. * It is speech: no lists, markdown, emojis or links read aloud. * Answer in the caller’s language. In Greek, use the polite plural unless the business wants otherwise, and write natural spoken Greek, not a translation. * Never re-ask something the caller already said in this call. **Rules that keep it honest** * Never invent prices, availability, stock, dates or policies. If it is not in knowledge or in a tool result, the agent says it will check, takes a message, or transfers. * Never say something is booked, sent or transferred until the tool confirms it. On a tool failure, apologise and offer a message. * Read back names, phone numbers, emails, order numbers and dates, digit by digit where it matters, and get a yes before using them. * An unknown question gets an honest “I don’t have that information” plus a message or a transfer, never a guess. **Writing tips** * Say what to do, not only what to avoid. State each rule once; repeat only a safety-critical rule at the exact step where it applies. * Name each tool at the point in the flow where it should fire, with its exact name. * Live values use `{{variable}}` with flat names such as `{{phone_number}}` and `{{date}}` (workflows use `call.`-prefixed names). Do not use square brackets in the prompt. * Write phone numbers, emails and web addresses exactly as they are. No added spaces, pauses or spelled-out symbols. * Aim for 15,000-20,000 characters at most. Your plan also caps the prompt length. Short example: ```text ROLE: You are the receptionist of Smile Dental Clinic. People call to book, move or cancel appointments and to ask about treatments. HOW YOU SPEAK: Short, friendly-formal sentences. One question at a time, then wait for the answer. Answer in the caller's language. BOOKING: 1. Ask which treatment they need. 2. Ask for a preferred day, then call . 3. Offer at most two free times from the result. Never suggest a time it did not return. 4. Read back day, time and name, and ask them to confirm. Only then call . 5. Say it is booked only after the booking tool succeeds. If it fails, offer to take a message. ``` From a chat: `get_agent_prompt` first, then `edit_agent_prompt` to change passages and keep the rest. Pass `prompt` to it only for a full rewrite. On an agent that is already live, pass `destination: "staging"`, test (step 11), then publish with `versions_execute` (action `"publish_agent_version"`). ## 3. Greeting [Section titled “3. Greeting”](#3-greeting) * One short line: the company name, that the caller is speaking with an AI (or turn **AI disclosure** on), and one opening question. * If recording is on, put the consent line in the greeting ([Recording & Privacy](/agent-configuration/recording/)). * Set a separate out-of-hours greeting when the business closes; it can also end the call right after. * Do not repeat the greeting inside the prompt, or the agent may greet twice. From a chat: `update_agent_settings` (section `"welcome"`) and (section `"ai_disclosure"`). ## 4. Knowledge [Section titled “4. Knowledge”](#4-knowledge) * **Prompt** = behaviour, flow, rules. **Knowledge** = prices, services, addresses, detailed hours, policies, long FAQ answers. * Write entries as question and answer, phrased the way callers ask, with alternative phrasings. One fact per entry. Greek questions for Greek callers. * Keep it factual, approved and current. Remove what is outdated. * Attach the knowledge base to the agent. Creating it is not enough. * Check retrieval: ask `search_knowledge` the caller’s question and see which entry comes back first. No right entry means the knowledge is missing; the right entry ranked lower means rephrase it. * Turn on **Questions your agents could not answer** in [Learning Center](/learning-center/) - Settings, so every gap comes back to you (step 13). From a chat: `create_knowledge_file`, `add_knowledge_entries` (or `add_knowledge_text`, `add_knowledge_link`, `crawl_website_pages` for a website), `knowledge_execute` (action `"assign_knowledge_file_to_agent"`), `search_knowledge`, `knowledge_query` (action `"audit_knowledge_health"`). Details: [Knowledge](/agent-configuration/memory/), [Knowledge bases](/learning-center/knowledge-bases/). ## 5. Tools and workflows the agent uses mid-call [Section titled “5. Tools and workflows the agent uses mid-call”](#5-tools-and-workflows-the-agent-uses-mid-call) * Enable only what the job needs. A tool that is off cannot fire; a tool that is on but never mentioned in the prompt rarely fires. * For each tool, the prompt says when to use it, what to collect and confirm first, and what to say on success and on failure. * Connect the integration first, then enable its tool on the agent. * Keep **Skip Turn** on so the agent does not talk over a caller reading out a number or a code. * SMS needs the **Send SMS** tool enabled and one line in the prompt saying when to text. * Let a workflow do exact lookups and date calculations instead of asking the prompt to work them out. A workflow runs only on the agents it is attached to. From a chat: `list_integrations` and `describe_integration`; `update_agent_settings` (section `"tools"`, with the tool `name`); `create_workflow_from_template`, `edit_workflow`, `test_workflow`, then `update_agent_settings` (section `"workflows"`) to attach. Details: [Tools & Workflows](/agent-configuration/built-in-tools/), [Workflows](/workflows/). ## 6. Transfers to a person, and when not to transfer [Section titled “6. Transfers to a person, and when not to transfer”](#6-transfers-to-a-person-and-when-not-to-transfer) * Turn on **Enable call transfer** under **Call handling - Transfer**. **Warm** is the safe default: the agent waits for a person to pick up before connecting. * In **Routing Instructions**, say **when** a transfer is allowed, not only **where**. A bare list of names and numbers makes the agent dial as soon as it recognises a name. * Set business hours and turn on **Block Transfer When Company Is Closed**. Out of hours the agent takes a message instead. * When a transfer is not allowed (closed, person not on the list, request out of scope), the agent says so and offers to take a message. It does not try the transfer. * If nobody answers a Warm transfer, the agent is back with the caller: tell it to take a message then. * A transfer to an external number is an outbound call and needs telephony credit. A transfer to another agent does not. * Transfers are configured here, never as a hang-up reason. From a chat: `get_agent_settings` (section `"transfer"`, `format: true`), then `update_agent_settings` (section `"transfer"`); `update_company_operating_hours`. Details: [Transfer](/telephony/transfer/). ## 7. Ending the call [Section titled “7. Ending the call”](#7-ending-the-call) * Turn on **Enable Automatic Call Ending** with specific reasons tied to what the caller says or confirms, for example “the caller confirms they need nothing else”. Vague reasons hang up on a pause. * A message-taking branch finishes (details confirmed) before the call can end. * Add a reason for out-of-scope or abusive calls: a polite line, then end. * Set **Call Duration Limit** as a ceiling, not a target. From a chat: `update_agent_settings` (section `"end_call"`). Details: [Hang up](/agent-configuration/end-call/). ## 8. Languages and voice [Section titled “8. Languages and voice”](#8-languages-and-voice) * Set the primary language, then add the other languages callers use. The agent can switch during a call. * Listen to voices before choosing one. * A word the agent **says** wrong: add a pronunciation entry, written the way it should sound (a Latin-script brand name in a Greek agent is written in Greek letters). A word the agent **mishears**: add it to **Custom vocabulary** under **Voice & Language**. From a chat: `list_voices`, `update_agent_settings` (section `"voice"`), (section `"languages"`, `{add: ...}`), (section `"pronunciation"`). Details: [How the agent hears](/agent-configuration/transcription/). ## 9. Call results [Section titled “9. Call results”](#9-call-results) * Turn **Call Summary** on in **After the call - Call results**. Memory needs it. * Add only the analysis properties someone will filter or act on, for example the request, whether it is urgent, the caller’s name and a callback number. Each property captures one clear fact, described the way a grader would judge it. * Turn on auto-created tasks only if someone works the Tasks board. From a chat: `update_agent_settings` (section `"analysis"`). Details: [Call results](/agent-configuration/call-results/). ## 10. Memory [Section titled “10. Memory”](#10-memory) * **Call Memory** lets the agent use summaries of the same caller’s earlier calls. It needs **Call Summary** on. * Start small: 7 days, last 3 calls. Prove it with two test calls from the same number. * Turn it on in the app under **Skills - Knowledge**, or from a chat with `update_agent_settings` (section `"memory"`): `maxTimeMemory` in seconds (7 days = `604800`), `maxInteractionsMemory` as the number of past calls, and `summaryEnabled: true`, since memory is built from call summaries. Details: [Knowledge - Call Memory](/agent-configuration/memory/). ## 11. Test before going live [Section titled “11. Test before going live”](#11-test-before-going-live) The short version is below. The full guide, with scenario fields, mocking, the suite and publishing rules, is [Test and evaluate your agent](/agent-configuration/test-your-agent/). 1. **Generate scenarios** - `scenarios_query` (action `"generate_agent_scenarios"`) with a focus: `prompt`, `transfer`, `tools` or `knowledge`. Drafts are not saved. 2. **Keep the good ones and add your own** - `scenarios_execute` (action `"create_agent_scenario"`). Cover each top call reason, an out-of-hours call, a question the agent cannot answer, a caller who spells a name or number, a caller who asks for a person, and an off-topic caller. 3. **Run them** - `run_agent_scenario`. A run is a real phone call (live is the default): a test caller plays the scenario against your agent with its real voice, speech recognition, tools, transfers and workflows, and a judge grades the call. * Each run uses call minutes from the company plan, about the length of the call. One request makes at most 3 repetitions. * Tools run for real unless you list them in the scenario’s `mockedTools`, so mock anything that creates orders, tickets or records. Appointment booking tools cannot be mocked yet and book for real. Transfers are graded but never connect. * To test a staged change, pass its `agentVersionId`. * To run every scenario before publishing, use `scenarios_execute` (action `"run_agent_scenario_suite"`). It first returns the estimated minutes and runs only after you approve with `confirmCost: true`. * `mode: "text"` is a quick check without a call: it simulates the conversation and checks what the agent says, but tools, transfers and workflows do not run, so a “missed tool call” there is not a finding. 4. **Read the results** - `scenarios_query` (action `"get_agent_scenario_results"`): verdict, score and suggested improvements. 5. **Fix and re-run** - change the prompt with `edit_agent_prompt`, or apply the suggestions with `scenarios_execute` (action `"apply_scenario_improvements"`; prompt changes go to staging by default). Re-run the same scenarios. 6. **Make a real test call** - `test_in_browser` returns a link to talk to the agent by voice or chat (it turns on the website widget, limited to the business’s own website). `call_me` has the agent ring the user’s own verified mobile; pass what they want to try as `scenario`. Read the call with `get_call_result`. A test call passes when the agent greets with the right company name, sounds right, answers the common questions correctly, admits what it does not know, fires its tools (booking made, SMS sent, transfer connected), and ends the call cleanly. ## 12. Go live [Section titled “12. Go live”](#12-go-live) * Clear every required item in the editor’s **Required** panel. * Get a plan and a line, and route the number to the agent: `get_guide` (guide `"go_live"`), then `telephony_execute` (action `"update_number"`). See [Activate your subscription](/getting-started/activate-subscription/) and [Telephony](/telephony/). * Call the real number once and check the call appears in **Calls**. * Read the first real calls the same day. * Optional: on the **Tests** tab, turn on **Require passing tests to publish**. A version that has never been live is then published only after a test run that started after its last change passed completely. Rolling back to a version that was live before is never blocked. ## 13. Improve after launch [Section titled “13. Improve after launch”](#13-improve-after-launch) Once a week, or after any complaint: * **Read the calls** - `get_calls` filtered by agent and date; `include: ["summary"]` or `["analysis"]` keeps it short. Look at transfers, very short calls and complaints. * **Understand a bad call** - `get_calls` with include `"aiDialogue"` shows the prompt, tool calls and tool responses as they were during that call. Decide which it was: a missing rule, a rule that exists but another instruction won, wrong knowledge, or a tool that failed. * **Wrong fact** - `search_knowledge` with the caller’s words, then fix the entry. * **Unanswered questions** - `knowledge_query` (action `"list_unanswered_questions"`, most asked first), then `knowledge_execute` (action `"answer_unanswered_question"`). The answer is used on the next call. * **One change at a time** - edit, re-run the scenarios, and add a scenario for every failure you found on a real call. For why a call ended or failed, see [Call status and end reasons](/common-issues/call-status-and-end-reasons/). ## Quick fixes [Section titled “Quick fixes”](#quick-fixes) | Symptom | Usual cause | Fix | | -------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------------------- | | Makes up a price or a time | Fact missing from knowledge, or no “never invent” rule | Add the knowledge entry; add the rule at that step | | Talks over a phone number | Skip Turn off, or a prompt line says “act immediately” | Enable Skip Turn; say “wait until the caller has finished” | | Transfers when it should not | Routing Instructions list where, not when | Add the condition before the list | | Says “I’ll transfer you” but nothing happens | Transfer off, closed hours, or no destination | Check Transfer and business hours | | Hangs up mid-conversation | Vague hang-up reason | Tie the reason to a confirmed “nothing else” | | Knows the answer in tests, not on calls | Knowledge not attached to this agent | Attach it; check with `search_knowledge` | ## Next Steps [Section titled “Next Steps”](#next-steps) [Agent configuration overview](/agent-configuration/advanced-agent/) - [Knowledge](/agent-configuration/memory/) - [Transfer](/telephony/transfer/) - [What you can ask Claude and ChatGPT](/integrations/what-you-can-ask/) # Tools & Workflows **Skills - Tools & Workflows** is the permission list: what this agent is allowed to *do*, not what it *knows*. A tool that is off cannot fire, even if the prompt asks for it. A workflow that is not attached here cannot run, even if you built it under **Workflows**. The header shows how many tools are enabled (for example **6 of 51 tools enabled**) and how many integrations are connected. ![Tools and Workflows overview](/_derived/thumb/agent-configuration/tools.webp) toolsExpand Do not enable the whole catalog on day one. Extra tools are extra ways to go off-script. The onboarding agent already has a small **Enabled** set - that is enough for rehearsal. ## Which list do you need? [Section titled “Which list do you need?”](#which-list-do-you-need) A multi-step job you already built (API, email, branch) TURN ONBusiness WorkflowsNEEDSAttach it here or the agent cannot run it. Empty state shows **No workflows added yet.** Use **Add workflow** to create and link one. One job the product already ships (SMS, skip-turn, voicemail) TURN ONBuilt-in ToolsNEEDSToggle + gear. **Enabled** is the truth; browse the catalog with the other filters. A remote tool server (Claude / a custom MCP) TURN ONMCP serversNEEDS**Add MCP**, connect (Streamable HTTP, Bearer, or OAuth), then pick which of its tools this agent may call. ## First setup - a receptionist that does not talk over digits [Section titled “First setup - a receptionist that does not talk over digits”](#first-setup---a-receptionist-that-does-not-talk-over-digits) 1. **Open Skills - Tools & Workflows** Note **N of M tools enabled**. That number is what the model is allowed to call. 2. **Leave Business Workflows empty until you have a real job** Then **Add workflow** or attach an existing row and turn its toggle on. The pencil opens the workflow editor. 3. **On Built-in Tools, start from Enabled** Filters include **Enabled**, **Essentials**, **All categories**, **Conversation**, **Outbound**, and **Integrations**. **Enabled** is what this agent will actually use. Use the other filters to find something to turn *on*. 4. **Keep these on for a first inbound line** A typical onboarding set includes: Skip Turn The caller is about to read a number or code. Without it the agent talks over the digits. Open the gear (**Skip Turn - Tool Settings**). Use a template: **Phone number**, **Product code**, **Order number**, or **Continue after Input**. Timeout and max skips per turn control how long it stays silent. Handle Silence The line goes quiet. Configure the interval, how many nudges, then **Forward the call** and/or **End the call**. If the action is forward/transfer, Transfer under Call handling must be ready or **Required** can block you. Detect Voice Mail Outbound or missed-call callbacks, so you do not “talk” to a mailbox. Lock on Speaker Helps the agent stay locked on the right speaker when helpful for your line. ![Skip Turn tool settings with phone number template](/_derived/thumb/agent-configuration/tools-skip.webp) tools-skipExpand 5. **Add SMS only if you will actually text** **Send SMS** and **Capture Data via SMS** use credits and must be asked for. Put one line in the personality prompt (“Text a confirmation when they ask”) so the model knows it is allowed - the toggle alone is not a brief. **Send Info Page by SMS** writes the information the caller asked for (prices, steps, links) as a web page and texts them the link. Opens and link clicks show under **Tracked links** on the call. On calls a person answers, turn it on on the analysis agent so the wake-word assistant can send what [knowledge assist](/telephony/caller-bar/) found. 6. **Play wait music on tools** When on, callers hear music instead of silence while a tool runs. Leave it off if the agent mostly talks without pausing for tools. 7. **Try this agent** Read a phone number slowly. If the agent talks over you, Skip Turn is off or its prompt is vague. Go quiet for a bit: Handle Silence should nudge, then forward or end as configured. Leave CRM, IVR, appointments, and sentiment off until that job exists. Tools that show **Connect** / **Authorize** stay blocked until an admin connects them under Integrations (or the button on the row). Transfer itself is configured under **Call handling - Transfer** (Warm is often recommended; Attended and Blind are also available) - enable the tool path here only when that job needs it. ## How the agent decides to fire a tool [Section titled “How the agent decides to fire a tool”](#how-the-agent-decides-to-fire-a-tool) The gear prompt is the contract: *when* to send the SMS, *when* to stay silent. Vague prompts fire at the wrong moment. The personality prompt should mention the tool in one line. Otherwise the model may never choose it, even when the toggle is on. ## MCP servers [Section titled “MCP servers”](#mcp-servers) **Add MCP** if you have a remote tool server. Choose transport (for example Streamable HTTP) and auth (None, Bearer token, or OAuth). OAuth redirects to connect, then you return and select tools. Only the tools you enable are sent to the AI. An MCP that is added but not connected will not run. Company-wide Claude / ChatGPT connections (Edit with AI) are **Integrations - AI Connections**, not this list. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Workflows](/workflows/) - [Hang up](/agent-configuration/end-call/) - [Transfer](/telephony/transfer/) - [Knowledge](/agent-configuration/memory/) # Call results **After the call - Call results** decides what is *extracted* from every finished call. Who gets told is [Alerts](/agent-configuration/alerts/). Neither tab is a separate “Analysis Agent” - do not create one. In the rail, **Alerts** sits above **Call results**. Open **Call results** for the extract; open **Alerts** for notifications. If you skip this tab, **Calls** is just a recording list with no columns to filter, and [Call Memory](/agent-configuration/memory/) stays locked until **Call Summary** is on here. ![Call results with analysis properties and Call Summary](/_derived/thumb/agent-configuration/call-results.webp) call-resultsExpand ## First setup - summaries first, then only the columns you will use [Section titled “First setup - summaries first, then only the columns you will use”](#first-setup---summaries-first-then-only-the-columns-you-will-use) 1. **Open After the call - Call results** Onboarding already turns on a few analysis properties (for example **Is Urgent**, **Request**, **Client Name**, **Asked Callback**). Filter the list with **Active**, **All**, **Recommended**, and **Custom**. That is enough to scan **Calls**. Do not add more until you will filter or automate on them. 2. **Turn Call Summary on** This is what Knowledge - **Call Memory** reads. If you want “you called Monday,” the summary must be on. The guidance field tells the model how to write the summary (language of the dialogue, focus on what the caller said). 3. **Open Advanced - Analysis Configuration** Useful controls: Advanced Analysis Optional free-form analysis prompt (output language usually matches the call). Minimum call duration (seconds) Skip analysis for pocket-dials and instant hang-ups. Production often defaults to **5** seconds. Raise it if short junk calls still get analyzed. Excluded phone numbers Numbers that should never be analyzed. [Alerts](/agent-configuration/alerts/) can add a *second* duration floor - the longer one wins. Webhooks ignore both floors and always POST. Recording can be off and you still get a summary. You just cannot play the audio. 4. **Do not add properties yet unless you will filter on them** The summary is for humans. Properties are for columns, tasks, and automations. Click **+ Add analysis property** when you will *act* on the value. Prefer items under **Recommended** before inventing a blank custom field. Write each instruction as a grader would: “Yes if they asked to be called back today.” Required properties empty out on short or junk calls, so keep the set small. **Default value** (under the property’s Advanced section) is a fallback, not a starting value. It is saved only when the analysis can’t produce a value: the call was shorter than the minimum duration, wasn’t answered, had no caller speech, or the AI left the field empty. It never replaces a value the AI found. Use it so filters and automations see “No” or “Unknown” instead of a blank on those calls. 5. **Auto-create tasks - only if someone works the Tasks board** Kinds you can toggle: **Callback**, **Meeting**, **Reminder**, **To-do**, and **Call**. Leave every kind off if you do not want the board filling itself. How the AI decides, who gets the task and how callbacks merge: [Tasks](/tasks/). 6. **Prove it** **Try this agent**, talk for longer than **Minimum call duration**, hang up. Open **Calls** and the finished call - you should see analysis/summary content once the call clears the minimum. If Call Memory is still locked on Knowledge, you did not save **Call Summary** here. ![Calls detail after a finished test call](/_derived/thumb/agent-configuration/call-results-prove.webp) call-results-proveExpand ## Property types - pick the type that matches the answer [Section titled “Property types - pick the type that matches the answer”](#property-types---pick-the-type-that-matches-the-answer) Each analysis property has a **type**. The type decides what the AI can write, how the **Calls** column filters, and what your automations receive. Pick it from the answer you expect, not from the wording of the question. Text Free wording: a request, a name, an address, a product. Use it only when the answer really is free text. Yes/No Any true/false question: urgent, asked for a callback, known customer, wrong number. Filters and automations can test it directly. Number Counts and amounts: people attending, amount promised, quantity. Date A calendar date (YYYY-MM-DD): appointment date, payment date. Time A time of day (HH:MM, 24h): appointment time, best time to call. Choice One answer from a fixed list you define, for example hot / warm / cold. Use it when the answer has a few known outcomes. List Several values of one type, for example every product mentioned. Object A group of named sub-fields, for example an order line with product and quantity. **A yes/no question belongs in Yes/No, not Text.** As Text, the same answer comes back as “true”, “Yes”, “Ναι” or a sentence, and filters and automations miss it. Write the instruction as a grader would: “Yes if the number is in the campaign list, No otherwise.” **Required** tells the AI to always give a value. Leave it off for facts that may not come up in the call, such as an address or past purchases from a caller you don’t know. Otherwise the AI has to write something, and it may guess. To get “No” or “Unknown” instead of a blank, set a **Default value**. **Remember for this contact** saves the value on the caller’s contact. On that contact’s next call the agent already knows it, and the next analysis keeps it unless the conversation shows it changed. Use it for facts that stay true across calls: name, address, customer number. Leave it off for facts about this call only: urgency, the request, the outcome. From a chat, the same fields are set with `update_agent_settings` (section `"analysis"`): `type` is `string`, `boolean`, `number`, `date`, `time`, `enum`, `array` or `object`, plus `required` and `isConstantForContactEntity` (Remember for this contact). ## What “broken” looks like [Section titled “What “broken” looks like”](#what-broken-looks-like) * **No summary** - summary off, or the call was shorter than **Minimum call duration (seconds)**. * **Memory still locked** - you looked at Alerts and never turned Call Summary on here. * **Tasks exploding** - every auto-create kind is on. Turn off the kinds nobody works. * **A yes/no column you can’t filter** - the property is **Text**. Change it to **Yes/No**. * **Made-up names or addresses** - the property is **Required** for a fact the caller never gave. Turn **Required** off. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Alerts - email, SMS, or webhook after the extract.→](/agent-configuration/alerts/)[Knowledge - Call Memory, once the summary is on.→](/agent-configuration/memory/)[Recording & Privacy - playback is separate from the summary.→](/agent-configuration/recording/) # Hang up **Call handling - Hang up** is when the agent is *done*. When a human should take over, that is [Transfer](/telephony/transfer/). Mixing the two is how callers get cut off instead of handed off. The page explains it as: when and how calls end - a question fully answered, silence from the caller, or a hard time limit. ![Hang up with automatic ending, reasons, and duration limit](/_derived/thumb/agent-configuration/hang-up.webp) hang-upExpand Automatic ending uses **End Call Reasons**. **Call Duration Limit** is a separate safety net with its own toggle and a **Maximum call duration** control (a duration picker, not a free slider). ## First setup - a clean goodbye [Section titled “First setup - a clean goodbye”](#first-setup---a-clean-goodbye) 1. **Turn Enable Automatic Call Ending on** When on: “The agent ends calls automatically based on the conditions below.” When off: End Call Reasons are hidden and calls will not end from those reasons. Your reasons stay saved and come back when you turn this on again. **Call Duration Limit** can still stay on as a hard cap. 2. **Keep or rewrite the onboarding reasons** Onboarding already adds several reasons (for example `call_completed`, `no_additional_help`, `issue_resolved`). Each row shows whether the farewell is **AI Generated** and how many **interruption(s) allowed**. Open the pencil on a reason. A good reason matches something a caller *says or confirms* - they confirm they do not need anything else. A bad reason is a vibe - “when done,” “when it feels finished.” Vague reasons hang up on a pause. Empty list + automatic ending on = **Required** will stop you. Add one specific reason with **+ Add reason**, or turn the master switch off. ![Manage End Call Reasons editor](/_derived/thumb/agent-configuration/hang-up-reason.webp) hang-up-reasonExpand 3. **Edit the reason fields** The editor is **Manage End Call Reasons**: ReasonREQUIRED The reason name (for example call\_completed). AI GeneratedDEFAULT When checked, the farewell is generated from your prompt. Right for almost every reception line. Static Farewell Message Use the exact same sentence every time - only when legal or brand needs a fixed script. Farewell prompt The prompt (or static text) used when ending the call. Keep it short. Goodbye interruptions allowed How many times the caller can interrupt the goodbye and keep the call going before the agent hangs up anyway. **0** hangs up immediately even if the caller speaks. Default is **1**. Click **Update** to save the reason, or **Cancel** to close without changing it. 4. **Set Call Duration Limit as a ceiling, not a target** Turn **Call Duration Limit** on. Set **Maximum call duration** (for example **5 minutes**). The call ends after this time even if they are still talking. Demo plans show: **Demo plans are capped at 5 minutes. You can set a longer limit - the backend will still end the call at 5 minutes.** 5. **Try this agent** Ask one question, say you are done, and listen. If it cuts you off mid-thought, the reason is too loose - rewrite it. If it chats forever after goodbye, the reason never matched - add the phrase you actually used. ## Add a reason later [Section titled “Add a reason later”](#add-a-reason-later) **+ Add reason** when a real call ended badly (agent stayed on after “thanks, bye,” or hung up during a long name). Name the reason after the situation, write the prompt in the language of your calls, save with **Update**, then replay that scenario. Delete a reason that fires on pauses. Do not delete every reason and leave automatic ending on. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Transfer](/telephony/transfer/) - [Advanced](/agent-configuration/advanced-config/) (talk-over / silence) - [Call results](/agent-configuration/call-results/) # Knowledge The prompt on **Instructions** is the job brief. **Skills - Knowledge** is the reference library and the memory of who called before. Put facts here - hours, prices, policies - so you do not stuff them into the prompt and hit the character cap. Building the documents is [Learning Center](/learning-center/) - queues and [knowledge bases](/learning-center/knowledge-bases/). This page is what to turn on **for this agent**, and why. If the library exists but the toggle here is off, callers still hear “I don’t know.” The page title is **Give your agent things to know.** ![Knowledge tab with bases and Call Memory](/_derived/thumb/agent-configuration/knowledge.webp) knowledgeExpand ## First setup - attach a library and prove it [Section titled “First setup - attach a library and prove it”](#first-setup---attach-a-library-and-prove-it) Do this on the onboarding agent before you split bases across the team. 1. **Open Skills - Knowledge** If only **Agent knowledge** is listed and nothing else is on, the agent still has almost nothing useful to search for customer FAQs. 2. **Click + Add knowledge base** Name it after the job - for example **Hours & prices** - not “KB1”. This creates the base **and** turns it on for *this* agent. **New knowledge base** under [Learning Center - Knowledge Bases](/learning-center/knowledge-bases/) does **not** attach it. That screen says bases must be attached from the agent’s Knowledge tab. If you created the library in Learning Center, come back here and turn the toggle on (or use **+ Add knowledge base**). **Manage all knowledge bases** opens the company list. ![Hours and prices knowledge base toggled on](/_derived/thumb/agent-configuration/knowledge-add.webp) knowledge-addExpand 3. **Open Manage documents (folder) and add real Q\&A** A new base often shows **Empty - open Manage documents to add files.** Callers hear **Q\&A pairs**, not a raw dump. [Open a knowledge base](/learning-center/open-a-base/) is the two-pane screen. Come back here when the toggle is on and the pairs exist. 4. **Leave Advanced - Knowledge collapsed at first** It appears after at least one base is attached. Inside you will find: * **Selective Knowledge Lookup** - leave **Off** on day one. When on, the agent may skip a base and miss a fact. * **Knowledge items included per answer** - how many items can be pulled into a reply (for example **5**). 5. **Try this agent** Ask one of the questions you added. Then open **Calls** and listen. If it improvises, the pair is missing, this toggle is off, or you tested a different agent. 6. **Turn capture on so new gaps come back** [Learning Center - Settings](/learning-center/) - **Questions your agents could not answer**. The next “I don’t know” becomes a card you save into knowledge. This tab may show items waiting in Learning when there is something to review - if it says nothing waiting, you are clear. ## What each row on this tab is [Section titled “What each row on this tab is”](#what-each-row-on-this-tab-is) A normal knowledge base Toggle on = this agent may read it. Folder opens Manage documents. Rename / delete are on the row unless the file is locked. Example name: **Hours & prices**. Agent knowledgeLOCKED This agent’s own file. It stays on. Subtext is typically **Auto-built from transferred calls.** Learning Center can drop unanswered items and transfer leftovers here. Do not paste the company handbook into it. Company knowledge Facts every agent should know, when you save a Learning Center item as **Everyone**. It may not appear until you create one. ManagedLOCK ICON Built by the product (for example contact memories). Not a place to dump policies. Only shows when the product has created one. Attach only what *this* agent is allowed to say. A sales agent does not need the HR pack. ## Call Memory - “you called Monday” [Section titled “Call Memory - “you called Monday””](#call-memory---you-called-monday) Memory reads **summaries**, not raw audio. If **Call Summary** is off under [Call results](/agent-configuration/call-results/), **Enable Call Memory** stays locked with a banner like **Call Memory needs Call Summary.** Use **Enable Call Summary** on that banner (or turn Call Summary on under After the call - Call results). 1. **Turn Call Summary on** (or use the lock banner button). 2. **Enable Call Memory** - the agent can use past summaries for the same caller. 3. **How long should the AI remember details** - start with **7 days**. After that the agent starts fresh. Longer windows are for a small VIP list, not a public inbound line. Expired memory does **not** delete **Calls** - the agent just stops using those summaries. 4. **How many past calls to remember for each caller** - start with **Last 3 calls** (or **Last 2 calls**). More feels richer and can overload the prompt. 5. **Continue the last conversation** - if the same person contacts again inside this window, they continue the previous session instead of starting over. Example starting value: **10 minutes**. Calls match by **phone number**; website chat matches by **email**. Maximum is **1 day**. The last session’s summary is not added again, because the full conversation is already there. Leave it **Off** until you have repeat callers who get cut off and ring back. Prove it: two **Try this agent** (or phone) calls as the **same number**. The second greeting should use something from the first. If it does not, summary is off, memory is off, the window expired, or the caller ID was different. ![Call Memory settings enabled](/_derived/thumb/agent-configuration/knowledge-memory.webp) knowledge-memoryExpand ## What not to turn on yet [Section titled “What not to turn on yet”](#what-not-to-turn-on-yet) Facts every agent should know TURN ONA shared knowledge base + toggle onNEEDSBuild it in Learning Center or with **+ Add knowledge base** here. You called Monday about the blue shirt TURN ONCall MemoryNEEDSNeeds **Call Summary** on Call results first. The agent only searches relevant bases TURN ONSelective Knowledge LookupNEEDSOnly after you have several bases. It can skip the wrong file and miss a fact. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Learning Center](/learning-center/) - [Knowledge bases](/learning-center/knowledge-bases/) - [Call results](/agent-configuration/call-results/) (summaries) - [Tools & Workflows](/agent-configuration/built-in-tools/) # Messenger & Instagram > Let your agent answer Facebook Messenger chats, Instagram DMs and comments: connect your Facebook Page or Instagram professional account, and fix a Page that does not show up. The same agent that answers your phone and website answers your Facebook Page’s Messenger chats and comments, and your Instagram DMs and comments. You connect with Facebook or Instagram login; there are no tokens to copy. ## Connect a Facebook Page (Messenger) [Section titled “Connect a Facebook Page (Messenger)”](#connect-a-facebook-page-messenger) 1. **Check your role on the Page first** You log in with your **personal** Facebook profile; that is normal, Pages have no password of their own. That profile needs **full control** of the Page (Facebook Page access with *Full control*, or *Admin* on a classic Page). With partial access the Page cannot be connected. 2. **Start the connection** Open the agent → **Channels** → **Messenger** (or **Integrations** → **Channels** → **Messenger**), choose the agent and click **Connect with Facebook**. Allow pop-ups if the browser blocks the Facebook window. 3. **Tick the Page in the Facebook window** Facebook asks which Pages to share. Click **Edit access** (or *Choose what you allow*) and tick the Page you want, for example your shop’s Page. Accept the permissions. Untick nothing that Facebook lists as required. 4. **Pick the Page, if you manage several** Back in Voice Logica, **Choose the Page to connect** lists every Page you shared. Pick the one this agent answers for. With one Page it connects on its own. 5. **Prove it** The Page appears in the list. Send the Page a message from another Facebook account; the agent answers and the chat shows in **Calls**. ## Connect Instagram [Section titled “Connect Instagram”](#connect-instagram) 1. **Use a professional account** - Instagram **Business** or **Creator**. A personal Instagram account cannot be connected. 2. **Connect** - agent → **Channels** → **Instagram** → **Connect with Instagram**, log in with that account and accept the permissions. 3. **Prove it** - send the account a DM from another account; the agent answers. ## Tell the agent it is chatting [Section titled “Tell the agent it is chatting”](#tell-the-agent-it-is-chatting) Each Messenger and Instagram connection has its own **channel instructions** that the agent reads only there, for example *“Keep answers to two sentences. Do not ask for the email to be spelled; it is already written.”* The agent also knows these are text conversations, not phone calls. To give one agent different rules for phone and chat, see [Phone and chat on one agent](/agent-configuration/website-widget/#phone-and-chat-on-one-agent). ## Hand over to a person [Section titled “Hand over to a person”](#hand-over-to-a-person) Turn on [live support](/telephony/live-support/): when a customer asks for a person, a teammate takes over the same Messenger or Instagram chat. ## Billing [Section titled “Billing”](#billing) One **chat session** covers one customer for 24 hours, including a handover to a teammate, the same as on the website widget, WhatsApp and Viber. See [How charges work](/getting-started/how-charges-work/#chats). ## From Claude or ChatGPT [Section titled “From Claude or ChatGPT”](#from-claude-or-chatgpt) `channels_execute` (action `start_connect`) returns the Facebook or Instagram login link; `channels_query` (action `connect_status`) says whether it finished and lists the Pages to choose from. `get_guide` (guide `"chat_on_messenger_instagram"`) walks through these steps. ## Next Steps [Section titled “Next Steps”](#next-steps) [Viber](/agent-configuration/viber/) - [Website Widget](/agent-configuration/website-widget/) - [Live Support](/telephony/live-support/) # Recording & Privacy This tab is storage, not conversation quality. Analysis and summaries can run **without** a recording. What you lose when recording is off is playback and the verbatim transcript on **Calls**. Open **Recording & Privacy** on the editor rail (with After the call). The page title is **Recording and privacy** - choose what is stored after a call and how long it is kept. ![Recording and privacy - Record all calls, Drive backup, retention](/_derived/thumb/agent-configuration/recording.webp) recordingExpand ## First setup - record, consent, keep what you need [Section titled “First setup - record, consent, keep what you need”](#first-setup---record-consent-keep-what-you-need) 1. **Open Recording & Privacy** 2. **Turn Record all calls on if someone will listen back** When on: conversations are recorded and saved; recordings appear on Call History. When off: the recording and verbatim transcript are unavailable for those calls - call analysis and summaries still run. Put the consent line in the [greeting](/getting-started/your-first-agent/). The compliance reminder on this tab is for you: when recording is on, you must tell callers, get their consent, explain why, and say how long recordings are kept. 3. **Check for a company-default warning** If this agent’s toggle is off but the company still records by default, a warning may appear that recording stays on. Follow the link on that warning (often Telephony - Call Recording & SIP) to change the company default. If no warning appears, the agent toggle alone controls recording for this agent. 4. **Backup to Google Drive - optional copy** **Backup to Google Drive** saves recordings to Drive for cloud storage and team access. It is a plan module. If the toggle is locked and you see **Google Drive integration requires a plan with the Google Drive module** with **Upgrade**, recordings still live in Voice Logica; only the Drive copy is unavailable. 5. **Pick a Data retention policy** All call data Keeps summaries and analysis while your subscription is active. Audio recordings, transcript files and the conversation text are deleted after the retention period. Only the phone number Recognise a repeat caller without keeping the full audio/transcript pile. Don't retain any call data Nothing kept after the call. Memory and some analysis have nothing to read. Use only when a policy requires it. Set **Retention period** (for example **1 week** or **1 month**) to match your plan and privacy review. 6. **Prove it** **Try this agent**, hang up after a real short conversation, open **Calls**, and look for a playable recording. If there is no player, recording was off for that call (or the call was too short / not stored yet). If there is a player after you turned the agent toggle off, check for a company default still forcing recording. ## Also part of privacy [Section titled “Also part of privacy”](#also-part-of-privacy) * **Say it is an AI.** The agent’s **AI disclosure** setting makes every caller hear that they are talking to an AI, as the EU AI Act (Article 50) expects. It is on for new agents (older agents keep their setting), and editing the greeting or prompt does not change it. From Claude or ChatGPT: *“turn on AI disclosure for my agent”*. See [EU AI Act & AI disclosure](/agent-configuration/ai-act/). * **Private calls.** A team member can mark one of their own calls private; it is then hidden from the rest of the company. * **Pause recording during a call.** On every agent, the call’s own user dials `**1` to pause recording and `**2` to resume it. With the **Pause Recording** tool on (Tools tab) they can also say *“stop recording”* to the assistant. While paused, nothing is recorded (the audio has silence there), transcribed, saved, shown live, logged or used in the summary and analysis, and the assistant cannot hear the call, so recording resumes only with the keypad code. The transcript shows **Recording paused by the user** and **Recording resumed by the user** where the gap is. Only the call’s own user can pause or resume; requests and keypad presses from the other party are ignored. Paused time is not charged in analysis minutes, however many times you pause; voice minutes still count, because the assistant stays on the line. The same works from a button: **Pause recording / Resume recording** in the [Chrome extension](/telephony/chrome-extension/) call window and the Windows app call screen, with a red **Recording** dot that turns grey while paused; next to it, **Analyse this call** off means no summary or analysis for that call. Your own AI can do it with `set_call_recording`. The codes are set for the whole company in **Telephony → Call settings → Keypad codes and wake word** (a user can have their own in their seat), or from Claude or ChatGPT: *“set the pause recording code to \*\*5”*. * **Legal hold.** Open a call and press the shield button to put it on legal hold. Retention and deletion then skip it, recording and transcript included, until you release the hold. A held call cannot be deleted. Use it for disputes, complaints and legal requests. * **Your privacy notice.** The DPA, the subprocessor list and where data is stored are on [legal.voicelogica.ai/compliance](https://legal.voicelogica.ai/compliance). * **Users choose for their own calls.** In **My profile** (and the Chrome extension and Windows app settings) each user has **Record my calls** and **Analyse my calls**. Analysis needs recording: turning analysis on records, turning recording off stops analysis. To decide for everyone instead, turn off **Telephony → Call settings → Users can pause recording and choose their own**: the pause button, the keypad codes from the apps and these switches are then refused. ## Requests from a person: export or erase their data [Section titled “Requests from a person: export or erase their data”](#requests-from-a-person-export-or-erase-their-data) Under GDPR a caller can ask what you hold about them (access, art. 15) or ask you to delete it (erasure, art. 17). You are the controller, so you answer them; Voice Logica gives you both actions in one click. Only your company’s data is ever included or touched. 1. **Open the person’s contact** **Contacts** -> the person. Every phone number and email on the contact is matched, in every format (+30…, 69…, 0030…). 2. **Export data - to answer an access request** **Export data** downloads one JSON file with everything held about the person: the contact, calls with transcripts, summaries and analysis, SMS, notes, tasks, emails, campaign entries and contact memories. Each call carries links to its recordings, valid for **7 days**. Send the file to the person. 3. **Erase data - to answer an erasure request** **Erase data** asks you to confirm, then: * **Calls are anonymized**: number, transcript, summary, analysis and recordings are removed. Date, duration and charges stay for your billing and statistics. * **Deleted outright**: the contact, its memories, SMS, notes, tasks, emails, campaign entries and waiting-list entries. * **Calls on legal hold are kept** and counted in the result, until you release the hold. Erasure cannot be undone. Export first if you need a copy. 4. **Erase the copies in connected systems** Contacts synced from a CRM, e-shop or ERP come back on the next sync. Erase the person there too. Database backups expire on their own after 30 days, operational logs after 7-30 days. Exporting needs **view** access to Contacts; erasing needs **edit**. API keys cannot erase. From Claude or ChatGPT: *“export everything we hold for +30 694 123 4567”* or *“erase all data of Maria Papadopoulou”* - the assistant asks you to confirm before erasing. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Call results](/agent-configuration/call-results/) - [Alerts](/agent-configuration/alerts/) - [Your First Agent](/getting-started/your-first-agent/) (greeting / consent) # Test and evaluate your agent > Write test scenarios, run them as real phone calls graded by a judge, run the whole suite before you publish, and turn every real failure into a test. A test scenario is a call you want the agent to handle right: who calls, what they want and what a good outcome is. Voice Logica runs it as a **real phone call**. A test caller phones your agent and plays the scenario, your agent answers with its real voice, speech recognition, tools, transfers and workflows, and a judge grades the call against what you expected. You can do everything on the agent’s **Tests** tab, or from Claude or ChatGPT ([connect your assistant](/integrations/claude-chatgpt/)). Each step below names the tool. Test calls are real calls * Each live run uses call minutes from the company plan, about the length of the call. * Tools run for real unless you mock them (step 3). A test that books, orders or opens a ticket does it for real. * Transfers are graded but never connect, so nobody’s phone rings. ## Write the scenarios [Section titled “Write the scenarios”](#write-the-scenarios) 1. **Generate drafts** - `scenarios_query` (action `"generate_agent_scenarios"`) with a focus: `prompt`, `transfer`, `tools` or `knowledge`. Drafts are not saved; keep the ones that match your real calls. 2. **Save the ones that matter** - `scenarios_execute` (action `"create_agent_scenario"`). Cover: * each of the top reasons people call; * an out-of-hours call; * a question the agent cannot answer; * a caller who spells a name or reads out a number; * a caller who asks for a person; * an off-topic caller. For each scenario fill in: * **Scenario** - the situation the caller creates. * **Ideal outcome** - what a good call ends with. * **Success criteria** - a checklist the judge grades one by one, e.g. “The agent asks for the caller’s name”. All must pass. * **Expected tool calls** - the tools that must fire, optionally with the values they must receive. * **Expected transfer** - whether the agent should transfer, and where. * **Caller** - persona, the facts they can give when asked, and behaviour: cooperative, confused, interrupts, changes mind, silent or noisy. * **Caller IDs** - the number the test call comes from. Enter your own number (or a customer’s number from your CRM) and the agent recognises the caller exactly as on a real call: contact, integrations and earlier calls. Leave it empty to call from the default test line. Several numbers make one call per number. From a chat this is the scenario’s `callerId` / `callerIds`. 3. **Mock the tools that change real data** - list them in the scenario’s **mocked tools** with the response they should return, or turn off **use real tools** to block every tool you did not list. * Appointment booking tools cannot be mocked yet and book for real; use a test calendar or cancel the booking afterwards. * Set **test date/time** (`frozenNow`) when the right answer depends on the date, such as available slots or office hours. ## Run and evaluate [Section titled “Run and evaluate”](#run-and-evaluate) 1. **Run one scenario** - **Run** on the Tests tab, or `run_agent_scenario`. Live is the default. One request makes at most 3 repetitions. To test a staged change, pass its `agentVersionId`. 2. **Read the verdict** - `scenarios_query` (action `"get_agent_scenario_results"`). Each result has pass or fail, a score, the result of every success criterion, the tools that fired with their results, and suggested improvements. Open the call itself to listen to the recording. 3. **Fix and run again** - change the prompt with `edit_agent_prompt` or the knowledge, or apply the suggestions with `scenarios_execute` (action `"apply_scenario_improvements"`; prompt changes go to staging). Run the same scenario again. 4. **Compare versions** - `scenarios_execute` (action `"run_agent_scenario_matrix"`) runs a scenario across several versions, caller numbers and repetitions, so you can compare a staged change with the live agent or measure a pass rate. ## Run the whole suite before you publish [Section titled “Run the whole suite before you publish”](#run-the-whole-suite-before-you-publish) 1. **Run all** - **Run all** on the Tests tab, or `scenarios_execute` (action `"run_agent_scenario_suite"`) with the staged version. It runs every scenario of the agent, one live call each. 2. **Approve the cost** - from a chat, the first call only returns the estimated minutes; nothing runs until you approve and it is called again with `confirmCost: true`. 3. **Publish what passed** - `versions_execute` (action `"publish_agent_version"`) with the suite’s `testSuiteId`. 4. **Make passing tests required (optional)** - on the Tests tab turn on **Require passing tests to publish**. A version that has never been live is then published only after a test run that started after its last change passed completely. Rolling back to a version that was live before is never blocked. ## Quick checks without a call [Section titled “Quick checks without a call”](#quick-checks-without-a-call) `mode: "text"` simulates the conversation without a phone call. It shows what the agent says and decides, but tools, transfers and workflows do not run, so a “missed tool call” there is not a finding. Use it to try prompt wording quickly; use live runs to decide what to publish. To talk to the agent yourself, use `test_in_browser` (voice or chat in the browser) or `call_me` (the agent calls your verified mobile). ## Keep the suite growing [Section titled “Keep the suite growing”](#keep-the-suite-growing) When a real call goes wrong, read it with `get_calls` (include `"aiDialogue"` shows the prompt, tool calls and tool responses of that call), fix the cause, and save that call as a new scenario. The suite then guards against it coming back. The full build checklist is in [Build a reliable phone agent](/agent-configuration/build-a-reliable-agent/). # How the agent hears There is no **Transcription** item on the editor rail. Hearing settings live on **Identity - Voice & Language** under **How the agent hears callers**, plus **Call handling - Advanced** for talk-over and keypad. The banner on that block: tweak these **only if calls feel laggy or the agent interrupts too often**. Defaults work for most use cases. Manage reusable vocabulary on the **Keywords** pages (linked from that banner). ![Voice and Language - How the agent hears callers](/_derived/thumb/agent-configuration/accuracy.webp) accuracyExpand The post-call transcript on **Calls** is a *result*. It is not configured on a hidden Analysis Agent. ## First - name the symptom, then open one place [Section titled “First - name the symptom, then open one place”](#first---name-the-symptom-then-open-one-place) | What you heard on Try this agent | Where to fix it | What happens if you skip it | | ------------------------------------------ | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | Missed a brand name, street, or SKU | **Voice & Language** - **Custom vocabulary**, and/or company **Keywords** / keyword sets | The agent keeps hearing nearby words and answers the wrong thing. | | Talks over the caller, or stops on a TV | **Advanced** - interruptions and Voice Sensitivity. [Advanced](/agent-configuration/advanced-config/) | Sliders here will not help if the real issue is Skip Turn. | | Cut off while they typed digits | **Advanced** - keypad wait / end key | They never finish the account number. | | No audio to replay, but the summary exists | **Recording & Privacy** - recording was off. [Recording](/agent-configuration/recording/) | Not a hearing problem. | | Summary or properties missing | **Call results**, not hearing. [Call results](/agent-configuration/call-results/) | Not a hearing problem. | ## Teach it your words [Section titled “Teach it your words”](#teach-it-your-words) 1. **Reproduce the miss** **Try this agent** and say the brand / street / SKU the same way a caller would. 2. **Start on Voice & Language** Under **Accuracy**, use **Custom vocabulary** for uncommon words, names, or terms. Type a word and press Enter or comma. 3. **For reusable sets, open Keywords** Follow the **Keywords** link on the hearing banner. That opens the company Keywords area (not a rail item named Transcription). Create a **New keyword set** with: Details Name and language for the set. Phrases Add phrases one by one (**+ Add**) or **Bulk add**. Each phrase can have a **Boost** value. API sync Optional sync controls when you manage phrases from outside the UI. Agents reference these sets from their hearing / transcription settings. Cancel if you were only exploring - empty sets are fine until you have real brand terms. ![New keyword set Phrases tab](/_derived/thumb/agent-configuration/accuracy-keywords.webp) accuracy-keywordsExpand 4. **Try this agent again with the same word** If it is still wrong, the set is on a different agent, or the caller’s wording does not match what you stored. ## Turn-taking and providers [Section titled “Turn-taking and providers”](#turn-taking-and-providers) Some plans show extra turn-taking or transcription-provider controls under Voice & Language. If you do not see them, your plan uses the defaults - that is normal. Do not hunt for a **Transcription** tab on the agent rail. If the agent talks over **digits**, that is [Skip Turn](/agent-configuration/built-in-tools/), not a hearing slider. ## Troubleshooting [Section titled “Troubleshooting”](#troubleshooting) ## Next Steps [Section titled “Next Steps”](#next-steps) [Your First Agent](/getting-started/your-first-agent/) (Voice & Language) - [Advanced](/agent-configuration/advanced-config/) - [Recording & Privacy](/agent-configuration/recording/) # Viber > Let customers chat with your agent on Viber through your own Viber bot: connect it, share its link, and know what Viber bots can and cannot do with groups. Customers open your business’s Viber bot and chat with the same agent that answers your phone and website. The agent answers questions, collects details and photos, and hands over to a person when needed. ## Connect a Viber bot [Section titled “Connect a Viber bot”](#connect-a-viber-bot) 1. **Create the bot** - at [partners.viber.com](https://partners.viber.com) sign in with your business’s Viber account and create a bot account: name, photo and category. Copy its **token**. 2. **Connect it to the agent** - open the agent → **Channels** → **Viber** and paste the token (or **Integrations** → **Channels** → **Viber**). Voice Logica checks the bot and connects it. From then on the agent answers every chat with the bot. * A bot is on one agent at a time. A company can connect several bots, for example one per brand or language. 3. **Tell the agent what to do in the chat** - in the prompt, say what to ask for (name, mobile, area, photos) and what to answer, such as a cost estimate. Photos customers send are read by the agent. Keep answers short: they are read on a phone. 4. **Share the bot link** - the bot’s public link (`https://viber.com/`) opens a private chat with the agent. Put it on your website, in the SMS sent after a call, on a QR code at your shop, and in your Viber group or community. 5. **Try it** - open the link on your phone and chat with the agent, then check the chat in the app. ## Viber groups and communities [Section titled “Viber groups and communities”](#viber-groups-and-communities) Viber bots only chat **one to one** with people who open them. Viber does not let any bot: * join a group or community from an invite link; * read the messages of a group; * add or remove group members. This is a Viber rule, the same on every platform. To work with a group, post the bot link in it (“Send us your photos for a free estimate: [https://viber.com/…](https://viber.com/%E2%80%A6)”). Each customer then continues **privately** with the agent, and nobody has to be removed from the group afterwards. ## Send one message to everyone [Section titled “Send one message to everyone”](#send-one-message-to-everyone) You can send news, an offer or a closure notice to everyone who has messaged your bot. Ask Claude or ChatGPT, for example “send everyone on our Viber bot: we are closed on Monday”. It first tells you how many people the message will reach, and sends it only after you confirm. Viber delivers it only to people still subscribed to the bot; those who unsubscribed are skipped. Send it only to customers who agreed to hear from you. ## Hand over to a person [Section titled “Hand over to a person”](#hand-over-to-a-person) Turn on [live support](/telephony/live-support/): when a customer asks for a person, a teammate takes over the same Viber chat. ## From Claude or ChatGPT [Section titled “From Claude or ChatGPT”](#from-claude-or-chatgpt) `get_guide` (guide `"chat_on_viber"`) walks through these steps, and `edit_agent_prompt` writes what the agent does in the chat. # Website Widget The website widget puts your agent on your own site as a chat and voice bubble. Visitors type or talk to the same agent that answers your phone, with the same instructions, knowledge, tools and workflows. You also get a **test link**: a hosted page where anyone can talk to the agent, before the widget is on your site. You can do all of it from the app, or from Claude or ChatGPT without opening the app. ## First setup [Section titled “First setup”](#first-setup) 1. **Turn the widget on** Open the agent → **Channels** → **Website Widget** and switch it on. Until it is on, the test link shows *This assistant isn’t available right now* and the embedded widget does not load. 2. **Try the test link** **Embed & share** → **Shareable page link** → **Open**. The link is `https://app.voicelogica.ai/w/`. Ask the agent what callers usually ask. You can also send this link to customers by email, SMS or Viber. 3. **Add it to your website** **Embed & share** → **Add to your website** → **Copy**. The code is two lines: ```html ``` Paste it before `` on every page. On WordPress, use a header and footer plugin and paste it in the footer field. On Wix, Shopify or Joomla, use the site’s custom code or footer scripts setting. 4. **Lock it to your domain** **Allowed domains**: add your site’s hostname, for example `example.com`. Keep **Also allow [www](http://www). variant** on if your site also answers on `www.`. An empty list lets any website embed your agent and use your chat sessions. The test link always works, whatever this list says. 5. **Make it look like your site** **Appearance** sets the size, the corner of the screen, the colours and the avatar. **Live preview** shows the result before you save. 6. **Prove it** Open your website in a private window, open the bubble and ask a real question. The conversation shows in **Calls** with its transcript and call results. ## Links in the agent’s replies [Section titled “Links in the agent’s replies”](#links-in-the-agents-replies) For safety, a link in a reply is clickable only if its domain is on the **Clickable link domains** list (**Website Widget** → **Interface**). Any other link shows struck through and cannot be clicked. When the list is empty, which is the default, no link is clickable. * Add each domain the agent may link to, for example `example.com` and `hihello.com`. A domain matches exactly: `example.com` does not cover `shop.example.com`, so add that too. * **Also allow [www](http://www). for these domains** (on by default) lets `example.com` also cover `www.example.com`. * **Allow plain http\:// links** only matters for sites without https. It does not make a link clickable by itself: the domain must still be on the list. From Claude: `update_agent_settings`, section `widget`, `{ "interface": { "markdownAllowedDomains": ["example.com", "hihello.com"] } }`. ## From Claude or ChatGPT [Section titled “From Claude or ChatGPT”](#from-claude-or-chatgpt) With [Voice Logica connected](/integrations/claude-chatgpt/), ask in plain words: *“Turn on the website chat for my agent and give me the code for my site.”* * `update_agent_settings` with section `widget` and `{ "enabled": true }` switches it on. If you give no domains, it is locked to the website on your company profile. The answer carries the **test link** and the **embed code**. * `get_agent_settings` with section `widget` returns the same link and code, and the current settings. * `test_in_browser` returns the test link and the embed code, and switches the widget on if it was off. Domains, colours, placement and pre-chat fields change the same way, for example `{ "allowedDomains": ["example.com"] }` or `{ "styling": { "placement": "bottom-left" } }`. ## Asking visitors who they are [Section titled “Asking visitors who they are”](#asking-visitors-who-they-are) **Caller verification** asks for an email or mobile before the chat starts and can confirm it with a code (SMS codes work for Greek and Cypriot numbers). Turn on **Actions need a verified visitor** when the agent can create orders, bookings or tickets: visitors who did not verify can only ask questions. The values reach the agent as variables, so a returning customer is recognised the same way as on the phone. ## Phone and chat on one agent [Section titled “Phone and chat on one agent”](#phone-and-chat-on-one-agent) One agent can answer the phone and the website chat and still behave differently on each. The agent already knows when a conversation is typed: it does not get the speech-recognition and spoken-style rules there. For your own rules, use the **`{{serviceType}}`** variable in the prompt: | Conversation | `{{serviceType}}` | | ------------------------------------------------------------ | ----------------- | | Website chat (typing), WhatsApp, Viber, Messenger, Instagram | `message` | | Website voice (talking in the bubble) | `websocket` | | Phone call | empty | Write the rule in plain words, for example: > The conversation type is “`{{serviceType}}`”. If it is “message”, the customer is typing: do not ask them to spell or repeat an email, name or number they wrote, and send links and details in the chat instead of by SMS. Otherwise they are speaking: confirm an email by reading it back, or offer to send an SMS so they can write it. On WhatsApp, Viber, Messenger and Instagram each connection also has its own **channel instructions** that the agent reads only on that channel. ## A person takes over [Section titled “A person takes over”](#a-person-takes-over) When a visitor asks for a person, the agent can hand the same chat to a teammate. That needs **Transfer** on the agent and **Provide chat support** on the teammate. See [Live Support](/telephony/live-support/). ## Billing [Section titled “Billing”](#billing) One **chat session** covers one visitor for 24 hours, however many messages, including a handover to a teammate. When none are left, new conversations are refused until you buy a chat-sessions pack. See [How charges work](/getting-started/how-charges-work/).