GASを使ってSlackにメンション付きで投稿したい
はじめに
Google Apps Script から Slack API を呼んでメンション付きで特定のチャンネルに投稿してみたのでまとめます。
Slack API
Incoming Webhooks の URL を取得
まずは、 Incoming Webhooks の設定をする必要があります。
このページに従って進めれば簡単につくれます。
api.slack.com
具体的には、まず、まだ持っていないならここから Slack App を作ります。
続いて、 Incoming Webhooks を Activate します。offからonにするだけ。
最後に、Add New Webhook to Workspace を押して、投稿したいチャンネルを選んだら、Webhook用のURLが用意されます。
メンション付きで投稿してみる
丁寧にサンプルも用意されているので試しにSlackに投稿してみます。
成功すれば、curlの返却としては ok
が返ってきて、確かにslackに投稿されているのが確認できます。
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
続いて、 @ohshige
というユーザにメンション付きで送ってみます。
確かに投稿はできていますが、メンションとしては有効になっていないことがわかります。
curl -X POST -H 'Content-type: application/json' --data '{"text":"@ohshige\nHello, World!"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
メンション付きで投稿するためには、まずそのユーザのメンバーIDというものが必要になります。
そのユーザのプロフィールの「...」を選択すると「メンバーIDをコピー」という箇所があるので、そこからコピーすると9文字程度の文字列が取得できます。
メンバーIDが「ABCXXXXXX」だったとすると、メンションするためには <@ABCXXXXXX>
と記述する必要があります。
これで、メンション付きで投稿できます。
curl -X POST -H 'Content-type: application/json' --data '{"text":"<@ABCXXXXXX>\nHello, World!"}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Google Apps Script から Slack に投稿する
Google Apps Script の詳しい使い方は省きますが、関数内で UrlFetchApp.fetch()
を使うだけです。
以下のようにコードを記述します。
function doGet(e) { var data = { 'text': '<@ABCXXXXXX>\nHello, World!' }; var options = { 'method' : 'post', 'contentType': 'application/json', 'payload' : JSON.stringify(data) }; UrlFetchApp.fetch('https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX', options); }
あとは、公開して、払い出されたURLにGETでリクエストすればSlackにメンション付きで投稿されます。
おわりに
今はもうエンジニアでなくてもGASやSlack Botなどを使って簡単に効率化できるようになっていて、良い時代だと思います。
使えるものはどんどん使って便利な日々にしていきたいです。