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

в 13:52, , рубрики: Google API, google apps, google apps script, javascript, 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
Автоматическое оповещение об изменениях статуса почтовых посылок через SMS

Для создания скрипта в Google Apps Script требуется, как ни странно, пройти на сайт этого сервиса.
Там нас встретит следующее окно (если оно не было отключено ранее):
Автоматическое оповещение об изменениях статуса почтовых посылок через 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

Источник

  1. Vladislav:

    постоянно приходит error message: abN
    в чём проблема?

    • nickko:

      У меня та же проблема. Через браузер заходит, но скрипт работает на хостинге, а там – выдает ошибку. Похоже, забанили

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js