Skip to content

Настройки push-уведомлений (systempush_settings)

См. также: data-api.md · korfix-catalogs.md · account-help.md Home

Каталог systempush_settings — персональные подписки пользователя на push-уведомления из каталогов платформы.


Как работает

Платформа отправляет push-уведомления при действиях в каталогах (добавление, редактирование, удаление записей). По умолчанию уведомления не приходят — пользователь сам выбирает, из каких разделов и о каких событиях получать push.

Каждая запись в systempush_settings — это подписка на один каталог с опциональными фильтрами.


Структура записи

Поле Тип Описание
alias hidden md5(menu + userId) — автоматически
menu select Каталог (раздел), из которого получать уведомления
restrict_entries multiselect Ограничение по записям: self — только свои, members — где наблюдатель
actions multiselect Фильтр по действиям: add, edit, delete
from_auth hidden ID пользователя

Доступ: self — каждый управляет только своими подписками. Множественные записи: по одной на каждый каталог, на который подписан пользователь.


Чтение подписок

// Все подписки текущего пользователя
const resp = await App.fetch('/db/systempush_settings.json');
resp.data.forEach(sub => {
    console.log(sub.menu);              // "tt_tasks"
    console.log(sub.restrict_entries);  // "self,members" или ""
    console.log(sub.actions);           // "add,edit" или ""
});

Подписка на каталог

// Подписать пользователя на уведомления из каталога задач
// (только свои записи, только добавление и редактирование)
await App.fetch('/db/systempush_settings/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[menu]': 'tt_tasks',
        'form[restrict_entries][]': ['self', 'members'],
        'form[actions][]': ['add', 'edit'],
        submit: 1
    }
});

Alias генерируется автоматически серверной стороной: md5(menu + userId). Повторная подписка на тот же каталог обновит существующую запись.

Подписка без ограничений (все записи, все действия)

await App.fetch('/db/systempush_settings/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[menu]': 'b2b_orders',
        submit: 1
    }
});

Отписка

// Найти подписку и удалить
const resp = await App.fetch('/db/systempush_settings.json?form[menu]=tt_tasks');
if (resp.data.length) {
    await App.fetch(`/db/systempush_settings/${resp.data[0].alias}?udel`);
}

Получение доступных каталогов для подписки

// Схема содержит список каталогов с activity-поддержкой
const schema = await App.fetch('/db/systempush_settings/sheme.json');
const catalogs = schema.data.menu.arr;
// { "tt_tasks": "Задачи", "b2b_orders": "Заказы", ... }

Значения фильтров

restrict_entries

Значение Описание
(пусто) Все записи каталога, к которым есть доступ
self Только записи, где from_auth = текущий пользователь
members Только записи, где пользователь в members_id (наблюдатель)

Можно комбинировать: self,members — свои + где наблюдатель.

actions

Значение Описание
(пусто) Все действия
add Только добавление
edit Только редактирование
delete Только удаление

Можно комбинировать: add,edit — добавление и редактирование, без удаления.


Сценарии использования в миниапах

Автоподписка при установке приложения

Приложение, работающее с определённым каталогом, может при установке автоматически подписать пользователя на уведомления:

async function setupNotifications() {
    // Проверяем, есть ли уже подписка
    const resp = await App.fetch('/db/systempush_settings.json?form[menu]=b2b_orders');
    if (resp.data.length === 0) {
        // Подписываем на новые заказы
        await App.fetch('/db/systempush_settings/add?edit&ajax=1', {
            method: 'POST',
            body: {
                'form[menu]': 'b2b_orders',
                'form[actions][]': ['add'],
                submit: 1
            }
        });
    }
}

Панель управления подписками

Приложение может показать пользователю UI для управления подписками, сгруппированный по модулям или бизнес-логике приложения.

Проверка подписки перед действием

// Узнать, подписан ли пользователь на каталог
async function isSubscribed(catalog) {
    const resp = await App.fetch(`/db/systempush_settings.json?form[menu]=${catalog}`);
    return resp.data.length > 0;
}

Важно

  • Подписки работают в связке с системой activity — уведомления приходят только для каталогов с включённым механизмом activity
  • Push-уведомления доставляются в реальном времени через WebSocket (модуль systempush)
  • Уведомления отображаются в колокольчике в шапке платформы и как браузерные push
  • По умолчанию уведомления не приходят — нужна явная подписка

Каталог: /db/systempush_settings | Схема: systempush_settings.sheme.inc.php

Home