前置き
@marogoma 様の記事
slackで「投稿ルールが守られない問題」を自作のスラッシュコマンドで解決する(設定編)
slackで「投稿ルールが守られない問題」を自作のスラッシュコマンドで解決する(GASコード解説編)
を見た時、小さい会社で業務効率化大臣(自称)としてGAS周り(とSlackもちょっと)の連携に燃える私は
こ、こんなことも出来るんや…!!はよ導入せな!!!!
とめちゃくちゃワクワクしたのですが、ふと弊社の備品購入申請チャンネルを見てみると割とルール守られてて(人数が少ないので)そんなに必要ない気がしたので、自分的に必要な場面を考えてみました。
そこで思い起こしたのがSlackのリマインダー機能。
私は自分のDMをTodoリストとして使ってるのもあり、割とリマインダーも使っているのですが、
日付指定をするときに妙に色々入れ方があって、しかも英語圏仕様の入力規則のため感覚的に入れて認識されないことが多く絶妙に使いづらい。
あと投稿後のオプションでも一応登録も出来ますが、「明日」とか「1時間ごと」とかで物凄い大雑把で使い物にならなくないですか。
先の記事の応用でこれが解決できそうな気がしたのでやってみました。
実際の画面
こちらが生成されるダイアログ。
曜日や毎日などの繰り返し指定と、日付で単発指定が出来ます。(例は単発)
そして「生成」ボタンを押すとbotがリマインダー用のメッセージを作ってくれるので
あとはこれを投稿すればOKです!手動でね…
やりたかったことと無理だったこと
まず理想は
「誰に」「いつ」「何を」リマインドするかを簡単に指定して、「登録」ボタン一発でリマインダ登録!!
でしたが、今回色々やってSlackAPIの基礎の無さにより一旦保留にしたのが以下の仕様です
①リマインド先を選んで他人やチャンネルにも送れるようにしたい。できれば自動補完のある入力欄で
入力欄を選択形式にするとき、そのワークスペースのチャンネルとDM全てを動的に取得して検索まで出来るconversations
という理想的なプロパティがあるにも関わらず、取得されるのがチャンネルIDで、そこからどうチャンネル名を取得すればいいか分からず挫折
まぁ基本は自分メモ用なので、text形式で基本の値をme
にしました…
②ダイアログの投稿ボタン一発でリマインダ登録まで完了
いや投稿文章の頭に「/remind」ってつければ行けるっしょよゆーよゆーと思ってたら、そのままメッセージとして投稿されましたね…
なのでこの記事は「簡単リマインダー」ではなく「簡単リマインダー文生成」となってます。
要するにbotで文章つくるからコピペして自分で再投稿しろよ!という…力及ばず申し訳ありません。
しかし先の記事のおかげでSlackAPIの可能性にも目覚めたため、これからそちらも勉強して行く中で上記も実装出来たらなと思います。(本音:コメント欄で教えて貰えるとありがたいですとても)
実際のコード
長いのでこちらはGithubに載せました。
@marogoma 様のコードを適宜改変して作ったので、コメントアウトとかも割とそのままです
https://gist.github.com/tama441/5582941d975ed3303d55f9f8b7ccc65e
カスタマイズした部分
最終的なコードを見てみると、結局のところ全チャンネルで使用できるようにチャンネル判定の部分を削ったくらいな気もします。
途中は入力欄のAttributesを追加して色々やろうとしてたんですが、そもそもSlackAPIを根本的に理解してないため小難しい改変は無理!と気付いたので…
多少工夫した点としては、
日付をフォーマットできるGASメソッドUtilities.formatDate()
を使用して
ダイアログ作成時は当日の日付を初期値にして
Utilities.formatDate(new Date(), 'JST', "yyyy/MM/dd")
Slackに飛ばすときは同じ方法で英語圏形式の日付順に直したところかな
Utilities.formatDate(new Date(s.date), 'JST', "MM/dd/yyyy") || "";
こんな感じで「繰り返しの指定(毎日/毎週など)」をした後に「ピンポイントの日時指定」を並べた場合、後者は無視されるので、
初期値に設定したに当日の日付は使わない場合も消す必要はありません。
個人的にかなり便利になりました
参考にさせてもらった記事、物凄く丁寧で分かりやすく、とてもありがたいです。(謝辞)