Перейти к содержимому

saveDraft

Обновлено 17 октября 2026

Кладёт письмо в «Черновики» ящика. Черновик видно в почтовых программах сотрудников: его можно проверить, поправить и отправить оттуда — или отправить из своего приложения методом sendDraft. Поля — как у sendEmail.

Запрос POST /waInstance{idInstance}/saveDraft/{apiTokenInstance}
Тело JSON
Каналы почта

Параметры

Все поля необязательны: черновик может быть и пустым.

Параметр Тип Обязательный Описание
chatId string нет первый получатель в «Кому»
to, cc, bcc array, string нет ещё получатели, копия, скрытая копия
replyTo array, string нет Reply-To — куда отвечать
subject string нет тема. Не задана: «Re: …» у ответа, иначе первая строка текста
message string нет текст
html string нет своя html-версия
files array нет вложения: [{"urlFile": "…", "fileName": "…"}]
quotedMessageId string нет черновик ответа на это письмо: цепочка и цитата
quote boolean нет цитировать письмо quotedMessageId. Не задан — emailQuote
signature string нет подпись; "" — без подписи. Не задана — emailSignature
readReceipt, priority, headers нет как в sendEmail
clientMessageId string нет из него выводится Message-ID черновика

Пример запроса

Черновик письма Марии — на проверку администратору:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/saveDraft/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "chatId": "maria@client.ru",
    "subject": "Расписание на ноябрь",
    "message": "Здравствуйте! Высылаем расписание занятий на ноябрь.",
    "clientMessageId": "draft-nov-1"
  }'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]

url = f"{BASE}/saveDraft/{TOKEN}"
payload = {
    "chatId": "maria@client.ru",
    "subject": "Расписание на ноябрь",
    "message": "Здравствуйте! Высылаем расписание занятий на ноябрь.",
    "clientMessageId": "draft-nov-1",
}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())

Node.js

const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;

const url = `${base}/saveDraft/${GRATIO_TOKEN}`;
const payload = {
  chatId: "maria@client.ru",
  subject: "Расписание на ноябрь",
  message: "Здравствуйте! Высылаем расписание занятий на ноябрь.",
  clientMessageId: "draft-nov-1",
};
const response = await fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/saveDraft/' . getenv('GRATIO_TOKEN');
$payload = [
    'chatId' => 'maria@client.ru',
    'subject' => 'Расписание на ноябрь',
    'message' => 'Здравствуйте! Высылаем расписание занятий на ноябрь.',
    'clientMessageId' => 'draft-nov-1',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

Пример ответа

Ответ 200 OK:

{"idMessage": "ecaf8b7f2dcf87cac8f4", "messageId": "gr.lzaaa3c7ubkbzgwe2gicbhxqby@school.ru", "folder": "Drafts", "uid": 88}

Поля ответа

Поле Тип Описание
idMessage string id черновика. Тот же idMessage будет у письма после отправки
messageId string Message-ID черновика
folder string папка «Черновики» — имя на сервере
uid integer номер черновика в папке; null — сервер его не сообщает (нет UIDPLUS)

Как устроен черновик

  • Черновик ложится с флагами \Draft и \Seen. Скрытая копия хранится в заголовке Bcc — при отправке он убирается.
  • Правки черновика нет: сохраните новый и удалите старый методом deleteMessages.
  • Повтор запроса кладёт ещё один черновик, даже с тем же clientMessageId.
  • Черновики не входят в предел 300 писем в сутки — входит их отправка.

Ошибки

Код code Когда Что делать
400 validation files — не список {urlFile, fileName}; неверный priority; headers — не объект исправить запрос
400 folder_not_found в ящике нет папки «Черновики» создать её в почте или методом createFolder
400 bad_address адрес не распознан; заголовок в headers — не X-… исправить адрес или заголовок
400 not_found нет письма quotedMessageId проверить письмо
400 bad_url, url_unavailable, file_too_large файл по ссылке не скачался проверить ссылку
400 mail_error сервер почты не принял черновик, например кончилась квота см. message — там ответ сервера
400 not_authorized ящик не подключён подключить ящик: connectMailbox
501 not_supported канал — не почта вызвать у канала «Почта»

Общие правила — в статье Ответы и ошибки.

Что дальше

  • sendDraft — отправить черновик.
  • sendEmail — отправить письмо сразу.
  • getMessages — черновики ящика: folder: "drafts".

Была ли статья полезна?