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

Приём сообщений по HTTP ​

Приложение или устройство отправляет тело сообщения на публичный адрес входящего канала. Депешер проверяет запрос, применяет правила и шаблон, сохраняет результат и ставит внешние уведомления в очередь. Личный и организационный канал используют один способ отправки.

Запрос ​

Скопируйте URL из карточки канала, например https://depesher.ru/w/ВАШ_PUBLIC_ID. Используйте POST и тело в UTF-8. Это адрес отправки события; пароль аккаунта или токен входа в ЛК ему не нужен.

ЗаголовокЗначение
Content-Typetext/plain, text/markdown или application/json; допускается ; charset=utf-8
AuthorizationBearer ВАШ_ТОКЕН, только если включена защита этого входящего канала

Токен принадлежит входящему каналу. После замены старый перестаёт работать. Не передавайте его в JSON или параметрах URL; храните в секретах отправителя. Управление токеном — в инструкции входящего канала.

Пример для защищённого канала, переменные DEPESHER_URL и DEPESHER_TOKEN заранее заданы в окружении:

bash
curl --include \
  --silent --show-error \
  --max-time 15 \
  --request POST \
  --header 'Content-Type: application/json' \
  --header "Authorization: Bearer $DEPESHER_TOKEN" \
  --data-binary '{"event":{"type":"test"},"message":"Проверка HTTP"}' \
  "$DEPESHER_URL"

Для канала без защиты уберите заголовок Authorization. Для текста замените Content-Type и тело, например на text/plain и Проверка HTTP. Формы application/x-www-form-urlencoded и multipart/form-data не являются поддерживаемым форматом непустого сообщения.

JSON и пустое тело ​

JSON проверяется до правил. Объект или массив удобен для полей, но принимается и другое корректное JSON-значение. Пустой JSON, неверный синтаксис, чрезмерная глубина и числа вне поддерживаемого диапазона отклоняются. Правило не исправит повреждённый JSON.

Пустое текстовое тело допускается, если эффективный активный шаблон создаёт непустое уведомление. Для первого теста отправляйте явный текст или JSON. Пробелы без содержимого сами по себе не дают полезного сообщения.

Подстановки JSON и правила читают исходное тело; изменения текста не меняют исходный JSON. Формат итогового уведомления выбирается шаблоном либо обработкой канала. Примеры — шаблоны и правила.

Ответ об успешном приёме ​

http
HTTP/1.1 202 Accepted
Content-Type: application/json

{"message":"message_accepted"}

HTTP 202 означает, что запрос принят и сохранён. Это не подтверждение внешней доставки или прочтения. Ответ не содержит ID сообщения: найдите тест по уникальному содержимому и времени приёма в истории, затем проверьте статусы доставки.

В организации запрос может быть принят без создания личных сообщений сотрудникам, если ни базовые назначения канала, ни выбранное правило не дают получателей. Пустой список в правиле не отключает базовые назначения. Это отличается от назначенного сообщения без внешних каналов: оно доступно получателю в ЛК.

Ошибки ​

HTTPПричина и действие
400message_body_required: нет содержимого; invalid_message_encoding: текст не UTF-8; invalid_message_json: невалидный JSON; invalid_notification_content: недопустимое содержимое, например нулевой байт. Исправьте вход/преобразование/шаблон
401Нет нужного Bearer-токена или он неверный. Проверьте токен именно этого канала
404incoming_channel_not_found: неверный адрес, неактивный/удалённый канал либо удалённая организация
409event_rule_configuration_invalid: действие ссылается на недоступную настройку. Проверьте шаблон, метки и маршрут правила
413message_body_too_large, event_rule_result_too_large или notification_body_too_large: превышен размер входа или результата
415unsupported_message_mime_type: неподдерживаемый Content-Type непустого тела
429Превышен минутный лимит канала. Перед следующей попыткой выдержите число секунд из Retry-After
5xxОшибка сервера или шлюза. Сохраните время и статус без токена, проверьте историю перед повтором

Не путайте HTTP 409 при приёме с конфликтом версий редактора правил: для редактора нужно перечитать конфигурацию, для отправителя — исправить недоступные настройки обработки.

Размеры и частота ​

Лимит JSON — 1 048 576 байт, глубина декодирования — 64. Текущий обработчик также ограничивает исходный текст, промежуточный текст/переменные и итоговое уведомление 1 048 576 байтами. Шаблон может увеличить небольшое тело до превышения лимита.

Число запросов в минуту задаётся конфигурацией сервиса отдельно для каждого публичного канала. Универсальное число для всех установок и тарифов здесь не фиксируется. Обрабатывайте 429 и Retry-After; при 413 сокращайте сообщение. Внешний канал доставки может иметь собственные ограничения текста.

Каждый принятый POST создаёт отдельное событие. После тайм-аута запрос мог уже быть принят: автоматический повтор способен создать дубликат. Сохраните собственный event.id в JSON для поиска; это поле не включает встроенную дедупликацию. Повторы и ограничение частоты задаёт отправитель.

Первый рабочий путь — первое уведомление. Рецепты: CI/CD, CMS, Raspberry Pi.