Start here
Two instruments answer most questions before you change anything. Both are free.
| Instrument | Tells you |
|---|---|
| Retrieval trace, on the Knowledge tab | Whether the material was in the index at all. Costs nothing and starts no conversation. |
| The transcript, under Conversations | What actually happened, in order, including which tools ran. |
Bad answers
It says it does not know something you have published
Trace it. If nothing comes back, the material is not in the index. Check the index state reads Ready, then check the source was readable. A scanned PDF is the usual cause and fails silently. See Supported file types.
If the passage does come back, the prompt is overruling it. Look for a boundary written so tightly that the agent declines rather than answers.
It gives an out-of-date answer
Two sources disagree and the stale one matched better. Trace the question and read the origin on each result to find which is which, then remove the stale source and save to reindex. If both have to stay, say which one wins in the prompt.
It invents a price, a date or a policy
There are two causes and the trace separates them. If the figure exists nowhere in your sources, the prompt is missing a boundary: forbid it with the reason attached, as Give every rule a reason describes. If the figure is in the prompt itself, move it into knowledge, because a fact in a prompt arrives with no source and competes with the passages retrieval found.
The answer is right but stops half way
The passage was cut mid-table. A price list written as wide rows survives chunking badly. Rewrite the source as prose or as short rows, then reindex.
It is unbearable to listen to on a call
The Voice block of the prompt is missing or too weak. Cap the reply length, ban markdown, and spell out symbols and currency. See Prompts for voice agents.
It loops, repeating the same answer
The agent has run out of moves and has not been told what to do next. Add the next step to the Job block: take a name and email, or call a tool. An agent with nowhere to go repeats itself.
Knowledge and indexing
The index reads Failed
The run stopped and Duvi replaced nothing, so the agent is still answering from the previous index. Remove sources one at a time and save until the run completes. The source that breaks it is almost always a file that cannot be opened or a site that stopped responding.
The crawl finished but the agent knows almost nothing
Check robots.txt on the origin, then check a sitemap is declared in it. With no sitemap the crawler starts at the address you gave and follows links from there, which on a site with thin navigation collects very little.
One specific page is missing
Either robots.txt disallows it, or it is absent from your sitemap, or it sits outside the address you gave. An address with a path stays under that path. All three are decided on your side.
A file is listed but never quoted
Open it and try to select a sentence. If nothing highlights, it carries no text layer and indexed as empty. See Formats that index as nothing.
An upload never finishes
An interrupted upload stays incomplete and cannot be used as knowledge. Nothing repairs it, so upload the file again rather than waiting.
The website widget
It does not appear on your site at all
Almost always the domain. Duvi matches on hostname, so www.example.com and example.com are two entries and adding one does not add the other. Compare the hostname in your browser address bar against the list on the Security tab.
If the list is correct, check the two lines are on the page before the closing body tag, and that your CMS has not stripped the script tag.
It works on your site but not inside another page
The widget refuses to render inside a frame unless that frame is marked to allow it. See Frames and style isolation.
Page variables are not reaching your tools
The attribute must be valid JSON with an object at the top level. Duvi ignores anything else and warns in the browser console. Only strings, numbers and booleans survive. Duvi withholds a tool entirely when a field set to come from your website has no matching page variable.
It answers in text but the call button does nothing
Voice needs both a transcriber and a voice chosen on Configure. An agent with a model but no voice answers and says nothing.
Tools and connectors
A tool never fires
The description is the only thing the agent reads when deciding. Write it as one sentence about when to use the tool, in the words your customers use. Then state in the Tools block of the prompt what must be true before calling it.
A tool fires but the call fails
Open the transcript and read the tool activity. The agent sees the status and the body, so a readable error body is what lets it recover gracefully. Check that a GET action is not carrying body parameters, which Duvi ignores.
A connector shows Not working
The reason is shown at the top of its panel. Access withdrawn or expired at the service is the common one, and reconnecting from the same panel fixes it. The agent carries on without that connector rather than failing conversations.
A connector is Connected but lists no tools
The service answered and offered nothing, usually because a feature still needs switching on at that service. Nothing in Studio changes this.
A customer sees another customer’s data
Check every tool field that decides whose record comes back. If any is set to Ask the customer, the agent is passing whatever the person on the other end claimed. It must be From the signed-in customer, which the agent cannot see or invent. See Value sources.
Customer identity
Every visitor is being refused
The agent is set to Only signed-in visitors while identity is not working, so nobody gets in. Studio says so in red at the top of the Security tab. Either fix the endpoint or set access back to Anyone.
A signed-in customer is treated as anonymous
Work down this list in order.
- The endpoint is on the same origin as the page, so the browser sends your existing cookies.
- The token is signed
HS256with the key currently marked In use. - Its audience is exactly
duvi. - Its expiry is no more than 120 seconds away, and your server clock is right. Tolerance is 30 seconds either side.
One customer occasionally sees another customer’s session
Your identity endpoint is being cached. Send no-store on both the signed-in and the anonymous response, and keep the route dynamic. See Customer identity.
You need to change the signing key
Add the new key, then switch which one is in use. The old key keeps working until you switch, so nothing is rejected part way through. You cannot remove an identity endpoint once set, only point it somewhere else.
Phone and WhatsApp
The number rings out
The webhooks on the number did not save, or were edited afterwards in the provider console. Duvi writes them onto the number itself, so changing them there breaks the link. Reconnect from the Channels tab.
A number does not appear when connecting
Duvi lists only voice-capable numbers, and buys nothing on your behalf. Buy the number at the provider first.
WhatsApp stays on Needs webhook
The provider has not called your webhook back yet. Duvi generates both the webhook address and the verify token, and you paste them at the provider rather than inventing them there.
WhatsApp was working and stopped
Meta rates business numbers and can limit or disable one on its own. The connection shows the reason the provider gave, and the fix is at Meta rather than in Studio.
Credits
Conversations are refused for insufficient credits
Duvi checks the balance when a conversation opens and again on each message. An empty balance stops the agent rather than returning a lower quality answer. Top up, or turn on Top up automatically.
Automatic top-ups stopped happening
Repeated failures stop the attempts rather than retrying forever, and the form shows how many failed. Fix the card, then save again to reset the counter.
The balance fell faster than expected
Length matters more than message count, and Duvi sends the system prompt again on every turn. A price list pasted into a prompt is billed to every customer who asks about anything. Check the breakdown by agent and by channel on Billing.
Preview also costs credits, because it runs the real widget. A retrieval trace does not.