3
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 1 year has passed since last update.

Slackに「あとで読む」と書いたらリマインドしてくれるbotを作った

Posted at

image-20221218094732659.png

背景

私は仲間内だけのSlackワークスペースや自分のtimesに「あとでよむ」という言葉と一緒に記事のURLを貼るような使い方をすることがときどきあります。

image-20221218085949273.png

「あとでよむ」といいつつもしばらくしたら忘れかねないのでリマインドしてくれるやつがほしいなーと思っていて、Slack botの勉強を兼ねて作ってみました。

作ったもの

「あとでよむ」などの特定のワードが入ったメッセージがあると起動します

:eyes:のemojiを付けさせることで動作したことがわかるようにしています)

image-20221218085906903.png

1時間後にリマインドのメッセージを送ります

(内部的にはイベント検知時に予約投稿しています)

image-20221218094732659.png

「読んだ!」ボタンを押すと「お疲れ様でした!」と返します

image-20221218100232619.png
image-20221218100150907.png

「また1時間後にリマインド」ボタンを押すと再度1時間後にリマインドします

image-20221218100818318.png
image-20221218100832433.png

中身の概要

Slack Events API を使うとSlackでなにか動きがあるたびに通知してくれるので、これを利用しています。POSTメソッドを受け取るAPIを自分で用意してURLをSlackに登録することでイベントの情報を受け取っています。

emojiによるリアクションはreactions.addメソッドを、リマインドはchat.scheduleMessageメソッドを使用して実現しています。

メッセージ上のボタンに対するユーザーの操作に応じてAPIにPOSTリクエストが送られてくるため、API側でリクエストボディを見て対応する処理を行います(参考:Creating interactive messages

具体的には、

  • 「読んだ!」ボタンが押されたらchat.updateでメッセージを書き換える
  • 「また1時間後にリマインド」ボタンが押されたらchat.updateした上でもう一度chat.scheduleMessageでリマインドを設定する

としています。

中身の詳細

serverless frameworkを使ってAWS Lambda + API Gatewayの構成でAPIを作成しています

詳細はリポジトリをご覧ください

現状の課題

リマインドメッセージは全員に見えるものなので、リマインドを設定した人以外の人にボタンが押される可能性があります…

とりあえず一旦そのままで性善説を信じて運用しています(/remindがbotから設定できるといいんですが)

3
1
2

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?