GASとGCPでGoogle Chat Botを作る

# はじめに
2,3年くらい前に、このあたりの記事を参考にGoogle Chat（旧Google Hangout）で動くBOTをつくりました。

https://qiita.com/tarosaiba/items/a1ba05cbfd97b708e0e6

昨年2022年9月をもってGASのクラシックエディタが廃止され、デプロイの仕方が微妙に変わったのでここに記しておきます。

## 1. スクリプトの作成 
チャットルームにてbotとやり取りを行うには Google Chat API を使用します。

### スクリプト作成
DriveまたはSpreadsheetから新しいスクリプトを作成します。
- プロジェクト名を入力
- サンプルスクリプトを記入

公式のガイドでサンプルスクリプトを用意してくれているので、自分用のスクリプトとしてエディタにコピペします。


https://developers.google.com/chat/how-tos/apps-script

ただし上記のサンプルスクリプトには誤りがあり、[こちら](https://developers.google.com/chat/api/guides/message-formats/events)を参考に以下のように書き換える必要があります。

```diff_javascript
/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  var name = "";

  if (event.space.type == "DM") {
    name = "You";
  } else {
    name = event.message.sender.displayName;
  }
  var message = name + " said \"" + event.message.text + "\"";

  return { "text": message };
}
```

このスクリプトは、ダイレクトメッセージを送る、もしくはグループ内でメンションを付けたときに、メッセージ内容をユーザ名と一緒にオウム返しする機能が実装されています。

ソースコードはいったんそのままで、プロジェクト名を適当に入力して保存。

### デプロイ
- 『デプロイ』 → 『新しいデプロイ』 → 『ウェブアプリ』
- 説明などがあれば追記し、『デプロイ実行』
- デプロイIDをコピーしメモ帳などにキープしておく

![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/2d671724-0ed8-54de-6c2e-aa8179169e2c.png)
![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/02e2c19c-3b31-8b9d-d7f8-9a819df5107f.png)



## 2. GCP連携
『設定』 → 『Google Cloud Platform（GCP）プロジェクト』
- 手順1　GCPにてプロジェクトを作成
- 手順2　プロジェクト番号をコピーしてGASの設定画面に貼り付ける（OAuthの認証が必要と怒られたらそちらを先にやる）

![Screenshot_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/9020fecc-589a-d0cf-7f7b-60d02287fcca.png)

手順1：
『APIとサービス』→『OAuth同意画面を構成』

必ず、アプリケーションに関する情報を使用して OAuth 同意画面を構成してください。
・User Type：内部
・アプリ情報：アプリ名
・デベロッパーの連絡先情報：自分のメールアドレス

![Screenshot_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/408a1ca7-5ef5-177f-31b7-fd0030f42371.png)
![Screenshot_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/b6bff707-7a1a-3599-b5bc-05ccc15c0e9d.png)

## 3. API有効化
GCPの管理画面にて、『APIライブラリ』から『Google Chat API』を選択し有効にする

![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/de7a70b0-52be-054c-b2a0-e7e5b12c7370.png)


「構成」タブ：アプリケーションの情報を入力
- ボット名 ： ボットを検索したり、@をつけてメンションするときの名前。
- アバターのURL ： Botのアイコン。正方形で縦128px横128px以上。（https）
- 説明 ： Botの簡単な説明。検索したときに表示される。
- 機能 ： Botの用途を選択する。
- 接続設定 ： Apps Script projectを選択し、メモ帳にコピーしたデプロイIDを入力。
- 権限 ： いったん自分だけにする。

![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/3b34fd45-6b11-2f7a-bbc8-e073ea66498f.png)

![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/d1c69633-890d-88a3-19ff-3a0a617b82e0.png)
![Screenshot_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747710/60abb883-5e02-539b-8034-86b8f9f91b73.png)


## 4. BOTにメッセージを送ってみる
作成したBOTに@メンションをつけてメッセージを送ってみます。
メッセージが返ってくれば成功です。

もしBOTの応答しない場合は、マニフェストファイルを開いて
```diff_json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "libraries": [{
      "userSymbol": "OAuth2"
    }]
  },
  "exceptionLogging": "STACKDRIVER"
}
```
のようになっているところを
```diff_json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "libraries": [{
      "userSymbol": "OAuth2"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "chat": {
  }
}

```
とchatの権限を付け加えてあげると、動くようになると思います。