message.generating
The AI has started composing a reply. Show a typing indicator.
Hide it when the matching message arrives. There is no explicit stopped event: a generation that fails produces no message, so treat it as a timeout after a few seconds.
This is the AI. A human typing is the separate is_typing event.
Payload
The payload of this webhook request is an object.
schema_version
Semver for the payload shape. Fields are added without a major bump; nothing is removed or repurposed without one.
event
Which event this is.
delivery_id
Unique per delivery attempt. Log it, and use it to detect a redelivery.
occurred_at
When the event happened.
robot_id
The robot it belongs to.
external_id
Your own id for that robot, echoed on every event so you never need a lookup table.
channel_id
The channel it arrived on.
data
Response
200
Return any 2xx as soon as you have stored the event. Anything else, or a timeout, is retried: 6 attempts over about an hour, then dead-lettered.