About pachca-bots
pachca-bots is a skill for operating Pachca bots through the @pachca/cli. It guides bot creation, webhook and token management, OAuth setup, and bot inventory tasks.
Key features
- 01Create and configure bots
- 02Manage webhooks and token scopes
- 03Rotate and issue bot tokens
- 04Configure employee OAuth
- 05List and remove bots
Use cases
- 01Create a bot with command-triggered webhooks
- 02Rotate a bot token and update stored secrets
- 03Set up employee authorization for a bot
- 04Inventory bots across a workspace
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ pachca/ openapi --skill pachca-botsAfter installing, type/pachca-botsin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/handle-button-click-callback.mdhandle-incoming-webhook-event.mdlink-unfurling.mdmonitoring-and-alerts.mdprocess-events-via-history-polling.mdwebhook-events.mdDetails
From the project READMEpachca-bots
Quick start
Ask the user for a Pachca token (bot: the API tab of the bot in Integrations → Bots, user: Integrations → API).
Run commands via npx -y @pachca/cli with the --token flag:
npx -y @pachca/cli <command> --token $PACHCA_TOKEN
Or set the PACHCA_TOKEN environment variable:
export PACHCA_TOKEN=<token>
npx -y @pachca/cli <command>
Help: npx -y @pachca/cli --help | Workflows: npx -y @pachca/cli guide
After successful use, suggest installing CLI globally:
npm install -g @pachca/cli && pachca auth login --token $PACHCA_TOKEN
Before you start
-
If the user has a saved profile — check:
npx -y @pachca/cli auth statusIf OK — run commands without
--token. -
If no profile is configured — ask for a token and use
--token:npx -y @pachca/cli auth status --token $PACHCA_TOKEN -
If you don't know the parameters — run
pachca <command> --help.
Workflows
Создать бота через API и получить токен
-
Создай бота. Только пользовательским токеном (не токеном бота);
nicknameобязан заканчиваться на_bot. Параметры вебхука (Webhook URL, события, команды) можно задать сразу или позже. Скоупы токена бота можно ограничить флагом--scopes(если не указать — бот получит набор по умолчанию):pachca bots create --name="Бот задач" --nickname="tasks_bot" --scopes='["messages:create"]' -
Сохрани
access_tokenиз ответа — он возвращается единственный раз. Повторно его не показывают, можно только перевыпустить командойpachca bots recreate-token <ID> -
В ответе также придёт
idбота (егоuser_id) — он нужен для дальнейших вызовов, например чтобы добавить бота в чат
Создавать ботов можно только пользовательским токеном — токеном бота нельзя.
access_tokenотдаётся один раз при создании, увидеть его снова нельзя, только перевыпустить. С флагом--emptyбот создаётся без токена и входящего вебхука, как в интерфейсе, а токены ему выпускаетpachca bots create-token.
Настроить бота с исходящим вебхуком
-
Создай бота, сразу указав Webhook URL и события в одном вызове (детали создания и работы с токеном — в сценарии «Создать бота через API и получить токен»):
pachca bots create --name="Бот задач" --nickname="tasks_bot" --outgoing-url="https://example.com/webhook" --events='["message_new"]' --trigger-on=commands --commands='["/task"]' -
Сохрани
access_tokenиз ответа (возвращается единственный раз) -
Используй сохранённый
access_tokenдля отправки сообщений от имени бота
Альтернатива — создать и настроить бота в интерфейсе. Webhook URL и события можно задать и позже методом PUT /bots/{id}.
Обновить Webhook URL бота
-
Пользовательским токеном (с правом редактировать бота) — обнови URL по
idбота. Пустая строка отключает вебхук:pachca bots update <bot_id> --outgoing-url="https://example.com/webhook"idбота можно узнать методомpachca bots list -
Или: бот сам обновляет свой webhook своим же токеном — без
idи без участия администратора (нужен скоупbot_self:webhook:write):pachca bots update-webhook --outgoing-url="https://example.com/webhook"
Два пути: по
idпользовательским токеном (право редактировать бота) или самим ботом своим токеном (PUT /bot/webhook). Пустойoutgoing_urlотключает вебхук.
Ротация токена бота
-
Пользовательским токеном (создатель бота или администратор, если бот открыт администраторам) — перевыпусти основной токен по
idбота: тот, что без имени, а если такого нет, самый старый. Прежнее значение инвалидируется сразу:pachca bots recreate-token <bot_id> -
Или: бот перевыпускает свой основной токен сам (скоуп
bot_self:write). Если запрос сделан основным токеном, он инвалидируется сразу — обязательно сохрани новыйaccess_tokenиз ответа, иначе бот потеряет доступ к API:pachca bots recreate-token-self -
Отдельный токен бота перевыпускай по его
idизpachca bots list-tokens: значение меняется, имя и права остаются:pachca bots reissue-token <bot_id> <token_id>
Новое значение возвращается один раз: сохрани
access_tokenиз ответа и обнови секрет в CI или хранилище секретов. Self-путь (POST /bot/recreate_token) перевыпускает основной токен бота — если бот ходит им, захвати новый токен из ответа в той же операции.
Выпустить боту отдельный токен
-
Пользовательским токеном (создатель бота или администратор, если бот открыт администраторам) получи каталог прав, которые можно выдать этому боту:
pachca bots list-scopes <bot_id> -
Выпусти токен с именем и правами из каталога. Без
--scopesтокен выпускается без прав, право не из каталога отклоняется с400:pachca bots create-token <bot_id> --name="Сервер уведомлений" --scopes='["messages:create"]' -
Сохрани
tokenиз ответа — полное значение возвращается единственный раз. Дальше в спискеpachca bots list-tokensон приходит замаскированным
Отдельный токен удобен на каждый сервис, который работает от имени бота: его отзывают командой
pachca bots delete-token, не трогая остальные. Права меняетpachca bots update-token— они действуют сразу, перевыпускать токен не нужно.
Включить боту авторизацию от имени сотрудника
-
Пользовательским токеном (создатель бота или администратор, если бот открыт администраторам) включи авторизацию: где хранится секрет, адреса возврата и права, которые бот попросит у сотрудника. Права бери из
pachca bots list-scopes:pachca bots update <bot_id> --oauth-client='{"confidential":true,"redirect_uris":["https://example.com/oauth/callback"],"scopes":["messages:read","messages:create"]}' -
Сохрани
client_secretиз ответа серверного клиента — он возвращается единственный раз.client_idприходит вoauth_clientи не секретный -
Чтобы бот появился в витрине, добавь описание и опубликуй страницу:
pachca bots update <bot_id> --promo='{"description":"Собирает сводку по задачам","published":true}'
Включена ли авторизация, показывает
oauth_client_enabled:oauth_clientможет прийти и у бота с выключенной авторизацией.--oauth-client=nullвыключает её и отзывает выданные сотрудниками авторизации, новый секрет выпускаетpachca bots rotate-client-secret. Кнопку сотруднику и обмен кода на его токен описывает сценарий «Получить токен сотрудника по OAuth» в pachca-oauth.
Найти и удалить бота
-
Пользовательским токеном (скоуп
bots:read) получи список ботов, доступных тебе для редактирования: созданных тобой и тех, чьи настройки открывают тебе доступ. Фильтруй по имени параметромquery. Покаmeta.paginate.has_nextравенtrue, следующую страницу бери изmeta.paginate.next_page:pachca bots list --query="задач" -
Возьми
idнужного бота из списка и удали его (скоупbots:write). Доступно создателю бота и администратору, если бот открыт администраторам, — владельцы чатов удалять бота не могут. Все токены бота инвалидируются сразу, бот исключается из всех чатов, его вебхуки удаляются:pachca bots delete <bot_id>
Удаление необратимо: токен бота инвалидируется сразу, бот исключается из чатов. Событие фиксируется в журнале аудита как
bot_deleted.
Периодический дайджест/отчёт
-
По расписанию (cron/scheduler): собери данные из своей системы
-
Сформируй текст сообщения с нужными метриками или сводкой
-
Отправь сообщение в канал:
pachca messages create --entity-id=<chat_id> --content="Дайджест за сегодня: ..."
Нет встроенного планировщика — используй cron, celery, sidekiq и т.п. на своей стороне.
Инвентаризация всех ботов пространства
-
Получи всех ботов пространства, а не только доступных для редактирования:
pachca bots list-company --allНужен скоуп
company_bots:read, роль владельца пространства и тариф «Корпорация», иначе метод отвечает403. Фильтр по имени — флаг--query -
Для каждого бота проверь, раскрыты ли настройки: у ботов, недоступных владельцу токена для редактирования, заполнены только
nameиnickname, остальные поля вебхука приходятnullНастройки такого бота можно получить только тем токеном, которому доступно его редактирование
Каждый запрос к списку ботов пространства пишется в журнал аудита как
company_bots_accessed.
Limitations
- Rate limit: ~50 req/sec. On 429 — wait and retry.
webhook.name: max 255 characterswebhook.nickname: max 255 characterswebhook.trigger_on: allowed values —commands(Только на команды (триггер-слова) из commands),all_messages(На все сообщения в чатах, где есть бот),unfurl(На развёртывание ссылок (link previews))webhook.template_engine: allowed values —liquid(Liquid — условия, циклы и фильтры),mustache(Mustache — простая подстановка без логики)webhook.who_can_add: allowed values —creator(Только создатель бота),creator_admin(Создатель и администраторы компании),creator_admin_user(Создатель, администраторы и участники компании),anyone(Публичный бот: добавить его может любой сотрудник, кроме гостей и мульти-гостей)webhook.kind: allowed values —simple(Свой формат: сообщение собирается из тела запроса по шаблону бота),gitlab(GitLab: Пачка сама разбирает запрос и собирает сообщение),grafana(Grafana: Пачка сама разбирает запрос и собирает сообщение)name: max 255 characterslimit: max 50- Pagination: cursor-based (limit + cursor)
Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /bot/recreate_token | Ротация собственного токена бота |
| PUT | /bot/webhook | Саморегистрация вебхука бота |
| GET | /bots | Список ботов |
| POST | /bots | Новый бот |
| GET | /bots/{id} | Информация о боте |
| PUT | /bots/{id} | Редактирование бота |
| DELETE | /bots/{id} | Удаление бота |
| PUT | /bots/{id}/avatar | Загрузка аватара бота |
| DELETE | /bots/{id}/avatar | Удаление аватара бота |
| POST | /bots/{id}/recreate_token | Ротация токена бота |
| POST | /bots/{id}/rotate_client_secret | Ротация секрета клиента |
| GET | /bots/{id}/scopes | Каталог прав бота |
| GET | /bots/{id}/tokens | Список токенов бота |
| POST | /bots/{id}/tokens | Новый токен бота |
| PUT | /bots/{id}/tokens/{token_id} | Изменение токена бота |
| DELETE | /bots/{id}/tokens/{token_id} | Удаление токена бота |
| POST | /bots/{id}/tokens/{token_id}/reissue | Перевыпуск токена бота |
| GET | /company/bots | Список ботов пространства |
| GET | /webhooks/events | История событий |
| DELETE | /webhooks/events/{id} | Удаление события истории |
Advanced workflows
For advanced workflows, read the files in references/: references/handle-incoming-webhook-event.md — Handle incoming webhook event references/link-unfurling.md — Link unfurling references/handle-button-click-callback.md — Handle button click (callback) references/monitoring-and-alerts.md — Monitoring and alerts references/process-events-via-history-polling.md — Process events via history (polling)
references/webhook-events.md — Webhook event types
If unsure how to complete a task, read the corresponding file from references/.