Один MaxCode вместо десятка ключей: как PushMeld добавляет уведомления туда, где их не было
Как MaxCode переносит управление push- и email-уведомлениями из сайтов, серверов, скриптов и устройств в PushMeld.
Представим домашний компьютер, который каждую ночь создаёт резервную копию важных файлов. Результат сохраняется в системном журнале: операция завершена успешно или произошла ошибка.
Технически всё работает. Неудобство возникает утром: человеку приходится самостоятельно открывать журнал и проверять результат. У программы нет мобильного приложения, отправка уведомлений разработчиками не предусмотрена, а создавать ради одной функции отдельную инфраструктуру никто не станет.
С помощью PushMeld в такой процесс можно добавить простой запрос. После завершения резервного копирования на телефон придёт сообщение: копия создана или операция закончилась ошибкой. При необходимости то же уведомление можно получить по email.
Основой этой идеи является MaxCode — единый защищённый код, через который PushMeld получает всю информацию, необходимую для дальнейшей доставки уведомления.
Когда я познакомился с проектом, именно MaxCode показался мне его наиболее интересной частью. Push-уведомления и email давно не являются чем-то новым. Гораздо важнее то, что исходная программа перестаёт управлять их доставкой. Она лишь сообщает PushMeld о событии, а всё дальнейшее происходит уже за её пределами.
Сразу обозначу контекст: PushMeld относится к системе MELD®, а DigiMeld UG — компания, которая его развивает.
Источник знает только о событии
Обычная интеграция уведомлений быстро обрастает техническими деталями. Нужно определить проект, настроить доступ, хранить ключи, учитывать токены устройств, подключать почтовую отправку и разбираться с требованиями разных мобильных платформ.
PushMeld переносит всё это из исходной системы в отдельный управляемый контур.
Программа резервного копирования знает только одно: операция завершилась успешно или закончилась ошибкой. Она передаёт MaxCode, заголовок и текст сообщения.
Ей не требуется знать:
сколько устройств подключено к проекту;
какой телефон сейчас активен;
через какого провайдера должен пройти push;
включена ли доставка по email;
появился ли у пользователя новый смартфон;
был ли отключён старый планшет;
кто должен получить конкретное уведомление.
Всё это определяется уже внутри PushMeld.
На мой взгляд, именно здесь находится главная архитектурная идея проекта: MaxCode переносит управление уведомлениями из программы, где произошло событие, в систему, которая занимается доставкой.
Один MaxCode вместо набора ключей
Обычно при подключении внешнего сервиса приходится работать сразу с несколькими сущностями. Отдельно используется идентификатор проекта, отдельно — ключ доступа, дополнительно могут потребоваться секреты, токены устройств и настройки конкретных провайдеров.
MaxCode объединяет всё необходимое для отправки в одном защищённом коде.
Для каждого проекта создаётся собственный MaxCode. В нём соединены идентификация проекта, право на отправку и данные, позволяющие PushMeld применить актуальную конфигурацию доставки.
Отправляющей системе не требуется отдельно хранить:
идентификатор проекта;
API-ключ и дополнительный секрет;
токены подключённых устройств;
параметры каждого получателя;
ключи разных push-провайдеров;
отдельные настройки для push и email.
В программу, сайт или скрипт добавляется один MaxCode. Получив его вместе с сообщением, PushMeld самостоятельно определяет проект, проверяет запрос, находит подключённые устройства и выбирает доступные каналы.
MaxCode поэтому нельзя воспринимать как ещё один ключ, добавленный к остальным. Его назначение — заменить всю привычную связку разрозненных ключей, токенов и идентификаторов одним кодом.
Уведомление оттуда, где оно не предусмотрено
MaxCode можно использовать в любой системе, способной выполнить HTTP-запрос самостоятельно или через небольшой вспомогательный скрипт.
Например, PushMeld может сообщить, когда:
домашний сервер перестал отвечать;
резервное копирование завершилось или закончилось ошибкой;
собственный скрипт выполнил длительную задачу;
3D-принтер закончил печать;
датчик зафиксировал протечку;
открылась дверь или сработала сигнализация;
на сайте появилась нужная информация;
изменилась цена товара;
освободилось место для записи;
старая программа завершила обработку большого файла;
небольшой интернет-магазин получил новый заказ.
У каждого из этих источников может не быть собственного приложения. Некоторые устройства умеют лишь обращаться к заданному адресу, другие позволяют запускать пользовательскую команду, третьи можно дополнить коротким сценарием автоматизации.
Этого достаточно, чтобы передать событие в PushMeld.
Источник при этом не превращается в самостоятельный сервис уведомлений. Он лишь фиксирует произошедшее и отправляет сообщение с MaxCode. Всё остальное — получатели, устройства, каналы и технический маршрут — остаётся на стороне PushMeld.
Не только push, но и email
Название PushMeld прежде всего ассоциируется с уведомлениями на телефоне, однако возможности проекта этим не ограничиваются.
Для доставки можно использовать push, email или оба канала — в зависимости от настроек проекта и доступных возможностей.
Например, сообщение об успешном резервном копировании достаточно показать на телефоне. Серьёзную ошибку можно дополнительно отправить по электронной почте.
Исходная программа в обоих случаях выполняет один и тот же запрос с MaxCode. Ей не нужно отдельно подключать почтовый сервер, хранить его настройки и создавать второй независимый сценарий.
Решение о каналах доставки принимается внутри PushMeld. Если позже пользователь добавит email к уже существующему проекту, программу резервного копирования переписывать не придётся.
При этом email используется здесь не как обычная массовая рассылка, а как дополнительный способ сообщить о событии, поступившем от подключённого проекта.
Один проект — один источник событий
Проекты позволяют разделять уведомления по их назначению.
Обычный пользователь может создать, например:
HomeServer— состояние домашнего сервера;Backups— результаты резервного копирования;SmartHome— датчики и домашняя автоматизация;PriceMonitor— изменения цены;Website— новые обращения с личного сайта.
Каждый проект получает собственный MaxCode. Благодаря этому домашняя автоматизация не использует код сайта, а мониторинг цен не смешивается с резервными копиями.
В приложении сразу понятно, откуда пришло сообщение и к какой задаче оно относится.
Такое разделение особенно полезно, когда источников становится больше. Вместо одного общего потока человек получает несколько независимых каналов, для каждого из которых можно определить собственные настройки доставки.
Новый телефон не требует изменения программы
Обычный push-токен связан с конкретной установкой приложения на определённом устройстве.
Если у человека два телефона и планшет, это уже несколько токенов. После переустановки приложения или замены устройства отдельный токен может измениться либо перестать работать.
MaxCode находится выше этого уровня. Он относится к проекту, а не к одному телефону.
Пользователь сам определяет, какие устройства связаны с проектом и должны получать его сообщения. Например, уведомления домашнего сервера можно направлять на личный телефон и планшет, а события рабочего сайта — только на служебный смартфон.
Если человек покупает новый телефон или отключает старое устройство, исходный скрипт продолжает использовать тот же MaxCode. Актуальный список получателей меняется внутри PushMeld.
То же относится к добавлению email или изменению других параметров доставки.
Именно поэтому MaxCode — не просто способ сократить количество ключей. Он создаёт границу между событием и его дальнейшим маршрутом. Всё, что находится после этой границы, можно менять без вмешательства в программу-источник.
Бесплатно для обычных задач
Инфраструктурные продукты часто описываются через корпоративные системы, серверные команды и большие объёмы данных. Из-за этого может показаться, что PushMeld рассчитан исключительно на профессиональных разработчиков и компании.
На практике начать можно с обычной домашней задачи.
Само приложение бесплатно. Основные возможности MaxCode также работают без оплаты в пределах доступных бесплатных лимитов. Человек может создать проект, подключить устройство и получать уведомления от своего сервера, сайта, скрипта или домашней автоматизации.
Это не временный демонстрационный режим, который перестаёт работать после знакомства с продуктом. Для повседневных сценариев бесплатных возможностей может быть достаточно.
Тарифные планы нужны, когда увеличивается количество запросов, требуются дополнительные функции или система начинает использоваться в большем масштабе.
Один принцип для человека и компании
Механика MaxCode не меняется в зависимости от размера задачи.
Человек получает сообщение о завершении резервного копирования. Небольшая мастерская узнаёт, что 3D-принтер закончил длительную печать. Интернет-магазин видит новый заказ. Техническая команда получает уведомление об ошибке на сервере.
Различаются объёмы и количество проектов, но принцип остаётся прежним.
Представим организацию с тремя источниками событий:
Orders— новые заказы;Payments— поступления и возвраты;ServerStatus— технические ошибки.
Для каждого создаётся отдельный MaxCode и настраиваются свои устройства. Заказы могут поступать владельцу и менеджеру, финансовые события — ответственному сотруднику, а технические ошибки — специалистам, обслуживающим сервер.
Система компании во всех случаях делает практически одно и то же: передаёт содержание события и MaxCode соответствующего проекта.
Если меняются сотрудники, устройства или способы доставки, исходные системы не приходится перенастраивать. Управление остаётся внутри PushMeld.
APNs, FCM и HMS остаются за пределами программы
Для доставки push на разных устройствах могут использоваться APNs, FCM или HMS. У каждого провайдера собственные правила, токены и технические особенности.
Обычно эти различия приходится учитывать при разработке отправляющей системы. В случае PushMeld они оказываются за границей MaxCode.
Домашний сервер, сайт или скрипт не определяет, какой телефон использует получатель и через какую инфраструктуру должно пройти сообщение. Он выполняет один запрос, а PushMeld выбирает необходимый маршрут.
MaxCode не заменяет инфраструктуру Apple, Google или Huawei. Он создаёт единый вход перед ней.
Благодаря этому исходной системе не приходится меняться вслед за устройствами пользователя. Сегодня сообщение может отправляться через FCM, завтра — через APNs, а позднее к проекту добавится ещё один телефон или email. Для программы, в которой произошло событие, ничего не изменится.
MaxCode и обычный API-ключ — не одно и то же
Обычный API-ключ чаще всего только разрешает обращение к сервису. После проверки ключа системе всё равно приходится отдельно сообщать проект, получателей и способ доставки.
MaxCode объединяет этот контекст в одном коде.
Он позволяет PushMeld распознать проект, проверить запрос и применить его актуальные настройки. Внешняя программа передаёт MaxCode и содержание события, не управляя дальнейшим маршрутом.
Практическое отличие можно сформулировать коротко: API-ключ открывает доступ к функции, а MaxCode одновременно определяет, в каком контексте эта функция должна быть выполнена.
Уведомление как подключаемая возможность
После знакомства с PushMeld я бы не стал называть его просто приложением для push-уведомлений.
Точнее будет сказать, что это способ добавить уведомления туда, где их раньше не было, а затем управлять ими независимо от исходной программы.
Источником может стать домашний сервер, датчик, старое приложение, интернет-магазин, собственный скрипт или внутренняя система компании. Если он способен выполнить HTTP-запрос самостоятельно или через небольшой адаптер, событие можно передать в PushMeld.
Дальше MaxCode проводит границу между событием и его доставкой. По одну сторону находится программа, которая сообщает, что произошло. По другую — PushMeld, который определяет проект, устройства, каналы и технический маршрут.
Поэтому наиболее важная возможность MaxCode заключается не только в замене множества ключей одним кодом. Он переносит управление уведомлениями за пределы исходной системы.
Телефон можно заменить, email — добавить, старое устройство — отключить, а маршрут доставки — изменить. Программа продолжит делать то единственное, что от неё требуется: сообщать о событии.