GASでチャットワークAPIからルームIDを取得する方法(getRoomsメソッド)

2022年10月5日

Google Apps Sciript(GAS)にはチャットワークAPIを簡単に操作できるChatWorkClientライブラリが用意されていて、簡単にメッセージを投稿したりすることができます。

そこで、ChatWorkClientライブラリに用意されたgetRoomsメソッドを使ってチャットワークのルームIDを一覧取得する方法を解説します。

チャットワークはAPIで操作可能

チャットワークは日本企業が開発・提供しているチャットツールです。

チャットツールとしてはSlackやTeamsが有名ですが、チャットワークはフリーランスや個人事業主、中小企業などでよく利用されています。

そんな国産チャットツールであるチャットワークにもSlackAPIのようにChatworkAPIが用意されています。

チャットワーク(Chatwork)にはGASやPythonなどのプログラムで自動投稿やメッセージ取得できるChatworkAPIが用意

チャットワークAPIを活用することで、グループチャットや特定ユーザー宛にメッセージを送るプログラムを作成できます。

さらにチャットワークの色々なルームに投稿されたメッセージやタスク情報をAPI経由で取得可能です。

GASにはChatWorkClientライブラリ

チャットワークAPIを扱うのにオススメなのがGoogle Apps Script(GAS)です。

GASでなぜチャットワークAPIを利用するのがよいかといえば、ChatWorkClientというライブラリがあるからです。

Google Apps Script(GAS)でチャットワークAPIを操作したいときに便利なライブラリChatWorkClient

ChatWorkClientライブラリを利用することで、GASスクリプトからチャットワークAPIにリクエストできます。

もちろんチャットワークAPIを直接GASからリクエストも可能ですが、ライブラリを利用することで少ないコードで簡単にチャットワークAPIの通信が可能です。

チャットワークAPIでメッセージを送るのに必要なルームID

ルームIDは特定ユーザーとの個人チャットや、複数人のグループチャットに一意に紐付けられているIDです。

チャットワークの各チャットに一意に紐付けられているルームIDはブラウザのURLで確認可能

ブラウザのURLを確認すると、「https://www.chatwork.com/#!rid260168***」となっており、この9桁の数字部分がルームIDです。

ChatworkAPIを使ってチャットワークにメッセージを送る際には、送り先であるルームIDを指定する必要があります。

ChatWorkClientのgetRoomsでルームIDが取得可能

先程紹介したようにチャットワークAPIでメッセージを送る際に必要なルームIDはブラウザから調べることができます。

ただ、わざわざチャットワークの送りたいチャットルームのIDを調べるのは手間です。

実はチャットワークAPIではルームID一覧も取得することができます。

さらに、Google Apps Script(GAS)の場合、ライブラリであるChatWorkClientを使ってルームIDを取得できます。

GASのChatWorkClientライブラリでルームIDを取得するにはgetRoomsメソッドを実行します。

ChatWorkClient.factory({token: 'ChatworkAPIトークン’}).getRooms()

ChatWorkClientにAPIトークンをセットした後、getRoomsメソッドを実行するとオブジェクト形式でルーム情報が一覧出力されます。

戻り値の中に実行ユーザーがアクセス可能なチャットのルームIDがすべて格納されていて、そこからルームIDやルーム名を取得可能です。

チャットワークAPIでルームIDを取得するGASサンプルコード

実際にChatWorkClientライブラリを利用して、チャットワークAPIからすべてのルームIDとルーム名(チャット名)を取得するGoogle Apps Script(GAS)のサンプルコードを解説します。

Google Apps Script(GAS)でChatWorkClientライブラリを利用しチャットワークAPIからルームID一覧をログ出力するサンプルコード
function getChatworkRoom() {
  //Chatwork API Tokenを定数として定義(自分のAPIトークンをセット)
  const token = '********************************';
  // ChatworkAPIクライアント作成
  const client = ChatWorkClient.factory({token: token});
  //getRoomsメソッドでルーム情報一覧を取得
  const roomList = ChatWorkClient.factory({token: token}).getRooms();
  //ルームIDとルーム名をログ出力
  for(let i=0;i<roomList.length;i++){
    console.log(roomList[i].room_id + ":" +roomList[i].name)
  }
}

まずチャットワークAPIのトークンを設定し、getRoomsメソッドでルーム情報一覧を取得し、forループで各ルームIDとルーム名をログ出力しています。

Google Apps Script(GAS)でChatWorkClientライブラリを利用しチャットワークAPIからルームID一覧をログ出力するサンプルコードを実行した結果、ルームIDとルーム名のペアが実行ログに表示

このようにGASスクリプトを実行すると、実行ログにルームIDとルーム名の組み合わせを一覧出力できます。

スプレッドシートにルームIDとルーム名を出力も

せっかくチャットワークAPIから取得したルームIDはログ出力だけでなく、スプレッドシートにも出力して保管したいケースも多いです。

先程のChatWorkClientでルームIDを取得するGoogle Apps Script(GAS)のサンプルコードを少し改良すれば、スプレッドシートにルームIDとルーム名を記録することもできます。

Google Apps Script(GAS)でChatWorkClientライブラリを使い、チャットワークAPIからルームIDとルーム名を取得してスプレッドシートに出力するサンプルコード
function getChatworkRoom() {
  //Chatwork API Tokenを定数として定義
  const token = '********************************';
  // ChatworkAPIクライアント作成
  const client = ChatWorkClient.factory({token: token});
  //getRoomsメソッドでルーム情報一覧を取得
  const roomList = client.getRooms();
  //ルームIDとルーム名をスプレッドシートに出力するため2次元配列を設定
  for(let i=0;i<roomList.length;i++){
    roomList[i] = [ roomList[i].room_id, roomList[i].name ];
  }
  //アクティブなスプレットシートのシート読み込み
  const ss = SpreadsheetApp.getActiveSheet();
  //スプレッドシートにルームIDとルーム名を出力
  ss.getRange(2,1,roomList.length,roomList[0].length).setValues(roomList);
}

ルームIDとルーム名の2次元配列を用意し、スプレッドシートに出力するようにサンプルコードを変更しています。

Google Apps Script(GAS)でChatWorkClientライブラリを使い、チャットワークAPIからルームIDとルーム名を取得してスプレッドシートに出力するサンプルコードを実行した結果、スプレッドシートにルームIDが一覧出力

改良版GASスクリプトを実行するとスプレッドシートにルームIDとルーム名の一覧を書き込むことができました。

これで取得したルームIDを使って全チャットにメッセージを投稿するなど、チャットワークAPIの活用幅が広がります。

まとめ・終わりに

今回、Google Apps Script(GAS)のChatWorkClientライブラリを使い、チャットワークAPIからルームID一覧を取得する方法を紹介しました。

ルームIDはチャットワークのURLから確認できますが、ChatWorkClientのgetRoomsメソッドで簡単にルームIDを取得できます。

ルームIDが分かれば、すべてのチャットに自動でメッセージを送ったり、特定のチャットにのみメッセージを送る制御などがGASスクリプトで可能です。

ChatworkAPIを使ってルームIDをGASで取得したい場合はぜひ紹介したサンプルコードを参考にしてみてください。