Список
/v1/conversationsНужно право conversations:read. Новые сверху. Поддерживается фильтр q для поиска и keyset-страницы через before_at + before_channel. Саммари содержит последний текст и время, идентификатор сообщения, уровень шифрования, непрочитанные, назначение и данные посетителя. Не выводите состояние жизненного цикла из текста превью: закрытие, повторное открытие и архивирование — отдельные операции панели.
for await (const c of client.conversations.iterate({ q: "возврат" })) {
console.log(c.channel, c.last_message, c.last_at);
}История
/v1/conversations/{channel}/messagesСтраница внутри хронологическая, пагинация назад: курсор с первого элемента (before_message_at, before_message_id, при наличии before_channel_sequence — нулевой sequence в query не шлите). SDK: iterateMessages. После reconnect сокета это способ догнать пропуски — интеграторский WS историю не реплеит. В REST нет role (оно только в WS); не доставляйте человеку историю повторно.
for await (const m of client.conversations.iterateMessages("custom:shop", {
limit: 100,
maxPages: 5,
})) {
console.log(m.id, m.body, m.created_at);
}Ответ
/v1/conversations/{channel}/messagesНужно право conversations:write. Ключ идемпотентности можно не передавать. Кадр WS: message.delivered с role: "agent" (иногда assistant). Свой inbox.reply придёт с echo: true. На custom: человеку кадр сам не уйдёт. Гайд: Входящие и живой канал.
await client.conversations.reply(threadChannel, { body: "Готово" });Назначение
/v1/conversations/{channel}/assignment/v1/conversations/{channel}/transferНужно право conversations:assign. Transfer пишет аудит и не ретраится SDK.
Вложения и секретность
В ответе можно передать attachment_ids, полученные через upload intent. Обычный REST может вернуть открытый текст только для разрешённого канала; в E2EE-треде тело остаётся зашифрованным и требует ключа участника.