1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GAS】Slackで匿名Botを実装する

Posted at

はじめに

最近記事の投稿を始めたTutuです。
今回は社内で誰でも遠慮なく発言できる場所を作りたいと思って匿名Botを以下を参考に作成しました。
実装に関してはほぼこちらのコードを参考にさせていただきました。なので今回は解説をしていこうと思います。
→[gasで作ったslackbotにDMすると匿名化されてチャンネルに投稿されるのを作った]
(https://qiita.com/09rd193/items/59c2e1a1c62a15e83847)

概要としては匿名BotDMを投稿するとincoming webhookを利用して特定のChannnelにBotを通して投稿されるというものです。

Slack Appの設定

bot eventsについて

message.im
→BotのDMに投稿されたときのイベント

message.channels
→Botに関するメッセージがチャンネルに投稿された時のイベント

app_mention
→Botに関連するメッセージのイベント(message.channels、message.groups、message.mpim)

スクリーンショット 2020-09-13 22.04.50.png

実装

※今回は簡易的な説明のみ行いたいと思います

イベントリクエストの信頼性を確認

if(postData.type == 'url_verification') {
    return ContentService.createTextOutput(postData.challenge);
}

今回はBotへのDMのみ反応するためimを設定


    postData.event.channel_type == 'im'

postData.event.textから実際の投稿を取得できるのでそれをjsonとしてmessageDataに格納
→参考:Slack API Document

  var slackUrl = 'Incoming WebhooksのURL';
  var message = postData.event.text;
  var messageData = {
    'text': message
  };

後はPOST時のオプションを設定してincoming webhookPOSTするだけ!

 var options = {
    'method'  : 'POST',
    'headers' : {'Content-type': 'application/json'},
    'payload' : JSON.stringify(messageData)
  };

  return UrlFetchApp.fetch(slackUrl, options); 

以下全コード

anonymous.js
 
function doPost(e) {
  var postData = JSON.parse(e.postData.getDataAsString());
  console.log(postData.type);
  if(postData.type == 'url_verification') {
    return ContentService.createTextOutput(postData.challenge);
  } else if (
    postData.event.channel_type == 'im'
  ) {
    return reply(postData);
  }

  return 0;
}

function reply(postData){
  var slackUrl = 'Incoming WebhooksのURL';
  var message = postData.event.text;
  var messageData = {
    'text': message
  };

  var options = {
    'method'  : 'POST',
    'headers' : {'Content-type': 'application/json'},
    'payload' : JSON.stringify(messageData)
  };

  return UrlFetchApp.fetch(slackUrl, options); 
}

結果

DMに投稿
スクリーンショット 2020-09-13 22.18.40.png
bot.png

AnonymousとしてChannnelに投稿されました!

最後に

今回はこの記事のほぼ流用だったので、今後は匿名投稿時のマニュアルをスラッシュコマンドで設定するなど、実際に社内で使いやすいようにするためにアレンジしていけたらと思います!

参考文献

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?