Google Apps ScriptでチャットワークにToや返信でメッセージを送る

reply

photo credit: bernard kerr via photopin (license)

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

チャットワークでおみくじチャットを作っています。

前回、基本的な機能としてはほぼほぼ完成をしました。

Google Apps Scriptでチャットワーク上におみくじチャットを作る
Google Apps ScriptとチャットワークAPIを使ってチャットワークで「おみくじ」と送信すると、大吉から凶までのおみくじの結果を生成してチャットワークに返す「おみくじチャット」を作成します。

Google Apps ScriptとチャットワークAPIでスクリプトを特定のグループチャットに仕込みます。

そのチャットで「おみくじ」と入力すると、「 “大吉”,”中吉”,”小吉”,”吉”,”半吉”,”末吉”,”凶”」の中から自動でいずれかがメッセージとして返って来ます。

おみくじチャットの結果

今回は、チャットワークのメッセージ記法を使って、この自動で返ってくるメッセージにToや返信をつける方法についてお伝えします。

では行ってみましょう!

スポンサーリンク

前回のおさらい

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

//おみくじチャット
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オブジェクトとして返す

  /* リクエスト用パラメータ・URLの準備 */
  params.method="post"; //リクエストメソッドをpostに設定

  var payload = {
    body : ""
  };
  params.payload=payload; //リクエストペイロードのbodyを一旦セット

  url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages"; //指定のグループチャットにメッセージを送る

  /* json内に「おみくじ」メッセージがあればチャットワークに送信 */
  for each(var obj in json){
    if(obj.body === "おみくじ"){
      params.payload.body = "[info]おみくじの結果:" + generateOmikuji() + "[/info]"; //チャットワークに送るテキスト
      UrlFetchApp.fetch(url, params);  //チャットワークAPIエンドポイントにリクエスト
    }
  }
}

//乱数でおみくじの結果を生成
function generateOmikuji(){

  var results=["大吉","中吉","小吉","吉","半吉","末吉","凶"];
  return results[Math.floor(Math.random()*results.length)];

}

前半の4~13行目でチャットワークの該当のグループチャットから未取得のメッセージを配列jsonに格納します。

15行目以降がおみくじの結果を生成して、チャットワークにメッセージを送信する部分です。

for each文で配列json内に格納されたすべてのメッセージについて、そのbodyつまり本文を確認し「おみくじ」と一致した場合に、おみくじを引きます。

function generateOmikuji()はおみくじの結果を生成する関数ですね。

今回は、28行目を修正して、チャットワークへ送る文字列にToや返信を付与していきたいと思います。

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

チャットワークでは角括弧のタグを用いることで様々な表記をすることができるメッセージ記法を利用することができます。

  • [info]~[/info]:挟まれた範囲を四角で囲う
  • [qt]:引用マーク
  • [hr]:直線を引く

ちなみに改行をする場合は「\n」を使います。

今回はおみくじの結果を返すときにToや返信をつけたいと思いますので、その方法について解説をします。

メッセージにToをつける

チャットワークではToをつけて連絡することにより、特定の相手に話しかけることができます。

メッセージ記法としてTo機能を使う場合は

[To:{account_id}]

とします。Tは大文字なので注意下さいね。

配列jsonに格納されたメッセージは

[
  {
    "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
  }
]

という構造となっています。”account_id”を持っていますのでこれを使えばOKです。

チャットワークへの送る文字列を

params.payload.body = "[To:" + obj.account.account_id  + "][info]おみくじの結果:" + generateOmikuji() + "[/info]"; //チャットワークに送るテキスト

とすれば良さそうですね。

実行してみますと

チャットワークにToで送る

いちおうできましたが「To」マークとアイコンだけで、なんだか寂しいですね。しかも凶…

To機能のタグは、名前まで返してくれないので

[To:{account_id}] {name}さん

としてあげるのが親切そうです。

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

として、実行をしますと

チャットワークに名前つきのToで送る

これでいつものToの表示になりました。

しかし、また凶…不吉な。

返信でメッセージをする

次に返信をしてみましょう。

返信でメッセージを送ると「RE」というマークがつき、特定のメッセージへの返信になります。

ちなみに、この「RE」マークですが、クリックすると元のメッセージに移動できるので便利です。

メッセージ記法として返信機能を使う場合は

[rp aid={account_id} to={room_id}-{message_id}]

とします。To機能よりもだいぶ複雑になりましたね。

“account_id”,”message_id”は配列jsonに含まれていますし、ルームIDはもともと知っていますので、要素としては揃っています。

またToと同様に名前を入れたほうが親切なので

[rp aid={account_id} to={room_id}-{message_id}] {name}さん

としましょう。

スクリプトはちょっと長くなりましたが

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

とします。

実行してみますと

チャットワークに返信でメッセージを送る

バッチリですね。しかも大吉…やった!

…て、なんかもてあそばれていますね。

まとめ

チャットワークのメッセージ記法を使って、おみくじの結果をToにしたり返信にしたりしてみました。

これでだいぶおみくじチャットもサマになってきましたね。

しかし、いかんせんコードが読みづらい…

次回は、チャットワークのメッセージを取り出す、メッセージを送るといった汎用的な機能を関数化してコードをスッキリさせていきたいと思っています。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
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をコピーしました