Loading...
Loading...
Отправка сообщений в каналы, беседы и личные чаты Пачки. Ответы в треды, загрузка файлов, кнопки, реакции, закрепление, прочтения. Используй когда нужно: отправить сообщение, ответить в тред, прикрепить файл, добавить реакцию, получить историю чата, закрепить сообщение. НЕ используй для: создания каналов (→ pachca-chats), управления ботами (→ pachca-bots).
npx skill4agent add pachca/openapi pachca-messageshttps://api.pachca.com/api/shared/v1Authorization: Bearer <ACCESS_TOKEN>name"entity_id": chat.idcurl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_id":12345,"content":"Текст сообщения"}}'по умолчаниюentity_type, можно не указывать. GET /chats не поддерживает поиск по имени — перебирай страницы."discussion"
"entity_id": chat_idиспользуется по умолчанию, можно не указывать"entity_type": "discussion"
user_id"entity_type": "user""entity_id": user_idcurl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_type":"user","entity_id":186,"content":"Привет!"}}'Создавать чат не требуется — он создаётся автоматически
idthread.id"entity_type": "thread""entity_id": thread.idcurl "https://api.pachca.com/api/shared/v1/messages/154332686/thread" \
-H "Authorization: Bearer $TOKEN"
# Ответ: {"data":{"id":265142,"chat_id":2637266155,"message_id":154332686,...}}
curl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_type":"thread","entity_id":265142,"content":"Ответ в тред"}}'Если тред уже существует, POST /messages/{id}/thread вернёт существующий. Альтернативно можно использовать+"entity_type": "discussion"."entity_id": thread.chat_id— не добавлять упомянутых пользователей в тред автоматически.skip_invite_mentions: true
entity_type"user""thread""discussion"entity_type: "user""entity_type": "user""entity_id"user_identity_type: "thread""entity_type": "thread""entity_id"entity_id"parent_message_id"identity_type: "discussion""parent_message_id"idвизуально привязывает ответ к конкретному сообщению (показывается как «в ответ на…»). В треде обязателен для цепочки диалога. В обычном чате — альтернатива треду.parent_message_id
key$filenamedirect_urlpolicy$filenamekeydirect_urlmultipart/form-datafileskeynamefile_typesizefilescurl "https://api.pachca.com/api/shared/v1/uploads" \
-H "Authorization: Bearer $TOKEN"
# Ответ: {"key":".../$filename","direct_url":"https://...","policy":"...","x-amz-signature":"...",...}
curl -X POST <direct_url> \
-F "Content-Disposition=attachment" -F "acl=private" \
-F "policy=<policy>" -F "x-amz-credential=<credential>" \
-F "x-amz-algorithm=<algorithm>" -F "x-amz-date=<date>" \
-F "x-amz-signature=<signature>" \
-F "key=<key_с_подставленным_именем>" -F "file=@report.pdf"
curl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_id":12345,"content":"Смотри файл","files":[{"key":"uploads/.../report.pdf","name":"report.pdf","file_type":"file","size":12345}]}}'Файлы не передаются inline. Загрузка двухшаговая: сначала POST /uploads (параметры), затем POST на(сам файл на S3). Шаги 1-2 повторяются для каждого файла отдельно, а сообщение отправляется один раз со всеми файлами.direct_url
buttons[[{кнопка1, кнопка2}, ...], ...]{"text": "Текст"}urldatabuttonscurl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_id":12345,"content":"Выбери действие","buttons":[[{"text":"Подробнее","url":"https://example.com"},{"text":"Отлично!","data":"awesome"}]]}}'— массив массивов (строки × кнопки). Максимум 100 кнопок, до 8 в строке. Кнопка сbuttonsоткрывает ссылку, сurl— отправляет событие на вебхук.data
limitcursormeta.paginate.next_pagesort[id]=ascsort[id]=desc"desc"curl "https://api.pachca.com/api/shared/v1/messages?chat_id=12345&limit=50&sort[id]=asc" \
-H "Authorization: Bearer $TOKEN"Для сообщений треда используйтреда (chat_id). Пагинация cursor-based, не page-based.thread.chat_id
files[]urlnamefile_typesizefiles[].urlcurl "https://api.pachca.com/api/shared/v1/messages/154332686" \
-H "Authorization: Bearer $TOKEN"
# Ответ: {"data":{"id":154332686,"content":"Смотри файл","files":[{"url":"https://...","name":"report.pdf","file_type":"file","size":12345}],...}}Вебхук о новом сообщении НЕ содержит вложений — полеотсутствует даже если файлы есть. При анализе любого сообщения (из вебхука, из истории чата) всегда проверяй вложения через GET /messages/{id} — еслиfilesнепустой, в сообщении есть файлы, которые могут быть важны для контекста.files
В чате может быть несколько закреплённых сообщений.
chat_iddata.chat_idmember_idsPOST /messages/{id}/thread идемпотентен — безопасно вызывать повторно. После добавления в участники бот получает события треда через исходящий вебхук.
ПашаПавелГолубевid=message_chat_idnickname@nicknamecurl "https://api.pachca.com/api/shared/v1/chats/12345/members" \
-H "Authorization: Bearer $TOKEN"
# Ответ: [{"id":42,"first_name":"Павел","last_name":"Голубев","nickname":"golubevpn",...}]
curl "https://api.pachca.com/api/shared/v1/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"entity_id":12345,"content":"@golubevpn, митинг перенесён"}}'Поиск среди участников чата точнее — пользователь явно связан с контекстом, меньше вероятность спутать однофамильцев. GET /users?query — последний fallback для поиска по всей компании.
contentbuttonsfilescurl -X PUT "https://api.pachca.com/api/shared/v1/messages/154332686" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"content":"Обновлённый текст"}}'Редактировать можно только свои сообщения (или от имени бота).
files[]keynamefile_typesizefilescurl "https://api.pachca.com/api/shared/v1/messages/154332686" \
-H "Authorization: Bearer $TOKEN"
# Ответ: {"data":{"files":[{"key":"uploads/.../a.pdf","name":"a.pdf","file_type":"file","size":1000},{"key":"uploads/.../b.pdf","name":"b.pdf","file_type":"file","size":2000}],...}}
curl -X PUT "https://api.pachca.com/api/shared/v1/messages/154332686" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":{"files":[{"key":"uploads/.../a.pdf","name":"a.pdf","file_type":"file","size":1000}]}}'при редактировании работает по принципу replace-all: присылаемый массив полностью заменяет текущие вложения, отсутствующие файлы удаляются.filesудаляет все вложения. Если полеfiles: []не передавать — вложения не меняются.files
curl -X DELETE "https://api.pachca.com/api/shared/v1/messages/154332686" \
-H "Authorization: Bearer $TOKEN"codecodecurl "https://api.pachca.com/api/shared/v1/messages/154332686/reactions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"code":"👍"}'— emoji-символ, не его текстовое название.code
user_idcurl "https://api.pachca.com/api/shared/v1/messages/154332686/read_member_ids" \
-H "Authorization: Bearer $TOKEN"user_id"entity_type": "user""entity_id": user_idСоблюдай rate limit: ~4 req/sec для сообщений. Добавляй паузы при большом списке.
| Код | Причина | Что делать |
|---|---|---|
| 422 | Неверные параметры | Проверь обязательные поля, типы данных, допустимые значения enum |
| 429 | Rate limit | Подожди и повтори. Лимит: ~50 req/sec, сообщения ~4 req/sec |
| 403 | Нет доступа | Недостаточно скоупов ( |
| 404 | Не найдено | Неверный id. Проверь что сущность существует |
| 401 | Не авторизован | Проверь токен в заголовке Authorization |
POST /direct_urlPOST /messagesскоуп:messages:create
{
"message": {
"entity_id": 198,
"content": "Вчера мы продали 756 футболок (что на 10% больше, чем в прошлое воскресенье)"
}
}GET /messagesскоуп:messages:read
GET /messages/{id}скоуп:messages:read
PUT /messages/{id}скоуп:messages:update
{
"message": {}
}DELETE /messages/{id}скоуп:messages:delete
POST /messages/{id}/pinскоуп:pins:write
DELETE /messages/{id}/pinскоуп:pins:write
POST /messages/{id}/reactionsскоуп:reactions:write
{
"code": "👍"
}DELETE /messages/{id}/reactionsскоуп:reactions:write
GET /messages/{id}/reactionsскоуп:reactions:read
GET /messages/{id}/read_member_idsскоуп:messages:read
POST /messages/{id}/threadскоуп:threads:create
GET /threads/{id}скоуп:threads:read
POST /uploadsскоуп:uploads:write
message.entity_typediscussionthreadusermessage.display_avatar_urlmessage.display_namelimit