Skip to main content

Downlink — отозвать данные из очереди

Отзывает кадр downlink, который стоит в очереди и ещё не ушёл на устройство. Устройство класса A получает downlink только в ответ на свой следующий uplink, поэтому кадр может ждать в очереди часами — всё это время его можно отозвать.

Текущая версия ONS

Команды нет в описании v0.17: она добавлена в сервер в августе 2026.

Отзыв работает в двух режимах:

  • Один кадр — по dataId, идентификатору элемента очереди на сервере. Это не тот dataId, который возвращает downlink_data_resp: тот служит для downlink_ack_req. Идентификатор элемента очереди сервер возвращает только в ответе на отзыв всей очереди (data_ids): команды постановки в очередь и истории его не возвращают.
  • Вся очередь устройства — по devEui с "allScheduled": true: отзываются все запланированные кадры устройства. Без флага allScheduled запрос отклоняется: в очереди могут быть кадры, поставленные другими клиентами.

Отзываются только кадры в статусе 0 (Scheduled) или 4 (Realtime Scheduled) — те, что ещё не переданы шлюзу. Отозванный кадр не удаляется: в истории (get_downlink_data_req) он остаётся со статусом 6 (Canceled) — см. статусы кадра. Сервер ищет элемент очереди за последний месяц.

Запрос и ответ: cancel_downlink_req → cancel_downlink_resp.
Доступ: токен любого уровня; отзываются только кадры устройств приложения, к которому выполнено подключение.

Запрос​

Поля без пометки «обязательно» можно не передавать.

ПолеТипОписание
cmdstringcancel_downlink_req
operation_idstringПроизвольная строка; сервер вернёт её в ответе — по ней сопоставляют запрос и ответ
dataIduint64Обязательно dataId или devEui. Идентификатор элемента очереди — чтобы отозвать один кадр
devEuistringОбязательно dataId или devEui. DevEUI устройства — чтобы отозвать всю его очередь; требует allScheduled
allScheduledboolВместе с devEui. true — отозвать все запланированные кадры устройства. По умолчанию false
{
"cmd": "cancel_downlink_req",
"operation_id": "abc",
"devEui": "6F1E570FFE14DBFC",
"allScheduled": true
}

Ответ​

ПолеТипОписание
cmdstringcancel_downlink_resp
operation_idstringЗначение из запроса
statusuint81 — кадр отозван, 2 — не отозван
cancelStatusstringИтог отзыва, см. таблицу ниже
reasonstringПричина текстом
data_iduint64Элемент очереди — при отзыве одного кадра
dev_euistringУстройство
dev_addr, fport, data, mtypestring, uint8, string, uint8Параметры отозванного кадра — только при cancelStatus = canceled и отзыве одного кадра
countuint32Сколько кадров отозвано
data_idsarrayОтозванные элементы очереди — при отзыве всей очереди

Поля без значения в ответ не включаются.

cancelStatusstatusЗначение
canceled1Кадр отозван; при отзыве всей очереди — все запланированные кадры (count, data_ids)
already_canceled2Кадр уже был отозван; повторять запрос безопасно
too_late2Кадр уже передан шлюзу или получил итоговый статус, либо сервер забрал его на передачу в момент запроса
not_found2Элемента очереди нет или он принадлежит другому приложению
not_downlink2Элемент с этим идентификатором — не downlink
error2Не указаны ни dataId, ни devEui; отзыв всей очереди без "allScheduled": true; внутренняя ошибка сервера

Примеры ответа​

Отозвана вся очередь устройства:

{
"cmd": "cancel_downlink_resp",
"operation_id": "abc",
"status": 1,
"cancelStatus": "canceled",
"reason": "Cancelled every scheduled downlink of the device",
"dev_eui": "6F1E570FFE14DBFC",
"count": 2,
"data_ids": [ 48211, 48212 ]
}

Кадр уже передан шлюзу (статус 1, Sent):

{
"cmd": "cancel_downlink_resp",
"operation_id": "xyz",
"status": 2,
"cancelStatus": "too_late",
"reason": "Already Sent",
"data_id": 48213,
"dev_eui": "6F1E570FFE14DBFC"
}

См. также​