Create, setup and edit bots
This guide explains how to create a bot, configure languages and text direction, build a flow with nodes, validate user inputs (email/phone/etc.), and publish a public chat link.
- • Visual flow builder + templates
- • Multi-language + RTL/LTR
- • Input validation (Email/Phone/Regex) + Validate node
- • Knowledge Base (RAG) + optional AI answer mode
- • Webhooks node (integrations) + email actions
- • AI Response node + Generate flow using AI (plan-based)
- • Public share URL + themes (plan-based)
- • REST API (plan-based) + AI usage analytics
- • Dashboard → Bots / API key
- • Bot → Settings (languages, themes, integrations)
- • Bot → Builder (nodes + validations)
- • Billing (plan + AI usage)
1) Create a bot
- Open Dashboard.
- Click Create Bot.
- Give it a name (required) and click Save.
Tip: Bot name is trimmed and cannot be empty/whitespace.
2) Setup & settings
Open Bot → Settings to configure:
- Default language (example:
en,he,ar) - Supported languages (CSV, used by public chat selector)
- Text direction (
auto,ltr,rtl) - Public theme (dark/light/blue/green/yellow/orange/silver)
- Multi-session (each visitor gets a separate session)
- Send bot Q/A results on session end:
- Email (optional): attach uploaded files and/or attach a JSON file with the full session results (including base64 file content when available)
- Client API (webhook): POST JSON to your endpoint
- SFTP: upload a
.jsonfile to your SFTP server
Note: supported languages are normalized, deduped, and the default language is ensured.
3) Builder (nodes)
Use the builder to add nodes and connect them into a conversation flow.
- • Bot Message
- • Ask Question
- • Buttons
- • Condition
- • Validate Input
- • Send Email / Webhook
- • Keep a clear happy-path
- • Validate before actions (email/webhook)
- • Add fallback message for invalid inputs
4) Input validations (email / phone / etc.)
You can validate user answers using:
5) Knowledge Base (RAG)
Upload documents to your bot Knowledge Base and use a KB node (or KB-enabled node) to answer using your content.
Large text is chunked safely for stable retrieval.
6) Publish & share
Use the bot share token to open a public chat page. You can enable multi-session if your plan supports it.
/PublicBot/Chat/{token}
7) API (bot management + web sessions + WhatsApp)
If your plan includes API access, you can manage bots via REST. You’ll find your API key in Dashboard → API.
flow) or as a
string (flowJson). When you send flow, the server stores it as flowJson.
{
"version": "1.0",
"timestamp": "2026-02-25T10:21:41.683Z",
"nodes": [
{ "id": 1, "type": "start", "x": 50, "y": 50, "data": { }, "outputs": [] }
],
"edges": [
{ "from": 1, "to": 2, "handle": null }
]
}
GET /api/bots
GET /api/bots/{id}
POST /api/bots
PUT /api/bots/{id}
DELETE /api/bots/{id}
GET /api/bots/{id}/flow
PUT /api/bots/{id}/flow
GET /api/bots/{id}/settings
PUT /api/bots/{id}/settings
GET /api/bots/{id}/shares
POST /api/bots/{id}/shares
DELETE /api/bots/{id}/shares/{shareId}
POST /api/bots/{id}/web/sessions
GET /api/bots/{id}/web/sessions/{sessionId}
POST /api/bots/{id}/web/sessions/{sessionId}/messages
POST /api/bots/{id}/web/sessions/{sessionId}/upload
POST /api/bots/{id}/web/sessions/{sessionId}/signature
POST /api/bots/{id}/whatsapp/test
GET /api/whatsapp/webhook
GET /api/whatsapp/phones
POST /api/whatsapp/phones/sync
PUT /api/whatsapp/phones/{id}/inbound-bot
GET /api/whatsapp/templates
POST /api/whatsapp/templates
POST /api/whatsapp/templates/refresh-all
GET /api/files
GET /api/files/{id}
POST /api/files
DELETE /api/files/{id}
POST /api/bots
X-Api-Key: YOUR_KEY
Content-Type: application/json
{
"name": "Loan Assistant",
"description": "Bot + flow created via API",
"flow": {
"version": "1.0",
"timestamp": "2026-02-25T10:21:41.683Z",
"nodes": [
{ "id": 1, "type": "start", "x": 50, "y": 50, "data": { "bot_answer": "Hello! What is your name?" }, "outputs": [] },
{ "id": 2, "type": "question_node", "x": 260, "y": 50, "data": { "text": { "en": "What is your name?" }, "variable": "name", "type": "Text", "bot_answer": { "en": "Nice to meet you {{name}}" } }, "outputs": [] }
],
"edges": [ { "from": 1, "to": 2, "handle": null } ]
}
}
PUT /api/bots/123/flow
X-Api-Key: YOUR_KEY
Content-Type: application/json
{
"flow": {
"version": "1.0",
"timestamp": "2026-02-25T10:21:41.683Z",
"nodes": [ { "id": 1, "type": "start", "x": 50, "y": 50, "data": { } } ],
"edges": []
}
}
curl -H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"My Bot","flow":{"version":"1.0","nodes":[{"id":1,"type":"start","x":50,"y":50,"data":{}}],"edges":[]}}' \
https://YOUR_HOST/api/bots
8) Node types reference
These are the supported node types for Flow JSON (UI builder and API). Each node is stored as:
{ id, type, x, y, data, outputs }. You connect nodes using edges.
- • Default edge: handle = null
- • Condition: handle = "true" or "false"
- • Buttons / Quiz: handle = option text (exact match)
- • Validate Input: handle = "valid" or "invalid"
{
"type": "start",
"data": {
"trigger_type": "On Open",
"keyword": "",
"bot_answer": { "en": "Hello!" }
}
}
{
"type": "bot_message",
"data": {
"message": { "en": "Welcome" },
"footer": "",
"preview_url": "True",
"bot_answer": ""
}
}
{
"type": "bot_answer",
"data": {
"bot_answer": { "en": "Thanks!" }
}
}
{
"type": "question_node",
"data": {
"text": { "en": "What is your name?" },
"variable": "name",
"type": "Text",
"pattern": "",
"bot_answer": { "en": "Nice to meet you {{name}}" }
}
}
{
"type": "buttons_node",
"data": {
"text": { "en": "Choose:" },
"buttons": "Yes,No",
"footer": "",
"bot_answer": ""
}
}
{
"type": "quiz_node",
"data": {
"question": { "en": "Pick one" },
"options": "A,B,C",
"correct_answer": "",
"allow_multiple": "False",
"bot_answer": ""
}
}
{
"type": "condition",
"data": {
"variable": "user_reply",
"operator": "contains",
"value": "hello",
"bot_answer": ""
}
}
{
"type": "validate_input",
"data": {
"mode": "Email",
"source_variable": "email",
"pattern": "",
"save_to_variable": "validation_ok",
"bot_answer": ""
}
}
{
"type": "knowledge_base",
"data": {
"query": "",
"top_k": "3",
"mode": "extract",
"reply": "{{kb_answer}}",
"save_to_variable": "kb_answer",
"prompt": "Answer using ONLY context.",
"model": "gpt-4o-mini",
"bot_answer": ""
}
}
{
"type": "ai_handler",
"data": {
"prompt": { "en": "You are helpful. Reply to: {{user_reply}}" },
"model": "gpt-4o-mini",
"temperature": "0.7",
"max_output_tokens": "1024",
"save_to_variable": "ai_text",
"bot_answer": ""
}
}
{
"type": "send_email",
"data": {
"to": "[email protected]",
"subject": "Hello",
"body": "Name: {{name}}",
"bot_answer": ""
}
}
{
"type": "webhook",
"data": {
"url": "https://api.example.com/hook",
"method": "POST",
"body": "{\"name\":\"{{name}}\"}",
"request_headers": { "Authorization": "Bearer {{api_token}}" },
"request_query": { "source": "botnet" },
"body_map": { "name": "{{name}}", "email": "{{email}}" },
"response_map": { "id": "webhook_id", "status": "webhook_status" },
"save_to_variable": "webhook_response",
"bot_answer": ""
}
}
{
"type": "signature_pad",
"data": {
"variable": "signature",
"text": { "en": "Please sign below." },
"required": "true",
"width": "420",
"height": "180",
"pen_color": "#111827",
"background_color": "#ffffff",
"line_width": "2",
"clear_label": "Clear",
"submit_label": "Submit",
"skip_label": "Skip",
"bot_answer": { "en": "Thanks for signing!" }
}
}
{
"type": "file_upload",
"data": {
"variable": "user_document",
"allowed_types": ".pdf,.jpg,.png",
"max_size": "5",
"bot_answer": ""
}
}
{
"type": "send_files",
"data": {
"file_ids": "1,2",
"bot_answer": { "en": "Download your files:" }
}
}
{
"type": "human_handoff",
"data": { }
}
{
"type": "end_flow",
"data": {
"outcome": "resolved",
"closing_note": "",
"bot_answer": { "en": "Goodbye" }
}
}
Troubleshooting
- If your public chat doesn’t show a language selector, check Supported languages has 2+ values.
- If a regex seems slow, simplify it; the server enforces a small timeout for safety.
- If you updated your plan and nodes are hidden, existing flows still run; you may not be able to add new plan-gated nodes.