Для разработчиков

Черновик вместо отправки

Отправленное сообщение уже прочитали. Если агент написал не в тот чат, не тем тоном или не тому сотруднику, удаление не спасает: уведомление ушло, в ленте остался след, а у собеседника осталось впечатление.

Черновик убирает необратимость. Агент готовит текст, тот появляется в поле ввода нужного чата, и дальше решает сотрудник: дописать, отправить или стереть.

Работает только личным токеном

Ограничение, от которого зависит вся конструкция: боту черновики недоступны. Скоупы drafts:read и drafts:write токенам ботов не выдаются, в том числе по авторизации от имени сотрудника, и с токеном бота метод ответит 403.

Значит, агент действует личным токеном того сотрудника, за которого пишет. Такой токен у программы, подключённой к MCP-серверу входом через браузер или персональным токеном, и у CLI после входа. Черновик появляется там же, где сотрудник увидел бы свой собственный.

Это не обход ограничения, а его смысл. Черновик приватен: его не видит ни собеседник, ни администратор пространства. Агент кладёт заготовку в черновик того самого сотрудника, который потом её и отправит. Значит, и отвечать за отправленное будет он.

Черновик появляется в поле ввода чата

Черновик кладётся в беседу одним запросом:

Новый черновик
pachca drafts create \  --entity-type=discussion \  --entity-id=334 \  --content='Коллеги, отчёт за неделю готов, прикладываю.' \  --json \  --token YOUR_ACCESS_TOKEN

Сотрудник открывает чат — текст уже в поле ввода, как будто он сам его набрал. Дальше обычная работа: поправить, дописать, отправить.

Чтобы черновик ушёл ответом на конкретное сообщение, добавьте поле parent_message_id (в CLI флаг --parent-message-id). Сообщение должно быть в том же чате.

Что должен знать агент

На повторное создание приходит 409. Идентификатор уже существующего черновика придёт в errors[].payload.draft_id. Правильная реакция — не повторять запрос, а дописать существующий методом PUTРедактирование черновика. Агент, который на 409 пробует снова, будет биться в ту же ошибку.

Перезаписываются только переданные поля, и каждое заменяется целиком. Прислали content — заменится текст, вложения останутся. Прислали пустой files — вложения снимутся. Проверки на то, что черновик успел поправить сам сотрудник, нет: побеждает последняя запись. Поэтому переписывать заготовку вслепую, когда сотрудник уже мог её открыть, не стоит — сначала прочитайте её методом GETИнформация о черновике.

Свои черновики агент видит списком — GETСписок черновиков. Полезно, чтобы не плодить заготовки и понимать, что уже подготовлено.

Отправить черновик запросом нельзя. Метода «отправить черновик» в API нет: отправка — это обычное POSTНовое сообщение, а черновик после неё убирают методом DELETEУдаление черновика. Так же работает и интерфейс: обычный черновик сотрудник отправляет из поля ввода чата или кнопкой «Отправить» в разделе «Черновики», и после отправки черновик удаляется. Для приёма это не ограничение, а его суть: кнопку нажимает сотрудник. Если сотрудник сам просит агента отправить черновик, через MCP-сервер агент передаёт в pachca_send_message всё, что лежит в черновике: чат, текст, parent_message_id и вложения, вместе с идентификатором черновика в draft_id. После успешной отправки сервер удаляет черновик сам, и то, что агент не передал, удаляется вместе с ним.

Черновик не создаёт уведомления. Сотрудник находит заготовку в поле ввода чата и в разделе «Черновики», но Пачка не сообщает, что она там появилась. О том, что заготовка готова и в каком она чате, сообщает тот, кто её положил.

Отложенное сообщение

У метода POSTНовый черновик есть поле schedule. С ним получается уже не черновик: сообщение уйдёт само в назначенное время, и сотрудник не увидит его до отправки. Дописывать и нажимать «Отправить» будет некому, поэтому текст должен быть готов сразу.

Внутри schedule три поля:

  • start_date — первая отправка. Из неё же берутся время суток, число месяца и день недели, по которым дальше строится повтор.
  • repetition — правило повтора.
  • end_date — необязательная дата, после которой повтор обрывается. Без неё повтор идёт бессрочно.

Чтобы сообщение ушло однократно, передайте в repetition.interval значение once. Для повтора есть daily, weekly, monthly и более редкие периодичности вплоть до yearly. У недельного повтора дни задаются списком days, где 0 — воскресенье. У месячного вместо числа можно указать порядковый день недели: nth_day от 1 до 4, а 5 означает последний. Так получается «каждый последний вторник месяца».

Время суток, день недели и число месяца для повтора берутся из start_date как записаны, а сам повтор идёт по часам UTC: 10:00+03:00 с еженедельным повтором уйдёт в 10:00 UTC, включая первую отправку. Поэтому повторяющееся расписание задавайте в UTC (с Z на конце) и сверяйте next_send_at в ответе. Рядом с полуночью при переводе в UTC сдвигается и день: понедельник 01:00 по Москве — это воскресенье 22:00 UTC, и в repetition.days нужен 0. У однократной отправки (once) смещение учитывается как обычно.

Сотрудник видит такие сообщения не в поле ввода, а на вкладке «Отложенные» в разделе «Черновики». Там любое из них можно поправить, удалить или отправить сразу кнопкой «Отправить сейчас».

Разница с черновиком принципиальная. «Подготовь ответ клиенту, я проверю» — черновик. «Напомни команде в понедельник утром» — отложенное сообщение. Путать их не стоит: во втором случае проверить текст будет некому.

Превратить отложенное сообщение обратно в черновик нельзя, и отменить отправку тоже можно только удалением: снять расписание правкой не выйдет, метод ответит 422.

Ограничения

  • Обычный черновик в чате, треде или личной переписке может быть только один
  • Своих отложенных сообщений в одном чате — до 50, тред считается отдельным чатом
  • Вложений в черновике — до 10
  • Пустой черновик создать нельзя: нужен либо текст, либо вложения