Troubleshoot Sol Helps
Start with the exact symptom and preserve the browser time, hostname, assistant ID, route, request/delivery ID, and redacted error. Never share embed tokens, webhook secrets, or conversation content unnecessarily.
Widget does not appear
Check bootstrap.js, authentication, sol-chat.umd.js, CSP, target ID, and the
browser hostname in that order. Verify on an allowed domain in a private
window. Success means one target mounts and opens.
Widget authentication fails
Confirm window.ChatbotConfig contains the matching assistantId and token,
then check the authentication response. Copy fresh values from the assistant;
do not log them. Escalate with status and request time, not credentials.
Domain is rejected
Compare window.location.hostname with the saved allowed-domain hostnames.
Exact hosts and subdomains match. Fix the hostname entry and retest; do not
temporarily allow unrelated domains.
Widget appears more than once
Search the rendered page and tag manager for duplicate bootstrap scripts and duplicate targets. Remove the duplicate installation. Reinitialising one target reuses its root; two scripts or targets can produce two visible instances.
Inline launcher does not open the widget
Confirm the widget initialised first, the element has data-sol-open, and
data-sol-target matches the mounted target. Validate every context attribute.
Inline placement is already open and cannot be closed programmatically.
Context does not appear
Inspect the result of setContext() or the bounded launcher warning. Remove
unknown fields, high-cardinality values, and invalid tags. Submit a new eligible
message after the context update; old messages are not rewritten.
Conversation is not captured
Check plan, enableChatLogging, visitor opt-in, assistant/date filters, traffic,
and widget logging requests. Free widgets do not send chat logs. Success means
the controlled eligible interaction appears in Captured Questions.
Consent prevents logging
This is expected after opt-out. Do not bypass consent. Verify the prompt and privacy configuration, then use an explicitly opted-in controlled test.
Assistant does not answer
Confirm the assistant is active, under quota, authenticated, and able to answer in preview. Record the assistant-request status. If preview works but embed does not, return to deployment/authentication checks.
Expected knowledge is not used
Confirm the source is under the selected assistant and is Current, then ask a question explicitly grounded in it. Resolve stale/failed/contradictory sources. Do not add duplicates to manipulate retrieval.
Feedback does not appear
Confirm the response was rated and a structured reason selected. Undo removes both. Check that the conversation itself was eligible and captured.
Insights filters show unexpected results
Clear one exact filter at a time, verify period and assistant, then compare the stored surface, host, path, campaign, and widget version on an original record. Filters are server-enforced; context and attribution values must match exactly.
User cannot access Captured Questions or Insights
Check conversations.read or insights.read and assistant scope. A scoped user
may need one specific assistant instead of “all”. Use
Roles and Permissions.
Webhook handoff fails
Confirm Growth/Business, insights.export, enabled HTTPS configuration, and a
receiver 2xx response within 10 seconds. Check signature verification against
the raw body. Collect delivery ID, status, and redacted preview.
Plan limit blocks an action
Review current plan and usage in Account. Reduce usage only after identifying the affected assistants/documents, or upgrade through the billing workflow. Do not delete data as a first diagnostic step.
Escalation bundle
Provide the symptom, timestamp/timezone, page hostname/path, assistant ID, browser/version, relevant plan and role, consent state, exact status/reason, and request or delivery ID. Redact tokens, secrets, personal data, and message content unless support explicitly requires a secure transfer.