slackのAPI chat.postMessage で投稿したメッセージのURLを取得するGAS - シンプルに暮らしたい情シスのブログ https://api.slack.com/methods/chat.postMessage でpostしたメッセージのURLが知りたかった。 レスポンスにメッセージのURLが入っていればいいのだがそうではないので、 https://api.slack.com/methods/chat.getPermalink で取得する リクエストに channel ID、メッセージのタイムスタンプが必要となる。 タイムスタンプは、postMessageのレスポンスに含まれる(ts) // SLACK_TOKENは、プロジェクトの設定 > スクリプトプロパティ で変更可能 const token = PropertiesService.getScriptProperties().getProperty('SLACK_TOKEN'); function postMessage(channelId, message) { const payload = { channel: channelId, blocks: [ { type: 'section', text: { type: 'mrkdwn', text: message, }, }, ], }; const options = { method: 'POST', contentType: 'application/json', headers: { Authorization: 'Bearer ' + token, }, muteHttpExceptions: true, payload: JSON.stringify(payload), }; try { const response = UrlFetchApp.fetch( 'https://slack.com/api/chat.postMessage', options ); return JSON.parse(response); } catch (e) { Logger.log(e); return false; } } function getMessageUrl(channelId, messageTimestamp) { const payload = { channel: channelId, message_ts: messageTimestamp, }; const options = { method: 'GET', contentType: 'application/x-www-form-urlencoded', headers: { Authorization: 'Bearer ' + token, }, muteHttpExceptions: true, payload: payload, }; try { const response = UrlFetchApp.fetch( 'https://slack.com/api/chat.getPermalink', options ); return JSON.parse(response); } catch (e) { Logger.log(e); return false; } } function main() { const channelId = 'XXXXX'; const postRes = postMessage(channelId, 'いえー'); if (!postRes.ok) { return; } const messageRes = getMessageUrl(channelId, postRes.ts); if (messageRes.ok) { const messageUrl = messageRes.permalink; console.log(messageUrl); } }