超簡単にSlackで匿名の意見を投稿できるようにする


はじめに

会社やチームで活動していると、メンバーが匿名で意見を言える場がほしかったりします。
Slackを使って簡単に匿名で意見を投稿できる仕組みを作れたので、今回はそれを紹介したいと思います。

完成イメージはこんな感じ。

Botを追加する

まずはSlackにBotを追加します。
下記のリンクをクリックするとBotの新規作成ができます。
https://my.slack.com/services/new/bot

適当にanonymousとでも名前をつけて、「Add bot integration」のボタンをクリック。

「API Token」が表示されるので、これをコピーしてください。

これでSlackにBotが作られました。

Botkitをインストール

今回はSlack公式のBotフレームワークBotkitを使います。
(※BotkitはNode.js上で動くので、先にNode.jsをインストールしておいてください)

インストールしたいサーバーで、下記コマンドを実行します。

cd インストールしたいディレクトリ
git clone [email protected]:howdyai/botkit.git
cd ./botkit
npm install

インストールはこれだけです。超簡単。

プログラムを追加する

次に匿名で投稿できるような機能を追加します。

投稿にはSlackのidが必要なので、URLから取得します。
投稿先によってそれぞれ取得方法が異なるので注意してください。

# 投稿先がユーザーの場合
https://slack.com/api/users.list?token=さっきのAPI_Token
# 投稿先がprivateチャンネルの場合
https://slack.com/api/groups.list?token=さっきのAPI_Token
# 投稿先がpublicチャンネルの場合
https://slack.com/api/channels.list?token=さっきのAPI_Token

URLを実行するとjsonが表示されるので、投稿先のid(ユーザーの場合はuser_id)を探してください。
idが分かったら、先ほど取得したBotkitのディレクトリ直下にあるslack_bot.jsに下記のコードを追加します。

slack_bot.js
controller.on('direct_message',function(bot,message) {
  bot.reply(message,"匿名で投稿しました:mailbox_with_mail:");

  // 投稿先がユーザーの場合
  bot.startPrivateConversation({user: "さっきのuser_id"}, function(response, convo){
    convo.say(message);
  })

  // 投稿先がチャンネルの場合
  bot.startConversation({channel: "さっきのid"}, function(response, convo){
    convo.say(message);
  })
});

投稿先がユーザーかチャンネルかで書き方が若干違うので、そこだけ注意してください。

Botを起動する

あとはBotを起動するだけです。
コマンドで以下を実行してください。

token=さっきのAPI_Token node slack_bot.js

文字列がずらずらと表示されて、Botがアクティブになれば起動しています。
コマンドを止めたらBotも非アクティブになります。

では匿名で投稿したい内容をanonymousに話しかけてみましょう。

設定したチャンネルにはBotからの発言として届くので、誰がこのメッセージを送ったかは分かりません。

おわりに

人間関係上言えないことやネガティブな意見も、Botを使えば簡単に拾うことができるかもしれません(すみません、実はまだ導入してませんw)。

また、BotkitはこれまでのBotより簡単に起動できる印象でした。
Redisとかも使えるようなので、乗り換えるのはアリだと思います。