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

Дополнительные поля сообщения

Дополнительные поля (extras) передают вместе с сообщением дополнительную информацию и меняют поведение клиентов. Они хранятся в схеме ключ-значение и передаются в JSON-теле запроса POST /message (Content-Type: application/json).

Ключи под .extras должны быть в следующем формате: <top-namespace>::[<sub-namespace>::]<action>. Некоторые из пространств имён используются официальными клиентами:

Пространство имёнОписание
client::*Зарезервировано
client::displayИзменяет способ отображения информации клиентом
client::notificationНастраивает уведомление
android::*Зарезервировано
android::actionРеагирует на события
ios::*Зарезервировано
notifly::*Служебные поля, которые проставляет сервер — не задавайте их сами
Все остальныеОпределены конечными пользователями
contentTypeописание
text/markdownПо умолчанию; сообщение должно быть отображено как markdown. HTML должен быть проигнорирован.
text/plainСообщение будет отображаться как обычный текст. Ссылки могут быть выделены и интерактивны.

Примечание: Notifly по умолчанию рендерит сообщения как markdown. Markdown поддерживает отображение изображений через ![](img url), эти изображения будут автоматически загружены при просмотре сообщения. Аналогично тому, почему удалённое содержимое блокируется по умолчанию в почтовых клиентах, автоматическая загрузка удалённых изображений может использоваться для сбора информации от пользователя.

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

Если сообщение собирается из внешних источников (например, вывода скриптов), рекомендуется явно указать text/plain — обычный текст не интерпретирует markdown и снижает возможные проблемы безопасности.

{
"extras": {
"client::display": {
"contentType": "text/plain"
}
}
}
Клиентописание
Веб-админкаИспользует GitHub Flavored Markdown
Notifly AndroidИспользует CommonMark

click.url (строка): открывает URL при нажатии на уведомление.

{
"extras": {
"client::notification": {
"click": {"url": "https://example.com/deploy/42"}
}
}
}
Клиентописание
Notifly AndroidТап по уведомлению открывает URL вместо самого сообщения в ленте
Notifly iOSТап по уведомлению открывает URL во встроенной админке (бета)

bigImageUrl (строка): показывает большое изображение в уведомлении.

{
"extras": {
"client::notification": {
"bigImageUrl": "https://placekitten.com/400/300"
}
}
}
Клиентописание
Notifly AndroidМожет потребоваться развернуть уведомление.

onReceive.intentUrl (строка): открывает URL сразу после доставки уведомления.

{
"extras": {
"android::action": {
"onReceive": {"intentUrl": "https://example.com/status"}
}
}
}
Клиентописание
Notifly AndroidПо умолчанию перед открытием показывается диалог подтверждения (настройка «Подтверждать onReceive Intents»). Для беззвучных сообщений (тихие часы, окна обслуживания) URL не открывается.

Поля с префиксом notifly:: проставляет сам сервер. Клиенты читают их, чтобы правильно показать сообщение; отправлять их в своих запросах не нужно.

КлючЧто означает
notifly::askСообщение — интерактивный вопрос: тип, варианты или поля формы, статус, срок ответа
notifly::deliveryПодсказка доставки. {"silent": true, "reason": "maintenance"} — канал в активном окне обслуживания: сообщение показывается в ленте, но беззвучно и без режима будильника
notifly::screenshotКлюч скриншота, снятого браузерной проверкой при сбое; клиенты показывают картинку прямо в ленте
notifly::event, notifly::command, notifly::silentСлужебные кадры (статус heartbeat, команды клиенту и т. п.) — не показываются как уведомления; см. WebSocket-протокол