Skip to main content
When a visitor sends a message, we POST a signed message.created event to your webhook. Whatever JSON you return becomes the bot’s reply. No keys, no second request.
That is the whole integration. In n8n it is a Respond to Webhook node. In Make it is Webhook response.

You get 10 seconds

One timer covers the whole exchange: connecting, sending, and reading your reply. Miss it, and we treat the try as a timeout and retry.
Ten seconds is the total limit, not a connection limit. If your work calls an LLM, a slow API, or anything you cannot control, do not reply in the same request. Return an empty body, then reply through the response URL.
We read at most 256 KB of your reply.

How we read your reply

The default-body trap

Most tools return something like Accepted when you have not set a reply. Left alone, that would post the word “Accepted” into your customer’s chat. We know the common defaults and block them instead:
The list is an exact match, and short on purpose. A body like Accepted. or Done! is not on it and will show up as a bot message. Return JSON, or an empty body.

Retries

If a try fails in a way we can retry, we try up to 4 times in total: Every try carries the same X-MyAIChatbot-Event-Id and the same response_url, with a fresh signature.
Retries mean your endpoint may see the same event twice. Use X-MyAIChatbot-Event-Id to spot repeats — it never changes between tries. The body field delivery_attempt does not count tries; read the X-MyAIChatbot-Attempt header instead.
After the last try fails, the visitor sees a short system note, and the delivery shows as failed in your log. You can retry it by hand from there.

A complete handler

This handler does not check the signature yet. Do not ship it like this — see Verifying signatures.

Next

Work that takes longer

Confirm fast, answer later.

Every block type

Go past text and buttons.