Есть отличный сервис для отсылки Push уведомлений iOS и Safari в Mac OS. Но, к сожалению, я не нашел готовых скриптов, упрощающих работу с ним. Отсутсвие оного подтолкнуло меня на его написание.
На официальном сайте есть только простенькое описание API. Отправлять собственно уведомления можно двумя способами: отправкой email на адрес, который сервис выдает после регистрации, и отправкой POST запроса c использованием личного токена. Эти вещи можно посмотреть в настройках приложения или на сайте.
Мне понадобились уведомления при заходе людей на сервер через ssh. Написать скрипт оказалось не сложно, на сайте есть пример отправки с помощью cURL
curl -d "user_credentials=ACCESS_TOKEN"
-d "notification[title]=message title"
-d "notification[long_message]=<b>Some text or HTML for the full layout page notification</b>"
-d "notification[sound]=bird-1"
-d "notification[source_name]=My own alert"
-d "notification[icon_url]=http://new.boxcar.io/images/rss_icons/boxcar-64.png"
https://new.boxcar.io/api/notifications
Оставалось подсунуть свой токен и все. Спустя пару часов получился у меня простенький скрипт.
#! /bin/bash
#
# authors: Ritter Dmitry
# version: 1.00
#
# Для нормального использования нужно установить парсер JSON - jq http://stedolan.github.io/jq/
#
# Пример использования pusher`а
# ./pusher.sh 'test push/full mess/Test/boing'
# Можно пропускать то что не нужно, например полное сообщение:
# ./pusher.sh 'test push//Test/boing'
#
# 'Тест Symbols "<>/`~[]±§_+-=()*^$#!@№:' - Можно отправлять
# '%&;' - Нельзя
#
# Важно: Кавычки обязательны!
IFS1="$IFS"; IFS="/"; S="$1"; A=( $S ); IFS="$IFS1"
token="Сюда копировать свой токен!!!" # Токен устройства
log_file="log.file" # Имя лог фала, если пусто - лога не будет
message_def="defMess" # Дефолтные значения, если пусто - их не будет :)
source_name_def="Test" # Дефолтные значения, если пусто - их не будет :)
sound_def="echo" # Дефолтные значения, если пусто - их не будет :)
icon_def="http://belyashek.tk/Web-icon.png" # Дефолтные значения, если пусто - их не будет :)
txtgrn='e[0;32m' # Green
txtylw='e[0;33m' # Yellow
txtred='e[0;31m' # Red
if [ -z "$1" ]
then
printf "$txtylw Usage: $txtgrn {title/message/sourse_name/sound/icon} n"
tput sgr0
else
printf "$txtylw Sending push:"
if [ "${A[0]}" ]
then
title="${A[0]}"
fi
if [ "${A[1]}" ]
then
message="${A[1]}"
else
message=$message_def
fi
if [ "${A[2]}" ]
then
source_name="${A[2]}"
else
source_name=$source_name_def
fi
if [ "${A[3]}" ]
then
sound="${A[3]}"
else
sound=$sound_def
fi
if [ "${A[4]}" ]
then
icon="${A[4]}"
else
icon=$icon_def
fi
pushing=$(curl -s
-d "user_credentials=$token"
-d "notification[title]=$title"
-d "notification[long_message]=$message"
-d "notification[source_name]=$source_name"
-d "notification[sound]=$sound"
-d "notification[icon_url]=$icon"
https://new.boxcar.io/api/notifications)
if [ "$log_file" ]
then
echo $pushing >> "$log_file"
fi
tes=$(echo $pushing | jq '.id')
erroe=$(echo $pushing | jq '.Response')
error=$(echo $pushing | jq '.error|.message')
if [ "$erroe" == null ]
then
erroe=$error
fi
if [ "$tes" != null ]
then
printf "$txtgrn [OK] n"
else
printf "$txtred [ERROR]: "
printf "$erroe n"
fi
tput sgr0
fi
Скачать можно по ссылке // комментарии на русском, могут быть проблемы при открытии в браузере
Для нормальной работы нужно установить парсер JSON, «jq». Можно и поставить через apt-get, но там старая версия, так что:
$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)
$ chmod +x ./jq
$ sudo cp jq /usr/bin
Перелогиниваемся, теперь все должно работать.
Заходим в папку, у меня это /usr:
$ cd /usr
$ wget http://sourcerda.tk/pusher.sh // Скачиваем парсер
$ chmod +x ./pusher.sh // Даем права на запуск
Теперь можно отправлять уведомления, перед этим вписав свой токен в скрипт.
Пример:
$ ./pusher.sh 'test push/full mess/Test/boing'
$ Sending push: [OK] // Все работает)
Отправлять можно:
Заголовок
Полный текст сообщения
Выбирать звук уведомления
Иконку
Для отправки через скрипт нужно перечислить их в кавычках ' в этой же последовательности через /. Если например нам полный текст не нужен, пропускаем НО КАВЫЧКИ СТАВИМ.
Есть еще дефолтные значения, что бы каждый раз не прописывать например звук, но указав нужный будет воспроизводиться именно он.
p.s. Если захотите уведомление при заходе пользователя, добавьте в .profile что то вроде:
bash /root/pusher.sh 'root login'
Конечно, наверно есть и более легкий способ. Но и пускай будет и этот как вариант.