Launch / How to

Troubleshooting

Find the symptom, get the cause. Most of what looks like a bad model is a source that was never indexed, a domain that was never listed, or a value the agent was allowed to invent.

Start here

Two instruments answer most questions before you change anything. Both are free.

InstrumentTells you
Retrieval trace, on the Knowledge tabWhether the material was in the index at all. Costs nothing and starts no conversation.
The transcript, under ConversationsWhat 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 HS256 with 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.