LoginSignup
3
1

More than 1 year has passed since last update.

匿名投稿Slack Appの作り方

Last updated at Posted at 2021-07-07

概要

会社のSlackで匿名投稿App(bot)を作りました。
aaa.png
作った主な理由は、スペシャリストチームへの質問や社内勉強会の質疑応答などで、実名だと質問しづらい場合もあるのでは?と思ったからです。(意見を言いにくい関係性、無知を晒すのがこわいなど)

Appが入力された通り発言するだけの簡単なアプリですが、デプロイまでの軌跡をメモとして残します。

ソースコード

App作成手順

  1. Slack APIのページで"Create a new app"します。
  2. Slack APIの作成したAppのメニューで"OAuth & Permissions"を選び、Bot User OAuth Tokenをメモします。7.で使います。また、"Add an OAuth Scope"でアプリのアクセス権にchat:writecommandsを追加します。
  3. ローカルでNode.jsを使ってSlack Appのスクリプトを生成します。
    • ルートディレクトリにpackage.jsonを置き、npm install
    • ./resources/apiに投稿用のslack_anonymous.jsと削除用のslack_anonymous_delete.jsの2つを置きます。スラッシュコマンドとの連携は8.で行います。
    • npm run devでビルドすると、実行可能スクリプトが./dist/apiに書き出されます。
    • 5.で登場するNetlifyにビルドさせるための設定ファイルNetlify.tomlも作ってルートに置きます。
  4. GitHubにスクリプトをコミットします。
  5. サーバーレスバックエンドのNetlifyに登録し、サイトを開設します。このとき"New site from Git"を選択し、GitHubと連携します。
  6. Netlifyの作成したサイトのメニューで"Site settings"→"Functions"を選び、"Functions directory"にdist/apiを登録します。
    • これでGitHubのmasterの./dist/apiがEndPointに自動デプロイされるようになります。
  7. Netlifyの作成したサイトのメニューで"Site settings"→"Build & deploy"を選び、"Environment"に先ほどメモしたBot User OAuth Tokenを環境変数SLACK_BOT_OAUTH_TOKENとして登録します。
    • これがJS側process.env.SLACK_BOT_OAUTH_TOKENとして渡され、Slackの認証に使われます。
  8. Slack APIに戻り、"Slash Commands"でスラッシュコマンド/anonymous/anonymous-deleteを登録します。
    • "Request URL"にはNetlifyのサイトのFunctionsから各スクリプトのEndPoint URLをコピーしてきます。

以上でAppは完成です。

スラッシュコマンドの使い方

匿名投稿したいチャンネルにAppを招待すれば、/anonymous/anonymous-deleteがコマンドとして使えるようになります。

/anonymous メッセージ →メッセージを匿名で投稿
/anonymous-delete https://myworkspace.slack.com/archives/C026QN2BSUQ/p1624499864003700 →該当の匿名メッセージを削除

苦労した点

投稿機能で、postMessageの引数のchannel(宛先)に/anonymousを打ったチャンネルを動的に指定したくて、どうすればよいか最初わからなかったのですが、色々試した結果body.channel_idで解決しました。

削除機能でも、やはりdeleteの引数に指定するchannelとtsをどう取得するかが課題でしたが、chat.deleteテストページで色々試して、URLを分解するやり方に気づきました。

https://myworkspace.slack.com/archives/C026QN2BSUQ/p1624499864003700
の場合はchannelはC026QN2BSUQ、tsは1624499864.003700

匿名投稿を導入して気づいたこと、決めたこと

  • Slackには誰が入力中かわかる機能があるので、別の場所で書いてコピペした方が良い(この時点でやや使いづらい…)
  • 返信スレッドでのカスタムスラッシュコマンドは現時点でSlack側が対応していない(JS側では考慮したのに…)
  • 悪用防止のため発言ログをバックエンドに出力しようか悩んだ
    • 結局、誰が発言したかは管理者も知らないべきだと考え、使い手の善意に委ねることにした
  • どんなチャンネルでも使っていいわけではない
    • 例えば給湯室の雑談やG&Nは、誰がどういう人か知れるきっかけなので匿名は適さない

参考にしたサイト

…は色々あったのですが、作成から記事執筆まで時間が経ちすぎて失念してしまいました。すみません。

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