Chat9

Dashboard Features

What each section of the Chat9 dashboard does — Knowledge, Gap Analyzer, Logs, Review, 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 embed.js and passes your bot's public_id via the data-bot-id attribute. 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), 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, TODO/coming-soon placeholders, 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, escalated, or thumbs-down 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).

Chat Logs (/logs)

View all conversations your users have had with your bot.

  • Inbox layout: Sessions list on the left, full conversation on the right.
  • Session details: Last question, last answer preview, last activity time.
  • Message view: User messages and bot answers in a thread layout.
  • Clarification visibility: if the bot asked a follow-up question, you can see that turn in the conversation instead of guessing why the bot paused before continuing.
  • Feedback: Click thumbs-up or thumbs-down on any bot answer to rate its quality.

Review Bad Answers (/review)

A dedicated page showing answers marked with thumbs-down.

  • Review each bad answer with the original question.
  • Write or edit the ideal answer.
  • Use "Open in Logs" to see the full conversation context.

This page and Gap Analyzer complement each other:

  • Review Bad Answers is best for inspecting a specific bad turn.
  • Gap Analyzer is best for spotting repeated patterns across many turns.

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.

Privacy (/settings/privacy)

  • View a log of all PII redaction events — every time a user message contained detected personal information (email, phone, etc.) that was masked before being sent to OpenAI.
  • Download the log as a CSV for audit or compliance purposes.
  • Original (pre-redaction) message content is stored encrypted and can be accessed or permanently deleted from this page.

Escalations (/escalations)

L2 ticket inbox. A ticket is created automatically whenever a conversation is escalated.

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 active chat is closed (chat_ended). The widget shows a "Start new chat" button.
  • An email notification is sent to the support email configured in Settings.
  • A ticket appears in this inbox with a sequential number (e.g. ESC-42), the trigger, and a link to the conversation log.

Ticket priority (shown in the inbox):

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

Priority is set from the plan_tier field in the user's KYC identity token (enterprise or pro → elevated priority).

Resolving tickets: Click Resolve on any open ticket to close it. Resolved tickets remain visible with a filter toggle.

Admin (/admin/metrics)

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

On this page