support.* events
Member support inbox — conversations opened, replied to, assigned and resolved.
A member who sends your project bot something it does not recognise opens a support conversation. These events are how that traffic reaches a helpdesk, an ops channel or an on-call rota instead of sitting in the dashboard waiting to be noticed.
No support.* payload carries the message body. That is deliberate — webhook
deliveries are logged and retried, and member text does not belong in a
delivery log. Fetch the body from the support conversations
API or with the
get_support_conversation MCP tool.
Events
support.conversation.opened
A member starts their first conversation on a channel.
support.message.received
A member sends a message into an existing conversation.
support.message.sent
Your side of the exchange goes out to the member.
support.conversation.assigned
A conversation is handed to a team member, or cleared.
support.conversation.resolved
A conversation leaves the open queue.
support.conversation.reopened
A resolved conversation becomes active again.
| Event | Fires when |
|---|---|
support.conversation.opened | A member messages a project bot for the first time on a given channel. |
support.message.received | Any inbound member message, including the one that opened the conversation. |
support.message.sent | A reply is recorded and queued for delivery. Never fires for internal notes. |
support.conversation.assigned | A conversation is assigned to a team member, or an assignment is cleared. |
support.conversation.resolved | A conversation is marked resolved from the dashboard, the API or an MCP tool. |
support.conversation.reopened | A resolved conversation goes active again — usually because the member wrote back. |
support.conversation.blocked | A creator blocks the member behind a conversation; their messages are dropped from then on. |
support.conversation.unblocked | A block is lifted and the member can reach the inbox again. |
support.canned_reply.created | A saved reply is added to the project's picker. |
support.canned_reply.updated | A saved reply's title, body, shortcut or position changes. |
support.canned_reply.deleted | A saved reply is removed from the picker. |
support.settings.updated | The project's inbox settings change: enabled, relay mode, agent name, auto-reply or email notifications. |
One conversation per member, per channel
There is exactly one conversation per (project, member, channel). It is a durable thread, not a per-session ticket, so:
support.conversation.openedfires once per member per channel, ever. Their second message and every message after it raisessupport.message.receivedonly.- Resolving does not close the thread. The next inbound message reopens it and raises
support.conversation.reopened. - A workflow that wants "every new member question" should listen to
support.message.received, notopened.
Example payload
Every support.* event uses the standard envelope and a flat data object of identifiers:
{
"id": "evt_01HX...",
"type": "support.message.received",
"created_at": "2026-08-20T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"message_id": "6c18f7a3-2e95-4d60-b47a-c093e5182b7f",
"conversation_id": "9e042b6f-5d81-4c37-a920-7b3e18cf6d45",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
"type": "text",
"has_attachments": false
}
}Guarantees
- The member's message body, their Telegram identity and any attachment file ids are never in the payload. Resolve them over the API with
data.conversation_id. support.message.receivedandsupport.conversation.openedboth fire on a member's first message, in that order of significance — treatopenedas the "new contact" signal andreceivedas the "new question" signal.- Internal notes raise no event at all. They are private remarks for your team and never reach the member or a webhook.
- A message from a blocked member is dropped before any event fires, and cannot reopen a resolved thread.
- Rate-limited inbound messages are dropped silently. A member flooding the bot produces no event storm.
Required abilities
Tokens subscribing to support.* events must carry support-conversation:view.
Related
- Support conversations API
- Support inbox guide
- Contacting support — the member's side
How is this guide?