Пачка API: Отвечать на сообщения через вебхук бота

Сценарий из mcp-everything. Актуально на 2026-10-24.

Бот слушает канал и реагирует: подтверждает получение, отвечает в треде.

  1. В настройках бота включи исходящий вебхук и укажи адрес своего обработчика. Пачка присылает события POST-запросом.
  2. Проверяй подпись: заголовок Pachca-Signature — HMAC-SHA256 от тела запроса с ключом Signing secret бота, в hex. Поле webhook_timestamp должно отличаться от текущего времени не больше чем на минуту.
  3. Отметь сообщение реакцией: POST /messages/{id}/reactions с code — символом эмодзи (записи вида :+1: отклоняются).
  4. Ответь в треде: POST /messages с message.entity_type = thread и entity_id треда (тред создаётся через POST /threads) или ответом в ленте через message.parent_message_id.
import crypto from "node:crypto";

// Express: app.post("/pachca/webhook", express.raw({ type: "*/*" }), handler)
function isValid(rawBody, headers, secret) {
  const signature = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  if (signature !== headers["pachca-signature"]) return false;
  const { webhook_timestamp } = JSON.parse(rawBody);
  return Math.abs(Date.now() / 1000 - webhook_timestamp) < 60;
}

Базовые URL

Авторизация

Тип: Bearer-токен

Токен передаётся в заголовке Authorization: Bearer <token>. Два типа токенов:

Почти каждый метод требует определённого скоупа токена; скоупы не расширяют круг доступных данных. Владелец пространства может ограничить, кто создаёт токены.

curl "https://api.pachca.com/api/shared/v1/messages" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "message": {
    "entity_id": 334,
    "content": "Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"
  }
}'

Методы сценария

POST /messages — Новое сообщение

Отправляет сообщение в беседу или канал, личное сообщение сотруднику или комментарий в тред.

Параметр Где Тип Обяз. Описание
message.entity_type body string нет discussion (беседа или канал, по умолчанию), thread (тред), user (пользователь)
message.entity_id body integer да ID беседы/канала, треда или сотрудника
message.content body string да Текст; упоминания @nickname или <@user_id>
message.files body array нет Прикрепляемые файлы
message.buttons body array нет Строки кнопок: до 100 кнопок, до 8 в строке
message.parent_message_id body integer нет Ответ на сообщение в ленте чата (не в треде)
message.display_avatar_url body string нет Аватар отправителя для этого сообщения (только токен бота)
message.display_name body string нет Имя отправителя для этого сообщения (только токен бота)
message.skip_invite_mentions body boolean нет Не добавлять упомянутых в тред
link_preview body boolean нет Показывать предпросмотр первой ссылки

POST /messages/{id}/reactions — Добавить реакцию

Параметр Где Тип Обяз. Описание
id path integer да ID сообщения
code body string да Символ эмодзи; записи вроде +1 или :+1: отклоняются
name body string нет Имя кастомного эмодзи

POST /threads — Новый самостоятельный тред

Создаёт тред, не привязанный к сообщению.

Пример ответа:

{"data": {"id": 265142, "chat_id": 2637266155, "message_id": null, "message_chat_id": null, "updated_at": "2023-02-01T19:20:47.204Z"}}

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://dev.pachca.com/ Вся интеграция одним документом: https://mcp-everything.ru/integrations/pachca.md