Slack APIの確認ダイアログ
Slackメッセージ内のボタンクリックをトリガーとしてダイアログを表示させる場合。
ダイアログ内でユーザーのインプットが必要なときは dialog.open
が必要。
Interacting with users through dialogs | Slack
シンプルに OK
, Cancel
などの2択のボタンをダイアログで置く場合は button
の confirm
フィールドで実装できる。
Reference: Composition objects | Slack
// main/function.gs const blockKit = [ { "type": "section", "text": { "type": "mrkdwn", "text": "ボタン横のテキスト" }, "accessory": { "type": "button", "text": { "type": "plain_text", "text": "ボタンのラベルテキスト", "emoji": true }, "value": "BUTTON CLICKED", "action_id": "button-action-id", "confirm": { "title": { "type": "plain_text", "text": "確認ダイアログのタイトルテキスト" }, "text": { "type": "mrkdwn", "text": "確認ダイアログの本文テキスト" }, "confirm": { "type": "plain_text", "text": "OK" }, "deny": { "type": "plain_text", "text": "Cancel" } } } } ] postSlack(blockKit)
// post/slack.gs const postSlack = (blocks) => { const blockKit = blocks const endpoint = 'https://slack.com/api/chat.postMessage' const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + SLACK_AUTH_TOKEN } const payload = { channel: SLACK_CHANNEL_ID, blocks: blockKit, unfurl_links: false, unfurl_media: false, } const params = { method : 'post', headers: headers, payload : JSON.stringify(payload), } UrlFetchApp.fetch(endpoint, params) }
GASで受け取る場合、 doPost()
の値にOKを押したときのみ BUTTON CLICKED
が入ってくる。
// event/doPost.gs const doPost = (event) => { const parameter = event.parameter const data = parameter.payload const json = JSON.parse(decodeURIComponent(data)) const value = json.actions[0].value console.log(value) // BUTTON CLICKED }