Chatwork Webhookと無料で扱えるGASを使ってBotを作ってみる。

3日前の11月1日に、とうとうチャットワークでWebhookが使えるようになりました!
http://blog-ja.chatwork.com/2017/11/api-openbeta.html
ということで、サーバ費用が全くかからないGoogle Apps Script(GAS)を使ってChatwork Webhookを試してみました。

GASは、無料で簡単にウェブページの作成や、APIサーバの作成をすることができるので、個人的によく使っています。

チャットワークのAPI管理画面はこちらからアクセスすることができます
https://www.chatwork.com/service/packages/chatwork/subpackages/webhook/list.php
APIドキュメント Webhook

サーバの用意(GAS側にスクリプトを入力)

はじめにGASで新しいプロジェクトを作成する
※Googleドライブを開いて、新しく作成すればいい。今回は詳しくはこの記事では書かない。

今回作成したプログラムはオウム返しをするだけの簡単なボットです。

var spreadsheetId = '***********';
var chatworkToken = '***********';
var myAccountId = '***********'

function doPost(e) {
  try {
    var json = JSON.parse(e.postData.contents);
    SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(1, 1).setValue(json.toSource());

    var accountId = json.webhook_event.account_id;
    if (accountId == myAccountId) {
      return;
    }

    var message = json.webhook_event.body;
    var roomId = json.webhook_event.room_id;
    postChatwork(roomId, message);

  } catch(ex) {
    SpreadsheetApp.openById(spreadsheetId).getSheetByName('log').getRange(1, 1).setValue('error');
  }
}

function postChatwork (roomId, message) {
  var payload = {
    "body" : message
  };

  var headers = {
    "X-ChatWorkToken": chatworkToken
  };

  var options = {
    "method" : "post",
    "payload" : payload,
    "headers" : headers
  };

  return UrlFetchApp.fetch("https://api.chatwork.com/v2/rooms/" + roomId + "/messages", options);
}

このスクリプトで***********となっているところが3箇所あるので、そちらは人によって異なるので修正する必要がある。

spreadsheetId
こちらはログを出力する用にスプレッドシートを使っている。そのスプレッドシートのidをここに入力する。
logというシートを指定して出力しているため、空のスプレッドシートのプロジェクトを作成して、logというシートを作成する必要がある。

chatworkToken
オウム返しをするときの投稿するときに必要になる。
使っているチャットワークアカウントのトークンをここに入力する。

myAccountId
自分自身のチャットワークアカウントのidをここに入力する。
オウム返しで投稿した内容もwebhookで飛んできてしまって、オウム返しのオウム返しを投稿して無限ループになってしまうのを防ぐため。
確認の仕方は、自分宛てのToの[To:*****]の*****にあたるものになる。

サーバの公開(GASの公開設定)

プログラムが完成したら、外部から叩ける用に公開する必要がある。
GASの上のメニューの「公開」→「ウェブアプリケーションとして導入...」を選択

以下の項目は間違えやすいので気をつけましょう。

項目 内容
次のユーザとしてアプリケーションを実行 自分(****@gmail.com)
アプリケーションにアクセスできるユーザ 全員(匿名ユーザーを含む)

これで、公開をする。
公開が完了すると、URLが表示されるので、それをコピーする

https://script.google.com/macros/s/******************/exec

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

チャットワークの管理画面にログインする
↓おそらくこちらのURLでいけるはず
https://www.chatwork.com/service/packages/chatwork/subpackages/webhook/list.php

Webhookのタブを選択して、新規作成ボタンをクリックする。

項目 内容
Webhook名 わかりやすいように名前をつけてあげる。なんでも大丈夫
Webhook URL GASの公開したときに表示されたURLをここに入力する
イベント 今回はルームイベントを選択してみる。
メッセージ作成 ルームイベントを選択すると表示される項目。チェックを入れておく
メッセージ更新 ルームイベントを選択すると表示される項目。チェックを入れておく
ルームID ルームイベントを選択すると表示される項目。Botの部屋のURLのhttps://www.chatwork.com/#!rid**********の部分

これで作成ボタンを押してあげる。

さいごに

これで完成なので、テキトーに入力して欲しい。
エラーにならなければオウム返しをしてくれるはずです。
スプレッドシートにもログがちゃんと吐かれるはずです。

これで、無料でチャットワークのWebhookが簡単に扱うことができました!