A conversation is where messages live. It is chat's equivalent of a room, and the unit a chat token is scoped to.
Why it exists
Authorization needs somewhere to hang. "May Alice post this?" is answered by her membership of a conversation and her role in it — not by anything the client sends.
Three types
type ChatConversationType = 'ROOM' | 'CHANNEL' | 'DIRECT';ROOM— attached to an RTC room, for a call's chat panel.CHANNEL— a standalone, long-lived channel.DIRECT— between a fixed set of people.
There is no separate "channel" primitive; CHANNEL is one type of
conversation. The distinction is about lifecycle and how you look one up,
not about which APIs work.
Created server-side
Creating a conversation and managing membership need an API key. A client cannot invent a conversation or add itself to one:
const conversation = await raven.chat.createConversation({
type: 'CHANNEL',
name: 'support-room-42',
members: [{ userId: 'alice', role: 'ADMIN' }, { userId: 'bob' }],
});Archiving
ACTIVE or ARCHIVED. Archiving closes writes and leaves reads working —
a write to an archived conversation returns
RAVEN_CONVERSATION_ARCHIVED, not a generic conflict, because "unarchive
it first" is a different fix from "your request was malformed".
Retention
Messages are kept forever by default. Set CHAT_RETENTION_DAYS, or a
per-conversation override, and a sweeper enforces it.
Related
- Member · Message
- Conversations — the full API.