Отправляет черновик как есть — с получателями, темой, текстом и вложениями. Черновик может сохранить ваше приложение методом saveDraft или сотрудник в почтовой программе. После отправки черновик удаляется, копия письма ложится в «Отправленные».
| Запрос | POST /waInstance{idInstance}/sendDraft/{apiTokenInstance} |
| Тело | JSON |
| Каналы | почта |
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
folder + uid, idMessage или messageId |
да, одно из | черновик — folder и uid из ответа saveDraft или из getMessages с folder: "drafts" |
|
clientMessageId |
string | нет | ключ от дублей: повтор с тем же ключом не отправит черновик второй раз |
Пример запроса
Черновик из ответа saveDraft:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendDraft/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"folder": "drafts",
"uid": 88,
"clientMessageId": "send-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}/sendDraft/{TOKEN}"
payload = {"folder": "drafts", "uid": 88, "clientMessageId": "send-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}/sendDraft/${GRATIO_TOKEN}`;
const payload = { folder: "drafts", uid: 88, clientMessageId: "send-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 . '/sendDraft/' . getenv('GRATIO_TOKEN');
$payload = [
'folder' => 'drafts',
'uid' => 88,
'clientMessageId' => 'send-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"}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
idMessage |
string | id отправленного письма — тот же, что у черновика |
Как отправляется черновик
- Получатели — все из «Кому», «Копии» и скрытой копии черновика. Заголовок Bcc из письма убирается.
- Дата письма — время отправки. Тема, текст, вложения и Message-ID — как в черновике.
- Черновик удаляется насовсем, копия письма ложится в «Отправленные».
- Указывайте письмо из «Черновиков»: метод отправит письмо из любой папки и удалит его там.
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
validation |
не указан черновик | добавить folder и uid |
400 |
not_found |
черновика нет: его уже отправили или удалили | проверить getMessages с folder: "drafts" |
400 |
bad_address |
в черновике нет получателей в «Кому» или «Копии» | сохранить черновик с получателями |
400 |
too_large, rejected, auth_failed и другие |
отказ почты | см. sendEmail |
402 |
payment_required |
канал на паузе за неоплату | продлить канал в кабинете |
409 |
idempotency_conflict |
тот же clientMessageId с другим черновиком |
новый ключ для нового письма |
429 |
daily_limit, too_frequent |
предел ящика за сутки или почта просит подождать | повторить после Retry-After |
501 |
not_supported |
канал — не почта | вызвать у канала «Почта» |
503 |
outcome_unknown |
связь оборвалась посреди отправки | повторить с тем же clientMessageId |
Общие правила — в статье Ответы и ошибки.
Что дальше
- saveDraft — сохранить черновик.
- outgoingMessageStatus — недоставка и отчёт о прочтении.
- getThread — письмо в цепочке после отправки.
