Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2099

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

$
0
0

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/v1/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件まで取得)
“https://api.chatwork.com/v1/rooms/{room_id}/messages?force=0”

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

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

リクエストURLは

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

です。

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

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

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

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

http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages

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

上記リクエスト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/v1/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~で

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

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

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

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

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

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

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

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

まとめ

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

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

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

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

次回以降、進めていきたいと思います。

どうぞお楽しみに!

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

  1. Google Apps ScriptでチャットワークAPIを活用するための最初の一歩
  2. Google Apps Scriptでチャットワークからのメッセージを取得する方法

Viewing all articles
Browse latest Browse all 2099

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>