3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-23

おはよう、4連休だね:relaxed:
この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;

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

スクリーンショット 2020-07-23 15.23.30.png

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

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

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

スクリーンショット 2020-07-23 15.27.17.png

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

スクリーンショット 2020-07-23 15.31.30.png

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

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

はいどーん。

スクリーンショット 2020-07-23 15.39.02.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 
転送先のルーム
スクリーンショット 2020-07-23 15.55.44.png

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

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

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

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?