LoginSignup
9
8

More than 3 years have passed since last update.

GASでChatworkを自由自在に操る方法

Last updated at Posted at 2019-12-11

はじめに

この記事は LIFULLその2 Advent Calendar 2019 の12日目の記事です。
Qiita初投稿!:kissing_smiling_eyes:
こよなく愛する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. 対象のルーム内にいるアカウントを取得
2. 1のアカウントIDを配列に入れる
3. タスク登録用のメソッドを作成し、実行する

これだけです。
2の工程が必要なのは、タスクを登録する際に、アカウント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で紹介されている機能全て使えますので、
色々試してみてください。

9
8
0

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
9
8