Amazonで商品を見るセール会場へ

Chatwork│特定のグループに所属しているメンバー名前とIDを取得する方法

Chatworkのメンバー一覧は、参照権限のあるルームからAPIで取得できます。

改訂版では、現行のApps Scriptで動かないfor each構文を置き換え、取得に成功してから新しいシートへ出力します。

目次

架空の2名で出力形式を確かめる

通知連携の練習コードとローカルテストをダウンロード(ZIP)。

各article-番号.jsを別々のApps Scriptプロジェクトへ保存します。

スプレッドシートの「拡張機能」からApps Scriptを開き、article-4956.jsを保存します。

まずdemoMembersを実行すると、練習 太郎と練習 花子の名前・IDを配列として表示し、API呼び出しやシートの変更は行いません。

function memberRows_(members) {
  if (!Array.isArray(members)) throw new Error('メンバー配列ではありません');
  return members.map(m => {
    if (!Number.isSafeInteger(m.account_id) || m.account_id <= 0 || typeof m.name !== 'string') throw new Error('メンバー形式が違います');
    // シートの数式として解釈されないよう文字列にする。
    const name = /^\s*[=+@-]/.test(m.name) ? "'" + m.name : m.name;
    return [name, String(m.account_id)];
  });
}
function demoMembers() {
  const rows = memberRows_([{account_id:101,name:'練習 太郎'},{account_id:102,name:'練習 花子'}]);
  Logger.log(JSON.stringify(rows));
  return rows;
}
function getRooms() {
  const properties = PropertiesService.getScriptProperties();
  const room = properties.getProperty('CHATWORK_ROOM_ID');
  const token = properties.getProperty('CHATWORK_API_TOKEN');
  if (!room || !/^\d+$/.test(room) || !token) throw new Error('ルームIDとトークンを設定してください');
  const book = SpreadsheetApp.getActiveSpreadsheet();
  if (!book) throw new Error('スプレッドシートに紐づけたプロジェクトで実行してください');
  const response = UrlFetchApp.fetch('https://api.chatwork.com/v2/rooms/' + room + '/members', {
    method:'get',headers:{'X-ChatworkToken':token},muteHttpExceptions:true
  });
  if (response.getResponseCode() !== 200) throw new Error('Chatwork HTTP ' + response.getResponseCode());
  const rows = memberRows_(JSON.parse(response.getContentText()));
  // 既存のシートは上書きしない。取得が成功してから毎回新規作成。
  const sheet = book.insertSheet();
  sheet.getRange(1,1,1,2).setValues([['名前','アカウントID']]);
  if (rows.length) {
    sheet.getRange(2,2,rows.length,1).setNumberFormat('@');
    sheet.getRange(2,1,rows.length,2).setValues(rows);
  }
  return rows.length;
}

取得成功と失敗の確認結果

ローカル模擬テストの条件確認した結果
正常なメンバー配列GETを1回行い、ヘッダーと2列の一覧を新規シートへ書く
メンバーが0件ヘッダーだけを作り、0行の範囲指定をしない
401・403・429、JSONでない応答既存シートを変更せずエラーで止まる
数式に見える名前文字列として書くための先頭記号を付ける

自分のルームから取得する設定

プロジェクトの設定でスクリプトプロパティにCHATWORK_API_TOKENと数字のCHATWORK_ROOM_IDを設定し、getRoomsを手動実行します。

自分が参照できるルームだけを対象にし、トークンを本文や公開コードへ書き込みません。

成功すると、同じスプレッドシートに新しいシートを作ります。

繰り返し実行しても、旧シートへ行を追加したり上書きしたりしないため、取得日とルームをシート名に付けて区別します。

401は認証、403は権限、429は利用制限を確認し、連続再試行しません。

HTTPの成功後も、取得件数と実際のルームの一覧を照合します。

現在のエンドポイントと応答条件はChatworkのメンバー取得仕様で確認しました。

メンバーの追加・新規チャット作成・通知送信はこのコードでは行いません。

戻す必要があれば、保存した旧コードを使い、以前のシートを参照します。

実メンバー取得、Googleの認可、実シートへの書き込みは今回未検証で、実際の氏名やIDを記事へ掲載していません。

練習コードの検証範囲

2026年10月2日に、Node.jsでGoogle Apps Script・HTTP応答・シート・ロック・保存状態を模した55ケースを確認しました。

ZIPを新しいフォルダーへ展開し、node test_integration.cjsでも同じ結果を確認できます。

実際のGoogle認可、APIへの投稿、シート書き込み、時間主導トリガー、受信側の通知音は未検証です。

ローカルでの成功を、実サービスでの配信成功と扱わないでください。

関連記事

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

仕事効率化のおすすめ書籍

仕事用PCの選び方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次