概要
Slackでは、/remind hoge fuga piyo
でさくっと作れるリマインダ機能。
Chatworkには、それに類するものは現時点ではありません。
なので作ってみました。
コンセプト
エンジニアなら自前でbot作ればいいです。
非エンジニアでも設定できるようにしたいです。
というわけで、スプレッドシート上に設定を書けば動くようなものにしました。
実装環境
そんなわけで、スプレッドシート+GASです。
設定シート
- 実行形式は大きく分けて2つです。
- 日時を指定して1回だけ実行
- 曜日と時間を指定して繰り返し実行
- 発言者は、内部的に設定してあるAPIトークンに変換されます。
- チャットルームIDでなくチャットルーム名にして内部変換することも考えましたが、チャットルームIDにしました。
- ルーム名から変換だと、新しい部屋が増えるたびにエンジニアが設定しないといけない(発言者はそこまで頻繁には増えないでしょう多分)
- もしかしたら管理者のトークンだとgetRoomsで全部屋を取得できるのかもしれないけど、管理者じゃないし(´・ω・`)
- URLからチャットルームIDを抜き出すことは、誰でもできるとまでは言わないけど、資料示せばなんとかなるでしょ
- ルーム名から変換だと、新しい部屋が増えるたびにエンジニアが設定しないといけない(発言者はそこまで頻繁には増えないでしょう多分)
- いけてないとは思うのですが、重複送信を避けるための送信済みフラグを、シート内に持っています。
スクリプト仕様
概ねこんな感じで動きます。
- GASのトリガ機能により、毎分起動する
- 設定シートを読み込んで、発言すべきものがあったら発言する
- 発言タイミングはとりあえず、「設定日時が過去5分以内」とした
- 「毎分動作で過去1分以内」だけだと、取りこぼしや重複が起きそうな気がした
- 5分以内として取りこぼしを防いだ
- 送信済みフラグで重複送信を防いだ
- 「毎分動作で過去1分以内」だけだと、取りこぼしや重複が起きそうな気がした
- 発言タイミングはとりあえず、「設定日時が過去5分以内」とした
- 設定シートを読み込んで、発言すべきものがあったら発言する
- GASのトリガ機能により、毎日1回0時に起動する
- 送信済みフラグをクリアする
ソースコード
感想というか
GASデビュー作です。へんなとこがあったらご指摘頂けるとありがたいです。
謝辞
なんかごく当たり前のようにgetRoomsとか書いてましたが、Chatworkのライブラリはこちら使わせて頂きました。ありがとうございます。
https://github.com/cw-shibuya/chatwork-client-gas