SMSによる郵便小包のステータスの変化の自動通知

最近、オンラインストアで多くの商品を購入し始めました。小包のステータスを頻繁にチェックしていることがよくあります(メールに煩わされることはありません)。

既製のソリューションの検索は、有料サービスのみにつながりました。 その結果、独自の何かを理解することが決定されました。

猫の下には、使用されているサービスと詳細な手順のリストがあります。



補助サービスの選択



検索の次のステップは、パーソナルサーバーが(いや、面倒な)不足しているためにさまざまなスクリプトを定期的に実行する機能を提供するサービスに専念しました。 選択はGoogle Apps Scriptにかかっていました 。 よく知られているJavascriptの修正がYaPとして使用されます。

SMS.ruがSMSゲートとして選択され、無制限の数の無料の標準長SMSメッセージ(ラテン文字180文字、Unicode 60文字)を個人の電話番号に送信できるようになりました。

中国の普遍的なサービス17trackから追跡機能を借りることが決定されました



オペレーターにemail2sms-gateがある場合、SMS.ruへのすべての参照をスキップできます。



料理



コードの記述を開始する前に、次のものが必要です。





登録のプロセスを詳しく説明しますが、必要ではありません。



SMS.ruのAPI IDは、online.sms.ru /?panel = settings&subpanel = apiで取得できます。





Google Apps Scriptでスクリプトを作成するには、奇妙なことに、 このサービスのサイトにアクセスしてください。

そこで、次のウィンドウが表示されます(以前に無効にされていない場合)。



「空のプロジェクト」が必要です。



17trackのハッシュを取得する必要はありません。現在、生成はGoogle Apps Scriptによって行われています。 スクリプトに挿入する準備ができたコードは、 ここから入手できます



必要なすべての材料を受け取ったら、コードに進むことができます。



コード



var user = ["%API ID%", "%TELNO%"]; var num = [ ["%TRACKCODE1%", "%NAME1%"], ["%TRACKCODE2%", "%NAME2%"], ... ["%TRACKCODEn%", "%NAMEn%"], ]; var errors = { "hsErr": "Wrong hash", "unAllow": "You've changed parameter \"lo\" in query URL. Set it to \"www.17track.net\"", "hsNon": "There's no hash" } var success = false; function sendSMS(text){ UrlFetchApp.fetch("http://sms.ru/sms/send?api_id="+user[0]+"&to="+user[1]+"&text="+encodeURI(text)); } function digest2str(digest){ var str = ''; var i = 0; for (i=0; i<digest.length; i++) { byte = digest[i]; if (byte < 0) byte += 256; byteStr = byte.toString(16); // Ensure we have 2 chars in our byte, pad with 0 if (byteStr.length == 1) byteStr = '0'+byteStr; str += byteStr; } return str; } function checkStatus(){ var i = 0; for(i=0; i<num.length; i++){ var response = UrlFetchApp.fetch("http://www.17track.net/r/handlertrack.ashx?callback=&num="+num[i][0]+"&pt=0&cm=0&cc=0&_="+Math.random()); UserProperties.setProperty("q", response.getContentText()); var result = Utilities.jsonParse(response.getContentText()); var sendstring = num[i][1]+": "; if(result["ret"] == 1){ if(result["dat"]["f"] == "0"){ sendstring += "Track code not found"; }else{ success = true; } }else{ sendstring += errors[result["msg"]] ? errors[result["msg"]] : "Please, leave comment on habrahabr, error message: "+result["msg"]; } if(success){ if(UserProperties.getProperty(num[i][0]) != result["dat"]["z"]["b"]){ translit = UrlFetchApp.fetch("http://translate.google.com/translate_a/t?client=t&q="+encodeURI(result["dat"]["z"]["b"])); translitobj = Utilities.jsonParse(translit.getContentText()); if(translitobj[0][0][3]){ for(z in translitobj[0]){ sendstring += translitobj[0][z][3]+" "; } }else{ sendstring += result["dat"]["z"]["b"]; } sendSMS(sendstring); UserProperties.setProperty(num[i][0], result["dat"]["z"]["b"]); success = false; } }else{ sendSMS(sendstring); } } }
      
      





また、オペレーターにemail2smsゲートがある場合は、sms.ruを使用する必要はありません。 たとえば、Megaphone Udmurtiaの手順 。 その場合、「e-mail」という単語を検索することで、サイトでオペレーターを見つけることができます。 音訳を削除しました(誰かがメッセージを接着する方法を知らない場合はお知らせください、音訳付きのバージョンを作成します)。 コード名がメッセージの件名に追加されます。

コード
 var user = [ "%EMAIL1%", "%EMAIL2%", ... "%EMAILn%" ]; var num = [ ["%TRACKCODE1%", "%NAME1%"], ["%TRACKCODE2%", "%NAME2%"], ... ["%TRACKCODEn%", "%NAMEn%"], ]; var errors = { "hsErr": "Wrong hash", "unAllow": "You've changed parameter \"lo\" in query URL. Set it to \"www.17track.net\"", "hsNon": "There's no hash" } var success = false; function sendSMS(code, text){ var i = 0; for(i=0; i<user.length; i++){ MailApp.sendEmail(user[i], code, text); } } function digest2str(digest){ var str = ''; var i = 0; for (i=0; i<digest.length; i++) { byte = digest[i]; if (byte < 0) byte += 256; byteStr = byte.toString(16); if (byteStr.length == 1) byteStr = '0'+byteStr; str += byteStr; } return str; } function checkStatus(){ var i = 0; for(i=0; i<num.length; i++){ hashstr = num[i][0]+"{EDFCE98B-1CE6-4D87-8C4A-870D140B62BA}0{EDFCE98B-1CE6-4D87-8C4A-870D140B62BA}www.17track.net"; dig = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, hashstr); hs = digest2str(dig); var response = UrlFetchApp.fetch("http://s1.17track.net/Rest/HandlerTrackPost.ashx?lo=www.17track.net&num="+num[i][0]+"&hs="+hs); UserProperties.setProperty("q", response.getContentText()); var result = Utilities.jsonParse(response.getContentText().replace(/^\((.*)\)$/, "$1")); var code = num[i][1] var sendstring = ""; if(result["ret"] == 1){ if(result["dat"]["f"] == "0"){ sendstring += "Track code not found"; }else{ success = true; } }else{ sendstring += errors[result["msg"]] ? errors[result["msg"]] : "Please, leave comment on habrahabr, error message: "+result["msg"]; } if(success){ if(UserProperties.getProperty(num[i][0]) != result["dat"]["z"]["b"]){ sendstring += result["dat"]["z"]["b"]; sendSMS(code, sendstring); UserProperties.setProperty(num[i][0], result["dat"]["z"]["b"]); success = false; } }else{ sendSMS(code, sendstring); } } }
      
      







フラグとして、このステータスの通知があったかどうか、最後のステータスの日付が使用されていること、ユーザープロパティに保存され、毎回比較されることのみを予約します。



API ID、電話番号、追跡番号/ハッシュペアをコードに置き換えることは残ります。 次に、このスクリプトの定期的な実行を構成する必要があります。 これを行うには、「リソース」->「現在のプロジェクトのトリガー」に進み、「トリガーの追加」をクリックして、イメージと似顔絵を構成します(独自のスパンを選択できます)。





結果は、ステータスの変化を検出すると、携帯電話で次のようなメッセージになります。





選択肢、修正、最適化に関する質問や提案を受け付けています。



PS:不明な点に感謝します(または、見つけられなかっただけですか?)招待のhabrayuzer。



UPD:

  1. 機能の変更:パッケージ(トラックコードの代わりに表示)に自分の名前の割り当てを追加し、エラーのキャッチ(エラーが不明な場合、そのコードはSMSで送信されます。ここで、PMまたはskype / twitter、プロファイルIDでお知らせください) )
  2. 「内部」の変更 :サービス応答処理は、RegExp松葉杖ではなく、通常のJSONとして実行されます。


olパラメータをリクエストから(「www.17track.net」ではなく)「 17track.net 」に変更すると、何らかの理由でハッシュに関するエラーが発生します。 彼らは奇妙な、これらの中国人です。

ハッシュを生成するときに、ドメインも使用されることが判明しました。



UPD2:

(ロシア語の)メールが突然ロシア語で結果を生成し始めたためスクリプトが壊れました(最近では英語のみで書かれ、 EMSはロシア語でステータスを書き込みます(その結果、1つのメッセージに収まりません)。リソースを違法に使用する)



UPD3:

これで、スクリプトに挿入する既製のコードを生成するページができました。 すべてz0rgに感謝します



UPD4:

ハッシュはスクリプトによって生成されます。



UPD5:

ステータスがラテン語の場合、Google翻訳は音訳付きの空の文字列を返しました。 修正。



UPD6:

トラックコードが存在しないか、まだ登録されていない場合、スクリプトはエラーでクラッシュし、メッセージは届きません。 修正。

エラーメッセージをありがとう-= INFINITY = -from w3bsit3-dns.com



UPD7:

存在コードのよりエレガントな検証、テキスト内のノベルティのステータスの確認( Dudkaのおかげで日付が与えられないこともあります)、音訳の問題の修正(ステータステキストに複数の文がある場合、ベラルーシとカカワジャズメールのおかげで最初の文のみをピックアップできました )。



UPD8:

電子メール警告バージョン(電子メール@ sms-gatesを含む)



UPD9:

更新された17trackで動作するようにスクリプトを修正しました。指摘してくれたロケットに感謝します。



All Articles