Треды
Тред в Пачке — это отдельная ветка обсуждения, привязанная к конкретному сообщению. С его помощью можно вынести детали из общего чата и собрать в одном месте именно тех, кому важен этот контекст. По умолчанию участники чата сами решают, в каких тредах участвовать.
Сквозные треды
Главная особенность Пачки — сквозные треды. В отличие от классических тредов в других мессенджерах, где участником треда может стать только участник родительского чата, в Пачке тред — это самостоятельная единица доступа: можно подключить к нему любого сотрудника, не открывая ему сам чат. Участник сквозного треда видит сам тред и родительское сообщение — и больше ничего из чата.
Это снимает необходимость в дополнительных приватных чатах для разовых обсуждений и позволяет:
- Подключать к обсуждению людей из других команд по контексту, не раскрывая историю канала
- Подключать бота к конкретному треду, не добавляя его в родительский чат — точечная автоматизация без расширения прав
- Точно делегировать вопрос конкретному человеку, не пересылая сообщение
Подробнее о пользовательской истории сквозных тредов — в статье в блоге Пачки.
Работа с тредом
Тред создаётся и наполняется двумя последовательными вызовами: сначала сам тред у сообщения, затем сообщения-комментарии в его чат.
Создайте тред у сообщения
Тред создаётся не в чате, а у конкретного сообщения — по его идентификатору. Метод идемпотентен: если у сообщения уже есть тред, в ответе вернётся существующий. Ответ содержит полную модель Thread.
Тред нельзя создать у удалённого сообщения — метод вернёт 404 Not Found. У сообщения, которое само находится в треде, тред тоже создать нельзя — будет 400 Bad Request.
Напишите комментарий в тред
Комментарий в тред — это обычное сообщение через POSTНовое сообщение. Есть два равнозначных способа адресации.
Способ 1: через идентификатор треда — entity_type: "thread" и entity_id равным thread.id.
Способ 2: через идентификатор чата треда — entity_id равным thread.chat_id, без entity_type. Чат треда — самостоятельный чат, и сообщение, отправленное в него, окажется в треде. Этот способ удобен, если в вашем коде уже есть общая логика отправки сообщений по chat_id.
Чтобы получить все комментарии треда — вызовите GETСписок сообщений чата с chat_id равным thread.chat_id.
Структура треда
Тред — это одновременно объект и отдельный чат. С ним связаны несколько идентификаторов, и в работе важно их не путать:
| Поле | Что обозначает | Когда нужно |
|---|---|---|
id | Идентификатор треда как сущности | В методе GETИнформация о треде |
chat_id | Идентификатор чата треда — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария POSTНовое сообщение и для чтения GETСписок сообщений чата |
message_id | Идентификатор родительского сообщения, к которому привязан тред | При создании треда — в методе POSTСоздание треда |
message_chat_id | Идентификатор чата, в котором находится родительское сообщение | Для проверки контекста |
Когда вы получаете обычное сообщение через API, в поле thread будет короткий объект { id, chat_id }, если у этого сообщения есть тред (то есть сообщение — родительское для треда). Если сообщение само живёт внутри треда (это комментарий), у него будет:
chat_id— равноthread.chat_id(чат треда)root_chat_id— идентификатор родительского чата, в котором был создан тредentity_type—"thread"
Список доступных тредов
Метод GETСписок тредов возвращает все доступные вам треды:
- Треды, в которых вы состоите напрямую — вас явно добавили в сам тред (в том числе через сквозной тред, без участия в родительском чате).
- Все треды чатов, в которых вы состоите — даже если в самом треде вы не участвуете. Например, если вы участник канала «Маркетинг», в выдачу попадут все треды этого канала, в том числе те, в которые вы лично не писали.
Публичные дискуссии, в которых вы не состоите, не попадают в выдачу — даже если в них есть открытые треды. Чтобы бот получал такие треды через этот метод, его нужно явно добавить либо в сам тред, либо в родительский чат.
Параметры last_message_at_after и last_message_at_before фильтруют по времени последнего сообщения в треде — это удобно для дайджестов «что обсудили за день» и «что нового с моего последнего захода». Поле updated_at треда автоматически обновляется при каждом новом сообщении в нём.
Участники треда
У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом GETСписок участников чата с chat_id треда.
Добавить участника в тред можно двумя способами:
- Через API — метод POSTДобавление участников, передав
chat_idтреда (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю. - Через упоминание
@nicknameв комментарии треда — добавляется автоматически. Для ботов работает только если бот настроен как публичный (см. Доступы бота).
Если нужно упомянуть участника в треде, но не добавлять его автоматически — передайте skip_invite_mentions: true в теле метода POSTНовое сообщение. Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение.
Удаление участника и выход из треда работают так же, как для обычных чатов: методы DELETEУдаление участника из чата и DELETEВыход из чата с chat_id треда.
Бот в треде
Бот может состоять в треде без участия в родительском чате — это и есть кейс сквозного треда для бота. После добавления:
- Бот получает исходящие вебхуки о событиях треда: новые комментарии, реакции, изменения состава
- В payload вебхука
chat_idуказывает на чат треда, аroot_chat_id(в полях сообщения) — на родительский чат - Бот может писать в тред, ставить реакции, открывать формы — всё через тот же
chat_idтреда
Если бот публичный, его можно подключить к треду упоминанием. Если приватный — нужно добавить через API или интерфейс.