API сообщений
API отмены сообщений
Отмените сообщение WhatsApp, которое ещё не отправлено. Используйте этот API, чтобы остановить запланированное напоминание после отмены записи или отозвать сообщение, поставленное в очередь по ошибке.
https://wbiztool.com/api/v1/cancel_msg/Тело запроса: JSON или поля формы
Отменить можно любое сообщение, которое ещё ожидает отправки (статус 0, Created): запланированные сообщения и сообщения, поставленные в очередь через API отправки сообщений, отправку в группу или отправку на несколько номеров. Уже отправленное сообщение отозвать нельзя. Если бот уже отправляет сообщение в этот момент, оно всё равно может уйти, поэтому для критичных отмен проверяйте результат через Статус сообщения.
Быстрый пример#
curl -X POST https://wbiztool.com/api/v1/cancel_msg/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"msg_id": 9817263
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/cancel_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"msg_id": 9817263,
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Message cancelled")
else:
print("Not cancelled:", result.get("message", "no message in response"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/cancel_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
msg_id: 9817263,
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Message cancelled");
} else {
console.error("Not cancelled:", result.message ?? "no message in response");
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'msg_id' => 9817263,
];
$ch = curl_init('https://wbiztool.com/api/v1/cancel_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Message cancelled';
} else {
echo 'Not cancelled: ' . ($result['message'] ?? 'no message in response');
}Замените 12345 и YOUR_API_KEY своими значениями, а 9817263 — значением msg_id, полученным при отправке или планировании сообщения.
Параметры запроса#
client_idintegerобязательноВаш API Client ID из раздела Настройки → API ключи.
api_keystringобязательноВаш API-ключ с той же страницы.
msg_idintegerобязательноmsg_id, возвращённый запросом на отправку или планирование. Он должен принадлежать рабочему пространству вашего API-ключа.
Этому endpoint не нужен whatsapp_client.
Использование официальных клиентов#
Клиенты для Python и Node.js вызывают этот endpoint за вас.
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)
result = client.cancel_message(msg_id=9817263)
print(result)const { WbizToolClient } = require("wbiztool-client");
const client = new WbizToolClient({
clientId: 12345,
apiKey: "YOUR_API_KEY",
whatsappClient: 678, // required by the client's constructor, not used by this endpoint
});
(async () => {
const result = await client.cancelMessage(9817263);
console.log(result);
})().catch(console.error);Оба клиента выбрасывают исключение при ошибках аутентификации (HTTP 400/403): Python выбрасывает requests.HTTPError, а Node.js — API error: 400 - {…}. Ответ Msg has been … возвращается как обычный результат со status: 0.
Ответ#
Успешный запрос возвращает HTTP 200:
{
"message": "Cancelled",
"status": 1
}
| Поле | Тип | Описание |
|---|---|---|
status | integer | 1, если сообщение отменено, 0, если нет. |
message | string | Cancelled при успехе, иначе причина. |
После отмены Статус сообщения возвращает для сообщения 3 (Cancelled). Отменённое сообщение не отправляется, не вызывает свой webhook и больше не расходует остаток ваших кредитов.
Ошибки#
Большинство ошибок возвращаются с HTTP 200 и status, равным 0, поэтому всегда проверяйте status в теле ответа:
{ "message": "Msg has been Sent", "status": 0 }
| Сообщение | Как исправить |
|---|---|
Msg has been Sent | Сообщение уже отправлено. Отменить его нельзя. |
Msg has been Failed | Отправка сообщения уже завершилась ошибкой, отменять нечего. |
Msg has been Cancelled | Сообщение было отменено ранее. |
Msg has been Expired | Срок действия сообщения истёк до отправки, отменять нечего. |
No msg found for given msg_id | Проверьте msg_id. Он должен быть числом и принадлежать тому же рабочему пространству, что и ваш API-ключ. |
Msg_id cant be null | Добавьте msg_id. |
Auth Error | Передайте и client_id, и api_key. |
Invalid Client Id | Передайте client_id числом. Возвращается с HTTP 403. |
Auth Error: invalid api key | Проверьте, что ключ существует, не удалён и принадлежит этому client_id. Возвращается с HTTP 400. |
Invalid JSON format: … | Тело JSON некорректно — часто из-за лишней запятой в конце, — или вы отправили поля формы без client_id. |
Пустой объект {} | Тело JSON было отправлено методом, отличным от POST. |
Советы#
- Сохраняйте каждый
msg_id: он нужен для отмены. Для отправки на несколько номеров отменяйте каждыйmsg_idиз ответа отдельно. - Отменяйте заранее: отправленное сообщение вернуть нельзя, поэтому отменяйте запланированные сообщения, как только станет ясно, что они больше не нужны.
- Перенос: endpoint для изменения запланированного времени нет. Отмените сообщение и запланируйте новое.
- Считайте сообщения в конечном статусе обработанными: ответ вида
Msg has been …означает, что сообщения уже нет в очереди, поэтому повторять запрос не нужно.
