message.created event to your webhook. Whatever JSON you return becomes the bot’s reply. No keys, no second request.
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. We read at most 256 KB of your reply.How we read your reply
The default-body trap
Most tools return something likeAccepted 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:
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.
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.

