【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다

이 기사는 Google Apps Script를 실례로 섞어서 기초에서 자세하게 배운다 Advent Calendar 2017 19일째의 기사입니다.

본 어드벤트 캘린더는 @rt_p의 개인 프로젝트이지만, 필자는 Ateam Brides Inc. Advent Calendar 2017에도 참가하고 있습니다. 그쪽에서도 출장판 기사를 쓰고 있으므로, 들여다 주시면 기쁩니다.

소개



이번에는 Chatwork의 특정 방에 게시된 메시지를 스프레드시트에 모아 갑니다.
기사를 쓴 후에 생각했습니다만, 어제의 기사가 압도적으로 난이도 높네요…



스프레드시트 준비



스크립트 편집기를 열고 다음 코드로 바꾸고 실행합니다.
스크립트 편집기를 여는 방법과 승인이 필요합니다. 메시지가 나왔을 때 해결책을 모르는 경우
어드벤트 캘린더 첫날 Hello, world! 기사을 참조하십시오.

webhook_spreadsheet.gs
// doPostのデバッグ用
function dummyPost() {
  var webhookEvent = {
    'webhook_event': {
      'body': 'こんにちは'
    }
  };
  var e = {
    'postData': {
      'contents': JSON.stringify(webhookEvent)
    }
  };
  var res = doPost(e);
  Logger.log(res);
}

function doPost(e) {
  try {
    var json = JSON.parse(e.postData.contents);
    var body = json.webhook_event.body;
    SpreadsheetApp.getActiveSheet().appendRow([body]);
  } catch (e) {
    return false;
  }
  return true;
}

디버깅을 위해 dummyPost()를 실행하면 스프레드시트에 메시지가 추가됩니다.



API 게시



공개 → 웹 애플리케이션으로 도입에서,
애플리케이션에 액세스할 수 있는 사용자: 모든 사용자(익명 사용자 포함)로 설정하고 게시합니다.

(어제의 기사와 똑같은 것을 쓰지만) 설정 후에는 당연히 이 API에 액세스에 누구나 POST를 던질 수 있게 됩니다. 실수로 URL을 누설도하지 않는 한 괜찮아 괜찮을까 생각합니다만, 자기 책임으로 부탁드립니다.

Webhook 설정



Chatwork의 API 설정 링크에서 Webhook 설정 페이지로 이동하여 다음과 같이 새로 만듭니다.



설정이 문제없이 끝나면 지정한 방에 던진 발언이 스프레드 시트에 자동 기록됩니다.




결론



나는 업무로 이것을 응용하고 시스템 에러가 발생하면 Chatwork 방에 자동 투고된다
라는 시스템을 만들었습니다.

Chatwork의 API를 사용하면 방의 메시지 일람을 취득하는 것도 가능합니다만, 메시지 수집만이라면 Webhook+GAS의 ExecutionAPI(doPost)로 실현할 수 있어, GAS측에 Chatwork 토큰을 가지지 않아도 좋은 것이 이점입니다.

그 밖에도 예를 들면, 일의 교환으로 근거를 남겨두고 싶을 때에 사용하면 좋을지도 모릅니다. Webhook에서 스프레드시트에 투고시의 발언을 남겨두면, 나중에 갱신·삭제해도 쫓을 수 있기 때문에.
스프레드 시트라고 하는, 간단하게 편집 삭제할 수 있는 것에 남기는 것이 적절하다고는 생각되지 않습니다만…

내일



【Google Apps Script】 그 20 오늘의 예정을 Chatwork에 일괄 통지한다
됩니다.
일정과 연계하여 일정을 일괄 통지하는 시스템을 만듭니다.

이전 기사
【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다
다음글
【Google Apps Script】 그 20 오늘의 예정을 Chatwork에 일괄 통지한다

좋은 웹페이지 즐겨찾기