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


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


[前回](https://qiita.com/akky-tys/items/46b0217bd80f73203c47)は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;
```



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

![スクリーンショット 2020-07-23 15.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/e0ecf2cb-23b5-ee15-680e-d30c92325b5c.png)

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


###もうちょっと踏み込んで・・スレッドを統一しよう
こんな可愛いBotなんだけど、何回も送っているとスレッドが乱立するよ。
ちょっとうざいよね。

![スクリーンショット 2020-07-23 15.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/0683cdc8-1354-2bf5-78b3-7350703326ca.png)

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

![スクリーンショット 2020-07-23 15.31.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/ae1c8908-02df-e572-87e3-08499f98464d.png)


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

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

はいどーん。

![スクリーンショット 2020-07-23 15.39.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/36c010fd-f6fc-6dbb-eec7-404787e31d9d.png)


いい感じだね。




### 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
![スクリーンショット 2020-07-23 15.55.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/601b3ad5-9e6c-acd4-a4b6-4be0aef38a1d.png)　
転送先のルーム
![スクリーンショット 2020-07-23 15.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/56593748-a5a3-9c7f-1fb7-7b3472e888ed.png)



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


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

[GoogleChatAPI](https://developers.google.com/hangouts/chat)
何度でも言うよ、公式さんありがとう:relaxed: