Для разработчиков

Общение с ботом

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

Агента позвали в чате, он отвечает тредом и зовёт туда коллегу

Где бот общается

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

Так работают и AI-агенты: агента зовут по нику в чате или треде, а отвечает он тредом.

Кто может добавить бота или написать ему и что бот видит в каждом случае — в разделе Доступы к чатам и сообщениям.

Как бот узнаёт о сообщениях

О новых сообщениях бот узнаёт по исходящему вебхуку с событием Новые сообщения (message_new). Какие сообщения приходят, решает режим:

  • Любые сообщения — все сообщения из чатов и тредов, где состоит бот. Нужен боту, который отвечает в личных сообщениях или на упоминание по нику.
  • Начинающиеся с команд — только сообщения, первое слово которых есть в списке команд, например /task. Подходит боту, которого вызывают командой.

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

Когда отвечать

В личных сообщениях к боту обращаются всегда. В беседах, каналах и тредах сотрудники пишут друг другу, и бот, который отвечает на каждое сообщение, мешает. Обычно бот отвечает:

  • в личных сообщениях — на каждое сообщение, у них entity_type равен "user";
  • на упоминание — в тексте сообщения (content) есть @ник бота;
  • на команду — сообщение начинается с команды бота;
  • на продолжение разговора — например, в треде, где кроме бота только один сотрудник, можно отвечать и без упоминания. Состав треда показывает метод GETИнформация о чате с chat_id из события.

Свои сообщения бот пропускает: включите Игнорировать свои сообщения или сравнивайте user_id из события с идентификатором бота.

Обращаются ли к боту
const BOT_ID = 7890 // id ботаconst BOT_NICKNAME = "kai_bot" function isAddressed(event: { user_id: number; entity_type: string; content: string }) {  if (event.user_id === BOT_ID) return false // своё сообщение  if (event.entity_type === "user") return true // личные сообщения  return event.content.includes(`@${BOT_NICKNAME}`) // позвали по нику}

Свой id и ник бот узнаёт методом GETИнформация о профиле со своим токеном, а id есть и на вкладке API в карточке бота. Текст в content — markdown, который Пачка собирает из сообщения: в нём бывают цитаты и списки. Подробнее — в разделе Разметка в исходящих вебхуках.

Куда отвечать

Отвечайте там, откуда пришло сообщение. Это видно по entity_type и entity_id в событии:

Откуда сообщениеentity_typeentity_idКак ответить
Личные сообщенияuserИдентификатор сотрудникаС теми же entity_type и entity_id
Беседа или каналdiscussionИдентификатор чатаТредом к сообщению: методом POSTНовый тред с id сообщения, затем ответ с entity_type: "thread" и id треда. Можно и прямо в чат — с теми же entity_type и entity_id
ТредthreadИдентификатор тредаС теми же entity_type и entity_id. parent_message_id с id сообщения добавит к ответу цитату
Событие: бота позвали в треде
{  "type": "message",  "event": "new",  "id": 1245830,  "entity_type": "thread",  "entity_id": 334455,  "chat_id": 9020,  "user_id": 2345,  "content": "@kai_bot собери сводку по релизу",  "created_at": "2026-09-24T09:30:00.000Z",  "url": "https://app.pachca.com/chats/9020?message=1245830",  "thread": { "message_id": 1245817, "message_chat_id": 9012 },  "webhook_timestamp": 1790242200}

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

В беседе или канале ответ тредом не теряется в ленте и не мешает остальным. Если у сообщения тред уже есть, метод POSTНовый тред вернёт его.

Ответ тредом на сообщение из канала
# Тред к сообщению 1245817: если он уже есть, вернётся он жеcurl -X POST https://api.pachca.com/api/shared/v1/messages/1245817/thread \  -H "Authorization: Bearer $BOT_TOKEN" # Ответ в тред с id из предыдущего ответаcurl -X POST https://api.pachca.com/api/shared/v1/messages \  -H "Authorization: Bearer $BOT_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "message": {      "entity_type": "thread",      "entity_id": 334455,      "content": "Смотрю, через минуту пришлю сводку"    }  }'

Пока бот готовит ответ, поставьте на сообщение реакцию методом POSTДобавление реакции и снимите её методом DELETEУдаление реакции после ответа: сотрудник сразу видит, что бот работает. Для агентов есть реакция agent-thinking с таймером — подробнее в разделе Взаимодействие с агентом.

К ответу можно приложить кнопки, а по нажатию открыть форму. Нажатия и отправленные формы приходят событием, если у бота включено Нажатие кнопок.

Что учесть в ответе

  • Разметка. Ответ пишут в Markdown, список конструкций — в разделе Форматирование текста. Длинный отчёт удобнее прислать файлом .md — подробнее в разделе Оформление ответов.
  • Упоминания. Сотрудника упоминают в тексте как @nickname или <@user_id>: по идентификатору Пачка сама подставит ник. Упомянутый в треде сотрудник становится участником треда. Чтобы только сослаться на коллегу, передайте skip_invite_mentions: true — подробнее в разделе Участники треда.
  • Лимиты. Отправка сообщений ограничена по частоте и по числу сообщений в один чат за сутки — подробнее в разделе Лимиты.

Личные сообщения

Кто может написать боту в личные сообщения, зависит от того, публичный ли бот и есть ли у сотрудника с ним общий чат. Подробнее — в разделе Доступы к чатам и сообщениям.

Личный чат создаётся молча. Когда сотрудник открывает переписку с ботом, события об этом нет — ни о новом чате, ни о новом участнике. Бот узнаёт о сотруднике только из его первого сообщения, поэтому в личных сообщениях первый ход за сотрудником, если бот не написал сам.

Чтобы начать разговор самому, например поприветствовать нового сотрудника, бот отправляет сообщение методом POSTНовое сообщение с entity_type: "user" и идентификатором сотрудника в entity_id.

В личных сообщениях бот просит и доступ, когда ему нужны права самого сотрудника: присылает кнопку авторизации. Это отдельный путь со своими настройками — подробнее в разделах Авторизация от имени сотрудника и Чек-лист запуска.

Что настроить

Исходящий вебхук с адресом

На вкладке Исходящий вебхук нажмите Включить и укажите URL своего сервера. Адрес должен быть доступен из интернета: для разработки подойдёт туннель, а без входящих запросов — поллинг истории событий. Подробнее — в разделе Настройка и типы событий.

Событие о новых сообщениях и режим

Включите Новые сообщения и выберите режим: Любые сообщения — боту, которого зовут по нику или которому пишут в личные сообщения, Начинающиеся с команд со списком команд — боту с командами.

Если в ответах будут Data-кнопки или формы, включите и событие Нажатие кнопок: без него нажатия и отправленные формы до бота не дойдут. Те же настройки через API — в разделе Через API.

Проверка подписи и свои сообщения

Проверяйте подпись каждого запроса по Signing secret, чтобы отличать запросы Пачки от чужих. Включите Игнорировать свои сообщения, чтобы бот не реагировал на собственные ответы. Подробнее — в разделе Безопасность и обработчик.

Токен с нужными правами

Отвечать — messages:create, отвечать тредом — threads:create, ставить реакцию — reactions:write. Читать историю и состав чата — messages:read и chats:read, узнать свой id и ник — profile:read. Подробнее — в разделе Токены бота.

Вкладка «Исходящий вебхук» с настройками из шагов выше