GoogleChat のREST APIを叩いてみるよ メッセージを送る編


おはよう、4連休だね
この4日間でどれだけBotが可愛くなるか楽しみだよ。頑張るよ!

前回はGoogleChatのspaces.getを叩いて結果を取得するところまで進めたね。
今回は、spaces.messages.createで、メッセージを送るようにするよ。

spaces.messages.createについて学ぼう

まずは、パラメーターとリクエストボディをみてみるね。

HTTPリクエストはこんな感じ。
XXXXXはスペースのコードが入るよ。(ChatをブラウザでみたときのURLのおしりがそうだよ。)

https://chat.googleapis.com/v1/XXXXXXX/messages

リクエストボディはMessage形式で、前々回のonMessage(event)関数を実施したときに取得できた、event.messageと同じだよ。
ただし、こちらで設定できる箇所は限られてくるみたいだったよ。
その辺りは、お試ししながら確認しましょう。

詳細は公式をチェックしてね。
https://developers.google.com/hangouts/chat/reference/rest/v1/spaces.messages#Message

spaces.messages.createでメッセージを送ろう


/**↓ここは前回と同じだよ**/

  var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));

  // GoogleChatの認証をせってい。
  var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/chat.bot"], jsonKey.client_email);

  //トークンを取得するユーザを設定して、トークンを取得
  var tokens = serverToken.addUser(jsonKey.client_email).requestToken().getTokens();

/**↑ここは前回と同じだよ**/


 //プレーンテキストメッセージとして送るよ。
  var message ={"text" :"ここに入れた言葉が送られるよ"};

  // XXXXXXXはメッセージを送りたいスペースのリソース名だよ。
  var url = "https://chat.googleapis.com/v1/spaces/XXXXXXX/messages/";

  options = {
   "method"  : "Post", // 前回はGetだったけれど今回はPOSTで送るよ。
   "payload" :JSON.stringify(message), 
   "muteHttpExceptions": true,
   "headers": {
      "Authorization": 'Bearer ' +  tokens[jsonKey.client_email].token,
      "Content-Type" : 'application/json; charset=UTF-8' //おっちょこちょいだからこれを忘れて、最初動かなかったよ。
    }
  }
  var res = UrlFetchApp.fetch(url,options);

  console.log(res;

これで実行すると、はいどーん!

わー、Botが喋ったよー。可愛いやつだね。

もうちょっと踏み込んで・・スレッドを統一しよう

こんな可愛いBotなんだけど、何回も送っているとスレッドが乱立するよ。
ちょっとうざいよね。

戻り値をみてみると、送ったメッセージの情報が乗っているよ。
その中にスレッドのリソース名があるから、それを使って同じスレッドに送ってみよう。

修正点はこんな感じだよ。
threadに情報を持たせるよ。

  var message ={
    "text" : text,
    "thread": {
      "name": XXXXX //オレンジで囲った一文をまるまるコピーするよ
    }
  };

はいどーん。

いい感じだね。

onMessage()と組み合わせてみよう

前々回にやったonMessageと組み合わせて、取得したメッセージを他のチャットルームに転送するようにしてみよう。

function onMessage(event) {

  var name = name = event.user.displayName;
  var message = name + " said \"" + event.message.text + "\"";
  var spaceId = "XXXXXX";

  /**上記メッセージ送信部分を関数にしているよ。やっていることは丸々いっしょだよ。**/
  sendMessage(message,spaceId,"");


  return { "text": "Forwarded the message (" + message + ")" };
}

DM
 
転送先のルーム

いい感じだね。
今日はここまで! 次回はもっとBOTを賢くするよ!

参考にさせていただいたもの

GoogleChatAPI
何度でも言うよ、公式さんありがとう