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

Почта через API

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

Канал «Почта» работает с ящиком компании по IMAP и SMTP — как почтовая программа. Новые письма приходят уведомлениями, а методы ящика дают всё остальное: папки, поиск, письмо целиком, флаги, перенос, ответы в цепочку, пересылку и черновики. Общие методы — sendMessage, история, контакты — работают и у почты.

Все методы почты — POST с телом JSON, адрес как у остальных методов: https://api.gratio.net/waInstance{idInstance}/{метод}/{apiTokenInstance}. У каналов MAX, Telegram и WhatsApp методы почты отвечают 501.

Подключить ящик — в кабинете, см. Почта, или из своего приложения методом connectMailbox.

Чат и цепочка

Что это Пример
Чат — chatId переписка с одним адресом "maria@client.ru"
Цепочка — threadId письма одной темы, связанные ответами "c62b698304229a98aad3"
  • chatId — адрес собеседника в нижнем регистре, домен — юникодом: "info@пример.рф". Входящее письмо попадает в чат адреса из Reply-To, а без него — отправителя. Своё письмо — в чат первого получателя.
  • Свои адреса — адрес ящика и адреса из настройки emailAliases. Письма с них считаются своими, см. Настройки ящика.
  • threadId — idMessage первого письма цепочки. В чате бывает несколько цепочек, а в цепочке — несколько адресатов.
  • chatId у почты — только адрес. Номер телефона 79991234567@c.us у почты не работает.

Три письма — один чат и две цепочки:

Мария → «Запись на пробное»          чат maria@client.ru, цепочка c62b…
Школа → «Re: Запись на пробное»      тот же чат, та же цепочка
Мария → «Вопрос по оплате»           тот же чат, новая цепочка

Как указать письмо

Методы, которые работают с одним письмом, принимают его одним из способов:

Поля Пример Когда подходит
folder + uid {"folder": "inbox", "uid": 1532} всегда: номер письма в папке, как в IMAP
idMessage {"idMessage": "c62b698304229a98aad3"} Gratio уже видел письмо: в уведомлении, списке, поиске
idMessage + chatId {"idMessage": "c62b698304229a98aad3", "chatId": "maria@client.ru"} письмо из уведомления или отправленное через API: найдётся по журналу канала
messageId {"messageId": "CAF1xQm7v2k@mail.gmail.com"} заголовок Message-ID, с угловыми скобками или без
  • idMessage — 20 hex-знаков от Message-ID. Он одинаков у письма в любой папке: копия вашего письма в «Отправленных» имеет тот же idMessage, что вернула отправка.
  • По messageId Gratio ищет письмо в папке folder, если она задана, затем во «Входящих», «Отправленных», «Архиве», «Вся почта», «Черновиках», «Спаме» и «Корзине».
  • uid меняется, когда письмо переносят в другую папку: новый номер — в ответе moveMessages. Если у папки сменился uidValidity, старые uid этой папки больше не действуют — перечитайте её.
  • Письма нет — 400 not_found.

Несколько писем

markMessages, setMessageFlags, moveMessages, copyMessages и deleteMessages принимают до 500 писем:

Поля Пример
messages {"messages": [{"folder": "inbox", "uid": 1532}, {"idMessage": "7877cd439c05bc16617b"}]}
folder + uids {"folder": "inbox", "uids": [1532, 1540]}
idMessages {"idMessages": ["c62b698304229a98aad3", "7877cd439c05bc16617b"]}

Одно письмо можно указать и как в остальных методах: folder + uid, idMessage или messageId.

Как указать папку

Папку в полях folder, to и parent указывают ролью, именем на сервере или названием:

Способ Пример
роль "inbox", "sent", "archive"
имя на сервере "INBOX", "Sent", "&BBcEMARPBDIEOgQ4-"
название "Отправленные", "Заявки"
Роль Папка
inbox «Входящие»
sent «Отправленные»
drafts «Черновики»
trash «Корзина»
spam «Спам»
archive «Архив»
all «Вся почта» — есть у Gmail

Роль Gratio определяет по флагам папок (SPECIAL-USE), без них — по привычным именам: Sent, «Отправленные», Trash, «Корзина». Какие роли нашлись в ящике — в getMailboxInfo, все папки — в getFolders. Папки нет — 400 folder_not_found.

Конверт письма

Конверт — письмо без тела: где лежит, от кого, кому, тема, флаги. Его возвращают getMessages, searchMessages и getThread, а getEmail — конверт вместе с телом.

Письмо Марии во «Входящих»:

{
  "idMessage": "c62b698304229a98aad3",
  "folder": "INBOX",
  "uid": 1532,
  "uidValidity": 1700000000,
  "chatId": "maria@client.ru",
  "messageId": "CAF1xQm7v2k@mail.gmail.com",
  "threadId": "c62b698304229a98aad3",
  "inReplyTo": null,
  "references": [],
  "timestamp": 1791823658,
  "internalDate": 1791823661,
  "from": {"address": "maria@client.ru", "name": "Мария"},
  "to": [{"address": "info@school.ru", "name": ""}],
  "cc": [],
  "replyTo": [],
  "subject": "Запись на пробное",
  "flags": ["\\Seen"],
  "seen": true,
  "flagged": false,
  "answered": false,
  "draft": false,
  "size": 4821,
  "hasAttachments": false
}
Поле Тип Описание
idMessage string id письма: 20 hex-знаков от Message-ID
folder, uid string, integer где письмо лежит: имя папки на сервере и номер письма в ней
uidValidity integer версия нумерации папки: сменилась — старые uid не действуют
chatId string чат письма: Reply-To или отправитель, у своего письма — первый получатель
messageId string заголовок Message-ID без угловых скобок
threadId string цепочка письма
inReplyTo string на какое письмо это ответ — его Message-ID; null — не ответ
references array Message-ID писем цепочки до этого
timestamp integer дата из письма, время Unix
internalDate integer когда письмо легло в ящик
from object отправитель: {"address", "name"}
to, cc, replyTo array «Кому», «Копия» и Reply-To — объекты {"address", "name"}
subject string тема
flags array флаги как на сервере: \Seen, \Flagged, свои ключевые слова
seen, flagged, answered, draft boolean прочитано, отмечено флажком, отвечено, черновик
size integer размер письма в байтах
hasAttachments boolean в письме есть вложения

В JSON обратная косая черта удваивается: флаг \Seen записывается как "\\Seen".

Общие методы у почты

Метод У почты
sendMessage письмо-ответ в цепочку: на quotedMessageId или на последнее письмо переписки не старше 30 дней, иначе новое письмо. Тема — «Re: …», у нового письма — emailSubject или первая строка текста. typingTime — просто пауза
sendFileByUpload, sendFileByUrl письмо с файлом, caption — текст письма
forwardMessages письма из messages уходят на адрес chatId, каждое — отдельной пересылкой
readChat письмо idMessage или все непрочитанные письма собеседника во «Входящих» — прочитанными в ящике
getChatHistory, getMessage, downloadFile переписка с адресом во «Входящих» и «Отправленных», до 200 писем
getChats, getContacts, getContactInfo собеседники последних писем «Входящих» и «Отправленных»
sendTyping {} и ничего не делает: «печатает» у почты нет
getAvatar {"urlAvatar": "", "available": false}
checkAccount, editMessage, deleteMessage, реакции, геопозиция, контакт, опрос, архив и закрепы, группы, сообщества, звонки, истории 501 not_supported. Удалить письмо в ящике — deleteMessages

Пределы

Что Предел Если больше
Письмо с вложениями 20 МБ 400 too_large
Писем в сутки с ящика 300: все отправки — sendMessage, файлы, sendEmail, ответы, пересылки, отправка черновиков 429 daily_limit, Retry-After: 3600
Пауза между письмами 2 секунды отказа нет: запрос подождёт
Писем в одном ответе списка 500 limit больше 500 считается как 500, остальное — следующей страницей
Писем в одном запросе флагов, переноса, удаления 500 400 validation

Сутки считаются по UTC. Сколько писем ушло сегодня — sentToday в getMailboxInfo.

Что Gratio меняет в ящике

Gratio читает письма, не помечая их прочитанными. Ящик меняется только по вашим вызовам: флаги, перенос, удаление, папки, черновики. Отправка меняет ещё две вещи: копия письма ложится в «Отправленные», если сервер не кладёт её сам, а письмо, на которое ответили через replyEmail, помечается «отвечено». Все изменения сразу видны сотрудникам в их почтовых программах.

Что дальше

  • connectMailbox — подключить ящик из своего приложения.
  • getMessages — письма папки страницами.
  • sendEmail — письмо со всеми полями.
  • Письмо — уведомление о новом письме.

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