GASからSlack AppのBlock Kitでメッセージを送る & ボタンの値を受け取る
Block Kit を使ってGAS → Slackにメッセージを送り、Slackで押下したボタンの値を受け取る。 ※ WebhookではなくSlack APIを使用する場合。
attachments
でもリッチなメッセージは送れるが、SlackはBlock Kit Builderなどを利用した blocks
押しらしい。
メッセージを送る
function sendToSlack() { const endpoint = 'https://slack.com/api/chat.postMessage' const token = 'MY-TOKEN' const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token } const blockKit = [ { "type": "section", "text": { "type": "mrkdwn", "text": "Block Kitのデモです。" } }, { "type": "section", "text": { "type": "mrkdwn", "text": "ボタンの説明テキストが入ります。" }, "accessory": { "type": "button", "text": { "type": "plain_text", "text": "ボタンのラベルテキスト", "emoji": true }, "value": "MY-VALUE-01", "action_id": "button-action" } } ] const payload = { channel: 'MY-CHANNEL-NAME', blocks: blockKit, } const params = { method : 'post', headers: headers, payload : JSON.stringify(payload), } UrlFetchApp.fetch(endpoint, params) }
payload が text
の場合は、 token
を payload に格納していけたが、 blocks
の場合にはheaderに渡してあげないと成功しなかった。
押下したボタンの値を受け取る
function doPost(e) { const parameter = e.parameter const data = parameter.payload const json = JSON.parse(decodeURIComponent(data)) const value = json.actions[0].value console.log(value) // 'MY-VALUE-01' }
doPost()
のGASは変更する度にデプロイし、デプロイされたGASのエンドポイントを
Slack Appページ > Features > Interactivity & Shortcuts の Request URL
に都度設定する必要がある。