はじめに
この記事は [LIFULLその2 Advent Calendar 2019](LIFULLその2 Advent Calendar 2019) の12日目の記事です。
Qiita初投稿!
こよなく愛するGoogleAppsScript(GAS)とChatworkAPIについて書きます。
GoogleAppsScript(GAS)について
GoogleAppsはもちろんのこと、他のサービスとも連携して
特にGoogleAppsであるスプレッドシートやフォーム、カレンダーなどとの連携では抜群の威力を発揮します。
Chatwork APIについて
Chatworkは、Chatwork株式会社が提供するクラウド型ビジネスチャットツールであり、
Chatwork APIは外部のプログラムから簡単に使用できたり、Chatworkで発生したイベントを外部のプログラムに提供することができるAPIのことです。
GoogleAppsScript(GAS) X Chatwork API
ここからが本編です。
上記それぞれについてはググると色々出てくるので、そちらを参考にしてください。
ここでは触れません。
Chatwork社公式ではありませんが、
GAS上で簡単にChatwork APIを使用するためのChatWorkClientライブラリなるものがあります。
cw-shibuya/chatwork-client-gas
※ライブラリの導入方法についても、他に紹介記事がありますので、調べてください。
ただ、他の記事では、ほとんどが「sendMessage」について書かれているものが多いです。
私も、普段メッセージを送る機会しかなかったので「sendMessage」しか使ってこなかったのですが、
今回メッセージを送る以外の用途が生まれ、そういえはライブラリで何が使えるんだっけと調べていく中で
色々と発見したので、そちらを共有します。
ChatWorkClientライブラリで用意されているもの
Githubで公開されている client.jsを見ていただくとわかるのですが、以下のメソッドが用意されていました。
メソッド名 | 用途 |
---|---|
getRooms | 自分のルーム一覧を取得 |
sendMessage | メッセージ送信 |
sendMessageToMyChat | マイチャットへのメッセージを送信 |
getMessages | 指定したチャットのメッセージを取得 |
sendTask | タスク追加 |
getRoomTasks | 指定したチャットのタスク一覧を取得 |
getMyTasks | 自分のタスク一覧を取得 |
どういうパラメータを渡せばよいかは、Github上のソースを見た方が早いです。 | |
目的が上記で収まる場合は上記メソッドを使えばよいのですが、それ以外は目的ごとのメソッドが用意されていません。 | |
代わりに、「post」「put」「get」3つのメソッドがあり、 | |
これらは、それぞれの操作に応じてエンドポイントとパラメータを自由に指定できるため、 | |
実は「post」「put」「get」の3つのメソッドさえ使えば、 | |
Chatwork APIのマニュアルに書かれているものすべて使用できるのです。 | |
ただ、用意されているメソッドを用いた方が読みやすいため、 | |
極力、目的別メソッドで事足りる場合は使う方をお勧めします。 |
実践
今回、
「特定のチャットルームにいる全員に対してタスク登録をする」
というものを作ります。
※既にChatWorkClientライブラリを組み込んでいるという前提です
工程は以下です。
- 対象のルーム内にいるアカウントを取得
- 1のアカウントIDを配列に入れる
- タスク登録用のメソッドを作成し、実行する
1. 対象のルーム内にいるアカウントを取得
var apiToken = '123';
var client = ChatWorkClient.factory({token: apiToken});
まずはChatworkAPI呼び出し用のオブジェクト「client」を生成し、
var roomId = '123';
var method = "/rooms/" + roomId + "/members";
var params = {};
var membersInfo = client.get(method, params);
といったように、使用したいAPIのエンドポイントとパラメータを指定します。
今回は GET /rooms/{room_id}/members を使用したいため、{room_id}のところに取得したいチャットルームIDを指定します。
なお、全ルーム取得したい場合は
var rooms = client.getRooms();
もしくは
var rooms = client.get("/rooms", {});
で取得します。
(後者は動作確認していないです。ごめんなさい)
2. 1のアカウントIDを配列に入れる
次に、
GET /rooms/{room_id}/members のレスポンス例を見ていただくとわかるのですが、
個々のアカウントが配列に格納され、
それぞれの配列の中にある「account_id」にアカウントごとのアカウントIDが返ってきます。
本来はこれを、タスク登録用のメソッド POST /rooms/{room_id}/tasks で送るには
アカウントIDをカンマ区切りの文字列で指定する必要があるのですが、
ChatWorkClientライブラリで用意されている「sendTask」内部で
「to_id_list」をカンマ区切りの文字列に変換する処理が入っていますので、
配列に格納し、それをそのまま渡します。
membersId = [];
for(var i=0; i<membersInfo.length; i++) {
membersId.push(membersInfo[i]['account_id']);
}
3. タスク登録用のメソッドを作成し、実行する
あとは最後にタスク登録するだけです。
limitにはUnix timeで指定する必要があるため、そこだけ注意です。
limitパラメータに時間も指定したUnix timeを指定すれば、時間指定ありの期限設定も可です。
var date = new Date(2019, 11, 25); // 月は0開始のため、12月は"11"を指定
var unixTimestamp = Math.round( date.getTime() / 1000 );
client.sendTask({
room_id : roomId,
body : "クリスマスまでにやってね",
to_id_list: membersId,
limit : unixTimestamp
});
最後に
今回は「get」「sendTask」を使った事例を紹介しましたが、
用意されているメソッドを駆使すればChatworkAPIで紹介されている機能全て使えますので、
色々試してみてください。