🤖

GAS経由でSlackBotにスレッド返信で通知させる

2021/04/01に公開

TL;DR

  • GAS経由でSlackBotに通知させる時に、複数の内容をスレッドにしてポストさせたい
  • incoming webhook を使って通知すると、返信する投稿の thread_ts が取得できない
  • SlackAppのBotにして、chat.postMessage を使うとやりたい動作ができた

背景

  • Google App Script 経由で、SlackにPostしていたが、複数の内容をスレッドにして通知させたい
  • Slackの incoming webhook を使ってお手軽に通知を実装していたがやりかたが分からなかった

実装例

test()を実行すると、"テストだよ"をまず投稿して、その後返信として"スレッドだよ"が追加される
BOT_TOKENCHANNEL_ID はそれぞれの環境に合わせて変える必要がある

function test(){
  const thread_ts = postToSlack("テストだよ")
  postToSlack("スレッドだよ", thread_ts);
}
// slack に post する
function postToSlack(message, thread_ts=null) {
  var url = "https://slack.com/api/chat.postMessage";
  var payload = {
    "token" : `${BOT_TOKEN}`,
    "channel" : `${CHANNEL_ID}`,
    "text" : `${message}`
  };
  if(thread_ts){
    payload["thread_ts"] = thread_ts;
  }
  var params = {
    "method" : "post",
    "payload" : payload
  };
  // Slackに投稿する
  const response = UrlFetchApp.fetch(url, params);
  const dates = JSON.parse(response.getContentText('utf-8'));
  // thread_ts を返す
  return dates['ts'];
}

忘れがちなこと

  • 通知を出したい channel に app自身を追加すること

感想

incoming webhook で同じようなことができるやり方があれば教えて欲しい。
Slack的には、Appを使うことが推奨されていそうだけど

Discussion