- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

API ID для SMS.ru можно получить здесь: online.sms.ru/?panel=settings&subpanel=api [4]
Автоматическое оповещение об изменениях статуса почтовых посылок через SMS

Для создания скрипта в Google Apps Script требуется, как ни странно, пройти на сайт этого сервиса [1].
Там нас встретит следующее окно (если оно не было отключено ранее):
Автоматическое оповещение об изменениях статуса почтовых посылок через SMS
Нам нужен «Пустой проект».

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

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

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

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

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

Код

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, номер телефона и пары трекинг-номер/хеш. Теперь нужно настроить периодическое выполнение этого скрипта. Для этого идем в «Ресурсы->Триггеры текущего проекта», нажимаем «Добавить триггер» и настраиваем по образу и подобию (промежуток можно выбрать свой):
Автоматическое оповещение об изменениях статуса почтовых посылок через SMS

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

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

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

Автор: pavelsh111

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/38660

Ссылки в тексте:

[1] Google Apps Script: http://script.google.com

[2] SMS.ru: http://online.sms.ru

[3] 17track: http://17track.net

[4] online.sms.ru/?panel=settings&subpanel=api: http://online.sms.ru/?panel=settings&subpanel=api

[5] Источник: http://habrahabr.ru/post/186568/