Отдаёт отравленные уведомления канала — те, что вебхук отвергал час подряд или 20 попыток. Gratio убирает такое уведомление из головы очереди, чтобы оно не задерживало остальные, и хранит его здесь. Починили обработчик — верните уведомления requeueDeadNotifications.
| Запрос | GET /waInstance{idInstance}/getDeadNotifications/{apiTokenInstance} |
| Тело | нет |
| Каналы | MAX, Telegram, WhatsApp, почта |
В отравленные попадают только уведомления вебхука. В режиме очереди уведомление ждёт, пока вы его не удалите, — см. receiveNotification.
Пример запроса
Посмотреть отравленные уведомления:
curl
curl "$GRATIO_URL/waInstance$GRATIO_ID/getDeadNotifications/$GRATIO_TOKEN"
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/getDeadNotifications/{TOKEN}"
response = requests.get(url, 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}/getDeadNotifications/${GRATIO_TOKEN}`;
const response = await fetch(url);
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/getDeadNotifications/' . getenv('GRATIO_TOKEN');
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 90,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);
Пример ответа
Ответ 200 OK — массив, старые первыми:
[
{
"receiptId": 41,
"body": {
"typeWebhook": "incomingMessageReceived",
"instanceData": {"idInstance": 7100000001, "wid": "79990000001@c.us", "typeInstance": "v3", "channel": "max"},
"timestamp": 1791823658,
"idMessage": "117428955282341903",
"eventId": "msg:8695836:117428955282341903",
"senderData": {
"chatId": "8695836", "chatName": "Мария", "chatType": "user",
"sender": "8695836", "senderName": "Мария", "senderType": "user",
"senderContactName": "", "senderPhoneNumber": 0
},
"messageData": {
"typeMessage": "textMessage",
"textMessageData": {"textMessage": "Здравствуйте! Есть места на субботу?"}
}
},
"reason": "HTTP 500",
"deadAt": 1791827381,
"attempts": 17
}
]
Отравленных нет — пустой массив [].
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
receiptId |
integer | номер уведомления в очереди |
body |
object | уведомление целиком — см. Формат уведомления |
reason |
string | причина последней неудачи — таблица ниже |
deadAt |
integer | когда уведомление стало отравленным, секунды Unix |
attempts |
integer | сколько попыток доставки было |
Причины
reason |
Что случилось |
|---|---|
HTTP 400, HTTP 500 и другие |
ваш сервер ответил этим кодом |
ReadTimeout |
сервер не ответил за 30 секунд |
ConnectError, ConnectTimeout |
не удалось соединиться: адрес недоступен, порт закрыт, сертификат не принят |
internal_host |
адрес вебхука стал вести во внутреннюю сеть |
Как разобрать
- Посмотрите
reasonиbody: ошибка в обработчике на этом виде уведомления или сервер был недоступен. - Почините обработчик.
- Нужные уведомления верните requeueDeadNotifications.
- Ненужное удалите по одному: deleteNotification с его
receiptId.
За раз приходит до 100 отравленных уведомлений. Подтверждённые, отравленные и истёкшие уведомления Gratio хранит 7 дней, затем удаляет.
У подписок свои отравленные — счётчик dead в списке subscriptions.
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
401 |
— | неверный idInstance или токен |
взять ключ в кабинете |
Что дальше
- requeueDeadNotifications — вернуть отравленные в очередь.
- Вебхук — коды ответа и расписание повторов.
