弊社では社内コミュニケーションのメインツールとしてチャットワークを採用しています。コロナ禍でのリモートワーク推進もあり、メンバーとのやり取りはほぼチャットワークです。
そんな中メンバーからの要望で、チャットワークに予約送信機能が欲しい!という要望がありました。
デフォルトではチャットワークには予約送信機能がないため、チャットワークAPIとGooogle Apps Script(GAS)を利用してオリジナルの予約送信機能を作ってみました。
チャットワークは追加機能やカスタム機能がそこまで多くはないので、できないと思っている方も少なくないはず。
「Chatworkの予約送信ほしかった」というかた、是非参考にしていただければ幸いです。
※関連記事:リモートワーク歴9年タガタメのDXを支えているツール15選をご紹介
目次
必要なもの
チャットワーク予約送信を設定するのに、必要なものを事前にお伝えしておきます。
- チャットワークAPIトークン
- Google Apps Script
- スプレッドシート
チャットワークAPIトークンとは
まず最初に必要なのがチャットワークAPIトークンです。
チャットワークがオフィシャルで提供しているAPIを利用するためにトークン(認証用の文字列)発行が必要です。
公式ヘルプページにある「APIトークン発行ページ」から申請できます。
注意事項としてチャットワーク管理者以外のかたが申請した場合は、管理者承認が必要となります。
承認されれば発行は即時です。承認作業自体は非常に簡単ですが、管理者のかたに話を通すのが正直今回の作業のなかで一番手間かもしれません…(弊社は「そうなの?わかった、承認するね。」ってスムーズでした。)
承認後APIトークンが発行されるので、後ほどコピーするので以後コピーしやすいようにしておいてください。
Google Apps Script(GAS)とは
Google Apps Script(GAS)とはGoogleが開発したスクリプト言語でJSがもとになっています。サーバーなど用意する必要がなく非常にお手軽かつGoogleサービスとの連携に優れているので業務改善にはもってこいです。
GASと同じくGoogleが提供しているスプレッドシートを利用してチャットワークへの予約送信機能を作って、チャットワークとのつなぎ込みを先程発行したチャットワークAPIを利用する形となります。
作成方法
1.下記リンクからスプレッドシートをコピーする
流れとしてはスプレッドシートを作成して、GASで開発となるのですが、スプレッドシートに関してはそのまま利用できるスプレッドシートの雛形を用意しました。
上記リンクからスプレッドシートをコピーして利用ください。
2.スプレッドシートの「ツール」からスクリプトエディタを開く
3.左メニュー「ライブラリ」から「Chatwork Client for Google Apps Script」を追加
- ライブラリをクリック
- スクリプトIDの欄に下記を追加
1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav - バージョン・IDは特に変更必要なし。「追加」をクリック
4.下記のコードを貼り付け
functionmyFunction() {
// スプレットシート読み込み
constss = SpreadsheetApp.getActiveSpreadsheet();
constsheet = ssgetSheetByName'シート1';//シート名を変更した場合は修正してください。
constlastRow = sheet.getLastRow()
const token = "chatworkから発行されたAPIトークンを入力してください";
// ChatworkAPIクライント作成
constclient = ChatWorkClient.factory({token: token});
// 実行日時
consttoday = newDate();
// スプレットシートに記載がある分だけ繰り返す
for(vari = 3; i <= lastRow; i++) {
constroom_id = sheet.getRange(i, 2).getValue(); // ルームID
constmessage = sheet.getRange(i, 3).getValue(); // 投稿内容
constreservation_date = newDate(sheet.getRange(i, 4).getValue()); // 投稿日
const push_date = newDate();
// E列が空白かつ、D列に記載されている日付が現時刻より前だった場合に送信
ifsheet.getRange(i, 5).isBlank()&&reservation_date < push_date){
client.sendMessage({
room_id: room_id,
body: message
});
// 実行日時の記録
sheet.getRange(i, 5).setValue(push_date);
;}
;}
}
なお、8行目のconst token = “**”と記載されている場所に発行されたチャットワークAPIトークンを記入してください。
5.トリガーの設定
1.左側のアイコンから、時計のアイコンをクリック
2.「トリガーを追加」をクリック
3.必要な設定をおこない、「保存」をクリック
- イベントのソースを選択を「時間主導型」
- 時間ベースのトリガーのタイプを選択を「分ベースのタイマー」
- 時間の間隔を選択(分)「1分おき」
- 「保存」をクリック
保存をクリックした後にアプリの承認画面に遷移する場合があります。
その場合は「許可」をクリックしてください。
トリガー設定画面に自動的に遷移して1行追加されていたら完了です。
GAS側の設定としては以上となります。
次にスプレッドシートの仕様をご説明します。
スプレッドシートの解説
スクリプトの脚注にも記載していますが、E列が空白かつ、D列に記載されている日付が現時刻より前だった場合にメッセージが送信されます。
ルームIDの確認方法
メッセージの送信先をB列のルームIDに指定する必要があります。
ルームIDの確認方法としては、WEB版のチャットワークにアクセスしメッセージを送りたいルームのURLを見れば確認できます。
なお、B列に記載するIDにはURLのrid以降の数字のみとなります。
またAPIトークンを発行されたユーザーが参加していないルームにはメッセージを送ることができません。
上記2点ご注意ください。
投稿内容について
チャットワークの投稿ではメンションや引用・返信など専用のボタンが用意されていますが、スプレッドシートを利用して予約送信をする場合はそれぞれの装飾を意味する文字列として記載してあげる必要があります。
メンション
[To:****]○○さん
※*の部分にはユーザーIDを記入します。ユーザーIDの確認方法としては実際にチャットワークでメンションを打つ際の入力画面を確認するのが一番手っ取り早いと思います。
ルームにいる全員にメンション
[toall]
その他の装飾に関しては下記ヘルプページを参考ください。
あとは、D列にメッセージを送りたい日時を記載すれば完了です。
GASのトリガーが指定した時間ごとにスプレッドシートを確認して、D列に記入した日時を過ぎたタイミングでメッセージを指定したルームに送信します。
最後に
以上がGASを利用してChatWorkで予約送信機能を作る方法のご紹介となります。
弊社は20時以降は原則社内メッセージのやり取りを禁止しているため、予約送信機能が欲しいという声があがったという経緯があります。
配布用のチャットワーク予約送信用スプレッドシートと上記記事を参考に是非ご活用ください。
このコンテンツを読んだ方が一緒に読まれているコンテンツです。ぜひこちらも一読ください。
Googleビジネスプロフィール(旧マイビジネス)活用で売上倍増。意識した2つのポイント
仕事における「タイピングヒエラルキー」とは?ブラインドタッチは極めなくてOK