LoginSignup
4
4

More than 3 years have passed since last update.

Slackで自分宛のmentionをGASを使って別チャンネルに転送してTODO化する試み

Posted at

Slackのチャンネルが乱立してて、どこで自分にメンション付きで依頼が来たのかわからなくなってしまうことがあったので、自分宛のメンションをまとめてTODOチャンネルに放り込むということをしてみようと思った。

作成フロー

 1. slackのbotを作る
 2. botにincoming webhooksを設定する
 3. GASを準備する
 4. botにパーミッション与える。Event Subscriptionを設定する。
 5. 様子を見る(きっとtodoチャンネルに転送されてるはず)

準備するもの

  • 転送したいSlackユーザのID
  • 転送先のSlackチャンネル&そのチャンネルのID
  • 転送先のSlackチャンネル用にSlackBot->incoming webhoos設定
  • GAS

GAS側ソースコード


function doPost(e) {
  var params = JSON.parse(e.postData.getDataAsString());
  var response = {};
  if(params.type == 'url_verification') {
    response = {'challenge':params.challenge};
    return ContentService.createTextOutput(response).setMimeType(ContentService.MimeType.JSON);
  } 

  var url = 'https://hooks.slack.com/services/aaaaaa/aaaaaaa/aaaaaaaa'; //<- incoming webhook url
  var text = params.event.text;
  var userPattern = 'SLACKUSERID'; //<- Slackの自分のID
  var ignoreChannel = 'CHANNELID' // <- 転送先のチャンネルID

  if (params.event.channel != ignoreChannel && text.match(userPattern)) {
    var params = {
      method: 'post',
      contentType: 'application/json',
      payload: '{"text":"'+ text +'"}'
    };

    UrlFetchApp.fetch(url, params);
  }
}

  • urlにincoming webhook urlを投入
  • userPatternにSlackの自分のID(ユーザ名じゃないので注意)
  • ignoreChannelに転送先チャンネルのID(これ設定しないと永久ループしてすんごいことになる)

これをウェブアプリケーションとして導入。

Slack側

細かいことは省略。
欲しいのは

  • bot本体
  • incoming webhooks
  • Event SubscriptionsのSubscribe to events on behalf of usersでmessage.channelsのパーミッションを与える

多分これだけでいけるはず。(色々いじってみたので足りてない部分あるかもしれない)

というわけで

  • botにチャンネル単位でパーミッションを与えるわけではなく、ワークスペースに対してパーミッションを与えるので、ちゃんとデータをフィルタリングしないと見たくもない内容が転送されることもあるかもしれない。。やっぱり大事な話はprivate channelにしないとどこでみられてるかわからないから怖いですね。
  • 転送内容が上記だとテキストだけなので、チャンネル名とかそういうのも転送してやることでもっと良くなるかも。
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4