GASとチャットワークWebhookで即レスポンスのおみくじチャットを作る方法

omikuji

photo credit: yuichi.sakuraba Trilingual via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASとチャットワークWebhookを連携させて、いろいろな便利ツールを作っております。

前回はこちらの記事。

チャットワークWebhookを使ってメッセージ送信をトリガーにGASを起動させる方法
チャットワークWebhookとGASの連携方法についてお伝えしております。今回はいよいよチャットワークWebhookを使ってメッセージをトリガーにGASを起動するスクリプトとその手順をお伝えしていきます。

チャットワークのメッセージ送信によるWebhookを使って、そのPOSTリクエストをGASのドキュメントに表示する方法をお伝えしました。

今回は、もう少し、若干、ほんのり、それっぽいツールを作ってみたいと思います。

それがおみくじチャットです。

以前、以下の記事で紹介したものは、GASの時限式のトリガーで定期的にメッセージを取得しに行っていたのですが、Webhookがあればチャットワーク側から起動することができます。

Google Apps ScriptでチャットワークにToや返信でメッセージを送る
Google Apps Scriptでチャットワークのおみくじチャットを作っています。今回はチャットワークのメッセージ記法を使って、おみくじの結果をToや返信のメッセージにする方法です。

ということで、GASとチャットワークWebhookでおみくじチャットを作る方法です。

では、行ってみましょう!

スポンサーリンク

以前作成したおみくじチャット

まず、以前のおみくじチャットについて、紹介をします。

少し表現を変えている部分もありますが、以前の紹介記事と同じものですので、詳細はそちらの記事を参考ください。

チャットワークからメッセージを取得して返信をするスクリプト

メインのスクリプトはこちらです。

var API_TOKEN = 'xxxxxxAPIトークンxxxxxx'; //チャットワークAPIトークン
var ROOM_ID= 'xxxxxxxx'; //ルームID

//おみくじチャット
function getOmikuji(){
  /* メッセージを取得 */
  var params = {
    headers : {"X-ChatWorkToken" : API_TOKEN},
    method : "get"
  };
  var url = "https://api.chatwork.com/v2/rooms/" + ROOM_ID + "/messages?force=0";
  var response = UrlFetchApp.fetch(url, params);
  var json = JSON.parse(response.getContentText());
  
  /* リクエスト用パラメータ・URLの準備 */
  params.method = "post";
  url = "https://api.chatwork.com/v2/rooms/" + ROOM_ID + "/messages";
  /* json内に「おみくじ」メッセージがあればチャットワークに送信 */
  for each(var message in json){
    if(message.body === "おみくじ"){
      
      var body = ''
      body += '[rp aid=' + message.account.account_id;
      body += ' to=' + ROOM_ID + '-' + message.message_id + '] '
      body += message.account.name + 'さん[info]おみくじの結果:' + generateOmikuji() + '[/info]'
      params.payload = {body :body};
      
      UrlFetchApp.fetch(url, params);
    }
  }
}

このgetOmikujiを実行すると、まずチャットワークの指定のルームの新規メッセージの集合を取得します。そしてparseメソッドで、変数jsonにオブジェクトとして格納します。この部分が7~13行目です。

次に、jsonに含まれているメッセージについて「おみくじ」と一致するものがあれば、そのメッセージへおみくじの結果を返信するという仕組みです。それをしているのが、16~18行目です。

今回は、メッセージの取得がWebhookによるPOSTリクエストからの取得と変更をしていきます。

おみくじの結果を生成する

また、おみくじの結果を生成するのが、以下のgenerateOmikujiです。

//乱数でおみくじの結果を生成
function generateOmikuji(){
  var results = ["大吉","中吉","小吉","吉","半吉","末吉","凶"];
  return results[Math.floor(Math.random() * results.length)];
}

これはそのまま再利用できますね。

Webhookを使ったおみくじチャット

さて、チャットワークWebhookからのPOSTリクエストを受け取るのは、getPost関数でした。

そして、そのリクエストのボディからデータを取り出すには

Eventオブジェクト.postData.contents

とすれば良かったですね。

さらに、その中の「webhook_event」というフィールドに様々なデータが格納されていて、今回必要なのは以下の値となります。

  • ルームID:room_id
  • メッセージID:message_id
  • メッセージの送信元のアカウントID:account_id
  • メッセージの送信元のアカウント名:※含まれてない
  • メッセージ本文:body

残念ながらメッセージの送信元のアカウント名だけは、POSTリクエストから取得できませんので、今回は置いておきますが、それ以外は取得できますね。

詳細は以下記事もご参考ください。

チャットワークのメッセージの送信をトリガーにGASを作動させられるWebhookが使えるようになった
チャットワークAPIのバージョンアップによりWebhookが使えるようになりました。今回はWebhookとは何か、そしてWebhookとそのリクエストによりGASを動作させる仕組みについてお伝えします。

APIトークンの取得

おみくじの結果をチャットワークAPIに返送するために、チャットワークAPIトークンが必要になります。

以前の記事でも紹介していたのですが、画面が変更になりましたので再度紹介しておきます。

まず、チャットワークの画面でプロフィールアイコンのメニューから、「API設定」を選択します。

チャットワークAPI設定を開く

続いて、左側のメニューから「API Token」を選択。パスワードを入力画面になりますので、チャットワークパスワードを入力して「表示」です。

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

すると、APIトークンが表示されますので、大事にメモしておきましょう。

おみくじチャットのスクリプト

実際のdoPost関数のスクリプトは以下のようになります。

var API_TOKEN = 'xxxxxxAPIトークンxxxxxx'; //チャットワークAPIトークン

function doPost(e) {
  var json = JSON.parse(e.postData.contents);
  /* リクエスト用パラメータ・URLの準備 */
  var params = {
    headers : {"X-ChatWorkToken" : API_TOKEN},
    method : "post"
  };
  
  var roomId = json.webhook_event.room_id;
  url = "https://api.chatwork.com/v2/rooms/" + roomId + "/messages";
  
  /* json内に「おみくじ」メッセージがあればチャットワークに送信 */
  if(json.webhook_event.body === "おみくじ"){
    
    var accountId = json.webhook_event.account_id;
    var messageId = json.webhook_event.message_id;
    
    var body = ''
    body += '[rp aid=' + accountId;
    body += ' to=' + roomId + '-' + messageId + '] '
    body += '[info]おみくじの結果:' + generateOmikuji() + '[/info]'
    params.payload = {body :body};
    
    UrlFetchApp.fetch(url, params);
  }
}

Webhookでは対象となる単体のメッセージについてのデータをピンポイントで取得できるので、スクリプトもすっきりしますね。

Webアプリケーションとして公開してWebhookを作成

doPost関数が完成したら、Webアプリケーションとして公開します。

するとこのプロジェクトのURLが生成されますので、それをもってチャットワークWebhookを作成します。

詳細は以下の記事をご参考ください。

チャットワークWebhookを使ってメッセージ送信をトリガーにGASを起動させる方法
チャットワークWebhookとGASの連携方法についてお伝えしております。今回はいよいよチャットワークWebhookを使ってメッセージをトリガーにGASを起動するスクリプトとその手順をお伝えしていきます。

おみくじWebhookの実行結果

では、実行をします。

Webhookですからレスポンスも速く、以下のような返事がすぐに来ます。

GASとチャットワークWebhookによるおみくじチャット

「凶」というのが気になりますが…

まとめ

以上、GASとチャットワークWebhookを使っておみくじチャットを作る方法をお伝えしました。

  • チャットワークWebhookから各フィールドの値を取得する

メッセージを送ってからの動作が速いのはもちろん、スクリプトもすっきり書けるようになりました。

いや~、Webhook素晴らしい!

次回、また別のツールをGASとチャットワークWebhookで作っていきたいと思います。

どうぞお楽しみに!

連載目次:GASとチャットワークWebhookを連携させた便利ツール

チャットワークAPIのバージョンアップでメッセージ送信や自分へのメンションをトリガーにしたWebhookを使用することができるようになりました。GASとの連携により色々な便利ツールを作っていきます。
  1. チャットワークのメッセージの送信をトリガーにGASを作動させられるWebhookが使えるようになった
  2. チャットワークWebhookを使ってメッセージ送信をトリガーにGASを起動させる方法
  3. GASとチャットワークWebhookで即レスポンスのおみくじチャットを作る方法
  4. GASとチャットワークWebhookを使って翻訳チャットを作る
タイトルとURLをコピーしました