2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LookerStudioのレポートを自動でSlackに投稿する

Last updated at Posted at 2024-02-02

LookerStudioで作ったレポートをSlackに自動投稿する方法です。
このようにレポートのURLと表紙の画像を投稿します。
スクリーンショット 2024-02-02 214228.png

手順

  1. Slackでトークンを取得し、アプリにインストールする
  2. LookerStudioでメールの設定をする
  3. GASでコードを実行する

Slackでトークンを取得し、アプリにインストールする

まず
https://api.slack.com/apps
からログインして、Create an appをクリック
スクリーンショット 2024-01-19 161105.png
From scratchをクリック
スクリーンショット 2024-01-19 161211.png
任意のAppNameと使用するワークスペースを選択し、CreateAppをクリック
スクリーンショット 2024-01-19 161300.png
左メニューの「OAuth & Permissions」をクリック
スクリーンショット 2024-01-19 161633.png
「Scopes」Bot Token Scopesの設定をする。
Add an OAuth Scopeをクリック
スクリーンショット 2024-01-19 161804.png
files:writeをクリック
スクリーンショット 2024-01-19 163352.png
ページ上部に戻り、「Install to Workspace」をクリック
スクリーンショット 2024-01-20 111127.png
許可するをクリック
スクリーンショット 2024-01-20 111651.png
Bot User OAuth Tokenが生成されていることを確認する
スクリーンショット 2024-02-02 215553.png
投稿したいチャンネルにAppを追加する
チャンネルのインテグレーションの中からアプリを追加するをクリック
スクリーンショット 2024-01-22 143234.png
作成したアプリを検索し、追加をクリック
スクリーンショット 2024-02-02 222051.png
この時チャンネルのチャンネル情報の一番下にあるチャンネルIDを確認しておく
スクリーンショット 2024-02-02 221737.png

LookerStudioでメールの設定をする

LookerStudioのレポートを開き、右上の共有から、配信のスケジュールをクリック
スクリーンショット 2024-01-20 235829.png
レポートの送信先を入力する
今回は毎月1日に一か月分のレポートを送りたいので下記のように設定し、保存をクリック

  • 開始時刻:YYYY/MM/01 ←月初めにする
  • リピート:カスタム
  • 頻度:1か月1日
    スクリーンショット 2024-02-02 221449.png

GASでコードを実行する

SlackのchannelIDとtokenをスクリプトプロパティに設定する
GASの左メニューからプロジェクトの設定をクリック
スクリーンショット 2024-01-24 161247.png
画面下部のスクリプトプロパティからSLACK_CHANNEL_IDとSLACK_TOKENの値を追加し、保存する
スクリーンショット 2024-02-02 221048.png
コードを書いていく
実際に実行するコードはこちら


function myFunction() {
   
    // 投稿したいレポートのページのURLを指定
    const report_url = 'https://lookerstudio.google.com/reporting/レポートID/page/ページID'

    //  投稿する日の日付を取得
    const today = new Date()
    const day = today.getDate()
    const month = today.toLocaleString('en-US', {month: 'short'})
    const year = today.getFullYear()
    const formattedDate = `${month} ${day},${year}`

    // メールの件名形式 レポートタイトル - MMM DD,YYYY
    const email_subject = 'Report-monthly - ' + formattedDate

    // レポートのURL https://lookerstudio.google.com/reporting/レポートID/page/ページID
    const report_id = report_url.split('/reporting/')[1].split('/page/')[0]
    const page_id = report_url.split('/page/')[1].split('/')[0]

    // 画像の形式Report_{report_id}_page_{page_id}.jpg
    const target_file = 'Report_' + report_id + '_page_' + page_id + '.jpg'
    const looker_studio_image = getLookerStudioImage(email_subject, target_file)

    const token = PropertiesService.getScriptProperties().getProperty('SLACK_TOKEN')
    const channel = PropertiesService.getScriptProperties().getProperty('SLACK_CHANNEL_ID')

    // Slackに送る画像のタイトル
    const image_title = month + year + 'Report-monthly'
    postSlackImage(token, channel, report_url, image_title, looker_studio_image)
  
  // Gmailから添付ファイルを取得する
  function getLookerStudioImage(email_subject, target_file){
    const query = `subject:${email_subject} from:looker-studio-noreply@google.com`
    const thread = GmailApp.search(query)[0]
    const message = GmailApp.getMessagesForThread(thread)[0]
    const attachments = message.getAttachments()
    for (const attachment of attachments){
      if (attachment.getName() == target_file){
        return attachment
      }
    }
  }

  // 添付ファイルをSlackにポストする
  function postSlackImage(token, channel, report_url, image_title, looker_studio_image){
    // エンドポイント
    const url = 'https://slack.com/api/files.upload'
    const headers = {
      'contentType': 'application/json',
      'authorization': `Bearer ${token}`
    }
    const payload = {
      'channels': channel,
      'initial_comment': report_url,
      'title': image_title,
      'file': looker_studio_image,
      'filetype': 'jpg'
    }
    const options = {
      'method': 'post',
      'headers': headers,
      'payload': payload
    }
    const res = UrlFetchApp.fetch(url, options)
    Logger.log(res)
    return res
  }

}

Gmailの方にメールが来ていれば実行ボタンをクリックするとSlackに投稿される
スクリーンショット 2024-01-29 112838.png

最初にお見せした画像のように投稿されていれば成功です
スクリーンショット 2024-02-02 214228.png

今回は毎月1日に自動送信したいので、GASでもトリガーを設定する
左メニューからトリガーをクリック
スクリーンショット 2024-01-23 161118.png
トリガーを追加をクリック
スクリーンショット 2024-01-23 161249.png
下記のように設定する
時刻はGmailに送られてくる1時間後くらいに設定しておく
スクリーンショット 2024-01-25 102429.png

以上です。
これで毎月何もしなくても自動更新された前月のレポートが自動でSlackに投稿されます。

参考
https://qiita.com/SoySoySoyB/items/223e3cf14754e6e7fa31
https://qiita.com/mikene_koko/items/3861df2b2a529f03a5ef
https://zenn.dev/kou_pg_0131/articles/slack-api-post-message

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?