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

replyEmail

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

Отвечает на письмо так же, как кнопка «Ответить» в почтовой программе: на адрес из Reply-To или отправителю, в ту же цепочку, с темой «Re: …» и цитатой. Письмо, на которое ответили, помечается «отвечено». Подходит письмо из любой папки, в том числе то, которого не было в уведомлениях.

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

Параметры

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

* Нужен хотя бы один из message, html, files.

Кому уйдёт ответ: на адрес из Reply-To письма, без него — отправителю. На своё письмо — его первому получателю.

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

Ответ на письмо Марии из уведомления:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/replyEmail/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "idMessage": "c62b698304229a98aad3",
    "chatId": "maria@client.ru",
    "message": "Мария, записали вас на субботу, 11:00.",
    "clientMessageId": "reply-1532"
  }'

Python

import os
import requests

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

url = f"{BASE}/replyEmail/{TOKEN}"
payload = {
    "idMessage": "c62b698304229a98aad3",
    "chatId": "maria@client.ru",
    "message": "Мария, записали вас на субботу, 11:00.",
    "clientMessageId": "reply-1532",
}
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}/replyEmail/${GRATIO_TOKEN}`;
const payload = {
  idMessage: "c62b698304229a98aad3",
  chatId: "maria@client.ru",
  message: "Мария, записали вас на субботу, 11:00.",
  clientMessageId: "reply-1532",
};
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 . '/replyEmail/' . getenv('GRATIO_TOKEN');
$payload = [
    'idMessage' => 'c62b698304229a98aad3',
    'chatId' => 'maria@client.ru',
    'message' => 'Мария, записали вас на субботу, 11:00.',
    'clientMessageId' => 'reply-1532',
];

$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": "db93a4558705f5b8ef5b",
  "emailMessageData": {
    "subject": "Re: Запись на пробное",
    "messageId": "gr.ztme4rgc2femufilbicvmeimbh@school.ru",
    "threadId": "c62b698304229a98aad3",
    "inReplyTo": "CAF1xQm7v2k@mail.gmail.com",
    "to": ["maria@client.ru"],
    "cc": [],
    "bcc": [],
    "refused": {}
  }
}

Поля — как у sendEmail.

Ещё примеры

Ответить всем

Мария написала, а папа был в копии её письма — ответ уйдёт Марии, папа получит его в копии:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/replyEmail/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "folder": "inbox",
    "uid": 1541,
    "message": "Ждём вас обоих в субботу.",
    "replyAll": true
  }'

Ответ с файлом, без цитаты

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/replyEmail/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "folder": "inbox",
    "uid": 1540,
    "message": "Спасибо! Анкету получили, договор — во вложении.",
    "files": [
      {
        "urlFile": "https://api.gratio.net/upload/7100000001/c41a…/dogovor.pdf",
        "fileName": "Договор.pdf"
      }
    ],
    "quote": false
  }'

Как выглядит ответ

  • Тема — «Re: » и тема письма, без накопления «Re: Re:».
  • Заголовки In-Reply-To и References связывают ответ с цепочкой — почтовые программы покажут его в той же переписке.
  • Под текстом — подпись, ниже — цитата письма собеседника. На своё письмо цитаты нет.
  • Письмо, на которое ответили, помечается «отвечено» (\Answered).

Ошибки

Код code Когда Что делать
400 validation не указано письмо; нет ни message, ни html, ни files исправить запрос
400 not_found письма нет указать folder и uid из getMessages
400 folder_not_found нет папки folder проверить getFolders
400 no_account у письма нет адреса для ответа ответить методом sendEmail на нужный адрес
400 bad_address, 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

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

Что дальше

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