Автоматическое оповещение об изменениях статуса почтовых посылок через SMS

от автора

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

Выбор вспомогательных сервисов

Следующий шаг поисков был посвящен сервисам, предоставляющим возможность периодического выполнения различных скриптов за неимением (ах, какая досада) личного сервера. Выбор пал на Google Apps Script. В качестве ЯП используется модификация хорошо знакомого мне Javascript.
В качестве SMS-гейта был выбран SMS.ru, предоставляющий возможность отправки неограниченного количества бесплатных SMS стандартной длины (180 символов латиницы, 60 юникода) на личный номер телефона.
Функцию трекинга было решено позаимствовать у [не знаю, насколько] универсального китайского сервиса 17track.

Приготовления

До того, как приступить к написанию… кода, нам нужны:

  • аккаунты на Google (вдруг у кого нет) и SMS.ru
  • API ID от SMS.ru
  • созданный пустой проект на Google Apps Script
  • хеш, без которого 17track откажется нам выдавать статус, для каждого трек-номера

Подробно расписывать процесс регистрации, надеюсь, не нужно.

API ID для SMS.ru можно получить здесь: online.sms.ru/?panel=settings&subpanel=api

Для создания скрипта в Google Apps Script требуется, как ни странно, пройти на сайт этого сервиса.
Там нас встретит следующее окно (если оно не было отключено ранее):

Нам нужен «Пустой проект».

Хеш для 17track придется получать путем некоторых извращений.
Для этого проходим на страницу с результатом трекинга (путем ввода трекинг-кода посылки на главной) и действуем по одному из двух путей:

  • Вводим в адресную строку javascript:alert(hs(["%ваш трекинг-код%", 0])); и копируем код из окна Alert’а
  • Открываем консоль браузера и выполняем команду hs(["%ваш трекинг-код%", 0]);, копируем результат из консоли.

Все нужные ингредиенты получены, можно приступать к коду.

Код

var apiID = "%Ваш API ID%"; var phone = "%Ваш номер телефона%"; var num = [   ["%Трекинг-номер 1%", "%Хеш 1%"],   ["%Трекинг-номер 2%", "%Хеш 2%"],   ...   ["%Трекинг-номер n%", "%Хеш n%"] ];  function sendSMS(text){   UrlFetchApp.fetch("http://sms.ru/sms/send?api_id="+apiID+"&to="+phone+"&text="+encodeURI(text)); }  function checkStatus(){   for(i=0; i<num.length; i++){     var response = UrlFetchApp.fetch("http://s1.17track.net/Rest/HandlerTrackPost.ashx?lo=www.17track.net&num="+num[i][0]+"&hs="+num[i][1]);     var result = response.getContentText().match(/z":.*a":"(.*)".*b":"(.*)"}/i);     if(UserProperties.getProperty(num[i][0]) != result[1]){       var sendstring = num[i][0]+": "+result[2];       sendSMS(sendstring);       UserProperties.setProperty(num[i][0], result[1]);     }   } } 

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

В код остается подставить API ID, номер телефона и пары трекинг-номер/хеш. Теперь нужно настроить периодическое выполнение этого скрипта. Для этого идем в «Ресурсы->Триггеры текущего проекта», нажимаем «Добавить триггер» и настраиваем по образу и подобию (промежуток можно выбрать свой):

Результатом будут такие сообщения на мобильный телефон при обнаружении изменений в статусе:

Вопросы и предложения с альтернативами, исправлениями и оптимизациями принимаются.

P.S.: благодарю неизвестного (или это я просто не нашел?) хабраюзера за предоставленный инвайт.

ссылка на оригинал статьи http://habrahabr.ru/post/186568/


Комментарии

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

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