What is a channel?
A channel is the medium a customer used to reach you. In message.com the channel is a single field on every conversation, valued chat, ticket, or call. It is the one piece of data that distinguishes otherwise identical rows.
Definition
Channel describes "how". It does not describe what was said, when, or with whom. A conversation can change agents, change departments, change status, change priority. Its channel does not change. If a phone call gets converted to a ticket for follow-up, that follow-up lives on a new conversation with channel: "ticket", not on the original call.
Three values cover the entire surface area today:
| Value | Source |
|---|---|
chat | Live chat through the embedded widget on a site. |
ticket | Email arriving at one of your inbound addresses. |
call | Inbound phone call to one of your phone numbers. |
Routing
Channel is the first filter in routing. An agent without channels: ["calls"] in their permission array never sees a call, even if they belong to the right department. This lets you hire dedicated phone agents who do not get pulled into chat triage and vice versa.
Reporting
Every analytics endpoint accepts a channel filter. The Reports API exposes channel breakdowns out of the box. Common slices include first response time by channel, satisfaction by channel, and abandonment rate by channel.
Channel vs message kind
Channel describes the conversation. Message kind describes individual messages inside it. A single conversation can contain visitor messages, agent replies, system events, and internal_noteentries. All of those messages share the conversation's channel, even though only one of them came from the customer.
Why a single field
Most legacy stacks treat chat, ticket, and call as different product lines with different databases. The unified inbox approach reduces that to a single string field. The consequence: one queue, one search index, one customer history, one AI context window.
Future channel values
Additional values (sms, whatsapp, instagram) will land as routable channels expand. Existing integrations do not break because adding a new enum value is additive. Clients that filter on known values keep working.