ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【GAS】Chatwork Webhookと無料で扱えるGASを使ってオウム返しBotを作ってみる。

Chatworkでもwebhookが使えるとのことなので、いつものようにサーバ費用が全くかからないGoogle Apps Script(以降、GAS)を使ってChatwork Webhookを試してみました。

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

f:id:ponkotsu0605:20200426125540p:plain

APIドキュメント(Webhook)

ドキュメントは以下のページになります。

developer.chatwork.com

こちらを参考にしながらGASのスクリプトを書いていきたいと思います。

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

はじめにGASで新しいプロジェクトを作成します。 ※Googleドライブを開いて、新しく作成すればいいので、今回は詳しくはこの記事では書きませんが、GASの使い方については以下でまとめていますので、御覧ください。

www.pnkts.net

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

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で飛んできてしまって、オウム返しのオウム返しを投稿して無限ループになってしまうのを防ぐためです。もし、無限ループになったら急いでdoPost()の処理の直後にreturnを入れたりして、スクリプトを止めてあげましょう。 確認の方法ですが、自分宛てのToの[To:*****]の*****にあたるものになります。

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

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

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

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

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

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

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

チャットワークの管理画面にログインします。 以下から設定画面に遷移できるかと思います。

www.chatwork.com

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

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

このような内容を入力して、作成ボタンを押してあげましょう。

実際に動かしてみる

これで完成ではあります。エラーにならなければオウム返しをしてくれるはずです。

f:id:ponkotsu0605:20200426130245p:plain

また、スプレッドシートにもログがちゃんと吐かれるはずです。

さいごに

このようにして、無料でチャットワークのWebhookが簡単に扱うことができました! GASは無料なので便利ですね!

お問い合わせプライバシーポリシー制作物