Beeeat’s log

Beeeat’s log

プログラミングで出くわした知識やツール、日常生活、働き方その他色々なことをメモしていくブログ

「Slack App」と GAS で Slack にメッセージを投稿する

最近,「Slack App」と GAS で自分の日常生活を便利にするアプリを作っております.そのため現在は両者を勉強中で,その時に得た知見をまとめようと思います.

今回はメッセージを投稿するという基本となる機能についてまとめます.今までは「Incoming Webhook」をよく利用していましたが,チャンネル毎に Token を生成しないといけないため.設定次第では色々なチャンネルに投稿できる Bot の Token を利用できる Slack App を利用します.

やり方

完成イメージ

特定のチャンネルにユーザ名と絵文字をカスタマイズした状態でメッセージを送ります.こんな感じでメッセージが投稿されるイメージです.

f:id:bake0937:20200323232711p:plain

Slack App の作成

Slack API のページから Slack App を作ってみましょう. api.slack.com

「Create New App」を押して,App Name と Slack のワークスペースを選択します.投稿したいワークスペースを選択することで作成することができます.

f:id:bake0937:20200323231412p:plain

作成後,「App Home 」にある「App Display Name」 をの「Edit」を押し,「Display Name」と「Default username」を追加しましょう.この設定をしておかないとワークスペースに Slack App をインストールすることができないため注意です.

f:id:bake0937:20200327093936p:plain

GAS を書く前に Slack App の設定変更

コードを書く前にchat.postMessageの仕様を確認してみましょう.

api.slack.com

何やら「autoship」という気になる項目があるので見てみます.

f:id:bake0937:20200323130034p:plain

どうやらユーザ名とアイコンを設定したい場合はchat:writeに加えて,chat:write.customizeという「Scope」を追加する必要があることがわかります.

f:id:bake0937:20200323130438p:plain

というわけで,Scope を設定しましょう

f:id:bake0937:20200323125715p:plain

Scope を設定したら,「Install App for Workspace」でワークスペースにインストールし, Bot の Token を生成しましょう f:id:bake0937:20200323223956p:plain

ワークスペースにインストールすると「Bot User OAuth Access Token」が表示されるので,コピーします.

f:id:bake0937:20200323224538p:plain

GAS を書いてみる

Google Drive にアクセスし,GAS のエディタ画面を開きましょう.今回は以下のような関数を作ります.

function postMessage() {

  const url = "https://slack.com/api/chat.postMessage";

  // 投稿するチャンネルやメッセージ内容を入れる
  const payload = {
    "token" : "Bot User OAuth Access Token",
    "channel" : "random",
    "text" : "Slack App のテストだよ",
    "username": "Slack App",
    "icon_emoji": ":slack:"
  };

  const params = {
    "method" : "post",
    "payload" : payload
  };

  // Slackに投稿
  UrlFetchApp.fetch(url, params);
}

動かしてみる

投稿するチャンネルにインストールした Salck app を追加します.

f:id:bake0937:20200323224955p:plain

実行する関数にpostMessageを選択し,「▶」で実行します.

f:id:bake0937:20200323225259p:plain

Slack を見てみると設定した内容でメッセージが投稿されていることがわかります.

f:id:bake0937:20200323232711p:plain

まとめと所感

今回は「Slack App」と GAS で Slack にメッセージを投稿する方法についてまとめてみました.「Incoming Webhook」を使ったやり方の場合,従来のようなやり方で上手くいくと思いますが,今回ポイントになったのは作成した Slack App に chat:write.customize という Scope を追加するところかなと思いました.

Slack は日々頻繁にアップデートしているので,Slack のアプリを作るときは公式のドキュメントを必ずチェックしなら進めるのがベストですね.

GAS は clasp という CLI ツールを使うと TypeScript が使えるようなので,作っているアプリの機能の実装が揃ってきたら勉強がてら挑戦します 💪💪