Фильтрация уведомлений
Доступны два способа фильтрации уведомлений:
- через теги в параметре service — позволяет фильтровать
уведомления по тегам;
- через правила фильтрации в параметре filter — позволяет
фильтровать уведомления по тегам, названию события, значениям из keys
(передаётся при отправке).
При наличии в запросе одновременно и тегов, и фильтра приоритет отдается фильтру.
Теги
Теги при подписке указываются в формате: tag_a+tag_b*tag_c, что
означает:
"сообщение содержит тег tag_a или содержит tag_b и tag_c одновременно".
Оператор "+" — это логическое "или", оператор "*" — логическое "и".
Допустимые символы в тегах: a-zA-Z0-9_.
Правила фильтрации
Транспорт нотификаций позволяет применять сложные фильтры - цепочки правил в формате JSON.
Перед отправкой сервер последовательно применяет каждое правило - если условие истинно, то выполняется указанное
действие и на этом применение фильтра заканчивается.
Если ложны все условия во всей цепочке, то выполнится действие по умолчанию, которое тоже можно задать.
Примеры задач, которые можно решить с помощью фильтров:
- получать уведомления о новых письмах только в конкретные папки;
- игнорировать уведомления от определенного отправителя.
Цепочка правил задается в формате JSON:
{
"rules": [
{ "if": <condition>, "do": <action> },
{ "if": <condition>, "do": <action> },
...
{ "do": <default_action> }
],
"vars": {
"var1": {<some complex condition>},
"var2": {<another complex condition>}
...
}
}
Возможные условия:
- { "field": { "$eq": ["value1", "value2", ...] } } проверяет, что значение по ключу "field" из
словаря keys, переданного при отправке, равно одному из переданных (value1, value2, ...);
- { "$has_tags": ["tagA","tagB"] } проверяет, что уведомление содержит все
указанные теги;
- { "$event": ["nameA"] } проверяет, что event, передаваемый при отправке,
совпал с одним из указанных в массиве значений;
- { "field": { "$has": ["valueA"] } проверяет, что заданное поле, являющееся
массивом, содержит хотя бы одну строку из массива значений.
Возможные действия:
- send_bright - прислать уведомление обычным образом
- send_silent - прислать как скрытое
- skip - не присылать
Пример простого фильтра:
{
"rules": [
{ "if": { "operation": { "$eq": [ "O1" ] } }, "do": "send_bright" },
{ "if": { "$has_tags": ["t1", "t2", "t3"] }, "do": "send_silent" },
{ "do": "skip" }
],
"vars": {}
}
Сложные условия можно выносить в переменные:
{
"rules": [
{ "if": "NewMail & Inbox & Tabs", "do": "send_bright" },
{ "if": "NewMail & Folders", "do": "send_bright" },
{ "do": "skip" }
],
"vars": {
"NewMail": { "$event": [ "insert" ] },
"Folders": { "fid": { "$eq": ["1", "2", "5"] } },
"Tabs": { "tab": { "$eq": ["defalut"] } },
"Inbox": { "fid": { "$eq": "1" } }
}
}
Если вы не используете переменные - оставьте объект vars пустым.