How we build an agent that answers correctly in front of real visitors: what to ask the client before writing a line, what goes into its knowledge base, how to write its welcome, how to test it and what to check before delivering it. The screens and settings named here are the console's as of today; the rest is the method drawn from our own deliveries. An AI connected to the MCP can follow this page as is.
An agent that holds up answers correctly, in the right tone, and takes the conversation somewhere, in front of real visitors and not only in your own tests. Here is the order we build it in; each step has its own section below.
Most disappointing agents fail before the first line of the prompt: they don't know who they are talking to, what they must never promise, or what a successful conversation should produce. They answer politely and bring nothing in. Those answers belong to the client: you ask for them, in the client's own words, and you never make them up, even when you think you know.
| Question | Why it matters |
|---|---|
| Who will talk to this agent, and what does that person already know about you? | An agent that talks to loyal customers and one that talks to strangers don't say the same things. |
| What must the agent never say or promise? | A wrong price or a wrongly promised lead time surfaces with the end customer, never with you. |
| What should happen at the end of a successful conversation? | Without a defined outcome, the agent chats pleasantly and nobody knows what came out of it. |
| What should this agent win for you? Two or three goals. | Without goals, nobody knows which conversations to look at first, or whether the agent brings anything in. |
| What language does it speak, and is it formal or informal? | Getting the tone wrong with an executive costs you the whole conversation. |
| Where should it answer: website, WhatsApp, Messenger, Instagram, phone? | Each channel has its limits (WhatsApp shows three buttons at most and puts the rest in a list), and the accounts to connect are the client's: better to know before writing the welcome. |
Depending on the agent's job, one more question, without which it won't hold up:
Goals are not a formality: they decide what the console puts first. Each one shows in the “Chatbot goals” box on the agent page, with its trend and the number of conversations it is based on, and becomes a quick filter on the Conversations screen. Three at most, picked from a closed list:
| If the agent must… | The goal to track |
|---|---|
| sell | Conversations followed by a purchase (a paid order linked to the conversation), to push up |
| book appointments | Conversations with an appointment booked, to push up |
| qualify leads | Conversations with a lead captured, to push up |
| take load off support | Conversations resolved by the agent (up), conversations handed to a human or ending in a ticket (down) |
| satisfy | Satisfaction, given or inferred, to push up |
| handle one specific topic | Questions on one topic resolved by the agent, to push up |
The agent only knows what it is given, and it quotes what is written. Everything happens in the “Knowledge & memory” tab, “+ Add knowledge” button:
| Option | What for |
|---|---|
| “A file” | The client's documents: prices, terms, procedures. PDF, Word, text or CSV, 10 MB at most; a CSV creates one entry per row. A very long PDF is truncated: split it by topic. |
| “A web page” | One specific page, with its address as the source: the agent can give the link. Or “The whole site”, “Re-read the site” button: up to 60 pages, which replace what the agent had learned from the site without touching entries added by hand. Run it again when the site changes. |
| “Write an article” | A question and its answer, for what isn't written anywhere. |
| “A spreadsheet” | A catalog or FAQ kept in a spreadsheet, pasted or read from a Google Sheet: one row, one entry. |
| “A sync” | A key so a program of the client's can push its entries itself, through the API (admins only). See the developer documentation. |
Information being in the base doesn't mean it gets found. Check with the client's real questions, rephrased the way a visitor types them, never with the entry's title: asking an entry for its own title proves nothing.
“Visitor memory”, in the same tab, remembers from one visit to the next what a person said. It is off by default: only turn it on if the client asks. It is tied to the visitor's identifier, so two people sharing one identifier share one memory.
It is set in the “Identity” tab. It says who the agent is, who it works for, its method, what it must never do and how it closes a conversation, written from the client's answers. Two things don't belong there: formatting rules (length, lists, emojis), set per channel in “Format & Welcome”, and a description of what the base contains, which the platform gives the agent itself. Repeating them creates contradictions.
“Format & Welcome” tab, “1 · Welcome” section. A welcome without buttons leaves the visitor facing an empty field, the worst moment to ask them to type: the two are set together.
An answer that must come out right every time (opening hours, address, return terms) doesn't go through the model: it is a preset reply, written once in the “1 · Welcome” section and triggered by a button. The model isn't called, so there is nothing to decide. Three things to know:
What the agent does beyond answering is set in the “Actions” and “Human handoff” tabs. An action turned on with no destination makes a promise nobody will keep: that is the first thing to check.
| Action | What to know |
|---|---|
| Human handoff | Choose who receives requests: an email, team members in the console, or a Zendesk ticket. Turned on with no destination, it announces a human nobody will see. “Team office hours” keeps the agent quiet while the team is in. |
| Qualification | Name, request and urgency before bothering the team. The platform refuses the handoff while information is missing or urgency is below the threshold, whatever the agent decides: an instruction can be ignored, this check can't. |
| Appointment booking | The agent sends the client's booking page (Calendly, Cal.com, Google Calendar, their own page) at the right moment. It never offers a time slot itself: the booking page is the reference. Button text: 20 characters at most, WhatsApp's limit. |
| Contact collection | One single path to capture a contact. If a custom action already sends contacts to the client's tool, don't also turn on the built-in collection: the agent would have two ways to do the same thing, and nothing to choose between them. |
| Custom actions | A call to one of the client's services (ticket, email, sending to their software). The sentence saying when to use it decides everything: too broad, and the action fires at any time. At least one required field, otherwise the agent fires it without having collected anything. Keys go in the workspace vault, never in a conversation. |
Try each action end to end against your own address before pointing it at the client's. The technical details of custom actions (headers, secrets, signing) are in the developer documentation.
“Test”, at the top of the agent page, plays the work in progress: what you just set, before anything is published. The “Version tested” selector lets you play the live version, the one visitors see. Channels, the demo link and the API serve the live version: an unpublished fix doesn't exist for them. Before blaming a prompt or a model, check what is actually live.
A visitor doesn't just type questions: they click. Each gesture takes a different path from typed text, and that is often where an agent breaks without anyone noticing.
In Test, “Suggest sample customers” reads the agent's instructions, roles, knowledge base and the real questions from the last 30 days, then suggests typical visitors: a situation, a goal, a tone, a language and success criteria, with the real question that justifies each one. Keep, edit or drop them. Once a sample customer is picked, Test suggests at each turn the messages that visitor would write next, reacting to what the agent just said: the pressure you never apply yourself when testing by hand.
From ChatGPT or Claude, ask “run the full test on my agent”. Your AI receives DaleVoz's standard bench, the same as our internal ones: a click per welcome button, two questions answered by the knowledge base and two that aren't, a customer in a hurry, an unhappy one, a skeptical one, another language, an off-topic request and five attacks. It plays each scenario, scores each reply on the same grid and gives you a score out of 100 with a shareable report. A single invented fact caps the score at 40.
The “Publish vN” button, at the top of the agent page, freezes the work in progress into a numbered version. Until you use it, nothing you set reaches visitors or the demo link. These stay live without publishing: Knowledge documents, goals, connected channels and keys. To roll back: “Publish” tab, History block, “Restore to draft”, then publish again.
This whole method can also be followed in conversation, from Claude, ChatGPT, Claude Code or Codex connected to the DaleVoz MCP server. The AI acts with the permissions of the person who connected it, on one workspace. When it isn't sure what is possible, dalevoz_capacites tells it what the product can do, what it can't do from there, and where that is done instead.
You need ChatGPT Plus or higher, on chatgpt.com from a computer, or Claude, even on the free plan, and one connection per client. The illustrated step by step is in the console: Connect my AI. The technical reference is in the developer documentation, MCP section.
| Step | Tools | Good to know |
|---|---|---|
| Create | agent_preparer, agent_creer | agent_preparer returns the questions to ask for the profile (support, sales, interview, internal). The AI asks them to the person and waits for the answers; agent_creer refuses while a blocking question, goals included, is unanswered, and requires the form of address. The agent is born as a draft. |
| Before changing | agent_inspecter, agent_modifier | The setup score and the problems, each with the tab that fixes it. The prompt is replaced whole: start from the existing one to fix one point. |
| Knowledge | savoir_ajouter, savoir_lister, savoir_chercher | savoir_chercher queries the base without making the agent talk. |
| Goals | objectifs_proposer, objectifs_definir, sujets_lister, sujets_definir | Suggest first, set after the person agrees. |
| Menu | chemins_lister, chemins_definir | chemins_lister flags preset replies no button leads to anymore. |
| Actions | qualification_definir, outil_creer, outil_tester | outil_tester shows the request without sending it; the real call only with the person's agreement. |
| Test | agent_personas, personas_suggerer, agent_tester, agent_banc, agent_apercu, agent_rapport, essais_ranger | agent_tester plays the work in progress; a click is played with boutonClique, never with a typed message. agent_apercu shows the widget as a visitor will see it. |
| Read back | conversations_lister, conversation_lire, diagnostic_lire, diagnostic_lancer, decision_assumer | diagnostic_lire rereads the last diagnostics at no cost; diagnostic_lancer calls a model. |
| Publish | publication_etat, agent_publier, version_restaurer | publication_etat says what will go out; agent_publier once the person has decided. |
In Claude, ready-made prompts start these sequences (creer_un_agent, eprouver_avec_des_personas, diagnostiquer_l_agent, mettre_en_ligne). ChatGPT doesn't show them: the same request is then written in one sentence.
Latest version: dalevoz.ai/en/docs/methode