Kotlin
Типизированный клиент для Pachca API на Kotlin. Построен на Ktor с корутинами (suspend), kotlinx.serialization и встроенным retry. Требуется Kotlin 2.2+ и Java 11+.
Быстрый старт
Установка
Добавьте зависимость в build.gradle.kts:
Создание клиента
Получите API-токен в интерфейсе Пачки: Настройки → Автоматизации → API (подробнее — Авторизация).
Первый запрос
suspend-функции. Вызывайте их из корутин (runBlocking, launch, async).Инициализация
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
token | String | — | Bearer-токен для авторизации |
baseUrl | String | https://api.pachca.com/api/shared/v1 | Базовый URL API |
Клиент реализует Closeable — закройте его после использования:
Все методы
| Метод | Метод API |
|---|---|
client.common.requestExport() | POSTЭкспорт сообщений |
client.common.uploadFile() | POSTЗагрузка файла |
client.common.getUploadParams() | POSTПолучение подписи, ключа и других параметров |
client.common.downloadExport() | GETСкачать архив экспорта |
client.common.listProperties() | GETСписок дополнительных полей |
client.profile.getTokenInfo() | GETИнформация о токене |
client.profile.getProfile() | GETИнформация о профиле |
client.profile.getStatus() | GETТекущий статус |
client.profile.updateStatus() | PUTНовый статус |
client.profile.deleteStatus() | DELETEУдаление статуса |
client.users.createUser() | POSTСоздать сотрудника |
client.users.listUsers() | GETСписок сотрудников |
client.users.getUser() | GETИнформация о сотруднике |
client.users.getUserStatus() | GETСтатус сотрудника |
client.users.updateUser() | PUTРедактирование сотрудника |
client.users.updateUserStatus() | PUTНовый статус сотрудника |
client.users.deleteUser() | DELETEУдаление сотрудника |
client.users.deleteUserStatus() | DELETEУдаление статуса сотрудника |
client.groupTags.createTag() | POSTНовый тег |
client.groupTags.listTags() | GETСписок тегов сотрудников |
client.groupTags.getTag() | GETИнформация о теге |
client.groupTags.getTagUsers() | GETСписок сотрудников тега |
client.groupTags.updateTag() | PUTРедактирование тега |
client.groupTags.deleteTag() | DELETEУдаление тега |
client.chats.createChat() | POSTНовый чат |
client.chats.listChats() | GETСписок чатов |
client.chats.getChat() | GETИнформация о чате |
client.chats.updateChat() | PUTОбновление чата |
client.chats.archiveChat() | PUTАрхивация чата |
client.chats.unarchiveChat() | PUTРазархивация чата |
client.members.addTags() | POSTДобавление тегов |
client.members.addMembers() | POSTДобавление пользователей |
client.members.listMembers() | GETСписок участников чата |
client.members.updateMemberRole() | PUTРедактирование роли |
client.members.removeTag() | DELETEИсключение тега |
client.members.leaveChat() | DELETEВыход из беседы или канала |
client.members.removeMember() | DELETEИсключение пользователя |
client.threads.createThread() | POSTНовый тред |
client.threads.getThread() | GETИнформация о треде |
client.messages.createMessage() | POSTНовое сообщение |
client.messages.pinMessage() | POSTЗакрепление сообщения |
client.messages.listChatMessages() | GETСписок сообщений чата |
client.messages.getMessage() | GETИнформация о сообщении |
client.messages.updateMessage() | PUTРедактирование сообщения |
client.messages.deleteMessage() | DELETEУдаление сообщения |
client.messages.unpinMessage() | DELETEОткрепление сообщения |
client.readMembers.listReadMembers() | GETСписок прочитавших сообщение |
client.reactions.addReaction() | POSTДобавление реакции |
client.reactions.listReactions() | GETСписок реакций |
client.reactions.removeReaction() | DELETEУдаление реакции |
client.linkPreviews.createLinkPreviews() | POSTUnfurl (разворачивание ссылок) |
client.search.searchChats() | GETПоиск чатов |
client.search.searchMessages() | GETПоиск сообщений |
client.search.searchUsers() | GETПоиск сотрудников |
client.tasks.createTask() | POSTНовое напоминание |
client.tasks.listTasks() | GETСписок напоминаний |
client.tasks.getTask() | GETИнформация о напоминании |
client.tasks.updateTask() | PUTРедактирование напоминания |
client.tasks.deleteTask() | DELETEУдаление напоминания |
client.views.openView() | POSTОткрытие представления |
client.bots.getWebhookEvents() | GETИстория событий |
client.bots.updateBot() | PUTРедактирование бота |
client.bots.deleteWebhookEvent() | DELETEУдаление события |
client.security.getAuditEvents() | GETЖурнал аудита событий |
Запросы
Все методы — suspend-функции.
GET с параметрами:
POST с телом запроса:
Простой вызов по ID:
Пагинация
Методы, возвращающие списки, используют cursor-based пагинацию. Ответ содержит meta?.paginate?.nextPage — курсор для следующей страницы.
Ручная пагинация
Автопагинация
Для каждого метода с пагинацией есть *All() вариант:
Доступные методы автопагинации:
| Метод | Возвращает |
|---|---|
security.getAuditEventsAll() | List<AuditEvent> |
bots.getWebhookEventsAll() | List<WebhookEvent> |
chats.listChatsAll() | List<Chat> |
groupTags.listTagsAll() | List<GroupTag> |
groupTags.getTagUsersAll() | List<User> |
members.listMembersAll() | List<User> |
messages.listChatMessagesAll() | List<Message> |
reactions.listReactionsAll() | List<Reaction> |
search.searchChatsAll() | List<Chat> |
search.searchMessagesAll() | List<Message> |
search.searchUsersAll() | List<User> |
tasks.listTasksAll() | List<Task> |
users.listUsersAll() | List<User> |
Обработка ошибок
SDK выбрасывает два типа исключений:
ApiError
Возникает при ошибках 400, 403, 404, 409, 410, 422:
Поля ApiErrorItem:
| Поле | Тип | Описание |
|---|---|---|
key | String | Поле, вызвавшее ошибку |
value | String? | Переданное значение |
message | String | Текст ошибки |
code | ValidationErrorCode | Код валидации |
payload | String? | Дополнительные данные |
OAuthError
Возникает при ошибке авторизации (401):
Повторные запросы
SDK автоматически повторяет запрос при получении 429 Too Many Requests или серверной ошибки (5xx):
- До 3 повторов на каждый запрос
- Если сервер вернул заголовок
Retry-After— ждёт указанное время - Иначе — линейный backoff: 1 сек, 2 сек, 3 сек
- Реализовано через плагин Ktor
HttpRequestRetry
Типы
Все типы — @Serializable data class'ы:
Доступные перечисления: AuditEventKey, ChatAvailability, ChatMemberRole, ChatMemberRoleFilter, ChatSubtype, CustomPropertyDataType, FileType, InviteStatus, MemberEventType, MessageEntityType, OAuthScope, ReactionEventType, SearchEntityType, SearchSortOrder, SortOrder, TaskKind, TaskStatus, UserEventType, UserRole, ValidationErrorCode, WebhookEventType.
Зависимости
| Пакет | Версия | Назначение |
|---|---|---|
kotlinx-serialization-json | 1.9.0 | JSON-сериализация |
ktor-client-core | 3.2.3 | HTTP-клиент |
ktor-client-cio | 3.2.3 | CIO-движок |
ktor-client-auth | 3.2.3 | Bearer-авторизация |
ktor-client-content-negotiation | 3.2.3 | Content negotiation |