Installation steps
- 1
Prepare
Open the deployed page, not a file preview, and open DevTools on the Network tab.
- 2
Configure
Filter for
widget.jsand confirm a 200 response, then filter forwidget/configand read its status. - 3
Publish
Read the Console for a line that starts with MivoChat; it names the problem it found.
- 4
Verify
Apply the matching fix from the table and reload in a private window to rule out caching.
Symptom, check and fix
Work down the table from the top. The first rows are the most common causes and the quickest to rule out, and each fix is a single change.
| Symptom | Check | Fix |
|---|---|---|
No launcher and no widget.js request | View the page source of the deployed page and search for the script tag. | Add the tag to the shared template and redeploy; purge any CDN cache. |
widget.js is blocked or never completes | Network status, and Console lines that mention a policy or a blocked request. | Allow the origin in your CSP, or disable the ad or privacy blocker for a test window. |
/api/v1/widget/config returns 403 | The response body says origin_not_allowed. | Add the exact scheme and host to Install, Allowed websites. Include www and preview hosts you test on. |
| The Console says the page has an opaque origin | The page is a file:// preview or a sandboxed frame. | Serve the page over http or https, on a real hostname. |
| The launcher looks unstyled | The Console reports a blocked inline style. | Add style-src 'unsafe-inline' to your policy. |
| Two launchers appear | Search the source for two loaders, or a plugin plus a manual tag. | Keep one install path and remove the other. |
| Missing for some visitors only | Retest with extensions turned off and in a private window. | An ad blocker is blocking the script. Nothing on your site needs to change. |
What the console messages mean
The loader prints one warning when the page has an opaque origin, which happens on file:// pages and sandboxed frames, and the text asks you to serve the page over http or https. It prints a different warning when the site is not allowed, naming the origin it saw and pointing you to Install, Allowed websites.
Copy that origin into the allow list exactly as printed. Remember that localhost, a staging host and the production host are separate origins, so add each one you test on.
Still stuck
Email hello@mivochat.app with the page URL, the failing request and its status code, and the first MivoChat line from the Console. Your public site key is safe to include; never send an identity secret.
Before you change the setup
- Who this is for
- a developer whose installed widget does not appear, does not open, or looks broken on one page
- What you need
- the deployed page URL, DevTools, and access to Allowed websites in your MivoChat Install settings
- Where it goes
- the browser's DevTools Network and Console panels on the deployed page, then Install settings in MivoChat
- Watch out for
- a file preview and a sandboxed frame have no origin that can be allowed, so test on a real http or https hostname
Test the support boundary
- Does widget.js return 200 in a private window with extensions off?
- Does the config request return 200 rather than 403 on every hostname you serve?
- Does a visitor message reach your connected channel?
Frequently asked questions
Is the launcher missing only on my staging site?
Staging is a separate origin. Add its exact host to Allowed websites, or test on the production hostname that is already allowed.
The script loads but nothing happens
Check the config request. A 403 means the origin is not allowed; a blocked request points at your connect-src policy.
Can an ad blocker hide the chat?
Yes. Blockers can stop third-party scripts for some visitors. Offer a support email on the page as a fallback.
The install status never turns green
The status updates when the widget loads from an allowed origin. Open the live page once, then refresh the Install page.
Keep exploring
The r3-final-a evaluation measured 95% answerability-tier accuracy on 224 questions; this is an evaluation result, not a guarantee. AI replies use Anthropic. See the method and results and subprocessors and data locations.