Operate
Contact Widget
Embeddable chat widget with KB-grounded retrieval + LLM (Ollama Cloud free tier; BYOK Anthropic / OpenAI for paid plans).
Features
- **Public `POST /chatbot/message` endpoint** — submission creates a `support_tickets` row + emits `ticket.created_via_widget` event. Honeypot + signed-token challenge replaces a Turnstile dependency.
- **AI auto-reply (opt-in)** — gpt-oss:20b on Ollama Cloud. RAG: case-insensitive `ILIKE` over `kb_articles.title + body`, top-5 retrieved, re-ranked (title hit ×3, body hit ×1), top-3 fed as context. System prompt anchors strictly to retrieved context.
- **Citations in reply** — model returns article id + title for each citation; UI can link to KB.
- **Canned fallback** when AI off OR LLM unavailable — per-org `ai_chatbot_enabled` toggle + `AI_CHATBOT_ENABLED` env kill-switch. Widget never sees a 500.
- **`ai_traits` on inbound** — extracts profile traits from message content (fire-and-forget; per-org `ai_auto_traits_enabled` opt-in).
- **Per-project chatbot configs** — colours, labels, persona name, KB binding, handoff toggle + message.
- **Drop-in chat bundle (Wave 49)** — `<script src="https://go.sendoracloud.com/chat.js" data-chatbot=UUID async>` adds a floating chat button + AI-replied panel to any page. ~6 KB, dependency-free. Talks to public `POST /widgets/:widgetId/chat` (UUID-as-key, no API key needed on a public page). Multi-turn context via server-minted `sessionId`.
- **Drop-in contact-form bundle** — `<script src="https://go.sendoracloud.com/widget.js" data-widget=UUID async>` for the email-based ticket flow. ~4 KB.
- **SDK helpers** — Web `sendora.chatbot.send()`; RN 0.18.8+ ships `chatbot.sendMessage()` with auto session id per JS lifetime. Use these when you need custom chat UI inside a native app.
Common use cases
- Contact form on a marketing site where the submission should land in your existing Support inbox, not a separate vendor.
- AI-assisted support entry-point grounded on YOUR KB articles (not a generic LLM hallucinating product details).
- Multi-turn chat in your own app — call the SDK from your custom UI; backend handles retrieval + LLM + ticket creation.
Setup
- 1Toggle AI on (optional)Dashboard → Settings → AI features → Enable chatbot LLM. Per-org opt-in.
- 2Author KB articlesKnowledge Base module. Chatbot retrieves on ilike match before LLM call.
Chatbot
Mount the widget
FREEDrop-in floating chat bubble. The widget loads the bot config + knowledge-base index lazily; cold-start <100KB.
<script src="https://api.sendoracloud.com/widgets/chatbot.js"
data-widget-id="{{WIDGET_ID}}"
async></script>Send a message programmatically
FREEBypass the widget UI and send messages from your own chat surface. Returns the bot reply + session id for follow-ups.
const reply = await sendora.chatbot.sendMessage({
botId: "bot_abc",
message: "How do I reset my password?",
sessionId: previousSessionId,
});Create a bot
GROWTH+Define system prompt, knowledge sources, and fallback policy. Per-org `ai_chatbot_enabled` opt-in required for live LLM-backed replies.
curl -X POST https://api.sendoracloud.com/api/v1/orgs/<ORG_ID>/chatbots \
-H "x-api-key: pk_prod_…" \
-d '{
"name": "Helpdesk bot",
"systemPrompt": "You are a friendly support agent…",
"knowledgeBaseIds": ["kb_main"],
"fallbackToHuman": true
}'