Chat9

Dashboard Features

What each section of the Chat9 dashboard does — Knowledge, Gap Analyzer, Inbox, and more.

The app uses a left sidebar for navigation (main items, SETTINGS, and Admin for platform admins). The top bar shows the Chat9 brand, your email, and Logout.

Dashboard (/dashboard)

  • Your Bot ID — your bot's public_id, used in the widget embed snippet (the value of data-bot-id). Safe to expose in page HTML; this is not your secret API key.
  • API key — your secret X-Api-Key for server-to-server API calls (POST /chat, etc.). Copy with one click.
  • Embed code — HTML snippet that loads the widget loader (widget.getchat9.live/widget.js) with your bot's public_id via data-bot-id, then calls Chat9Widget.start() to mount the chat. Copy the block; code areas use an inline copy icon.
  • If the OpenAI API key is not set, an amber banner links to Agents (/settings) to configure it.

Knowledge hub (/knowledge)

Formerly /documentsthat route is removed; use Knowledge.

  • Supported formats: PDF, Markdown (.md, .mdx), HTML (.html, .htm), Swagger/OpenAPI (.json, .yaml, .yml), Word (.docx, .doc), plain text (.txt).

  • Profile tab: review the extracted product profile, glossary, and editable topics derived from your docs. These topics are documentation themes, not necessarily strict product module names.

  • FAQ tab: review auto-generated FAQ candidates extracted from your knowledge base. Approve, reject, or edit each candidate — approved FAQs are used to answer common questions directly without a full retrieval pass. "Accept all" is available for quick bulk moderation.

  • OpenAPI ingestion: API specs are split into operation-aware chunks, with extra request/response schema detail for larger endpoints.

  • Limits: e.g. max file size 50 MB (see product limits); embedding runs asynchronously after upload/trigger.

  • Status: Documents move through readyembeddingready or error; the UI polls the API until embedding finishes.

  • Health: After embedding, each document gets a health score (0–100). Chat9 runs a set of rule-based checks and flags issues that can hurt retrieval quality:

    IssueSeverityWhat it means
    Empty or too shortHigh / MediumNo readable text, or under ~80 words — too little content for reliable retrieval
    Parse / extraction issueHigh / MediumNull or replacement characters, or the text is noisy and symbol-heavy — suggests the file didn't extract cleanly
    Poor structure (Markdown)High / MediumA section is very long without subheadings, or a long document has almost no headings — different topics end up in the same chunks
    Incomplete sectionMedium / LowAn empty heading, an unclosed code block, or the document ends mid-sentence

    A Re-check button runs the health check again after you've improved the document. Health issues are informational — the document still works, but fixing them improves answer accuracy.

  • Delete: Removes the document and its embeddings.

  • URL sources: Add a documentation website by URL, track crawl/index status, review recent runs, and manage exclusions. When adding a source you can set a crawl schedule:

    ScheduleBehavior
    Weekly (default)Chat9 automatically re-crawls the source once a week
    DailyRe-crawls every day
    ManualNo automatic re-crawl; you trigger it yourself

    You can also trigger a manual refresh at any time from the source row. There is a 1-hour cooldown between manual refresh requests to prevent accidental hammering.

  • Indexed pages: Inside a URL source, you can remove one indexed page without deleting the whole source. Removed pages stay excluded from future refreshes for that source.

  • External sources: Cards for future connectors (e.g. GitHub) plus a unified table of indexed sources.

Gap Analyzer (/gap-analyzer)

Gap Analyzer is the operator backlog for things your documentation may be missing and questions your users keep asking.

  • Mode A (docs-side): looks at your indexed documentation and surfaces topics that appear under-covered.
  • Mode B (user-side): groups repeated low-confidence, fallback, rejected, or escalated question signals into actionable clusters.
  • Linked visibility: when Chat9 sees the same issue from both directions, the active list keeps one primary card instead of showing obvious duplicates.
  • Actions: dismiss, reactivate, and generate a draft outline for a documentation update.
  • Archive view: review dismissed docs-side topics separately from closed or dismissed user-question clusters.
  • Recalculate: manually trigger a fresh analysis pass from the UI when you want to refresh the backlog after updating docs.

Agents (/settings)

  • OpenAI API key — per-client key, encrypted at rest; required for embeddings, chat, and document health checks. Save, update, or remove the key from this page.

  • Agent instructions — the system prompt that shapes how your bot communicates: its persona, tone, ground rules, and formatting preferences. Edited in a textarea (max 3 000 characters) with a character counter.

    • A Support Agent preset is available — click it to fill in the standard customer-support persona. If you modify a preset and want to start over, re-apply it from the preset button.
    • The placeholder {product_name} is replaced at runtime with the product name extracted from your knowledge base.
    • Clearing the field (saving empty) resets to the default Support Agent preset.
    • When you create a bot and provide a website URL at signup, Chat9 auto-extracts a short company description from that page and prepends it to the preset instructions in the background.
  • Response detail level — Detailed / Standard / Corporate. Controls how much technical depth the bot includes in answers. This setting also lives on this page; see the description of each level when selecting it.

  • Escalation settings — support email address that receives L2 escalation tickets, and an optional escalation language override (pins the language of tenant-side ticket artifacts independently of what language end users write in — see Language Support for the full picture).

Inbox (/inbox)

Every conversation your visitors have had with the bot, and the place where a person steps in.

  • Needs attention: the default view — visitors waiting for a human (an open escalation ticket nobody has answered yet, longest wait first) and conversations an operator is currently holding. Once you have replied — in the conversation, or by e-mail to the visitor — and the conversation is back with the bot, it leaves this view, even if the ticket is still open; if the visitor asks for a human again, it comes back. The count of visitors waiting shows as a badge next to Inbox in the sidebar.
  • All: every conversation, newest activity first, including the ones the bot is handling on its own. Sessions with no messages at all are not listed.
  • Thread view: the visitor's full session — visitor messages, bot answers and operator replies are styled differently, operator replies show who wrote them, and a divider marks where an idle conversation was restarted. Text is shown exactly as it was written.
  • Reply: type and send; the visitor sees the reply in the widget within a few seconds, signed as Support in the language of the conversation. Sending a reply takes the conversation: the bot stays silent while you hold it.
  • Take / Return to bot: take a conversation before you write, or hand it back to the bot explicitly. If you go quiet, the bot resumes on the visitor's next message after the idle window on its own.
  • Mark resolved: closes the escalation ticket (with an optional note), retires the e-mail reply address for that ticket, and returns the conversation to the bot. The row leaves Needs attention.
  • Seats: anybody in the workspace can read the Inbox. Replying, taking, returning and resolving need an operator seat (Settings → Seats). A reply sent by e-mail from a seat holder lands in the same thread and looks the same as one sent here.

Chat9 does not assign conversations. A held conversation shows who holds it, and a colleague can still answer in it.

Response controls

Set the response detail level (Detailed / Standard / Corporate) from Dashboard → Settings. The three levels:

  • Detailed — full technical depth: paths, diagnostics, vendor/tool names.
  • Standard — plain language; avoids internal paths, stack traces, and vendor error names.
  • Corporate — polished, non-technical tone; no ETAs or deep technical detail; offers a support contact for ongoing issues.

Widget API (/settings/widget)

  • Manage signing secret (generate, rotate) for optional identified widget sessions.
  • Generating a new secret immediately invalidates the previous one — all in-flight tokens signed with the old secret will be rejected.
  • Server-side token example (Python) with copy-to-clipboard on the snippet block.
  • See Embedding the Widget → Identified sessions for the full integration guide and SDK reference.

Escalation tickets

A ticket is created automatically whenever a conversation is escalated. Tickets live inside the conversation: open the visitor in Inbox to see the ticket number, its trigger and priority, answer, and mark it resolved.

What triggers escalation:

TriggerWhen it fires
No documentsNo knowledge documents are loaded — the bot has nothing to search
Low confidenceThe best retrieval score is below the threshold (bot can't find a relevant answer)
Answer rejectedThe LLM-generated answer failed internal quality validation
User requestThe user explicitly asks for a human — e.g. "talk to a human", "connect me to support", "хочу с оператором"

What happens when a ticket is created:

  • The visitor's chat stays open — they can keep talking to the bot while your team works the ticket. It closes (chat_ended) only once the visitor confirms they need nothing further, and the widget then shows a "Start new chat" button.
  • An email notification is sent to the support email configured in Settings. When the workspace holds a seat, the e-mail also links straight to the conversation in the Inbox, and replying to it from a seat holder's mailbox lands the reply in the thread.
  • The conversation appears under Inbox → Needs attention with a sequential ticket number (e.g. ESC-42).
  • Tickets whose conversation has gone quiet are closed automatically. That only clears the queue; it does not mean anyone answered.

Ticket priority (shown in the thread header):

TriggerStandard userEnterprise / Pro user
User requestHighCritical
Low confidence / no docsMediumHigh
Answer rejectedMediumMedium

Priority is set from the plan_tier field in userHints (enterprise or pro → elevated priority). See Embedding the Widget → userHints.

Admin (/admin/metrics)

  • Visible only to users with is_admin. Platform-wide usage metrics.

On this page