2017年1月28日

[GAS]Google Apps ScriptでTwitter,LINE,Slackにメール着信を知らせる方法




注意事項

他人のGoogle Apps Scriptライブラリ利用に際して

他人のライブラリを利用する場合、ライブラリのソースを必ず確認してください。
トークンなどの重要なデータをライブラリを渡す場合、データをライブラリ作成者に盗聴される恐れがあります。
ソースの確認方法は以下。

How can I view the source of a google apps script Library






GASでメール着信を検知する方法


コード量がそれなりなので、以下を参考に実装してください。

[GAS]Gmailの受信時に特定の処理を実行するライブラリ

記事中にライブラリを追加する手順が載っていますが、現在そのライブラリは公開されていないようです。
自身でコードを記述してください。

また、トリガについても自身で設定する必要があります。
現在のGASの仕様では、最小で1分毎のポーリングによるトリガしか作成できません。
従ってこの方法ではメール着信日時から最大で1分、着信通知が遅延する事になります。

Twitterにメッセージ送信する方法


自分宛にダイレクトメッセージを送信する事ができます。

手順


  1. 送信先のユーザーidを調べる
  2. OAuth認証を行う
  3. Twitter Applicationのパーミッション設定を変更
  4. ダイレクトメッセージを送信


・送信先のユーザーidを調べる

Twitterのユーザーidを調べる方法はググればでてきます。
この値を間違えると他人にダイレクトメッセージを送信してしまうため、注意が必要です。
自分自身のアカウントのユーザーidを調べておいてください。


・OAuth認証と送信処理

こちらもコード量がそれなりなので、まずは以下を参照してください。

[GAS]Google Apps Scriptでツイートを投稿する
 
記事にはダイレクトメッセージ送信関数がないので、後で実装を追加します。

なお、OAuth認証するアカウントと送信先のアカウントは別にしておいてください。
同じアカウント、つまり自分から自分へのダイレクトメッセージを送る事はできるのですが、Twitterアプリが着信通知をしてくれない可能性があります。
また、このために複数アカウントを保持する必要がでてきますが、場合によってはTwitter規約違反となる恐れがあるので注意が必要です。


・Twitter Applicationのパーミッション設定を変更

説明が前後しますが、ダイレクトメッセージを送るにはパーミッション設定を変更する必要があります。
OAuth認証よりも前に、パーミッション変更とキーの再生成を済ませておいてください。


Twitter Application ManagementのPermissionsで、アクセルレベルを Read, Write and Access direct messagesに変更しておきます。


・ダイレクトメッセージを送信する

認証が済んだらダイレクトメッセージを送る事ができます。
以下のコードを実装に追加し、関数を呼び出します。
コード:



LINEにメッセージ送信する方法

LINE Notifyを使って通知を送る事ができます。

手順

  1. パーソナルアクセストークンを取得
  2. 通知を送る

・パーソナルアクセストークンを取得

取得方法は以下。

コマンドラインから LINE にメッセージを送れる LINE Notify


・通知を送る

コード:

参考

APIドキュメント



Slackにメッセージ送信する方法


自分だけへの通知なので、ダイレクトメッセージとして送ります。

手順

  1. テストトークンを取得
  2. 送信先のユーザーidを取得
  3. ダイレクトメッセージを送信


・テストトークンを取得

以下にアクセスしてトークンを取得してください。
Tokens for Testing and Development


・送信先のユーザーidを取得

ダイレクトメッセージを送信するには、送信先のユーザーidが必要です。
APIを呼び出し、ログに記録されたレスポンスからユーザーの"id"を見つけてください。
間違えて他人のidを抽出しないようにしてください。他人にメール着信通知を送ってしまいます。

コード:


・ダイレクトメッセージを送信

コード:


参考

APIドキュメント(users.list):https://api.slack.com/methods/users.list
APIドキュメント(chat.postMessage):https://api.slack.com/methods/chat.postMessage


※有料プランならSlackのメールアドレスへ転送すればチャネル通知が可能。
 つまり上記の実装に頼る必要がない(2017.03.12追記)


Gmailアプリによる通知で良いのでは

そもそもの発端がこれなのですが、純正の(Android)Gmailアプリは着信通知をしてくれない事があったのです。
現在のバージョンではどうなのか知りません。長らくK-9 Mailを使っているので。
後述しますが、Gmail→GAS→SNSを経由した着信通知よりGMailのそれの方が遅いというのもおかしな話です。
単純に、Gmailアプリの通知機能はあまり優秀でないのです。



IFTTTに連携させれば良いのでは


SMSに送った場合


以前はIFTTTを利用してスマホのSMSに着信通知を送ってました。しかし現在は月10通以下しか送れないという制限があるため、月の上旬も終わらないうちにリミットに達してしまい、着信が来なくなってしまいます。
また遅延もひどく、最大で4時間以上という事もありました。
これでは着信通知として使えません。


Twitterに送った場合


上がIFTTT、下がGASによる、同じメールの着信通知です(時間表示は何分前の着信かを表している)。
IFTTTの通知は10分ほど遅れて通知されているのが分かります。



また現在のIFTTTの仕様では、自分から自分にしかダイレクトメッセージを送る事ができません。
そして自分自身にダイレクトメッセージを送った場合、AndroidのTwitterアプリでは着信通知がされませんでした。
どうやら、他者からのダイレクトメッセージでないと通知しないのがTwitterアプリの仕様のようです。
こちらも着信通知としては使えそうにないですね。


情報漏えいの可能性


IFTTTをGmailの着信通知をさせるには、IFTTTにメール読取りの権限を与える必要がありますが、メール本文は勿論、過去の受信メールも含め全てのメールが読み取られてしまうのは相当なリスクを伴います。
IFTTTに全く悪意がないとしても、そのリスクを完全に排除する事はできないでしょう。



キャリアメールに転送すれば良いのでは

SMSで着信通知してくれて、その通知速度も速いのであればそれがベストだと思います。
しかし格安SIMにはキャリアメールがないので、それ以外のベストな方法を探すより他ありません。



Android端末で3アプリの着信を比較した結果

着信通知の実装方法が分かったので、実際にAndroid端末で待ち受けたときの各アプリの動作の違いを調べてみました。

遅延

3つのサービスともほぼ同時に着信通知がされました。
タイミングが揃ったのはAndroidのプッシュ通知システムに依存しているせいかもしれませんが、いずれにせよ甲乙のつけようがありません。

因みに純正Gmailアプリは上記のサービスよりも遅れて通知してきました。純正なのに。
プッシュ通知ではなくポーリングでもやってるんでしょうか。


バッテリ消費


どのアプリも起動しないまま、24時間放置した場合:



LINEだけ1%消費、TwitterとSlackは表示されませんでした。


続いて、3つのアプリとも起動させてバックグランドタスクに回してから48時間放置:


LINEだけバッテリ消費が激しい事がわかります。
操作どころか表示もしていないのに一体何をしてるんでしょうか。

データ使用量

3アプリとも起動しない状態で24時間放置:


LINE:233KB
Twitter:90.33KB
Slack:測定不能
という結果になりました。

この測定で使用したLINE,Twitter,Slackそれぞれのアカウントでは友達追加など一切しておらず、LINEについては連絡先へのアクセス権限も与えていません。
勿論、操作もメッセージ送信もしていないので、プッシュ通知の待受け以外に通信をする必要性が思い当たりません。
何もしていないのにバッテリもパケットも消費するLINE。少々行儀の悪いアプリという事でしょうか。

3アプリともバックグラウンドタスクにいる状態で24時間放置:


LINE:2.10MB
Twitter:90.35KB
Slack:30.37KB
という結果になりました。

LINEのデータ使用量はSlackの約70倍です。ここまで極端に差が出るとは予想外でした。
なお、測定の間にメール着信が2件あったため、多少のデータ通信は発生しています。



まとめ

緊急地震速報並にTwitterの通知速度が速い事は知っていましたが、LINEやSlackも同様に通知が速い事が分かりました。

ただ、LINEはバッテリとデータ通信を激しく消費する事を知ってしまいました。これではインストールすら躊躇ってしまいますね。

逆にSlackの省エネぶりはとにかく優秀。Gmailの同期をオフにしてSlackに着信通知させてやれば、バッテリもデータ通信の消費も抑えられるのではないしょうか。



………

余談ですが、Amazonやヨドバシの配達開始通知なんてのは、メールではなくいきなりSNSで通知してくれても良いように思います。実際そうなる日も遠くないのかもしれません。


0 件のコメント :