Сценарий из mcp-everything. Актуально на 2026-10-24.
Бот слушает канал и реагирует: подтверждает получение, отвечает в треде.
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;
}
https://api.pachca.com/api/shared/v1Тип: Bearer-токен
Токен передаётся в заголовке Authorization: Bearer <token>. Два типа токенов:
pachca auth login (живёт час и продлевается автоматически).Почти каждый метод требует определённого скоупа токена; скоупы не расширяют круг доступных данных. Владелец пространства может ограничить, кто создаёт токены.
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% больше, чем в прошлое воскресенье)"
}
}'
Отправляет сообщение в беседу или канал, личное сообщение сотруднику или комментарий в тред.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
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 | нет | Показывать предпросмотр первой ссылки |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | integer | да | ID сообщения |
code |
body | string | да | Символ эмодзи; записи вроде +1 или :+1: отклоняются |
name |
body | string | нет | Имя кастомного эмодзи |
Создаёт тред, не привязанный к сообщению.
Пример ответа:
{"data": {"id": 265142, "chat_id": 2637266155, "message_id": null, "message_chat_id": null, "updated_at": "2023-02-01T19:20:47.204Z"}}
data; пагинация — курсорная, курсор в meta.paginate.next_page.429 с текстом text/plain, а не JSON, и заголовком Retry-After — ждать нужно не меньше указанного.429 без паузы токен может быть заблокирован на час (порог около 22 000 отправок в час).403 может прийти в двух видах: OAuthError с insufficient_scope (у токена нет скоупа) или ApiError (запрет бизнес-логики).Pachca-Signature (ключ — Signing secret бота); поле webhook_timestamp стоит проверять на расхождение не больше минуты. IP Пачки: 37.200.70.177.https://dev.pachca.com/llms.txt и llms-full.txt.Если этого недостаточно — официальная документация: https://dev.pachca.com/ Вся интеграция одним документом: https://mcp-everything.ru/integrations/pachca.md