【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数


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

Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。

前回はチャットワークのメッセージ記法を使って、Toや返信をつけておみくじの結果を返す方法をお伝えしました。

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

さて、先日こちらの記事でも書いた通り「リーダブルコード」を読みました。

脱プログラミング初心者のためのバイブル「リーダブルコード」のススメ
とにかくプログラマーというプログラマーが皆さんオススメしまくっている本「リーダブルコード」。その名のとおり「読みやすいコード」を書くための実践的なテクニックを凝縮している本書について紹介します。

読みやすいコードはすっごい重要だよ、なんて言っているくせに、前回作ったおみくじチャットのコード…ちょっとというかだいぶ読みづらいですね。

チャットワークAPIのやり取りは汎用的な機能となる場合が多いので関数化をしておくと、別のときに使いやすいということですね。

今回は

  • チャットワークからメッセージを取り出す
  • チャットワークへメッセージを送る

という機能をそれぞれ関数化をして全体のコードをスッキリさせていきたいと思います。

スポンサーリンク

チャットワークにメッセージを取りに行く関数

まず、チャットワークからメッセージを取得する関数を作っていきます。

チャットワークAPIの仕様では

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

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

です。

HTTPメソッドはGETです。

ちなみにチャットワークAPI共通ですが、HTTPヘッダに “X-ChatWorkToken”というパラメータにAPIトークンを渡す必要がありましたね。

リクエストURLは

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

ですから、追加で必要なパラメータはルームIDですね。

したがって、

  • 引数 token:APIトークン, room_id:ルームID
  • 返り値 json:レスポンスをJSON解析した配列

にて、関数fetchMessaageを作ればOKです。

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

チャットワークからメッセージを取得するfetchMessage関数

関数fetchMessageのコードはこちらです。

/* チャットワークからメッセージ取得 */
function fetchMessage(token,room_id){
  var params = {
    headers : {"X-ChatWorkToken" : token},
    method : "get"
  };  
     
  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages?force=0";
  var response = UrlFetchApp.fetch(url, params);
  
  if(response.getContentText()){
    return JSON.parse(response.getContentText());
  }else{
    return '';
  }

}

チャットワークにメッセージを送る関数

同様にチャットワークにメッセージを送る関数を作っていきます。

チャットワークAPIの仕様は

POST /rooms/{room_id}/messages
チャットに新しいメッセージを追加

body:メッセージ本文

ですから、こちらでは、APIトークン、room_idとともにbodyつまりメッセージ本文がパラメータとして必要です。

HTTPメソッドはPOSTですね。

リクエストURLは

https://api.chatwork.com/v2/rooms/{room_id}/messages

となります。

したがって作成する関数としては

  • 引数 token:APIトークン, room_id:ルームID, body:メッセージ本文
  • 返り値 なし

にて、関数sendMessaageを作ればOKです。

sendMessage(APIトークン, ルームID, メッセージ本文)
Google Apps Scriptでチャットワーク上におみくじチャットを作る
Google Apps ScriptとチャットワークAPIを使ってチャットワークで「おみくじ」と送信すると、大吉から凶までのおみくじの結果を生成してチャットワークに返す「おみくじチャット」を作成します。

APIトークンとルームIDは毎回引数として渡さなくてもよいようにできればなのですが…また別の機会にですね。

チャットワークにメッセージを送るsendMessage関数

関数sendMessageのコードはこちらです。

/* チャットワークにメッセージを送る */
function sendMessage(token,room_id,body){
  var params = {
    headers : {"X-ChatWorkToken" : token},
    method : "post",
    payload : {
      body : body
    }
  };

  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages";
  UrlFetchApp.fetch(url, params);

}

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

では上記二つの関数を使って、おみくじチャットのスクリプトを直していきます。

function getOmikuji(){

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXXXX; //ルームID

  var json = fetchMessage(token,room_id);

  /* json内に「おみくじ」メッセージがあればチャットワークに送信 */
  for each(var obj in json){
    if(obj.body === "おみくじ"){

      var body = "[rp aid=" + obj.account.account_id
        + " to=" + room_id
        + "-" + obj.message_id
        + "] " + obj.account.name
        + "さん[info]おみくじの結果:" + generateOmikuji() + "[/info]"; //チャットワークに送るテキスト

      sendMessage(token,room_id,body);
    }
  }
}

だいぶスッキリしましたね!

行数でいうと前回のスクリプト本体は31行ありましたので、9行削減しつつ、見やすいコードにすることができました。

まとめ

これまで何回かにわたってチャットワークAPIそしてGoogle Apps Scriptを使ったおみくじチャットの作り方についてお伝えしてきました。

これをベースにしまして、チャットワークをインターフェースとして様々なツールやシステムを開発していくことができます。

それに際して、汎用的なコードを意識していくことで、未来への貴重な財産になっていきますので、皆さんも意識して頂ければと思います。

またチャットワークAPIを活用して、ステキなアイデア実現していきたいと思いますので、ぜひ楽しみにしていてくださいね。

連載目次:チャットワーク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をコピーしました