0
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChatWorkのWebhookとGoogleAppsScript(GAS)を使ってチャットルームにメンバーが追加された際に定型文をコメントするBotを作る

Last updated at Posted at 2018-11-22

今更ですがChatWorkがWebhookに対応したようなので、リアルタイムで応答可能なBotが作れるようになりました。
以前はチャットワークAPIでメッセージを取得して、新着があったら・・・みたいなことをしないとダメだったので非常に便利になりました。
Google Apps Script (GAS)を使えばお手軽にWebアプリケーションとして公開できるので、
この方法で試しにチャットルームに新規メンバーが追加された際に、追加されたユーザーをToにして「初めまして。」と定型文をコメントするBotを作ってみました。

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

Botとして扱いたいユーザーでチャットワークにログインして、公式ページを見ながら取得します。

Google Apps Script (GAS)の新規プロジェクトを作成する

Googleドライブを開いて、下記のようにGoogle Apps Scriptの新規プロジェクトを作成します。
image.png

赤枠で囲んだ「Google Apps Script」が見当たらない場合は、その下にある「+アプリを追加」から「Google Apps Script」を検索して追加してください。
image.png

GASにコードを書く

ChatWorkのWebhookからはHTTPS POSTリクエストが来るので、GAS側にPOSTの受け口となるdoPost関数を作成します。
その関数に、今回作成する「チャットルームにメンバーが追加された際に定型文をコメントする」という処理を記述します。
リクエストされるパラメータの詳細は、公式ドキュメントを参照ください。

// botとして扱うアカウントIDを設定しないと、作成する処理によっては無限ループに入るので注意
var BOT_ACCOUNT_ID = '必要ならここにbotとして扱うアカウントIDを書く';
var API_TOKEN = '先述の項で取得したチャットワークAPIのTokenをここに書く';

function doPost(event) {
  var contents = JSON.parse(event.postData.contents);
  var accountId = contents.webhook_event.account_id;
  
  if (accountId == BOT_ACCOUNT_ID) {
    return;
  }
  
  var contentsBody = contents.webhook_event.body
  var addAccountIdArray = getAddedAccountIdArray(contentsBody);
  
  if (addAccountIdArray.length > 0) {
    var replyMessage = "初めまして。";
    var params = {
      headers : {"X-ChatWorkToken" : API_TOKEN},
      method : "post",
      payload : {body : createHelloMessage(addAccountIdArray) + replyMessage}
    };
    var url = "https://api.chatwork.com/v2/rooms/" + contents.webhook_event.room_id + "/messages";
    UrlFetchApp.fetch(url, params);
  }
}

function getAddedAccountIdArray(contentsBody) {
  var accountIdArray = [];
  if (contentsBody.match(/dtext:chatroom_member_is\S+piconname\S+dtext:chatroom_added/)) {
	var regex = /(piconname:(\d+))+/g
	while ((piconname = regex.exec(contentsBody)) != null) {
		accountIdArray.push(piconname[2]);
	}
  }
  return accountIdArray;
}

function createHelloMessage(accountIdArray) {
  var message = "";
  for (var i=0; i<accountIdArray.length; i++) {
    message += "[To:" + accountIdArray[i] + "][piconname:" + accountIdArray[i] + "] さん\n";
  }
  return message;
}

GASでウェブアプリケーションとして公開する

[公開] -> [ウェブ アプリケーションとして導入] を選択し、必要項目を入力します。
image.png
赤枠で囲んである部分がこのウェブアプリケーションのURLですので、このURLを控えておきます。
image.png

チャットーワークWebhookの設定

APIトークンと同じくBotとして扱いたいユーザーでチャットワークにログインして、公式ページを見ながら設定します。
image.png
赤枠で囲んだところには、GASでウェブアプリケーションとして導入をした時に控えたURLを設定します。
イベントは「ルームイベント」でメッセージ投稿時に発動してほしいでの「メッセージ作成」にチェックをつけます。
ルームIDにはこのWebhookが発動する部屋を指定しますので、ルームIDは別途このページに書いてある方法で調べてください。

動かしてみました

以上でチャットワークのWebhookとGASを連携させる設定ができたので、実際に動かしてみました。
※ぺんぎんさんがみつばちさんを部屋に招待したらお知らせするマンさん(Bot)が応答してくれるの図
image.png

0
8
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?