> Краткое содержание: Треды в Пачке для разработчиков: сквозные треды как уникальная особенность, создание через POST /messages/{id}/thread, отправка комментариев, добавление участников, видимость родительского чата, нюансы API и поля Message.thread/root_chat_id
> Это Markdown-версия конкретной страницы. Для контекста за её пределами (правила API, полный перечень методов, авторизация) ОБЯЗАТЕЛЬНО открой [llms.txt](https://dev.pachca.com/llms.txt) перед ответом — это сэкономит токены и предотвратит неполный ответ.


# Треды

Тред в Пачке — это отдельная ветка обсуждения, привязанная к конкретному сообщению. С его помощью можно вынести детали из общего чата и собрать в одном месте именно тех, кому важен этот контекст. По умолчанию участники чата сами решают, в каких тредах участвовать.

## Сквозные треды

Главная особенность Пачки — сквозные треды. В отличие от классических тредов в других мессенджерах, где участником треда может стать только участник родительского чата, в Пачке тред — это самостоятельная единица доступа: можно подключить к нему любого сотрудника, **не открывая ему сам чат**. Участник сквозного треда видит сам тред и родительское сообщение — и больше ничего из чата.

Это снимает необходимость в дополнительных приватных чатах для разовых обсуждений и позволяет:

- Подключать к обсуждению людей из других команд по контексту, не раскрывая историю канала
- Подключать **бота** к конкретному треду, не добавляя его в родительский чат — точечная автоматизация без расширения прав
- Точно делегировать вопрос конкретному человеку, не пересылая сообщение

Подробнее о пользовательской истории сквозных тредов — в [статье в блоге Пачки](https://pachca.com/blog/chto-takoe-skvoznye-tredy-i-kak-ih-ispolzovat).

## Работа с тредом

Тред создаётся и наполняется двумя последовательными вызовами: сначала сам тред у сообщения, затем сообщения-комментарии в его чат.


  ### Шаг 1. Создайте тред у сообщения

Тред создаётся не в чате, а у конкретного сообщения — по его идентификатору. Метод идемпотентен: если у сообщения уже есть тред, в ответе вернётся существующий. Ответ содержит полную модель `Thread`.

**Создание треда**

```bash
curl -X POST "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```


> Тред нельзя создать у удалённого сообщения — метод вернёт `404 Not Found`. У сообщения, которое само находится в треде, тред тоже создать нельзя — будет `400 Bad Request`.


  ### Шаг 2. Напишите комментарий в тред

Комментарий в тред — это обычное сообщение через [Новое сообщение](POST /messages). Есть два равнозначных способа адресации.

**Способ 1: через идентификатор треда** — `entity_type: "thread"` и `entity_id` равным `thread.id`.

```bash title="По thread.id"
pachca messages create \
  --entity-type=thread \
  --entity-id=265142 \
  --content="Это первый комментарий в треде" \
  --token YOUR_ACCESS_TOKEN
```

**Способ 2: через идентификатор чата треда** — `entity_id` равным `thread.chat_id`, без `entity_type`. Чат треда — самостоятельный чат, и сообщение, отправленное в него, окажется в треде. Этот способ удобен, если в вашем коде уже есть общая логика отправки сообщений по `chat_id`.

```bash title="По thread.chat_id"
pachca messages create \
  --entity-id=2637266155 \
  --content="Это первый комментарий в треде" \
  --token YOUR_ACCESS_TOKEN
```

Чтобы получить все комментарии треда — вызовите [Список сообщений чата](GET /messages) с `chat_id` равным `thread.chat_id`.


## Структура треда

Тред — это **одновременно объект и отдельный чат**. С ним связаны несколько идентификаторов, и в работе важно их не путать:

| Поле | Что обозначает | Когда нужно |
|------|----------------|-------------|
| `id` | Идентификатор треда как сущности | В методе [Информация о треде](GET /threads/{id}) |
| `chat_id` | Идентификатор **чата треда** — отдельного чата, в котором хранятся комментарии треда | Для отправки комментария [Новое сообщение](POST /messages) и для чтения [Список сообщений чата](GET /messages) |
| `message_id` | Идентификатор родительского сообщения, к которому привязан тред | При создании треда — в методе [Создание треда](POST /messages/{id}/thread) |
| `message_chat_id` | Идентификатор чата, в котором находится родительское сообщение | Для проверки контекста |

Когда вы получаете обычное сообщение через API, в поле `thread` будет короткий объект `{ id, chat_id }`, если у этого сообщения **есть тред** (то есть сообщение — родительское для треда). Если сообщение само живёт **внутри треда** (это комментарий), у него будет:

- `chat_id` — равно `thread.chat_id` (чат треда)
- `root_chat_id` — идентификатор родительского чата, в котором был создан тред
- `entity_type` — `"thread"`

## Список доступных тредов

Метод [Список тредов](GET /threads) возвращает все доступные вам треды:

- **Треды, в которых вы состоите напрямую** — вас явно добавили в сам тред (в том числе через сквозной тред, без участия в родительском чате).
- **Все треды чатов, в которых вы состоите** — даже если в самом треде вы не участвуете. Например, если вы участник канала «Маркетинг», в выдачу попадут все треды этого канала, в том числе те, в которые вы лично не писали.

> Публичные дискуссии, в которых вы **не состоите**, не попадают в выдачу — даже если в них есть открытые треды. Чтобы бот получал такие треды через этот метод, его нужно явно добавить либо в сам тред, либо в родительский чат.


Параметры `last_message_at_after` и `last_message_at_before` фильтруют по времени последнего сообщения в треде — это удобно для дайджестов «что обсудили за день» и «что нового с моего последнего захода». Поле `updated_at` треда автоматически обновляется при каждом новом сообщении в нём.

## Участники треда

У треда, как у самостоятельного чата, есть свой список участников, отдельный от родительского чата. Получить его можно методом [Список участников чата](GET /chats/{id}/members) с `chat_id` треда.

Добавить участника в тред можно двумя способами:

- **Через API** — метод [Добавление участников](POST /chats/{id}/members), передав `chat_id` **треда** (не родительского чата). Если добавляемый сотрудник не состоит в родительском чате, он станет участником сквозного треда: будет видеть тред и родительское сообщение, но не остальную историю.
- **Через упоминание `@nickname`** в комментарии треда — добавляется автоматически. Для ботов работает только если бот настроен как **публичный** (см. [Доступы бота](/guides/bots/access#tredy)).

> Если нужно упомянуть участника в треде, но **не** добавлять его автоматически — передайте `skip_invite_mentions: true` в теле метода [Новое сообщение](POST /messages). Упоминание останется в тексте, но в участники треда человек не попадёт. Полезно, когда бот ссылается на сотрудника для контекста, не втягивая его в обсуждение.


Удаление участника и выход из треда работают так же, как для обычных чатов: методы [Удаление участника из чата](DELETE /chats/{id}/members/{user_id}) и [Выход из чата](DELETE /chats/{id}/leave) с `chat_id` треда.

## Бот в треде

Бот может состоять в треде без участия в родительском чате — это и есть кейс сквозного треда для бота. После добавления:

- Бот получает [исходящие вебхуки](/guides/webhook/overview) о событиях треда: новые комментарии, реакции, изменения состава
- В payload вебхука `chat_id` указывает на **чат треда**, а `root_chat_id` (в полях сообщения) — на родительский чат
- Бот может писать в тред, ставить реакции, открывать формы — всё через тот же `chat_id` треда

Если бот публичный, его можно подключить к треду упоминанием. Если приватный — нужно добавить через API или интерфейс.


## Связанные разделы

- [Доступы бота к чатам и сообщениям](/guides/bots/access#tredy)
- [AI-агенты](/guides/ai-agents/overview)
- [Исходящие вебхуки](/guides/webhook/overview)
- [Журнал аудита событий](/guides/audit-events)
