Plan requirement: Custom AI Actions are available on the Business plan.
How it works
- You define an action: an HTTP endpoint, its method, and the parameters the AI needs to supply (e.g.
order_id). - The AI sees the action as a tool it can call, with your description telling it what the action does and when to use it.
- During a conversation, if the AI decides the action is relevant, it calls your endpoint with the arguments it inferred from the conversation.
- Your API responds, and the AI uses that response to answer the visitor — or, for actions marked to require confirmation, the visitor is shown a card to approve or cancel first.
Creating an action
Go to Dashboard > Actions > New action. Each action has:
You can have up to 20 actions per workspace.
Parameters
Each action can declare up to 12 parameters — the inputs the AI must supply when calling it. For each parameter you set:- Name — lowercase letters, digits, underscores (matches the placeholder name if used in the URL).
- Type —
string,number, orboolean. - Description — shown to the AI so it knows what to pass.
- Required — whether the AI must supply a value.
- Enum values (string parameters only) — an optional comma-separated allow-list (e.g.
open, closed, pending), constraining the AI to one of those values.
{name} placeholder in the URL are substituted into the path (URL-encoded); any remaining parameters are sent as query-string params on GET/DELETE requests, or as a JSON body on POST/PUT/PATCH.
Headers
- Headers — static, non-sensitive headers sent with every request (e.g.
Accept: application/json). - Secret headers — for API keys and tokens. Values are encrypted at rest and write-only: once saved, the dashboard only ever shows the header names you’ve configured, never the values. To change a secret, re-enter it under its name; to keep it, leave it blank. An update is a per-key merge — keys you don’t re-type are kept as-is, so partial edits never wipe secrets you didn’t touch. A “Remove all secrets” checkbox clears every secret header at once.
Visitor confirmation
For actions that change state (placing an order, cancelling a booking, updating a record), turn on “Ask the visitor to confirm before executing.” Instead of running the call immediately, the AI:- Shows a confirmation card in the widget with the action’s display name and the arguments it plans to send.
- Tells the visitor to confirm or dismiss it, without claiming the action already happened.
Execution log
Every time an action runs — whether triggered directly by the AI or via visitor confirmation — it’s recorded to that conversation’s execution log, visible to agents in the inbox sidebar under “AI Actions.” Each entry shows the action’s display name, how long ago it ran, its duration, and a status badge:success, failed, pending, executing, or cancelled. The log only surfaces status metadata — the actual request arguments and response body are never shown in this view, since they may contain third-party data your team hasn’t reviewed for the dashboard.
Test runs
Before relying on an action in production, use Test run from the action’s menu on the Actions page. It renders one input per declared parameter (a checkbox for booleans, a dropdown for enums, a text/number field otherwise), then fires the real HTTP call with the arguments you provide. The result shows the response status, duration, and a preview of the response body — without creating an entry in any conversation’s execution log.Security guarantees
Because custom actions let the AI reach out to arbitrary URLs you configure, ReplyBubble applies several protections automatically:- Public HTTPS endpoints only in production. Action URLs are validated (and, at execution time, re-validated against the resolved IP addresses) to block requests to private networks, loopback addresses, link-local ranges, and cloud metadata endpoints — so an action can’t be pointed at your own infrastructure or another tenant’s. HTTP and private/internal addresses are only permitted outside production, for local testing.
- No redirects. Responses in the 300-399 range are treated as failures rather than followed, so an action can’t be redirected to an unintended destination after validation.
- Response size cap. Response bodies are streamed and capped at 256 KB; anything beyond that is discarded rather than buffered in full.
- Errors never leak raw details. If a request fails (bad TLS, malformed response, a secret with a stray character breaking the HTTP client), the AI and the execution log only ever see a generic message like “Request timed out” or “Request failed to send or complete” — never the underlying exception text, which could otherwise expose configured secrets.
- Per-turn invocation cap. The AI can call actions at most 5 times while composing a single reply, capping runaway tool use and API spend.

