ChatWork의 Webhook과 GoogleAppsScript(GAS)를 사용하여 채팅방에 멤버가 추가되었을 때 정형문을 댓글 달기 Bot 만들기

지금 입니다만 ChatWork가 Webhook에 대응한 것 같기 때문에, 리얼타임으로 응답 가능한 Bot를 만들 수 있게 되었습니다.
이전에는 채팅 워크 API로 메시지를 취득하고, 새로운 도착이 있으면・・・같은 일을 하지 않으면 안 되었기 때문에 매우 편리하게 되었습니다.
Google Apps Script (GAS)를 사용하면 쉽게 웹 애플리케이션으로 게시 할 수 있으므로,
이 방법으로 시험에 채팅방에 신규 멤버가 추가되었을 때, 추가된 유저를 To로 하여 「처음 뵙겠습니다.」라고 정형문을 코멘트하는 Bot을 만들어 보았습니다.

채팅 워크 API 토큰 가져오기



Bot으로 취급하고 싶은 사용자로 채팅 워크에 로그인하여 공식 페이지을 보면서 검색합니다.

Google Apps Script(GAS)의 새 프로젝트 만들기



Google 드라이브를 열고 아래와 같이 Google Apps Script의 새 프로젝트를 만듭니다.


빨간색 테두리로 둘러싸인 'Google Apps Script'가 보이지 않으면 아래의 '+ 앱 추가'에서 'Google Apps Script'를 검색하여 추가하세요.


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에서 웹 애플리케이션으로 게시



게시 -> 웹 애플리케이션으로 배포를 선택하고 필요한 항목을 입력합니다.

빨간색 테두리로 둘러싸인 부분이 이 웹 애플리케이션의 URL이므로 이 URL을 삼가해 둡니다.


채팅 작업 Webhook 설정



API 토큰과 마찬가지로 Bot으로 취급하고 싶은 사용자로 채팅 워크에 로그인하고 공식 페이지을 보면서 설정합니다.

빨간색 테두리로 둘러싸인 곳에는 GAS에서 웹 애플리케이션으로 도입할 때 삼가한 URL을 설정합니다.
이벤트는 「룸 이벤트」로 메시지 투고시에 발동해 주었으면 하는 「메시지 작성」에 체크를 합니다.
룸 ID에는 이 Webhook이 발동하는 방을 지정하므로, 룸 ID는 별도로 이 페이지에 써 있는 방법으로 조사해 주세요.

움직여 보았습니다.



이상으로 채팅 워크의 Webhook과 GAS를 연계시키는 설정을 할 수 있었으므로, 실제로 움직여 보았습니다.
※ 펭귄 씨가 미츠바치 씨를 방에 초대하면 알려주는 맨 씨 (Bot)가 응답 해주는 그림

좋은 웹페이지 즐겨찾기