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

LookerStudioで作ったレポートをSlackに自動投稿する方法です。
このようにレポートのURLと表紙の画像を投稿します。
![スクリーンショット 2024-02-02 214228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/707d25f3-293a-ccb9-c1a3-30c2616eef47.png)


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

# Slackでトークンを取得し、アプリにインストールする
まず
https://api.slack.com/apps
からログインして、Create an appをクリック
![スクリーンショット 2024-01-19 161105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/dd40f12d-cd69-b082-bc6e-4ee8047901b2.png)
From scratchをクリック
![スクリーンショット 2024-01-19 161211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/a63561dc-6360-8192-c315-0d7ee53ddfeb.png)
任意のAppNameと使用するワークスペースを選択し、CreateAppをクリック
![スクリーンショット 2024-01-19 161300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/a3c72229-53b2-88d3-3b46-08014031918b.png)
左メニューの「OAuth & Permissions」をクリック
![スクリーンショット 2024-01-19 161633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/4bea5b75-89f6-f087-d70f-645df85b685c.png)
「Scopes」Bot Token Scopesの設定をする。
Add an OAuth Scopeをクリック
![スクリーンショット 2024-01-19 161804.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/679f5127-0409-ee87-ea8a-0ad49dff72ad.png)
files:writeをクリック
![スクリーンショット 2024-01-19 163352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/4db714e3-90f6-6aed-170c-8bf47d96c0f3.png)
ページ上部に戻り、「Install to Workspace」をクリック
![スクリーンショット 2024-01-20 111127.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/0bd08f09-9aed-8697-2fc7-3179ec339cd3.png)
許可するをクリック
![スクリーンショット 2024-01-20 111651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/1dacc63b-c8ca-25c6-3990-b8800c7fd8c5.png)
Bot User OAuth Tokenが生成されていることを確認する
![スクリーンショット 2024-02-02 215553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/cd4e4fdd-28de-a379-a86c-03699b83bbad.png)
投稿したいチャンネルにAppを追加する
チャンネルのインテグレーションの中からアプリを追加するをクリック
![スクリーンショット 2024-01-22 143234.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/dc52d6ed-3048-9334-4cb6-6e5bb409af63.png)
作成したアプリを検索し、追加をクリック
![スクリーンショット 2024-02-02 222051.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/cf82ca0f-6ac1-5b75-2523-a5980ed58181.png)
この時チャンネルのチャンネル情報の一番下にあるチャンネルIDを確認しておく
![スクリーンショット 2024-02-02 221737.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/cff16fe0-ca6e-c805-3f84-25396c134af5.png)


# LookerStudioでメールの設定をする
LookerStudioのレポートを開き、右上の共有から、配信のスケジュールをクリック
![スクリーンショット 2024-01-20 235829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/7b02e1da-8563-3996-654f-3f6a6f611c35.png)
レポートの送信先を入力する
今回は毎月１日に一か月分のレポートを送りたいので下記のように設定し、保存をクリック
* 開始時刻：YYYY/MM/01　←月初めにする
* リピート：カスタム
* 頻度：1か月1日
![スクリーンショット 2024-02-02 221449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/11927557-d514-c3a1-10c6-fd4d69a7dc4d.png)

# GASでコードを実行する
SlackのchannelIDとtokenをスクリプトプロパティに設定する
GASの左メニューからプロジェクトの設定をクリック
![スクリーンショット 2024-01-24 161247.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/b71779de-778a-0d5f-ebff-26769716d091.png)
画面下部のスクリプトプロパティからSLACK_CHANNEL_IDとSLACK_TOKENの値を追加し、保存する
![スクリーンショット 2024-02-02 221048.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/f3eb158e-e198-3164-27ad-41403886d0f1.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/af97220a-9cbb-36a0-10d1-136981d574f4.png)

最初にお見せした画像のように投稿されていれば成功です
![スクリーンショット 2024-02-02 214228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/f5dbb6a0-63ac-7795-d3a8-80a2adda4c72.png)


今回は毎月１日に自動送信したいので、GASでもトリガーを設定する
左メニューからトリガーをクリック
![スクリーンショット 2024-01-23 161118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/c04c4cdd-e513-f5d0-7017-3e4dc440292a.png)
トリガーを追加をクリック
![スクリーンショット 2024-01-23 161249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/66d66923-9746-acb2-dbdb-c7df2d9e5b96.png)
下記のように設定する
時刻はGmailに送られてくる１時間後くらいに設定しておく
![スクリーンショット 2024-01-25 102429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512649/9c521c93-5a1b-7f35-03fb-017ff7dda5e3.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