Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@akky-tys

GoogleChat のREST APIを叩いてみるよ スペース情報をとってくる編

前回からの続きだよ
前回は公式をそのままコピーしてBotを作成し、使ってみるところまでやったよ。
今度はもうちょっと別の動きをさせるために、まずはREST APIの使い方を学ぶよ。

GoogleChatにはどんなAPIがあるの?

Chatに用意されたREST APIはこんな感じだよ。

https://developers.google.com/hangouts/chat/reference/rest

【REST API】
space.get 特定のスペースの情報を返す。
space.list ボットが追加されているスペースを返す。
space.members.get そのスペースのメンバーを返す。
space.members.list スペースのボット以外のメンバーを返す。
space.messages.create メッセージを作る。
space.messages.delete メッセージを削除する。
space.messages.get メッセージを受け取る。
space.messages.update メッセージを更新する。

これらのAPIを使いこなせるように、下記の手順で進めていくよ。

1. サービスアカウントの作成
2. プロジェクトとスクリプトの結びつけ
3. サービスアカウントを利用して認証し、APIを叩く
今日はspace.getを使ってみるよ。

1.サービスアカウントの作成

https://developers.google.com/hangouts/chat/how-tos/service-accounts#creating_and_using_a_service_account

公式ドキュメント大好きだからね、ステップ1の手順に沿ってサービスアカウントと秘密鍵を作成するよ。

GoogleCloudPlatformで作業をするよ。
[IAMと管理]> [サービスアカウント]で[サービスアカウントを作成]をクリック。
スクリーンショット 2020-07-19 13.10.11.png

名前をつけて[作成]をクリック。 本当はちゃんと名付けているよ。
スクリーンショット 2020-07-19 13.11.21.png

[このサービス アカウントにプロジェクトへのアクセスを許可する]
[ユーザーにこのサービス アカウントへのアクセスを許可]の手順は空白のまま先に進むよ。

鍵をJSON形式で作成するよ。
スクリーンショット 2020-07-19 13.12.18.png
スクリーンショット 2020-07-19 13.12.27.png
秘密鍵がダウンロードされるから、大切に保管しようね。

2.プロジェクトとスクリプトの結びつけ

Google Apps Scriptで作業をするよ。

対象のスクリプトファイルを開いて[ファイル]>[プロジェクトのプロパティ ]のスクリプトのプロパティを開くよ。
[+行を追加]で 名前と値を入れるよ。値にはさっきダウンロードした秘密鍵をコピーして入れるよ。

スクリーンショット 2020-07-19 13.21.52.png

次に、CloudPlatformのプロジェクトに関連付けをするよ。
GoogleCloudPlatformの該当プロジェクトのダッシュボードを開いて、プロジェクト番号をコピーするよ。
スクリーンショット 2020-07-19 13.26.25.png

スクリプトファイルの[リソース]>[CloudPlatformのプロジェクト...]を開いて、コピーしたプロジェクト番号で設定をするよ。
スクリーンショット 2020-07-19 13.25.33.png

設定が完了すると、画像みたいに現在関連づけられているプロジェクトとして出てくるよ。
REST APIを使う準備ができたよ:relaxed:

3.サービスアカウントを利用して認証する

サービスアカウントでの認証はライブラリを使って行ったよ。
下記の記事が:relaxed:にもわかるほど、丁寧でわかりやすいので、参考にさせていただいたよ。

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~

*GSApp.initでエラーがでて右往左往したのですが、「chromev8搭載のapps scriptランタイム」を無効にしたら、解消しました。
ライブラリに互換性のない箇所があるのかな・・
今だともっと良いライブラリがあるのかもなあ・・
と、きちんと調べきれていないので、次への宿題にします。

コードは、こんな感じだよー。

MyFunc


  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();

 // XXXXXには、調べたいスペースのリソース名がはいるよ。Chatを開いた時のURLのおしりについているよ。
 // XXXXXをつけないと、Botが参加している全てのスペース情報が戻るよ。(spaces.list)

  var url = "https://chat.googleapis.com/v1/spaces/XXXXXX"
   options = {
    "method" : "GET",
    "muteHttpExceptions": true,
    "headers": {
      'Authorization': 'Bearer ' +  tokens[jsonKey.client_email].token
     }
  };
  var res = UrlFetchApp.fetch(url,options);
  console.log(res);

こんな感じの戻り値があったよ!

{
  "name": "spaces/XXXXXXXX",
  "type": "ROOM",
  "singleUserBotDm": false,
  "threaded": true,
  "displayName": "ルームの名前"
}

今日はここまでにするよ。
次回は、POSTでメッセージを送るようにするよ。:relaxed:

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

Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~

Google Chat API
公式さん、全面的にありがとう。大好き:relaxed:

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
akky-tys
人生のスタートダッシュでこけた人。今は、2周遅れぐらいで走ってます。みんなはやいねー。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?