Уведомления для администратора Битрикс

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

Push уведомления для администратора- удобно, быстро. Не заметить трудно.

#Технологии
03.12.2018 616 Алексей З.

Иногда приходится решать самые оригинальные проблемы клиентов. Например она может звучать так: "Форма заказа звонка отправляет уведомление на почту, но мы редко на неё заходим. нам необходимо оперативно получать уведомления". Причем в итоге они приходили на все устройства, как на телефон, так и на ПК. 

В ходе обсуждения задача мы выяснили 2 возможных варианта: 1 sms на телефон, 2-й это знаменитые Push уведомления.
Далее, пошел процесс кодинга и встраивания в форму заказа звонка.

push_1.png

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

push3.png

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

На рисунке показана всплывающее окно, которое видно при активном сайте . Это же окно показывается как на фронте сайта, так и в административной панели.

push_site.png

Но вот беда. Пользователь пропустил push уведомление, которое всплыло справа. Но оно отобразиться в windows рядом с часами. Нажав на него всегда можно посмотреть весь список. 

микро.png

Если рассматривать чисто технические вопросы. Для рассылки использовался сервер сообщений Firebase Cloud Messaging от Google и его библиотека .  Предварительно нам надо зарегистрироваться и получить все необходимые ключи.

Токены, что к нам приходили  отравляли и сохраняли на сервере в отдельный инфоблок токенов.

var url = '/push/save_token.php'; // адрес скрипта на сервере который сохраняет ID устройства
$.post(url, {
token: currentToken
});

Сформировал предварительно определенный набор полей в инфоблоке.
$arFindElSelectFields = array(
    'ID',
    'PROPERTY_P_TOKEN',
    'PROPERTY_P_USER',
    'PROPERTY_P_DEVICE',
);

Массив данных которые отправляются  curlом на сервер пушь уведомлений https://fcm.googleapis.com/fcm/send 

 $request_body = [        
'notification' => [
'title' => 'Перезвоните мне',
'body' => $phone_push.' '.$name_push,
'icon' => 'https://test.ru/img/logo.png',
'click_action' => 'https://test.ru',
],
'tag'=>'testpush'.date('H-i'),
'time_to_live'=>1000,//секунд
'registration_ids'=>$MASS_TOKEN
];

Итого работы был: довольный клиент, и довольные разработчики, т.к задача была на редкость интересная.
Приблизительное время выполнения задач: 10 часов+ тестирование.