LINEにメッセージが届いたら指定のメアドに通知する(その2)

はじめに

  • 先日ポストした『LINEにメッセージが届いたら指定のメアドに通知する』のその2となります。
  • LINE → IFTTT → Webhooks → Zapier → Gmail、の流れになります。
    前回は、LINE → IFTTT → Gmail、でした。
    Google から、『IFTTTとGmailの連携やめるよ』メールが届いたため、更新します。
  • 本TipsはAndroid専用です。
    iPhoneの場合、現物で試したわけではないのですが、Macがあれば次の方法で行けると思います。
    PushBulletのMac版が公開、iOSの通知をMacで受信可能&クリップボードも同期が可能に
  • 普通に検索で引っかかる、『メールが来たらLINEに通知』とは逆の、『LINEが来たらメールする』機能の実現です。
  • 動作タイミングは各構成要素のご機嫌次第です。
    通知が数時間遅延する、或いは全く届かない場合があります。
    あくまで、『無いよりはまし』程度の扱いにてお願いします。

今回の実装

LINE NEWS からメッセージが届いたら、設定したメールアドレスに通知する例を記します。最初は『LINE NEWS』で試したあと、実際に検知したい友達名に変更して下さい(IFTTT設定の9番と17番)。
本作業はWindows10なPC上で行いました。

Zapier側の設定

  1. Zapier にログイン
  2. 右上の、Make a Zap! をクリック
  3. Search hundreds of apps…webhooks と入力し、選択された Webhooks by Zapier をクリック
  4. Catch Hook をクリック
  5. Save + Continue をクリック
  6. リンク用のURLが表示されるので、コピーボタンを押して、URLをコピー、別に記録しておく
  7. 管理者権限の PowerShell 窓を開いて、
    Invoke-RestMethod -Uri "先程のURL" -Method Post -Body ( @{"value1"="LINE NEWS"} | ConvertTo-Json) -ContentType 'application/json'
    を実行
  8. 数秒待って、Ok, I did this をクリック
  9. Hook A と表示されたら、Continue をクリック
  10. Add a Step をクリック
  11. Action/Search をクリック
  12. Gmail を選択
  13. Send Email をクリック
  14. Save + Continue をクリック
  15. 使用する Gmail アカウントを選択して、Test をクリック、Success となったら、Save + Continue をクリック
  16. To 欄に、宛先のメアドを入力
  17. Subject 欄に、通知メールの題名を適当に入力
  18. Body 欄で、右側の+をクリック、value1 を選択、『から連絡がありました』と入力
  19. Continue をクリック
  20. テスト画面になるので、Send Test to Gmail をクリック
  21. 設定した通知先にメールが届いたら、Finish をクリック
  22. YOUR ZAP IS ON となっていれば、完了

IFTTT側の設定

  1. IFTTT にログイン
  2. My Applet に移動
  3. Applets タブを選択
  4. New Applet をクリック
  5. this をクリック
  6. Search services 欄に android device と入力し、選択されたサービスボタンをクリック
  7. Choose triggerNotification received from a specific app ボタンをクリック
  8. App nameLINE と入力
  9. Filter by notification keyword に『LINE NEWS』と入力
  10. Create trigger をクリック
  11. that をクリック
  12. Choose action service 欄に webhooks と入力し、選択されたサービスボタンをクリック
  13. Make a web request をクリック
  14. URL 欄に、先程コピーした Webhooks のURLをペースト
  15. MethodPOST を選択
  16. Content Typeapplication/json を選択
  17. Body 欄に
    {"value1":"LINE NEWS"}
    と入力
  18. Create action をクリック
  19. Review and finish 画面で、If Notification… の欄を、適当な名前に変更
  20. Finish をクリック

※Zapier の Gmail設定画面(Edit Template)で、+が表示されている各フィールドには、IFTTT から投げ付ける json の値が使えます。


2019.03.26
iPhone版についての記述を追加
2019.05.29
引っ掛ける友達名についての説明を更新

Office365サービスのIPアドレス確認(変更監視)について

はじめに

セキュリティ機器等にO365サービスのIPアドレスを登録する時の確認方法が Microsoft公式ページ にて公開されています。
今回、Win10なPCとIFTTTとWebhookとGmailを使い、当該IPアドレスの変更を検知して通知メールを飛ばすようにしてみました。
※IFTTTとWebhookとGmailの登録及び連携は済んでいるものとします
※以下、常時ログインしているユーザ名を『foo』とします

IFTTTの設定

  1. 公式ページ内のサンプルスクリプトを取り込み、適当に保存します。
    例:C:\Users\foo\Documents\Office365IPCheck.ps1

  2. PowerShell から上記スクリプトを実行します。

  3. 上記スクリプトの実行結果
    C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
    を開いて、一行目の文字列をメモっておきます。
    これが後程必要となる ClientRequestId となります。

  4. IFTTTで新規アプレットを作成します。
    this には『Webhooks』を選択
    Event Name には『トリガー名(半角ANKで)』を入力
    that には『Gmail(Send an email)』を選択
    To address には『通知先メアド』を入力
    Body には次の内容を
    What: {{EventName}}<br>
    When: {{OccurredAt}}<br>
    Old Version: {{Value1}}<br>
    New Version: {{Value2}}<br>
    <a href="https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId">https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId</a>
    Attachment URL には次の内容を
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
    記入します。
  5. アプレットを保存します。

PowerShellスクリプトの変更

  1. IFTTT 上の Webhooks のページにある『Documentation』をクリックし、『Your key is:』の値をメモします。

  2. PowerShellスクリプトの最後の方の、『# TODO』行と『}』行の間に、次の行を追加します。
    Invoke-RestMethod -Uri "https://maker.ifttt.com/trigger/上で決めたトリガー名/with/key/先程メモったキーの値" -Method Post -Body ( @{"value1"="$lastVersion";"value2"=$version.latest} | ConvertTo-Json) -ContentType 'application/json'
  3. PowerShellスクリプトを保存します。

監視タスクの追加

  1. 監視タスク実行時に窓が表示されるのを防ぐために、キック用スクリプトを次のような内容で作成します。
    例:C:\Users\foo\Documents\task-scheduler.js
    wsShell = WScript.createObject("WScript.Shell");
    retCode = wsShell.Run("\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -File \"" + WScript.Arguments.Item(0)+"\"",0,true);
    WScript.Quit(retCode);
  2. タスクスケジューラで監視タスクを作成します。
    • トリガータイミングは適当に(毎時とか毎日とか毎週とか)
    • 操作→プログラムの開始
    • プログラム名には、『task-scheduler.js』を入力
    • 引数には、PowerShellスクリプト名をダブルクォートで囲って設定
      例:”C:\Users\foo\Documents\Office365IPCheck.ps1″
    • 開始オプションに、PowerShellスクリプトの保管場所を指定
      例:C:\Users\foo\Documents\
  3. 監視タスクを保存します。

動作テスト

  1. PowerShellスクリプトの実行結果ファイル
    C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
    を削除します。
    本ファイルを削除することにより、PowerShellスクリプトの実行時に『IPアドレスが更新された』と判断されます。

  2. タスクスケジューラで設定したタイミングでメール通知が届けば成功です。

2019.03.22追記:本日、GmailとIFTTTの連携を停止する通知がGoogleから届きました。
いまのところどうしようもないみたいなので、回避策を記します。

Zapierでの実装について

  1. Zapierのアカウントを作成し、ログインを済ませておきます
  2. 次のURLに移動します
    https://zapier.com/apps/gmail/integrations/webhook
  3. “Send an email from Gmail when a webhook is received” の『Try It』をクリックします
  4. “Catch Hook”画面で『Continue』をクリックします
  5. URLが表示されるのでコピーしておき、『Ok, I did this』をクリックします
  6. ps1スクリプトを変更します
    1. Invoke-RestMethod -Uri での飛び先をIFTTTからZapierの先程コピーしたURLに変更
    2. スクリプトをキック
    3. Zapier画面で待機
      問題無ければ、数分後には5.の画面に『Continue』ボタンが現れるので、クリックします
  7. Gmail / Send Email 画面で『Continue』をクリックします
  8. Select Gmail Account画面で(連携未設定の場合は『Connect an Account』を押して連携設定後)アカウントを選択し、『Continue』をクリックします
  9. Set up Gmail Email画面で、To:やFrom:、Subject:等を設定します
  10. Bodyは次のように書きます
    Old Version:
    New Version:
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
  11. 『Old Version:』の右をクリックして、画面右側の『+』をクリック、『Value1』を選択します
    Old Version: の右に『Step1:値』が挿入されます
  12. 『New Version:』の右をクリックして、画面右側の『+』をクリック、『Value2』を選択します
    Old Version: の右に『Step2:値』が挿入されます
  13. Attachmentには次の値を投入します
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
  14. 入れ終わったら、『Continue』をクリックします
  15. テストボタンが出るので、クリックします
  16. 無事にメールが届いたら、『Finish』をクリックします

2019.04.15追記
バージョンチェックファイルが存在するのに、Test-Pathにて『存在しない』扱いになるケースがあるようです。waitを挟んでも、複数回チェックしても、駄目な時は駄目な感じ。実害は無いとは思うのですが、回避策等について現在確認中です。


2019.05.07追記
IPアドレスは基本的に月末に更新されるようです。
このときにバージョンチェックファイルendpoints_clientid_latestversion.txtの更新がうまく行かない場合は、次の図の①の部分を見直してみて下さい。
スケジュールのプロパティログインアカウントのパスワードを変更したりすると、ここの部分で引っかかったりもするようです。
テスト時の実行アカウントと、スケジュール実行アカウントの権限の差が原因の場合もあります。

ファイル所有者名の確認
dir /q バージョンチェックファイル名

ここで駄目な場合は、②の部分を触るとうまく行くようになる場合があります。
それでも駄目な場合は、スケジュール自体を作り直してみて下さい。