Meiqia live-chat widget not showing / integration error fix lookup
Fig: Meiqia chat integration not-showing / error fix lookup (L1 behavior + L2 root cause + five integration methods)
Did your Meiqiaweb live-chat widget not show up after pasting the code, the chat button never appear, the console report meiqia.js blocked, or agents get no chats? Get three things straight first - did the script not load at all (placement / ad blocker / cache), did it load but get hidden by page styling / stacking, or did it load fine but the config not match (entId / domain / SPA lifecycle). Look up the symptom or keyword you hit (e.g. not showing, adblock, entid, spa, mobile, sdk push): first the L1 behavior & official positioning, then the L2 root cause & fix, then the five integration methods and real cases. Need install / setup? See Meiqia download / customer-service integration guide.
Step 1: check whether the script loaded, then split into four buckets
When Meiqia chat doesn't show, 9 times out of 10 it's one of four buckets - first see whether the script even loaded: F12 -> Network, search meiqia.js; no request or a non-200 status means it didn't load. (1) Load failure - code in the wrong place (it belongs before </body>, not in <head>), blocked by an ad-blocker rule (ERR_BLOCKED_BY_CLIENT), held by CDN / browser cache, or HTTPS cert / mixed content; (2) Config / authorization - entId mismatched with the workbench (script loads but agents get no chats), or the site domain not authorized in the console; (3) Framework integration - a Vue/React/Next SPA destroys the container on a route change and the widget isn't rebuilt; (4) Display / mobile / SDK - site CSS pushes the bubble off-screen / a third-party plugin overlays the DOM, mobile needs its own deploy, in-app needs the SDK. Fuller setup: Meiqia website integration guide.
Load failureplacement . ad blocker . cache . HTTPS
Paste the Meiqia JS before
(not in
); F12 -> Network, search meiqia.js and check the status (should be 200); ERR_BLOCKED_BY_CLIENT usually means an ad-blocker extension - retest in incognito or whitelist; clear CDN cache after publishing; ensure full HTTPS with no mixed content.
entId is your company's unique id; a mismatch with the workbench means "the script loads but agents get no chats" (check Settings - Team - ID lookup); the site domain must be authorized via "Add integration site"; use a separate sub-channel (probe) per business line instead of reusing one snippet.
A Vue/React/Next SPA destroys the DOM on a route change and the widget isn't auto-rebuilt; use _MEIQIA('manualInit') to stop auto-init and call _MEIQIA('init') in a route hook (useEffect / mounted) to re-mount on demand.
Loaded but invisible: usually site-wide CSS overrides the bubble position, or a heatmap / analytics / SEO plugin edits the DOM and overlays the container; F12 -> Elements, search the meiqia container and check for display:none, a losing z-index, or off-screen coords.
Mobile / SDKmobile web . AppKey . push
Mobile / PC web is the same snippet but needs its own deploy; in-app uses the native SDK (first "Add APP config" in the console for an AppKey); push splits into "no push" (in-app only) and "custom push server" (delivered even after leaving the app).
API callswithoutBtn . showPanel . customer info
Want your own button: _MEIQIA('withoutBtn') hides the built-in button, and call _MEIQIA('showPanel') on click to open the chat; pass / sync customer info within the init timing, or it won't take effect.
Fig 1: Meiqia not-showing triage - check whether the script loaded, then split into load / config / framework / display
Step 2: the most overlooked root cause -> L2 (the widget = third-party off-domain async JS injection)
Key idea: the Meiqia web widget is not a static component embedded in your page - it's a meiqia.js file loaded asynchronously from Meiqia's off-domain origin that then dynamically injects a chat container (DOM / iframe) into your page and opens a cross-origin long-lived connection to Meiqia's servers. That explains most "mysterious" no-shows: (1) it's a third-party off-domain script - AdBlock / uBlock block it by their "third-party tracking / ads" rule lists, so ERR_BLOCKED_BY_CLIENT and the button never appears (while the console looks fine); (2) it injects the DOM asynchronously - in <head> it blocks, an SPA route change destroys the container and it won't auto-rebuild (use manualInit + _MEIQIA('init')), and other heatmap / analytics plugins editing the DOM can overlay its stacking; (3) it binds to your company via entId and is gated by a domain whitelist - with a wrong entId or unauthorized domain the script loads but "can't connect a chat"; (4) mobile and PC are two separate integrations, in-app is the SDK (AppKey), and push splits into "no push" vs "custom push server". Once you see this injection chain, every symptom below has one logic. Below is the integration self-check panel; further down are the five integration methods and 2026 estimates.
Fig 2: Meiqia integration self-check panel (green = confirmed / red = easily missed)Fig: check "code placement + meiqia.js 200 + initialized" first, then "ad blocker + framework/stacking" - the last two are most overlooked
Full symptom table (L1 behavior / official positioning . L2 root cause)
Meiqia five integration methods compared (code / difficulty / features / scenario / time-to-live . official docs)
The following are 2026 estimates synthesized from Meiqia's official help (Access Channels / JavaScript web widget API) and public integration troubleshooting (not vendor commitments, not first-hand measurement; for reference, shifts by version and browser policy):
Dimension
Estimate / comparison
Not-showing cause split (community / tickets . est.)
the web widget = third-party off-domain async JS injecting the DOM + a cross-origin long-lived connection (not an embedded static component); hence affected by placement, ad-block rules, page CSS stacking, SPA lifecycle
Per-platform integration (est.)
PC / mobile web = JS widget (same code, deployed separately); app = native SDK (AppKey); WeChat / Douyin / RED = channel-authorized integration
Ad-blocker impact (est.)
about 30-40% of PC users run an ad-blocker extension -> the third-party chat script is blocked by ad rules (ERR_BLOCKED_BY_CLIENT), a leading cause of "console fine, user side missing"
JS widget time to live (official)
paste the dedicated JS at the page bottom and it goes live in about 3-5 minutes; entId is the company's unique id, and a mismatch with the workbench means agents get no chats
Estimate basis: source baseline + time extrapolation (meiqia.com/help Access Channels / JavaScript web widget, meiqia.im website-integration guide, public integration troubleshooting, 2026); shifts with version and browser blocking policy. Rely on Meiqia's latest official info.
Real-world cases - quick read
Code pasted but no chat bubble: F12 -> Network, search meiqia.js first - no request or a non-200 means it's misplaced / held by cache; clear the CDN cache or reopen in incognito.
Console says meiqia.js net::ERR_BLOCKED_BY_CLIENT: an ad blocker (AdBlock / uBlock / AdGuard) blocked the third-party chat script by its ad rules - disable the extension or whitelist the site; this is also why "it's missing for some users while your console looks fine".
Script loaded (console typeof _MEIQIA is function) but no button: usually a theme CSS pushed the bubble off-screen or a heatmap / analytics plugin changed the DOM stacking - F12 -> Elements, search the Meiqia container and check item by item.
Home page has chat in a Vue / React SPA, but a second route doesn't: the SPA route change destroyed the container and the widget wasn't rebuilt - use manualInit to stop auto-init and call _MEIQIA('init') in the route hook to re-mount.
The chat opens but agents receive no visitor messages: most likely the entId doesn't match the workbench (copied someone else's snippet / mixed up accounts) - check the company ID under Settings - Team - ID lookup against the entId in the page code.
Works on staging, won't load on the production domain: the production domain wasn't authorized via "Add integration site" - add the live domain to the integration-site list, then republish.
Want to drop Meiqia's built-in round button and use your own "Contact support" button: call _MEIQIA('withoutBtn') to hide the built-in one, then bind _MEIQIA('showPanel') to your button to open the chat.