GASでチャットワークのコンタクト申請を自動承認しよう!

みなさん、こんにちは!
現役エンジニアの”ます”です。

今回はGoogle Apps ScriptとChatwork APIを活用したチャットワークのコンタクト申請の自動承認について解説していきます。

私が務めている会社ではチャットワークを活用しており、毎月新入社員が入社するとコンタクト申請が届きます。
この承認作業が面倒なので自動化していきます。

また、承認後にグループに追加する作業もあるため、その記事はこちらで紹介しております。

GASでチャットワークのグループ追加を自動化しよう

汎用的に使える機能にするため、本記事ではコンタクト申請を確認し、承諾をした上で、その承諾したアカウント情報をスプレッドシートに保持するようなプログラムにしたいと思います。
そのため、上記記事のように申請を許可したメンバーのアカウント情報を活用してグループ追加などの他の作業の自動化にも応用が効きやすくなります。

スプレッドシートを作成する

まずはGoogle Driveを開き、スプレッドシートを作成してください。

また、拡張機能からApps Scriptを選択します。

シート名は後ほど紹介するプログラムでは「ユーザー」と変更しておりますのでご注意ください。

スクリプトファイルを用意する

今回はスプレッドシートに紐づいたコンテナバインド型を活用していきます。

Apps Scriptが開いたらプロジェクト名を設定しましょう。

GASの導入方法についてはこちらをご参照ください。

Google Apps Scriptの導入方法

チャットワークのAPIトークンを取得する

チャットワークAPIを使用してメッセージを送信するため、
チャットワークAPIのTOKENと送信先のルームID、送信内容のメッセージが必要になります。

今回はダミーのデータを入れていますが、こちらはみなさんでご調整ください。

チャットワークAPIの利用方法はこちらで解説しておりますので、よろしければご参照ください。

Chatwork APIの利用申請方法

ライブラリを導入する

ChatworkClient for Google Apps Scriptというライブラリを活用します。

ライブラリの導入方法はこちらで紹介しています。

GAS × Chatwork APIのChatwork clientライブラリを解説

ライブラリキーは下記の通りです。

1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

コンタクト承認待ちリストを取得する

まず、ライブラリを活用するためのチャットワーククライアントを宣言します。
また、後ほど利用するスプレッドシートの取得しておきましょう!

次にメインの実行関数を作り、コンタクト承認待ちリストの一覧を取得するようにしたいと思います。

// チャットワーククライアント
const CLIENT = ChatWorkClient.factory({token: "d1ea42946389105e0e834111b7ba257e"})
// スプレッドシートを宣言
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ユーザー");

/**
 * 実行関数
 * コンタクト承認からグループ追加
 */
function run() {
  // 承認待ちリストを取得
  let contacts = getContacts();
}

ここではgetContacts()という関数を作っているため、ライブラリを活用してコンタクトの承認待ちリストを取得していきましょう。

/**
 * コンタクト承認待ち一覧を取得
 */
function getContacts() {
  let end_point = "/incoming_requests";
  let incoming_requests = CLIENT.get(end_point)
  return incoming_requests;
}

エンドポイントは「/incomming_requests」です。こちらにget通信すると取得できます。

ライブラリに直接コンタクト承認待ちリストを取得するメソッドは用意されていないため、
「チャットワークAPIでできること」を参照しながらエンドポイントを指定しています。

Chatwork API徹底解説!何ができる?

通信をしてAPIから返却される想定の情報はこのようになっています。

[
  {
    "request_id": 123,
    "account_id": 363,
    "message": "hogehoge",
    "name": "John Smith",
    "chatwork_id": "tarochatworkid",
    "organization_id": 101,
    "organization_name": "Hello Company",
    "department": "Marketing",
    "avatar_image_url": "https://example.com/abc.png"
  }
]

このうちのrequest_idを活用することでコンタクト申請を自動で承認できるようになります。

コンタクトを承認する

今回はすべてのコンタクトを自動で承認するプログラムにしたいと思いますので、forEachで取得した承認情報をループしていきます。
また、1件ずつ取り出した情報の中で、「request_id」を活用することで指定の申請を承認することができます。

そのため、下記のようなプログラムでコンタクトを1件ずつ承認するようにしていきます。

contacts.forEach(contact => {
    // コンタクト承認
    let user_info = approveContactByRequestId(contact.request_id);
  });

ここでapproveContactByRequestId()というオリジナルの関数を作成しているため、
そこでAPIへの通信を再度設定していきます。

/**
 * コンタクト承認待ちを承認する
 * request_id: 承認リクエストID
 */
function approveContactById(request_id) {
  let end_point = "/incoming_requests/" + request_id;
  let incoming_requests = CLIENT.put(end_point)
  return incoming_requests;
}

エンドポイントは「/incoming_requests/{request_id}」です。こちらにput通信すると指定の申請を承認することができます。

リクエストが上手くいった際の返却値はこちらです。

{
  "account_id": 363,
  "room_id": 1234,
  "name": "John Smith",
  "chatwork_id": "tarochatworkid",
  "organization_id": 101,
  "organization_name": "Hello Company",
  "department": "Marketing",
  "avatar_image_url": "https://example.com/abc.png"
}

user_infoで変数として受け取っているため、次にこの情報を格納していきます。

承認したユーザー情報をスプレッドシートへ格納する

受け取ったuser_infoのオブジェクトから必要な情報を取り出して2次元配列へ変換します。
スプレッドシートのsetValues()は2次元配列である必要があるため、注意です。

また、getRange()にて最終行+1行目の1列目から1行分と入力する配列の行数、配列の列数分を確保しています。

contacts.forEach(contact => {
    // コンタクト承認
    let user_info = approveContactByRequestId(contact.request_id);

    // インサート用の配列を作成
    let values = [
        [
            user_info.account_id,
            user_info.room_id,
            user_info.name,
            user_info.chatwork_id,
            user_info.organization_id,
            user_info.organization_name,
            user_info.department,
            user_info.avatar_image_url
        ]
    ];
    // スプレッドシートにデータを挿入
    SHEET.getRange(SHEET.getLastRow()+1, 1, values.length, values[0].length).setValues(values);
  });

このようにするとスプレッドシートの最終行+1行目に取得したユーザー情報を格納することができます。

コードまとめ

// チャットワーククライアント
const CLIENT = ChatWorkClient.factory({token: "d1ea42946389105e0e834111b7ba257e"})
// スプレッドシートを宣言
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ユーザー");
/**
 * 実行関数
 * コンタクト承認からグループ追加
 */
function run() {

  // 承認待ちリストを取得
  let contacts = getContacts();

  // 承認がない場合
  if(!contacts) {
    Logger.log("承認待ちユーザーがいません。");
    return;
  }

  contacts.forEach(contact => {
    // コンタクト承認
    let user_info = approveContactById(contact.request_id);
    // インサート用の配列を作成
    let values = [
        [
            user_info.account_id,
            user_info.room_id,
            user_info.name,
            user_info.chatwork_id,
            user_info.organization_id,
            user_info.organization_name,
            user_info.department,
            user_info.avatar_image_url
        ]
    ];
    // スプレッドシートにデータを挿入
    SHEET.getRange(SHEET.getLastRow()+1, 1, values.length, values[0].length).setValues(values);
  });
}

/**
 * コンタクト承認待ち一覧を取得
 */
function getContacts() {
  let end_point = "/incoming_requests";
  let incoming_requests = CLIENT.get(end_point)
  return incoming_requests;
}

/**
 * コンタクト承認待ちを承認する
 * target_id: 対象者のアカウントID
 */
function approveContactByRequestId(request_id) {
  let end_point = "/incoming_requests/" + request_id;
  let incoming_requests = CLIENT.put(end_point)
  return incoming_requests;
}

実行する際のGoogleからの承認方法についてはコチラを参照ください。

まとめ

簡単なプログラムを組むだけで自動でチャットワークのコンタクト申請を承認することができます。
新規で多くの方からの申請がある場合、このプログラムを活用すれば面倒な作業が数秒でおしまいです。

利用用途は多くないかもしれませんが、こういった場面も自動化により効率的に仕事をこなすことができます。
自分の時間を作り楽をしていきましょう!

Google Workspaceを活用している場合はGoogle Apps Scriptを覚えると業務の効率化および自動化ができます。
Google Apps Scriptが学べるスクールはコチラで紹介しています。よかったら見てみてください。

Google Apps Scriptを学べるスクール3選

Google Apps Scriptが学べたらコチラの記事で収益化してみてはいかがでしょうか?

Google Apps Scriptのプロが教える!成功するGAS副業完全ガイド

より便利に、よりカスタマイズしたいなおご要望がございましたら問い合わせくださいましたらサポートします!

お問い合わせ

最後までお読みいただきありがとうございます。
また次の記事でお会いしましょう!

最新情報をチェックしよう!