Черновик вместо отправки
Отправленное сообщение уже прочитали. Если агент написал не в тот чат, не тем тоном или не тому сотруднику, удаление не спасает: уведомление ушло, в ленте остался след, а у собеседника осталось впечатление.
Черновик убирает необратимость. Агент готовит текст, тот появляется в поле ввода нужного чата, и дальше решает сотрудник: дописать, отправить или стереть.
Работает только личным токеном
Ограничение, от которого зависит вся конструкция: боту черновики недоступны. Скоупы drafts:read и drafts:write токенам ботов не выдаются, в том числе по авторизации от имени сотрудника, и с токеном бота метод ответит 403.
Значит, агент действует личным токеном того сотрудника, за которого пишет. Такой токен у программы, подключённой к MCP-серверу входом через браузер или персональным токеном, и у CLI после входа. Черновик появляется там же, где сотрудник увидел бы свой собственный.
Это не обход ограничения, а его смысл. Черновик приватен: его не видит ни собеседник, ни администратор пространства. Агент кладёт заготовку в черновик того самого сотрудника, который потом её и отправит. Значит, и отвечать за отправленное будет он.
Черновик появляется в поле ввода чата
Черновик кладётся в беседу одним запросом:
Сотрудник открывает чат — текст уже в поле ввода, как будто он сам его набрал. Дальше обычная работа: поправить, дописать, отправить.
Чтобы черновик ушёл ответом на конкретное сообщение, добавьте поле 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
- Пустой черновик создать нельзя: нужен либо текст, либо вложения