What are tools?
Tools extend your chatbot with external capabilities. Enable them from the Tools tab — configuration is a per-tool form of credentials.
The Tools tab on a chatbot page lists every tool you can enable. Each tool adds a capability the chatbot can use during a conversation.
The page
/app/chatbots/{id}/tools. Sub-nav active tab: Tools.
Section heading
When unlocked:
-
: Available Tools - Subtitle: "Enable tools to give your chatbot access to external services during conversations."
When locked (see below), the same section is rendered but with:
-
: Preview — Available Tools - Subtitle: "This is what you'll be able to enable once you upgrade."
Empty state
If no tools are seeded at all, the card area shows:
No tools available yet.
Today two tools ship — see Wasi real estate and Human handoff.
Plan gate
The backend controller has plug ChatbotgenWeb.Plugs.RequireFeature, feature: :tools, label: "AI Tools". When feature_locked is true, the page renders a FeatureLockCard at the top, and the tools list below is dimmed with opacity-60 pointer-events-none select-none.
The lock card uses exactly this copy:
- Title: Turn your chatbot into an AI agent
- Tagline: "Tools let your bot DO things mid-conversation — not just answer questions. Capture leads, book meetings, search real estate listings, or hand off to a human."
- Price badge: Growth — $79
-
Four bullets:
- Lead capture — "Save visitor contact info straight into your CRM or a webhook."
- Book appointments — "Your bot picks a time from your calendar and confirms the meeting."
- Real estate & custom APIs — "Wasi property search out of the box. Custom webhooks for any service you use."
- Human handoff — "When the bot can't help, it transfers the conversation to your team seamlessly."
Tool card
Each tool renders as a card:
┌──────────────────────────────────────────────────┐
│ 🔧 Wasi Real Estate │
│ ● Enabled │
│ Search properties from Wasi CRM… │
│ [ Configure ] [ Remove ] │
└──────────────────────────────────────────────────┘
Per card:
- A wrench icon
-
The tool name (from
tool.name) - A green Enabled pill (dot + word) if the tool is already enabled on this chatbot
-
The tool description (from
tool.description) -
Right-side buttons:
- When not enabled: a single Enable button
- When enabled: Configure (or Hide when the form is already open) + Remove
Clicking any of the toggle buttons opens/closes the inline config form below the card.
Config form (inline)
The form is built from tool.config_schema.fields — each field in the schema renders based on its type:
-
checkbox— a checkbox + label; stored as string"true"/"false" -
textarea— a 4-row textarea -
password— a masked - anything else — a plain text input
Required fields show a red * next to the label.
When enabling, the submit button reads Enable Tool; when configuring an already-enabled tool, it reads Update. Submits go to:
-
POST /app/chatbots/{id}/toolswithtool_id+credentials(enable) -
PUT /app/chatbots/{id}/tools/{tool_id}withcredentials(update)
Remove flow
Clicking Remove on an enabled tool calls the browser's confirm() with:
Are you sure you want to remove this tool?
Confirming fires DELETE /app/chatbots/{id}/tools/{tool_id}.
Backend flash messages
Verified from ToolController:
- Enable success: "Tool enabled successfully."
- Enable failure: "Failed to enable tool."
- Update success: "Tool updated successfully."
- Update failure: "Failed to update tool." (or "Tool not found." if the ChatbotTool doesn't exist)
- Remove success: "Tool removed."
The enable/update actions also re-check the feature gate on the server (RequireFeature.halt_if_locked) — a locked account that somehow submits the form gets halted.