GoogleDataStudioレポートを「GAS+LINE Notify」でLINEに通知する方法

こんにちは、タクロウ(@takuro_109)です!

余命ダッシュボードをつくってLINEに通知する際、一目で見られるようにDataStudioレポートを画像で送りたかったのですが、妥協してリンクだけ送るようにしました。

余命ダッシュボードをつくってLINEに通知する

仕事は妥協せず、DataStudioレポートを、みんなが見やすいように画像でLINEかSlackに送るために、いろいろ調べてたら下記記事を参考に実現することができました。

参考 TableauレポートをGASでSlackに自動連携する方法Qiita

ついでに自分のDataStudioレポートも画像で送るように修正しました。DataStudioレポートを「GAS+LINE Notify」でLINEに通知する方法を紹介します!

概要

  1. GoogleDataStudioのメール配信機能を使って、自分のGmail宛にメールを配信する
  2. GoogleAppScriptを使ってメールの添付スナップショットを取得し、LINE NotifyでLINEに通知する

設定方法

GoogleDataStudioレポートのメール配信設定する

GoogleDataStudioにアクセスし、対象のレポートを開き、共有右横の▼から「メール配信をスケジュール」をクリックします。

メール配信時刻や頻度を設定し、「スケジュール」ボタンをクリックします。

LINE Notifyのトークンを発行する

LINE Notifyにアクセスし、「ログイン」をクリックします。

LINEアカウントログイン画面でログインすると以下画面に遷移します。右上の「マイページ」をクリックします。

マイページから「トークンを発行する」をクリックします。

トークン名と、通知を送信するトークルームを選択し、「発行する」をクリックします。

無事トークンが発行されました。発行されたトークンを「コピー」をクリックし、コピーします(GASコードの中で使います)。

GASファイルを作成する

Googleドライブにアクセスし、新規から「Google Apps Script」をクリックします。Google Apps Scriptがない場合は「アプリを追加」から追加します。

コードを入力する画面が表示されます。

下記コードを入力します。

function myFunction(){
  var message="[通知メッセージ]" ;
  var keyword="[Gメールを検索するキーワード]" ;
  sendMailImage(keyword, message);
}

function sendMailImage(keyword, smessage) {
  //Datastudioからの自動メール取得(条件に一致する最新のメールを一件取得)
  var Threads = GmailApp.search('from:"data-studio-noreply@google.com" subject:'+keyword, 0, 1);
  var messages = Threads[0].getMessages();
  var message = messages[messages.length-1];

  //自動メールから画像と日付を取得
  var attachments = message.getAttachments();
  var date = message.getDate();
  var time = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy年M月d日');
  var img = attachments[0]
  
  //LINE Notifyで送る内容を設定
  var sendmessage = smessage
  var blob = img.copyBlob()
  
  sendHttpPostImage(sendmessage,blob)
};

function sendHttpPostImage(message, blob){
  var token = ["[LINE Notifyのトークン]"];
  var formData = {
   'message' : message,
   'imageFile': blob
  }
  var options =
   {
     "method"  : "post",
     "payload" : formData,  // message, imageFile を formData としてPost
     "headers" : {"Authorization" : "Bearer "+ token}
   };

   UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
入力箇所
  • [通知メッセージ]:LINEに送るメッセージ
  • [Gメールを検索するキーワード]:Gメールを検索するキーワードでダッシュボード名を設定
  • [LINE Notifyのトークン]:上記で発行したトークン

▶︎実行ボタンをクリックしてLINEに通知されるか確認します。問題なければ実行トリガーを設定します。

GAS実行トリガーを設定する

編集から「現在のプロジェクトのトリガー」をクリックします。

トリガー一覧画面で、「トリガーを追加」をクリックします。

LINEに通知したいスケジュールを設定し、「保存」をクリックします。

以上で、設定は終了です。

さいごに

DataStudioレポートを画像として取得する方法に行きつくまでに試行錯誤しました。外部APIを使ってWEBサイトのスクリーンショットをとることを検討したのですが、Googleアカウントでのログインで上手くいきませんでした。GASとGmailは同じアカウントなので、この点をクリアできました。

DataStudioだけでなくTableauなど他のBIツールも、メールへの配信機能は備わっていることが多いので、メールの画像ファイルを取得し、チャットツールに送信する方法は応用範囲が広いと思います。

以上、お読みいただきありがとうございました。