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

Как отправить всем пользователям html уведомление

  • автор:

Web PUSH Notifications быстро и просто

Добрый день. В этой небольшой заметке я хочу рассказать как быстро и просто настроить push-уведомления на вашем сайте. Эта статья ни в коем случае не претендует на звание исчерпывающего руководства, но, я надеюсь, что она даст точку старта для дальнейшего изучения.

Информации по этой теме в интернете полно, но она фрагментирована, разбросана по разным ресурсам и перемешена с уведомлениями для мобильных устройств с примерами на Java, C++ и Python. Нас же, как веб-разработчиков, интересует JavaScript. В этой статье я постараюсь саккумулировать всю необходимую и полезную информацию.

Web PUSH Notifications

Я думаю, вы уже знаете что такое push-уведомления, но я всё же напишу коротко о главном.

Пользователь, заходя на сайт, вытягивает (pull) с него данные. Это удобно и безопасно, но с развитием интернет ресурсов, появилась необходимость оперативно доставлять информацию пользователям не дожидаясь пока те сами сделают запрос. Так и появилась технология принудительной доставки (push) данных с сервера клиенту.

Push-уведомления работают только если у вас на сайте есть HTTPS.
Без валидного SSL сертификата запустить не получится. Так что если у вас еще нет поддержки HTTPS, то пришло время её сделать. Рекомендую воспользоваться Let’s Encrypt.
Для запуска на localhost нужно прибегать к хитростям. Я же тестировал скрипты на Github Pages.

Оглавление

  • Хорошие уведомления
  • Теория
    • Что же происходит на стороне клиента?
    • Сложности на серверной стороне
    • Приступаем к написанию клиента
    • Отправка уведомлений с сервера
    • Проект на GitHub Pages

    Хорошие уведомления

    Сразу хочу оговориться, что push-уведомления не для рекламных рассылок. Отправлять нужно только то, что действительно нужно конкретному пользователю и на что он действительно должен оперативно отреагировать.

    • Отправка уведомления об изменении статуса обращения пользователя в службу техподдержки;
    • Отправка уведомления об изменении статуса заказа;
    • Появление на складе товара, который ждал пользователь;
    • Ответили на комментарий пользователя к статье;
    • Новая задача в багтрекере со статусом Bug или Critical.
    • Новые поступления на склад;
    • Скидки и акции на товары;
    • Новая статья на сайте;
    • Ответили на комментарий пользователя к статье, который он написал год назад.

    Плохие примеры тоже требуют уведомления, но на них не нужно реагировать оперативно. Эти уведомления можно отправить на почту. Вообще, все важные уведомления рекомендуется дублировать на почту, так-как push-уведомления могут не дойти до пользователя по разным, не зависящих от вас, причинам. Также важным фактором является актуальность события. Об этом я еще поговорю чуть позже. Рекомендую к прочтению:

    • Хорошие уведомления по мнению Google
    • Рекламная статья от PushAll

    Вернемся к нашим баранам. Так как же всё это работает? Для начала немного теории.

    Теория

    Среди непосвященных бытует мнение что push-уведомления это простая технология, не требующая для реализации особых ресурсов. В действительности же это целый пул технологий.

    Для начала небольшая схема того как все это работает (анимированная схема):

    Схема взаимодействия в PUSH Notifications

    1. Сервер отдает страницу пользователю;
    2. Клиент подключается к серверу сообщений, регистрируется и получает ID;
    3. Клиент отправляет полученный ID на сервер и сервер привязывает конкретного пользователя к конкретному устройству используя ID устройства;
    4. Сервер отправляет сообщение клиенту через сервер сообщений используя полученный ранее ID.

    К сожалению, мне не удалось выяснить кто и как создает ID устройства и как сервер сообщений привязывается к конкретному устройству. Я использовал сервер сообщений Firebase Cloud Messaging от Google и его библиотеку. К сожалению, я не смог выяснить можно ли его заменить на свой сервер и как это сделать.

    Изначально для отправки сообщений использовали:
    Cloud to Device Messaging

    Потом его заменили на:
    Google Cloud Messaging

    А потом еще раз поменяли на:
    Firebase Cloud Messaging

    Интересно, что дальше.

    Что же происходит на стороне клиента?

    • JavaScript запрашивает у пользователя разрешение на показ уведомлений;
    • Если пользователь одобрил, то подключаемся к серверу сообщений и получаем ID устройства;
    • Отправляем идентификатор на наш сервер, чтобы мы идентифицировали пользователя;
    • Инициализируем JavaScript воркер который будет работать в фоне, получать сообщения от сервера сообщений и показывать их пользователю;
    • Подключаемся к серверу сообщений и ждем новых поступлений.

    Запрос прав на показ уведомлений

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

    Это все выглядит очень сложно, но на сервере все не проще.

    Сложности на серверной стороне

    • Понятно, что идентификатор устройства, присылаемый пользователем, мы сохраняем в базу данных;
    • Идентификатор устройства хорошо бы привязывать к пользователю, чтобы отправлять персонализированные сообщения;
    • Стоит помнить, что пользователь у нас один, а устройств у него может быть несколько, также одним устройством могут пользоваться несколько пользователей;
    • Отправка уведомлений пользователям не самая дешевая операция и поэтому событие, инициирующее отправку уведомления, нужно ставить в очередь на отправку;
    • Только маленькие проекты с малым числом получателей могут позволить себе отправлять уведомления по событию, в течении того-же HTTP запроса;
    • Так у нас появляется система очередей на RabbitMQ, Redis и т.д.;
    • Появляются демоны/воркеры которые разбирают очередь и другие инструменты поддержки очередей;
    • Для увеличения скорости отправки можно распараллелить процесс и разнести его на несколько нод.

    Практика

    Наконец-то, мы перешли к самому главному. Как я уже говорил ранее, в качестве сервера сообщений мы будем использовать Firebase Cloud Messaging, поэтому мы начинаем с регистрации и создания проекта на Firebase.

    • Заходим на сайт;
    • Регистрируемся;
    • Жмём кнопку Create new project или Import Google project, если у вас уже есть проект;
    • При создании указываем название проекта и страну;
    • После создания проекта попадаем на его dashboard;
    • В меню наводим на колесико рядом с Overview и выбираем Project settings;
    • На открывшейся странице переходим во вкладку Cloud Messaging;
    • Нас интересует Server key, который будет использоваться для отправки сообщений с сервера и Sender ID который будет использоваться для получения сообщений на стороне клиента.

    Можно еще покопаться в настройках и поиграться с разделением прав доступа, но, в общем-то, работа с сайтом Firebase закончена.

    Приступаем к написанию клиента

    Начнем с того что создадим Service Worker для получения push-уведомлений.
    Создаем файл firebase-messaging-sw.js с следующим содержимым.

    // firebase-messaging-sw.js importScripts('https://www.gstatic.com/firebasejs/3.6.8/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/3.6.8/firebase-messaging.js'); firebase.initializeApp(< messagingSenderId: '' >); const messaging = firebase.messaging();
    • — это Sender ID который мы получили после регистрации в Firebase.

    Файл Service Worker-а должен называться именно firebase-messaging-sw.js и обязательно должен находиться в корне проекта, то есть доступен по адресу https://example.com/firebase-messaging-sw.js. Путь к этому файлу жестко прописан в библиотеке Firebase.

    Написанного кода достаточно для того чтобы показывать уведомления. О дополнительных возможностях поговорим чуть позже. Теперь добавим библиотеку Firebase и скрипт подписки в наш шаблон страницы.

    Добавляем на страницу кнопку для подписки на уведомления

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

    // firebase_subscribe.js firebase.initializeApp(< messagingSenderId: '' >); // браузер поддерживает уведомления // вообще, эту проверку должна делать библиотека Firebase, но она этого не делает if ('Notification' in window) < var messaging = firebase.messaging(); // пользователь уже разрешил получение уведомлений // подписываем на уведомления если ещё не подписали if (Notification.permission === 'granted') < subscribe(); >// по клику, запрашиваем у пользователя разрешение на уведомления // и подписываем его $('#subscribe').on('click', function () < subscribe(); >); > function subscribe() < // запрашиваем разрешение на получение уведомлений messaging.requestPermission() .then(function () < // получаем ID устройства messaging.getToken() .then(function (currentToken) < console.log(currentToken); if (currentToken) < sendTokenToServer(currentToken); >else < console.warn('Не удалось получить токен.'); setTokenSentToServer(false); >>) .catch(function (err) < console.warn('При получении токена произошла ошибка.', err); setTokenSentToServer(false); >); >) .catch(function (err) < console.warn('Не удалось получить разрешение на показ уведомлений.', err); >); > // отправка ID на сервер function sendTokenToServer(currentToken) < if (!isTokenSentToServer(currentToken)) < console.log('Отправка токена на сервер. '); var url = ''; // адрес скрипта на сервере который сохраняет ID устройства $.post(url, < token: currentToken >); setTokenSentToServer(currentToken); > else < console.log('Токен уже отправлен на сервер.'); >> // используем localStorage для отметки того, // что пользователь уже подписался на уведомления function isTokenSentToServer(currentToken) < return window.localStorage.getItem('sentFirebaseMessagingToken') == currentToken; >function setTokenSentToServer(currentToken)

    Вот и все. Это весь код который требуется для получения push-уведомлений.

    Отправка уведомлений с сервера

    В общем виде отправка уведомления выглядит так:

    POST /fcm/send HTTP/1.1 Host: fcm.googleapis.com Authorization: key=YOUR-SERVER-KEY Content-Type: application/json < "notification": < "title": "Ералаш", "body": "Начало в 21:00", "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=40&height=40", "click_action": "http://eralash.ru/" >, "to": "YOUR-TOKEN-ID" >
    • YOUR-SERVER-KEY — это Server key который мы получили при регистрации в Firebase;
    • YOUR-TOKEN-ID — это ID устройства конкретного пользователя.

    Все поля по порядку:

    • notification — параметры уведомления;
    • title — заголовок уведомления. Лимит 30 символов;
    • body — текст уведомление. Лимит 120 символов;
    • icon — иконка уведомления. Есть некоторые стандарты размеров иконок, но я использую 192×192. Иконки меньшего размера плохо смотрятся на мобильных устройствах;
    • click_action — URL адрес страницы на которую перейдет пользователь кликнув по уведомлению;
    • to — ID устройства получателя уведомления;
    • Полный список параметров здесь.

    Уведомление

    Это пример отправки одного уведомления одному получателю. Можно отправить одно уведомление сразу нескольким получателям. Вплоть до 1000 получателей за раз.

    < "notification": < "title": "Ералаш", "body": "Начало в 21:00", "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192", "click_action": "http://eralash.ru/" >, "registration_ids": [ "YOUR-TOKEN-ID-1", "YOUR-TOKEN-ID-2" "YOUR-TOKEN-ID-3" ] >

    Пример ответов от сервера сообщений:

    Отправка уведомления в Chrome
    Отправка уведомления в FireFox
    Ошибка отправки уведомления

    Мы не привязаны к какому-то конкретному языку программирования и для простоты примера будем использовать PHP с расширением cURL. Скрипт отправки уведомления нужно запускать из консоли.

    #!/usr/bin/env php $YOUR_TOKEN_ID, 'notification' => [ 'title' => 'Ералаш', 'body' => sprintf('Начало в %s.', date('H:i')), 'icon' => 'https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192', 'click_action' => 'http://eralash.ru/', ], ]; $fields = json_encode($request_body); $request_headers = [ 'Content-Type: application/json', 'Authorization: key=' . $YOUR_API_KEY, ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $response = curl_exec($ch); curl_close($ch); echo $response;

    messaging.onMessage

    Обработчик messaging.onMessage стоит отдельного упоминания, так как он относится как раз к категории подводных камней. В примерах от Firebase я не видел примера использование этого обработчика. О нем мне рассказал FluorescentHallucinogen, за что ему отдельное спасибо, но он не упомянул о некоторых особенностях его использования.

    Что же это за обработчик и как он работает. Из документации мы знаем, что этот обработчик вызывается если мы получаем push-уведомление и находимся в этот момент на странице сайта с которого отправлено уведомление (желающие использовать нативное решение могут посмотреть пример реализации). Эта функциональность очень полезна тем, что мы можем отобразить уведомление на странице сделав красивую модалку или еще что-то. У меня такой необходимости нет, потому я просто отображу стандартное уведомление.

    if ('Notification' in window) < var messaging = firebase.messaging(); messaging.onMessage(function(payload) < console.log('Message received. ', payload); new Notification(payload.notification.title, payload.notification); >); // . > // . 

    Вроде все просто, но есть подводный камень. Дело все в том что на мобильных устройствах запрещено использовать конструктор Notification. И для решения этой проблемы нужно использовать ServiceWorkerRegistration.showNotification() и обработчик в этом случае будет иметь виде:

    // . messaging.onMessage(function(payload) < console.log('Message received. ', payload); // регистрируем пустой ServiceWorker каждый раз navigator.serviceWorker.register('messaging-sw.js'); // запрашиваем права на показ уведомлений если еще не получили их Notification.requestPermission(function(result) < if (result === 'granted') < navigator.serviceWorker.ready.then(function(registration) < // теперь мы можем показать уведомление return registration.showNotification(payload.notification.title, payload.notification); >).catch(function(error) < console.log('ServiceWorker registration failed', error); >); > >); >); // . 

    Теперь уведомления работают и на мобильных устройствах. Казалось бы уже все, но нет. Не смотря на заверения некоторых, ServiceWorker не должен быть пустым. Мы же хотим, что бы по клику пользователь переходил на нужную нам страницу. Для этого нам нужно добавить обработчик клика по уведомлению в ServiceWorker.

    Сохраняем параметры уведомления для доступа свойству click_action в ServiceWorker-е.

    // . navigator.serviceWorker.ready.then(function(registration) < payload.notification.data = payload.notification; // параметры уведомления registration.showNotification(payload.notification.title, payload.notification); >).catch(function(error) < console.log('ServiceWorker registration failed', error); >); // . 

    Обрабатываем клик по уведомлению в ServiceWorker-е.

    // messaging-sw.js self.addEventListener('notificationclick', function(event) < const target = event.notification.data.click_action || '/'; event.notification.close(); // этот код должен проверять список открытых вкладок и переключатся на открытую // вкладку с ссылкой если такая есть, иначе открывает новую вкладку event.waitUntil(clients.matchAll(< type: 'window', includeUncontrolled: true >).then(function(clientList) < // clientList почему-то всегда пуст!? for (var i = 0; i < clientList.length; i++) < var client = clientList[i]; if (client.url == target && 'focus' in client) < return client.focus(); >> // Открываем новое окно return clients.openWindow(target); >)); >);

    TTL и дополнительный контроль над уведомлением

    Важным свойством для уведомления может является время его актуальности. Это зависит от ваших бизнес процессов. По умолчанию время жизни уведомлений 4 недели. Это очень много для уведомлений такого характера. Например, уведомление «Ваша любимая передача начинается через 15 минут» актуально в течении 15 минут. После этого сообщение уже не актуально и показываться не должно. За контроль над временем жизни отвечает свойство time_to_live со значением от 0 до 2419200 секунд. Подробней читать в документации. Сообщение с указанным TTL будет иметь вид:

    < "notification": < "title": "Ералаш", "body": "Начало через 15 минут", "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192", "click_action": "http://eralash.ru/" >, "time_to_live": 900, "to": "YOUR-TOKEN-ID" >

    Сообщение вида «Ваша любимая передача начинается через 15 минут» актуально в течении 15 минут, но уже через минуту после отправки оно станет не корректным. Потому что передача начнется не через 15 минут, а уже через 14. Контролировать такие ситуации нужно на стороне клиента.

    Для этого мы поменяем отправляемое с сервера сообщение:

    < "data": < "title": "Ералаш", "time": 1489006800, "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192", "click_action": "http://eralash.ru/" >, "time_to_live": 900, "to": "YOUR-TOKEN-ID" >

    Обратите внимание что поле notification поменялось на data . Теперь не будет вызываться обработчик по умолчанию Firebase и нам нужно самостоятельно сделать это. Добавим в конце файла firebase-messaging-sw.js следующие строки:

    // регистрируем свой обработчик уведомлений messaging.setBackgroundMessageHandler(function(payload) < if (typeof payload.data.time != 'undefined') < var time = new Date(payload.data.time * 1000); var now = new Date(); if (time < now) < // истек срок годности уведомления return null; >var diff = Math.round((time.getTime() - now.getTime()) / 1000); // показываем реальное время в уведомлении // будет сгенерировано сообщение вида: "Начало через 14 минут, в 21:00" payload.data.body = 'Начало через ' + Math.round(diff / 60) + ' минут, в ' + time.getHours() + ':' + (time.getMinutes() > 9 ? time.getMinutes() : '0' + time.getMinutes()) ; > // Сохраяем data для получения пареметров в обработчике клика payload.data.data = payload.data; // Показываем уведомление return self.registration.showNotification(payload.data.title, payload.data); >); // свой обработчик клика по уведомлению self.addEventListener('notificationclick', function(event) < // извлекаем адрес перехода из параметров уведомления const target = event.notification.data.click_action || '/'; event.notification.close(); // этот код должен проверять список открытых вкладок и переключатся на открытую // вкладку с ссылкой если такая есть, иначе открывает новую вкладку event.waitUntil(clients.matchAll(< type: 'window', includeUncontrolled: true >).then(function(clientList) < // clientList почему-то всегда пуст!? for (var i = 0; i < clientList.length; i++) < var client = clientList[i]; if (client.url == target && 'focus' in client) < return client.focus(); >> // Открываем новое окно return clients.openWindow(target); >)); >);

    Вот таким незамысловатым образом мы получили полный контроль над уведомлением. Что самое интересное, пользователю мы показываем время уведомления в его часовом поясе. Это актуально для сервисов который работают по всему миру или регионах с широким разбросом часовых поясов как у матушки-России.

    Заключение

    А теперь поговорим о грустном. Не смотря на все прелести технологии, у неё есть ряд недостатков:

    1. Самая главная проблема это, как всегда, поддержка в браузерах. Полноценная поддержка есть в Chrome, Firefox и Opera последних версий. IE, Safari, Opera Mini, UC Browser, Dolphin и прочая братия остаются за бортом. Но зато работает в мобильных версиях браузеров Chrome, Firefox и Opera.
    2. Открытый сайт и работающий Service Worker не гарантируют доставку сообщения. Хотя уведомления могут дойти и при закрытом браузере.

    Библиотека Firebase скрывает в себе много тайн и её исследование могло бы дать ответы на некоторые вопросы, но это уже выходит за рамки этой статьи.

    Поиграться

    Проект на GitHub Pages

    Так как для запуска Service Worker-а нужен HTTPS, то самым простым решением было разместить проект на GitHub Pages, что я и сделал.

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

    • Зайти на страницу;
    • Нажать кнопку Register;
    • Браузер запросит разрешение на показ уведомлений;
    • Подтверждаем разрешение;
    • На странице и в консоли браузера будет напечатан ID вашего устройства;
    • Появится кнопка Delete Token для удаления существующего токена и повторной регистрации;
    • Появится форма с параметрами уведомления которое можно отправить нажав на кнопку Send;
    • Меняем параметры по усмотрению и получаем разные уведомления.

    Можно отправить уведомление через любой инструмент для отправки HTTP запросов. Можно использовать сURL, я предпочитаю приложение Postman для Chrome.

    Запрос такой же как и описанный ранее:

    POST /fcm/send HTTP/1.1 Host: fcm.googleapis.com Authorization: key=AAAAaGQ_q2M:APA91bGCEOduj8HM6gP24w2LEnesqM2zkL_qx2PJUSBjjeGSdJhCrDoJf_WbT7wpQZrynHlESAoZ1VHX9Nro6W_tqpJ3Aw-A292SVe_4Ho7tJQCQxSezDCoJsnqXjoaouMYIwr34vZTs Content-Type: application/json < "data": < "title": "Ералаш", "body": "Начало в 21:00", "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192", "click_action": "http://eralash.ru/" >, "to": "YOUR-TOKEN-ID" >
    • YOUR-TOKEN-ID — это ID устройства который вы получили на странице приложения.

    Вот и все. Получаем уведомление и радуемся жизни.

    Ссылки

    Спиок ссылок по теме

    • Про PUSH
      • Wikipedia о технологии PUSH
      • Хорошие уведомления по мнению Google
      • Рекламная статья от PushAll
      • Web Push Book
      • Web Push from ServiceWorker
      • Поддержка в браузерах
      • HTTPS на localhost
      • Тестирование SSL сертификата
      • Let’s Encrypt
      • Статья по настройке Let’s Encrypt
      • Подписка на уведомления
      • Стратегия определения состояния для фложка подписки
      • Видео-инструкция по настройке Firebase
      • Notification
      • ServiceWorker
      • Использование Service Worker
      • localStorage
      • Promise
      • Фокусирование на открытом окне по клику на уведомление
      • Руководство
      • Проект из документации
      • Параметры сообщения
      • Список кодов ошибок
      • TTL
      • Размер иконок
      • Приложение Postman для Chrome
      • Quickstart от Firebase
        • Оригинал
        • Мой форк
        • На GitHub Pages
        • Проект
        • Исходники
        • Проект
        • Исходники

        Updated at 2018-06-09

        Обнаружились некоторые «особенности» в работе уведомлений.

        Дубликаты уведомлений

        Ко мне несколько раз обращались с вопросом: «Как исправить дублирующиеся уведомления?»

        Проявляется эта проблема если открыть сайт отправляющий уведомления одновременно в нескольких вкладках. В этом случае Service Worker отправляет уведомление в обе вкладки и в обоих вкладках срабатывает метод messaging.onMessage. Наблюдать эту проблему можно на моем Demo проекте.

        Что бы решить эту проблему, нужно в методе messaging.onMessage знать, что уведомление уже показывалось в другой вкладке. В качестве единого хранилища можно использовать localStorage , а идентифицировать уведомления по хеш сумме уведомления или присваивать уникальный id. Только стоит помнить, что localStorage не резиновый и id уже показанных уведомлений нужно подчищать через некоторое время.

        Могу порекомендовать для этих целей библиотеку pamelafox/lscache.
        Если у вас есть другой метод решения проблемы, напишите в комментариях.

        Картинки в уведомлениях

        Сегодня ко мне обратился пользователь CTterorist, заметивший, что не отображаются картинки (image) в уведомлениях.

        Немножко потестировав, мне удалось разобраться. Не смотря на то, что поле image отправляется в Firebase, вместе с другими параметрами уведомления, но обратно от Firebase поле image не приходит. Решается проблема очень просто. Можно отправлять картунку в поле data , а в обработчике показа уведомления вытягивать картинку из data и вставлять ее на место в уведомление.

        То есть, если вы отправите сообщение в таком виде, то Firebase потеряет картинку.

        < "notification": < "title": "Bubble Nebula", "body": "It's found today at 21:00", "icon": "https://peter-gribanov.github.io/serviceworker/Bubble-Nebula.jpg", "image": "https://peter-gribanov.github.io/serviceworker/Bubble-Nebula_big.jpg", "click_action": "https://www.nasa.gov/feature/goddard/2016/hubble-sees-a-star-inflating-a-giant-bubble" >, "to": "YOUR-TOKEN-ID" >

        Но если передать картинку в data , то она дойдет.

        < "data": < "title": "Bubble Nebula", "body": "It's found today at 21:00", "icon": "https://peter-gribanov.github.io/serviceworker/Bubble-Nebula.jpg", "image": "https://peter-gribanov.github.io/serviceworker/Bubble-Nebula_big.jpg", "click_action": "https://www.nasa.gov/feature/goddard/2016/hubble-sees-a-star-inflating-a-giant-bubble" >, "to": "YOUR-TOKEN-ID" >

        Обработчики показа уведомления такие же как в примерах выше.

        messaging.onMessage(function(payload) < console.log('Message received. ', payload); // регистрируем пустой ServiceWorker каждый раз navigator.serviceWorker.register('firebase-messaging-sw.js'); // запрашиваем права на показ уведомлений если еще не получили их Notification.requestPermission(function(result) < if (result === 'granted') < navigator.serviceWorker.ready.then(function(registration) < // своя логика как в примере с TTL и т.д. // копируем объект data payload.data.data = JSON.parse(JSON.stringify(payload.data)); registration.showNotification(payload.data.title, payload.data); >).catch(function(error) < console.log('ServiceWorker registration failed', error); >); > >); >);

        Аналогично в Service Worker ( firebase-messaging-sw.js )

        messaging.setBackgroundMessageHandler(function(payload) < console.log('Handling background message', payload); // своя логика как в примере с TTL и т.д. // копируем объект data payload.data.data = JSON.parse(JSON.stringify(payload.data)); registration.showNotification(payload.data.title, payload.data); >);

        Упоминания

        В одном сообщении можно добавить одно и более упоминаний.

        Если сотрудника упомянули в чате и Вы кликнули на имя коллеги, то появится краткая информация о нём. Подробнее.

        Как узнать, что Вас упомянули?

        Система проинформирует Вас об упоминании:

        • через уведомление в Лампочке (узнать больше про уведомления);
        • через знак @, который появится на плашке чата.

        Информация об упоминании приходит:

        • если Вы упомянуты в чате, в котором состоите;
        • если Вы упомянуты в открытом чате, в котором не состоите.

        Когда Вы упомянуты в закрытом чате, в котором не состоите, то Smarty CRM:

        • проинформирует об упоминании, если Вы — администратор;
        • не проинформирует об упоминании, если Вы — сотрудник.

        Smarty CRM оповестит Вас об упоминании, даже:

        • когда Вы отключили все уведомления системы;
        • если администратор закрыл Вам доступ к разделу Сообщения, но тогда вместо упоминания отобразится уведомление о новом сообщении.

        Как различать индикаторы чата?

        Если в чат пришло одно сообщение:

        • с упоминанием, то отобразится красный индикатор непросмотренных упоминаний @;
        • без упоминания, то включится красный счётчик непрочитанных сообщений.

        Если в чат пришло более одного сообщения, включая упоминания, то покажется:

        • красный индикатор непросмотренных упоминаний @;
        • красный счётчик непрочитанных сообщений, включая упоминания.

        Если Вы отключили уведомления в общем чате:

        • индикатор непросмотренных упоминаний @ продолжит отображаться красным;
        • счётчик непрочитанных сообщений станет серым.

        Если Вы отключили уведомления в личном чате:

        • индикатор непросмотренных упоминаний @ не появится, так как их нет в личном чате вообще;
        • счётчик непрочитанных сообщений станет серым.

        Похожие вопросы

        1. Использование Сообщений
        2. Настройки чатов
        3. Поиск чатов и собеседников
        4. Отправка сообщений
        5. Типы чатов
        6. Внешние чаты
        7. Связывание чатов с объектами
        8. Создание напоминания из сообщения
        9. Реакции на сообщения
        10. Прикрепление изображений и других объектов
        11. Опция Только для чтения
        12. Отключение уведомлений о сообщениях
        13. Поиск по сообщениям
        14. Просмотр сведений о сотрудниках
        15. Отслеживание просмотра сообщений
        16. Мини-чаты
        17. Звонки через браузер
        18. Упоминания
        19. Работа с ботом Telegram
        20. Удаление и восстановление чатов
        21. Другие опции чатов

        Есть вопросы? Мы поможем Вам:
        Заказать обратный звонок
        Ваша заявка на звонок принята
        Мы свяжемся с вами в ближайшее время
        Спасибо за подписку
        Введите имя, чтобы мы знали, как к Вам обращаться.
        Спасибо за подписку
        Введите имя, чтобы мы знали, как к Вам обращаться.
        Пользовательское соглашение

        Пользовательское соглашение

        1. Общие положения

        1.1. В настоящем Соглашении, а также во всех отношениях, связанных с этим документом, применяются следующие понятия:

        а) Администрация — компания ООО “Облачные технологии”, ИНН 5261088136, находящаяся по адресу: 603009 г. Нижний Новгород, ул. Азовская, д. 16, оф. 12.

        б) Пользователь — любое дееспособное физическое или юридическое лицо, зарегистрированное в Программе Smarty CRM и использующее её в своих интересах либо в интересах представляемых им лиц.

        в) Программа — совокупность программного кода и базы данных, в том числе исходный текст, аудио, видео и визуальное отображение. Зарегистрированное название Программы — Smarty CRM (Свидетельство о регистрации программы для ЭВМ №2014617050). Постоянный адрес веб-версии Программы: https://smartycrm.com/

        г) Мобильное приложение — клиент для использования Программы, адаптированный для работы на мобильных устройствах (телефоны, планшетные компьютеры и прочие устройства с операционными системами Android, iOS, Windows и пр.).

        д) Аккаунт Пользователя — рабочая область Программы, доступ к которой становится возможным после регистрации и авторизации в Программе, в том числе через Мобильное приложение.

        е) Соглашение — настоящий документ со всеми изменениями и дополнениями.

        ж) Сайт — информационная площадка для размещения сведений о Программе, в том числе документации, настоящего Соглашения, контактов Администрации и прочих сведений. Также используется для регистрации и авторизации в Программе. Постоянный адрес сайта: https://smartycrm.com/

        з) Сервер — специализированный компьютер, размещенный в дата-центре, необходимый для работы Программы.

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

        1.2. Использование Программы допускается любым способом в пределах функциональных возможностей, требований законодательства и включает в себя:

        — регистрацию и/или авторизацию в Программе через Сайт или Мобильное приложение;

        — размещение в Программе любых материалов, включая текстовые данные, ссылки, изображения, различного рода файлы, а также иную информацию;

        — просмотр размещенных в Программе материалов и обмен с другими пользователями;

        — общение с другими пользователями через чат, обмен файлами и прочими данными.

        1.3. Используя Программу одним из перечисленных в п. 1.2 способов, вы подтверждаете, что:

        а) Ознакомились с настоящим Соглашением до начала использования Сервиса.

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

        в) Любой пункт Соглашения может быть изменен или добавлен Администрацией без какого-либо специального уведомления Пользователя. Все изменения вступают в силу с момента опубликования на Сайте.

        2. Общие условия использования Программы

        2.1. Использование возможностей Программы возможно только после Регистрации и авторизации через Сайт или Мобильное приложение.

        2.2. Все условия использования Программы, в том числе тарифные планы, Документация и прочие данные доводятся до сведения Пользователей путём размещения на Сайте и/или в интерфейсе Программы.

        2.3. Указанные при регистрации электронная почта и пароль являются необходимыми данными для авторизации в Программе. Пользователь не имеет права передавать данные для авторизации третьим лицам, а также самостоятельно принимает меры для их сохранности. Администрация вправе усилить процедуру авторизации с помощью SMS или аналогичным способом.

        3. Лицензия на использование Программы

        3.1. Администрация на безвозмездной или возмездной основе предоставляет зарегистрированному пользователю возможность использования Программы на условиях простой (неисключительной) непередаваемой лицензии в пределах функциональных возможностей Программы и применимого законодательства.

        3.2. Администрация устанавливает лимиты на объем и вид размещаемой Пользователями информации в Программе. Администрация также вправе устанавливать иные ограничения.

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

        3.4. Использование Программы способами, не предусмотренными настоящим Соглашением, запрещается.

        4. Гарантии Пользователя

        Принимая положения настоящего соглашения, Пользователь подтверждает, что:

        4.1. Обладает необходимыми правами и полномочиями для акцепта настоящего Соглашения и его исполнения.

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

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

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

        5. Использование материалов Пользователя

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

        5.2. Использование материалов Администрацией не должно нарушать авторских и иных прав Пользователя и третьих лиц.

        6. Ограничения

        Акцептуя настоящее соглашение, Пользователь соглашается со следующими положениями:

        6.1. При использовании сервиса на безвозмездной основе не применяются положения законодательства о защите прав потребителей.

        6.2. Программа, в том числе на платных тарифах, предоставляется на условиях “как есть”. То есть Администрация не предоставляет каких-либо гарантий, что Программа будет соответствовать всем требованиям, услуги будут предоставляться непрерывно, надежно и быстро, без каких-либо ошибок.

        6.3. Администрация не несёт ответственности за содержание материалов, размещенных Пользователем в Программе. Вся ответственность возлагается на Пользователя, создавшего или разместившего данные материалы или на третьих лиц, получивших доступ к Аккаунту Пользователя при наличии вины Пользователя.

        6.4. Администрация не связана с материалами, размещенными Пользователем в Программе, не проверяет их содержание, соответствие применимому законодательству или наличие прав Пользователя на размещение этих материалов.

        6.5. Запрещается использование Программы для:

        — размещения, распространения, рекламирования и прочей демонстрации контрафактных материалов;

        — размещения, распространения порнографических материалов, а также пропаганды порнографии и рекламы услуг интимного характера;

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

        — рекламных рассылок другим пользователям, на которые они не давали согласие (спам);

        — размещения файлов в Программе, закрытых паролями.

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

        6.7. При обнаружении Пользователем нарушения своих прав или прав третьих лиц он вправе обратиться к Администрации через форму обратной связи на Сайте или в Программе. После получения такого уведомления Администрация принимает меры для предотвращения дальнейшего нарушения прав.

        6.8. При наличии претензий третьих лиц к Администрации в отношении Пользователя, а также при выявленной подозрительной активности Администрация вправе инициировать идентификацию Пользователя путём запроса у него необходимых документов. После получения запрашиваемых документов Пользователь предоставляет Администрации заверенное обязательство урегулировать претензии третьих лиц собственными силами и за свой счёт. Сроки предоставления указанных выше документов — не более 5 (пяти) дней с момента получения запроса.

        6.9. Администрация без объяснения причин имеет право удалять из Программы любые материалы, явно противоречащие Закону хотя бы одной из стран, где используется Программа.

        6.10. При многократном или однократном грубом нарушении настоящего Соглашения Администрация вправе заблокировать или удалить Аккаунт Пользователя вместе с материалами, которые в нём размещены.

        6.11. В случае привлечения Администрации к ответственности или наложения взыскания в связи с допущенным нарушением Пользователем настоящего Соглашения Пользователь обязуется компенсировать в полном объеме все убытки, в том числе судебные издержки и прочие расходы.

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

        6.13. При любых обстоятельствах ответственность Администрации перед Пользователем ограничивается суммой 1000 (одна тысяча) рублей или эквивалентом в иностранной валюте.

        7. Уведомления

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

        7.2. Администрация вправе использовать уведомления, связанные с информированием о функционале Программы, а также уведомления, связанные с социальной активностью других пользователей и другие виды уведомлений и нотификаций.

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

        8. Персональные данные и коммерческая тайна

        8.1. Регистрируясь в Программе, Пользователь даёт письменное согласие на автоматизированную и неавтоматизированную обработку персональных данных, указываемых в момент регистрации, а также данных, в дальнейшем добавленных в его Аккаунт.

        8.1.1 К таким данным относятся данные, не являющиеся специальными или биометрическими. В частности, ФИО, номера телефонов, адреса электронной почты, место работы, должность, данные о местоположении и пр. В некоторых случаях могут быть сохранены технические данные, такие как тип и версия браузера, тип устройства, с которого осуществляется регистрация, источник, откуда пришел пользователь, язык браузера, операционная система, IP-адрес и другие данные предоставляемые сервисами по сбору статистики и внутренней аналитики.

        8.1.2 Обработка персональных данных осуществляется только в целях исполнения настоящего Соглашения.

        8.1.3 Основанием для обработки персональных данных является Конституция России, Федеральный закон №152-ФЗ “О персональных данных” и настоящее Соглашение.

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

        8.1.5 Персональные данные обрабатываются до момента удаления Аккаунта по запросу Пользователя на электронную почту support@smartycrm.com. При этом окончательное удаление осуществляется только после автоматического удаления файлов резервных копий баз данных, кэша и очистки от данных пользователя других технических и программных средств и баз данных, обеспечивающих стабильность работы Программы.

        8.1.6 Согласие на обработку персональных данных может быть отозвано субъектом персональных данных или его представителем. При этом подобный отзыв приравнивается к удалению Аккаунта Пользователя.

        8.1.7 Администрация несёт ответственность за соблюдение положений Федеральный закон №152-ФЗ “О персональных данных” и для этого назначает уполномоченных сотрудников, контролирующих соответствие правовым нормам.

        8.1.8 Разъяснения по обработке персональных данных производятся уполномоченным государственным органом (Роскомнадзор, https://rkn.gov.ru/). Разъяснения, касаемые персональных данных по настоящему Соглашению могут быть предоставлены по письменному запросу на почтовый адрес Администрации.

        8.2. Используя Программу, Пользователь самостоятельно определяет степень доступности персональных данных, а также материалов, относящихся к коммерческой и иным видам тайн иным пользователям Программы или пользователям интернета.

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

        9. Финансовые условия

        9.1. Пользователь в любое время вправе отказаться от использования Программы. Отказ осуществляется в одностороннем порядке путём удаления Аккаунта в настройках Программы либо путём направления письменного уведомления на почту support@smartycrm.com. По запросу Пользователя, Аккаунт может быть заблокирован или удалён Администрацией.

        9.2. Программа имеет один бесплатный и несколько платных тарифов с различными функциональными возможностями и лимитами на размещаемые материалы по количеству или объему. Пользователь самостоятельно выбирает тарифный план и производит на него подписку одним из предлагаемых способов. Перечень тарифов размещается на сайте https://smartycrm.com/ и непосредственно в интерфейсе Программы. Стоимость тарифов может отличаться в разных странах и в разных маркетах для мобильных приложений.

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

        9.4. Предоставляемая при оплате персональная информация (имя, адрес, номер телефона, email, номер кредитной карты, срок её действия и пр.) является конфиденциальной и не подлежит разглашению. Указанная информация передаётся только в зашифрованном виде напрямую в процессинговую компанию и не сохраняется в базе данных Программы, а также в какой-либо иной базе Администратора.

        Все операции с платежными картами происходят в соответствии с требованиями MasterCard, Visa, Discover, JCB, American Express и других платежных систем. При передаче информации используются специальные технологии безопасности карточных онлайн-платежей, обработка данных ведется на безопасном высокотехнологичном сервере процессинговой компании. В случае использования регулярных платежей при совершении первой операции номер карты Пользователя и срок действия будут сохранены на стороне процессинговой компании в безопасном хранилище. По факту выполнения или оказания услуг со стороны компании данные будут удалены автоматически. Все ресурсы процессинговой компании соответствуют стандартам безопасности PCI DSS.

        10. Прочие условия

        10.1. Пользователь самостоятельно определяет условия и порядок использования своего Аккаунта в Программе. Указанные условия не могут противоречить настоящему Соглашению.

        10.2. Ко всем отношениям по данному Соглашению применяются нормы права Российской Федерации, а также нормы международного права.

        10.3. Все споры по настоящему Соглашению подлежат рассмотрению в суде по месту нахождения Администрации в соответствии с процессуальным правом Российской Федерации.

        10.4. Настоящее соглашение может быть прекращено или изменено в одностороннем порядке без предварительного уведомления Пользователя и без выплаты каких-либо компенсаций или неустоек.

        10.5. Действующая редакция настоящего соглашения размещена на Сайте Администрации по постоянному адресу: https://smartycrm.com/ru/terms

        11. Контактная информация

        11.1. Контакты Администрации — email технической поддержки support@smartycrm.com. Другие контакты размещаются на Сайте https://smartycrm.com/

        Privacy policy & refund policy

        Privacy Policy & Refund Policy

        Privacy Policy

        This policy covers how we use your personal information. We take your privacy seriously and will take all measures to protect your personal information.

        Any personal information received will only be used to fill your order. We will not sell or redistribute your information to anyone.

        Refund Policy

        If you are not 100% satisfied with your purchase, within 120 days from the purchase date, we will fully refund the cost of your order.

        Мобильные и браузерные push-уведомления: как и зачем рассылать их пользователям

        Push-уведомления

        Каждый день на мобильные устройства и компьютеры со всего мира приходят десятки сообщений от приложений и браузеров — push-уведомлений. Даже в большом потоке информации 70% пользователей считают пуши полезными. Расскажем, почему push-уведомления важны для вашего бизнеса, какие бывают, когда и как их стоит рассылать.

        Что такое push-уведомления

        Push уведомления (push notifications) — сообщения, которые всплывают на экране девайса пользователя: на смартфоне, на компьютере и на экранах умных устройств. Пуш — это короткий текст, сообщающий пользователю важную информацию: старт акции, изменение статуса заказа, об операции на счёте и другое.

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

        • триггерные — пользователь совершил или не совершил действие, на которое реагирует система;
        • транзакционные — подтверждение оплаты, смена статуса заявки и другие;
        • контентные — новая информация о продукте, изменения в работе компании.

        Пуш сообщения бывают мобильными и браузерными.

        Mobile push (мобильные) появляются на экранах мобильных устройств. Их отправляют мобильные приложения, если пользователь разрешил это действие. Push-уведомления mobile версии поддерживают заголовок, текст, картинку, иконку бренда, кнопку действия (CTA).

        Web push (браузерные) всплывают на экране компьютера или мобильного устройства, но присылает их не приложение, а браузер. Пользователь даёт разрешение на отправку во всплывающем окне, когда заходит на сайт. Такие пуш уведомления можно отключить при желании в настройках браузера.

        Push уведомления в браузере

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

        В web push notifications входит заголовок, текст, иконка, картинка, гиперссылка и адрес сайта, который отправил сообщение.

        Преимущества push-уведомлений

        Пуш сообщения — находка для маркетологов. Как push помогают бизнесу?

        Повышают вовлечённость пользователей. Как показывают исследования, возможно увеличить показатель до 88%.

        Возвращают пользователей. Поднять Retention rates в 3-10 раз с push-уведомлениями реально. Исследования показывают, что бренды, которые начнут рассылку пушей, могут за 90 дней повысить показатель Retention на 190%.

        Увеличивают открываемость уведомлений. Пуш-сообщения открывают чаще, чем письма email-рассылки: Opening rate пушей выше на 50%, а Click rate в 7 раз.

        Продвигают пользователя по воронке продаж. Согласно исследованиям, 48% клиентов покупают после того, как получили пуш-уведомление.

        Также push-уведомления:

        • Доставляют информацию в реальном времени, что важно в условиях высокой конкуренции.
        • Показывают всю информацию на экране — не нужны дополнительные действия, чтобы её получить.
        • Не требуют сбора персональных данных (номеров телефонов), что упрощает работу и снижает риск санкций.
        • Помогают быть всегда на связи с клиентом и напоминать о себе. Есть возможности персонализации.
        • Не проходят проверку спам-фильтров, как сообщения электронной почты.

        Как использовать push-уведомления

        Пуши — это прежде всего быстрая и важная информация для пользователя. Не стоит забрасывать его только акциями и скидками. Предел есть даже у самых лояльных клиентов. Не шлите уведомления обо всём подряд. Новая статья в блоге компании — неудачный повод для push. Последняя публикация на сайте СМИ — отлично, потому что пользователь подписывался именно на получение актуальных новостей. «Ваш заказ доставлен» — тоже важно для клиента.

        В любой сфере пуш-уведомления полезно применять:

        • для онбординга;
        • как сообщения о транзакциях;
        • для вовлечения и удержания пользователей.

        Онбординг

        На начальном этапе работы с брендом пользователь может отвлечься, забыть или отложить: заполнение данных, первый заказ, оформление профиля в соцсети, начало активных действий, для которых он подписался (например, тренировки в фитнес-приложении). Пуш исправит ситуацию и «подтолкнёт» пользователя к активности.

        Транзакции

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

        Вовлечение и удержание

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

        Вариантом для использования push много. Дальше несколько кейсов применения таких уведомлений из разных сфер.

        Push уведомления из приложений на смартфоне

        Пример push-уведомлений в смартфоне

        Интернет-торговля

        Маркетплейсы и интернет-магазины с помощью пуш уведомлений сообщают пользователям про:

        • акции и скидки на товары в избранном;
        • статус заказа, оплату, отправку, получение;
        • необходимость оценить товар и доставку;
        • брошенный товар в корзине или незавершенное оформление (обычно после некоторого времени);
        • персональные предложения;
        • скидку на товар, который заинтересовал пользователя (определяется по активности на сайте);
        • доптовары к основному.

        Push уведомления из приложений на телефоне

        Push-уведомления из приложения

        Банки

        Деньги — вопрос серьёзный, поэтому пользователи хотят быть в курсе событий, которые происходят с их счетами. Особенно во время, когда процветает мошенничество.

        Банки присылают через push:

        • персональные предложения по кредитам и вкладам;
        • напоминания о сроке кредита;
        • сообщение о перевыпуске карты;
        • операции со счётом: покупке, пополнении;
        • предупреждения о подозрительных операциях;
        • одноразовые пароли для входа в систему.

        Рекрутинговые сайты

        Для человека, который ищет работу, скорость реакции на все изменения по статусу на сайте вакансии — это важно. Рекрутинговые сервисы помогают пользователям держать руку на пульсе и присылают push-уведомления о:

        • просмотре резюме;
        • приглашении на собеседования;
        • новых вакансиях по критериям пользователя;
        • другую дополнительную информацию, которая ускорит поиск работы.

        Недвижимость

        В сфере недвижимости скорость тоже важна, особенно при аренде жилья: хорошие квартиры разлетаются в первые часы после публикации объявления. Некоторые пользователи мониторят предложения на специальных сайтах или в разделах на сайтах агрегаторов (например, «Авито»).

        Какие есть варианты для пуш-уведомлений:

        • появление новых объектов на продажу или для аренды;
        • изменение цен на объекты, которые пользователь просматривал или добавил в избранное;
        • акции от строительных компаний.

        Медицинская организация

        Частные клиники используют push, чтобы:

        • напоминать клиенту о записи;
        • сообщать об изменениях в расписании врачей;
        • уведомлять о готовности анализов и справок;
        • сообщать об акциях.

        Обучение

        Проблема сферы обучения — потеря мотивации учеников. Не все могут пройти курс вовремя и до конца. Их нужно «подталкивать», что успешно делают пуш-сообщения — напоминают про:

        • необходимость пройти урок;
        • время события (вебинара, конференции, встречи с наставником);
        • сдачу домашнего задания;
        • скидки на допкурсы;
        • ответы от менторов и наставников на вопросы ученика.

        Возможно, самый известный пример пуш-уведомлений в обучении — кейс приложения для изучения иностранных языков Duolingo. Зелёная сова на иконке пуш-уведомлений и тон сообщений даже стали мемом.

        Бухгалтерия и госуслуги

        Страшный сон бухгалтера и предпринимателя — не сдать вовремя налоговую отчётность и не успеть заплатить налоги. Через push удобно получать уведомления о сроках по отчётам и «спать спокойно».

        Как происходит отправка web push и mobile push

        Со стороны пользователя всё просто — дать согласие на рассылку и получать важную информацию оперативно. Со стороны отправителя есть нюансы: для каждой операционной системы используются свои пуш-сервисы (они же провайдеры): FCM, APNS, HUAWEI Push Kit и другие. Рассмотрим два популярных сервиса, которые рассылают пуши на большую часть устройств.

        Firebase Cloud Messaging (FCM) — сервис для отправки push-уведомлений на устройства Android, IOS, в браузеры Chrome, Opera, Yandex, Firefox и другие. Сообщение автоматически отображается на устройстве от клиентского приложения.

        Apple Push Notification Service (APNS) — сервис для отправки пуш-уведомлений на устройства Apple, который присылает сообщения с текстом, иконкой или картинкой. Также возможно воспроизвести короткий звук.

        Apple Push Notification Service (APNS)

        Сервисы работают по похожему принципу. Так происходит отправка push-уведомлений:

        1. Устройство клиента подключается к сервису пуш-уведомлений: Firebase Cloud Messaging, APNS или другому. Получает токен — специальный идентификатор.
        2. Токен отправляется серверу конкретного приложения (Backend сервер).
        3. Сервер приложения использует токен для отправки уведомлений пользователю на устройство: в мобильное приложение, в браузер, на смарт-часы, на TV и так далее.

        Так рассылки делают напрямую из пуш-сервисов, но для маркетинга их возможности ограничены. Не всегда можно с помощью этих инструментов персонализировать уведомления и сегментировать аудиторию. Для маркетинговых задач подходят сервисы-отправщики, которые выступают в роли Backend серверов. Они хранят идентификаторы и «дергают» пуш-сервис, когда нужно отправить рассылку. Также их плюс — работа сразу с несколькими пуш-сервисами.

        Push уведомления в Altcraft Platform: миллионы сообщений за пару кликов

        Altcraft Platform — сервис, где доступны интеграции с Google Firebase Cloud Messaging, Apple Push Notification Service, Yandex.AppMetrica, Huawei Mobile Services. Поэтому рассылка отправляется из одного сервиса на устройства с разными операционными системами. Не нужно тратить время на работу с каждым по отдельности.

        Платформа позволяет собирать данные о пользователях: гендер, интересы, посещения страниц и действия в мобильном приложении и на их основе рассылать персональные пуш-уведомления.

        Возможные форматы для рассылок в Altcraft Platform

        Триггеры — кампании, которые шлют уведомления в ответ на действия пользователей.

        Броадкасты — разовые рассылки на выбранную аудиторию.

        Регулярные — периодические рассылки по вашей базе данных, которые повторяются по установленному графику.

        Примеры сценариев push-рассылок, которые можно реализовать с Altcraft Platform:

        • Пополнение баланса в личном кабинете;
        • Персональные предложения с сегментированием по городам;
        • Рассылка по времени активности клиента и с учётом часового пояса;
        • Подтверждение заказа;
        • Брошенная корзина;
        • Поздравление с праздникам: днями рождения, общими государственными праздниками;
        • Сообщения о скидках при выполнении условий (покупки на определённую сумму).
        • Напоминание о покупке доптоваров.

        Вывод

        Push-уведомления — выгодный и быстрый способ доставлять информацию клиенту. Не нужно изучать законы о персональных данных и обходить спам-фильтры. Пользователи очень лояльно относятся к пушам, если слать их умеренно и по делу. Если вы ещё не делаете push-рассылки, самое время начать.

        Как отправить всем пользователям html уведомление

        You are using an outdated browser. Please upgrade your browser to improve your experience.

        expand-card-line
        calendar-line —>

        Можно создавать настраиваемые уведомления со страницы уведомлений консоли служб Hub, которые отображаются в приложении Workspace ONE Intelligent Hub . Кроме того, настраиваемые уведомления можно создавать с помощью API-интерфейса службы уведомлений Workspace ONE.

        Уведомление о новом приложении позволяет информировать пользователей о доступности новых предоставленных им приложений в приложении Workspace ONE Intelligent Hub .

        Сообщение уведомления о новом приложении автоматически создается в службах Hub и еженедельно отправляется сотрудникам. Используя сообщения с уведомлением, пользователи могут выбирать новые приложения и сохранять их на устройстве.

        Чтобы сотрудники не получали еженедельное уведомление, можно деактивировать параметр «Уведомления о новых приложениях» на странице «Параметры уведомлений».

        Шаблон сообщения с уведомлением о новых приложениях нельзя изменить.

        Вы можете создавать настраиваемые уведомления и задавать для них приоритет с помощью мастера уведомлений в консоли служб Hub или c помощью API-интерфейсов уведомлений.

        Если используется мастер уведомлений, перечисляются два типа уведомлений.

        • Требующие действий . Требующие действий уведомления требуют от пользователя выполнить определенное действие, например пройти обязательное обучение или утвердить отчет о расходах. Выберите пункт «Требующие действий», чтобы отправить уведомление, требующее от пользователей ответа в уведомлении. В настраиваемом уведомлении можно задать от одной до трех кнопок для выполнения действий. В разделе «Дополнительные сведения» можно добавить сведения об уведомлении. Дополнительные сведения отображаются в формате надписи/описания после сообщения. Можно назначить крайнюю дату, которая включает в себя день, время и часовой пояс, до которой необходимо выполнить требуемое действие. Эта дата отобразится на карточке уведомления, чтобы пользователи могли видеть, когда необходимо выполнить действие.
        • Информационные . Информационные уведомления — это уведомления, которые не требуют от читателя предпринимать какое-либо действие в отношении уведомления. Уведомления о новых приложениях отображаются в виде информационных уведомлений.

        Чтобы создать настраиваемые уведомления с помощью API-интерфейса уведомлений, перейдите на страницу API-интерфейса службы уведомлений Workspace ONE: https://code.vmware.com/apis/402#/Notifications. Справочник по службам уведомлений доступен на вкладке «Документация» этой страницы.

        При создании уведомления для него можно установить приоритет, выбрав значение «Стандарт», «Высокий приоритет» или «Срочное».

        • Стандарт . Уведомления по умолчанию отправляются как стандартные. При чтении стандартных уведомлений или их очистке с экрана количество уведомлений уменьшается.
        • Высокий приоритет . Уведомления, которые отправляются с высоким приоритетом, отображаются в верхней части страницы уведомления «Для вас» в разделе «Приоритет». Количество уведомлений не уменьшается до тех пор, пока пользователи не пометят уведомление как прочитанное или не выполнят действие в соответствии с уведомлением.
        • Срочное . Уведомления, отправленные как срочные, считаются чрезвычайно важными уведомлениями, которые заблаговременно предупреждают пользователей и требуют немедленного внимания или реагирования. Пользователи не могут перейти на другой экран в приложении Intelligent Hub, пока не предпримут действий в отношении этих уведомлений.

        Можно настроить пользовательские уведомления для определенных аудиторий или отправлять уведомления всем сотрудникам вашей организации. См. раздел Создание настраиваемых уведомлений в службах Workspace ONE Hub.

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

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

        Постоянные уведомления можно создать с помощью API-интерфейса службы уведомлений. При создании постоянного уведомления в API-интерфейсе срок действия уведомления устанавливается в закрепляемом объекте. См. тему «Постоянные уведомления» в руководстве по уведомлениям на вкладке «Документация API-интерфейса службы уведомлений Workspace ONE» и схему карточек hero для получения дополнительной информации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *