LookerStudioで作ったレポートをSlackに自動投稿する方法です。
このようにレポートのURLと表紙の画像を投稿します。
手順
- Slackでトークンを取得し、アプリにインストールする
- LookerStudioでメールの設定をする
- GASでコードを実行する
Slackでトークンを取得し、アプリにインストールする
まず
https://api.slack.com/apps
からログインして、Create an appをクリック
From scratchをクリック
任意のAppNameと使用するワークスペースを選択し、CreateAppをクリック
左メニューの「OAuth & Permissions」をクリック
「Scopes」Bot Token Scopesの設定をする。
Add an OAuth Scopeをクリック
files:writeをクリック
ページ上部に戻り、「Install to Workspace」をクリック
許可するをクリック
Bot User OAuth Tokenが生成されていることを確認する
投稿したいチャンネルにAppを追加する
チャンネルのインテグレーションの中からアプリを追加するをクリック
作成したアプリを検索し、追加をクリック
この時チャンネルのチャンネル情報の一番下にあるチャンネルIDを確認しておく
LookerStudioでメールの設定をする
LookerStudioのレポートを開き、右上の共有から、配信のスケジュールをクリック
レポートの送信先を入力する
今回は毎月1日に一か月分のレポートを送りたいので下記のように設定し、保存をクリック
GASでコードを実行する
SlackのchannelIDとtokenをスクリプトプロパティに設定する
GASの左メニューからプロジェクトの設定をクリック
画面下部のスクリプトプロパティからSLACK_CHANNEL_IDとSLACK_TOKENの値を追加し、保存する
コードを書いていく
実際に実行するコードはこちら
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に投稿される
今回は毎月1日に自動送信したいので、GASでもトリガーを設定する
左メニューからトリガーをクリック
トリガーを追加をクリック
下記のように設定する
時刻はGmailに送られてくる1時間後くらいに設定しておく
以上です。
これで毎月何もしなくても自動更新された前月のレポートが自動で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