Google Apps Scriptでチャットワークからのメッセージを取得する方法


readme

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

前回チャットワークAPIの概要と簡単な使い方についてお伝えしました。

Google Apps ScriptでチャットワークAPIを活用するための最初の一歩
チャットワークAPIを駆使すると、様々な操作を行うことができるようになります。今回はチャットワークAPIの概要とGoogle Apps Scriptでの簡単な使い方についてお伝えします。

これから何回かの記事に分けて「おみくじチャット」を作るというのを目標にチャットワークAPIの使い方を勉強していきたいと思います。

今回はグループチャットのメッセージをGoogle Apps Scriptで取得するところまでをやってみます。

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

スポンサーリンク

前回のおさらい:自分の情報を取得する

前回作成したスクリプトはこちらでした。

//ChatWorkから自分の情報を取得する
function getMeData(){
  var params = {
    headers : {"X-ChatWorkToken" : 'APIトークン'},
    method : "get"
  };
  var url = "https://api.chatwork.com/v2/me"; //
  var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得
  var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す

  Logger.log(json["chatwork_id"]);
  Logger.log(json["organization_name"]);
  Logger.log(json["name"]);
  Logger.log(json["url"]);

}
  1. UrlFetchApp.fetchメソッドでリクエストURLとパラメータ(APIトークンとメソッド)を投げる
  2. JSON.parseメソッドでレスポンスをjsonに格納
  3. jsonから特定のデータを抽出してログ出力

といった流れです。

チャットワークAPIを使う場合は1,2の流れは基本的に一緒です。

おみくじチャットの概要

今回はおみくじチャットを作っていきます。

まず「おみくじ」という名前のグループチャットを用意し

  1. メンバーがメッセージを送信
  2. メッセージが「おみくじ」であれば
  3. そのメンバー宛に「大吉、中吉、小吉、吉、末吉、凶」のいずれかが返信

という動きをするシステムを作ってみます。

特定のグループチャットのメッセージを取得する

まず機能として、特定のグループチャットのメッセージを取得する必要があります。

チャットワークAPIのドキュメントによるとメッセージの取得については

GET /rooms/{room_id}/messages
チャットのメッセージ一覧を取得。パラメータ未指定だと前回取得分からの差分のみを返します。(最大100件まで取得)

force:1を指定すると未取得にかかわらず最新の100件を取得します(デフォルトは0)

とあります。メソッドは「get」のままでOKですね。

リクエストURLは

https://api.chatwork.com/v2/rooms/{room_id}/messages?force=0

です。

ルームIDは各グループチャットのURL

https://www.chatwork.com/#!rid{room_id}

で知ることができます。8桁の数字からなる文字列です。

forceパラメータですが、一度取得したメッセージは再度取得する必要がありませんので0にします。

詳しくはチャットワークAPIドキュメントをどうぞ。

メッセージ一覧のレスポンス

上記リクエストURLを投げて受け取るレスポンスは以下になります。

[
  {
    "message_id": 5,
    "account": {
      "account_id": 123,
      "name": "Bob",
      "avatar_image_url": "https://example.com/ico_avatar.png"
    },
    "body": "Hello Chatwork!",
    "send_time": 1384242850,
    "update_time": 0
  }
]

一番外側に角括弧「[]」があります。メッセージは一回のリクエストで最大100のメッセージがレスポンスに含まれるので、最大であれば[0]~[99]までの配列になります。

その一つ内側の波括弧「{}」がメッセージごとに格納されているという形です。

例えば、配列番号3のbodyと配列番号10のnameを取得したければ

json[3]["body"]
json[10]["acount"]["name"]

または

json[3].body
json[10].acount.name

とします。

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

ではチャットワークからメッセージを取得するスクリプトを作成してみましょう。

こちらです。

function getOmikuji(){
  var params = {
    headers : {"X-ChatWorkToken" : 'APIトークン'},
    method : "get"
  };
  var roomID = XXXXXXXX; //ルームID
  var url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages?force=0"; //指定のグループチャットからメッセージを取得
  var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得

  var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す

  for each(var obj in json){
  Logger.log(obj.body);
  }
}

12行目のfor each~ですが、jsonに含まれる配列要素全てについて繰り返すという書き方です。for~で

[js]
for(var i=0;i<json.length;i++){
// 処理
}
[/js]

とするものと同じ処理になります。for each~のほうがシンプルで直観的な書き方ができますね。

チャットワークで投稿してスクリプトを実行

まずチャットワークにはこのように投稿してみました。これからの意気込みを伝えています。

チャットワークのメッセージ

その後、先ほどのスクリプトを実行してみます。

チャットワークからのメッセージをログ出力

無事にメッセージ内容がログ出力されました。

まとめ

チャットワークAPIを使って、Google Apps Scriptにメッセージを取得する方法をお伝えしました。

これから、おみくじチャットを作っていきますので

  • メッセージが「おみくじ」かどうかを判定する
  • おみくじの結果をランダムで生成する
  • おみくじの結果を文字列として成形してチャットワークへ送信する

といった処理が必要になります。

次回は、Google Apps Scriptでおみくじ部分の処理を作っていきます。

Google Apps Scriptで乱数を使っておみくじプログラムを作る
今回はGoogle Apps Scriptで乱数を使用しておみくじを作る方法についてお伝えしていきます。乱数の発生、小数点の切り捨て、配列の要素数を求めるなど、あちこちで使えるテクニックが満載ですよ!

どうぞお楽しみに!

連載目次:チャットワークAPI初級編:おみくじチャットを作る

本シリーズはGoogle Apps ScriptでチャットワークAPIの様々な機能を呼び出す練習となります。メッセージの取得をして、処理をして、メッセージを返すという一連の流れの基礎を学ぶことができますよ。
  1. Google Apps ScriptでチャットワークAPIを活用するための最初の一歩
  2. Google Apps Scriptでチャットワークからのメッセージを取得する方法
  3. Google Apps Scriptで乱数を使っておみくじプログラムを作る
  4. Google Apps Scriptでチャットワーク上におみくじチャットを作る
  5. Google Apps ScriptでチャットワークにToや返信でメッセージを送る
  6. 【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数

タイトルとURLをコピーしました