type: "interaction".
Whether an agent offers interactive messages at all depends on its configuration. If your integration can’t render a given type, declare what you can render with
supported_interactions on every inbound request — the agent only offers types your client has declared.Declaring what you support
Sendsupported_interactions on content/message requests to tell the agent which interaction types your client can display:
Omit
supported_interactions (or send an empty array) on a plain text message — the agent then won’t offer any interactive type for that turn.
What the agent sends
An interactive message is a message withtype: "interaction":
ui_buttons presentation
description and each option’s description are optional. At most one option may have allow_input: true (schema version 2 only) — selecting it lets the customer type free text instead of a fixed answer.
ui_carousel presentation
description, image, and action_label are optional per item.
ui_date_picker presentation
selection_mode is single (answer with one date) or range (answer with a start and end date). min_date/max_date bound the selectable range and may be omitted.
Answering an interactive message
Send an inbound request (Send Message, Send Message Async, or a WebSocket message frame) with:response.kind depends on what you’re answering:
response is validated against the exact message you’re answering — a selection id that isn’t among its options/items, or a date outside min_date/max_date, is rejected with a 422. Answering the same interaction twice with the same content (a retry, or a duplicate tap) returns the original answer instead of accepting a second one.