Workato：Google WorkspaceのGoogleグループを作成する


# はじめに
Google Workspaceを利用している組織においては、ユーザーのプロビジョニングや、Googleグループの作成やユーザー追加を自動化したい要望があるかと思います。Workatoを利用すると、ユーザーのプロビジョニングはもちろんのこと、Googleグループの作成も自動化することが出来ます。

今回は、Workatoを利用してGoogleグループの作成を行う手順について説明します。


## 前提知識

前提知識として、Google Workspace Admin SDK および Google Cloud Platformの理解が必要となります。また、一部はWorkatoのGoogle Workspaceコネクターではなく、HTTPコネクターを利用して対応することになりますので、OAuth2による認証方法およびGoogle CloudにおけるOAuthによるAPIの利用方法について理解しておく必要があります。

なお、このページでは、Google WorkspaceおよびGoogle Cloud Platformの詳細に関する説明は行いません。（Workatoとの連携に必要な説明のみ行います）

## 必要な処理

WorkatoにおいてGoogleグループを作成するには、以下の処理が必要となります。

- グループの作成
- 作成したグループに対するオーナーの追加
- グループの設定変更

## 利用するAPI

グループの作成にはDirectory APIを使用し、グループの設定変更にはGroup Setting APIを使用します。詳細は下記URLをご参照ください。

https://support.google.com/a/answer/10427204?hl=ja

https://developers.google.com/identity/protocols/oauth2

# 事前作業
## Groups Settings APIの有効化（Google Cloud Platform）
Groups Settings APIを利用するには、Group Settings APIの有効化が必要となります。
Google Cloud PlatformのAPIライブラリで、Google Settings APIの有効化を行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/8eb8d1a9-daba-f3aa-1964-e92c1a232d35.png)


## OAuthクライアントIDの作成（Google Cloud Platform）

APIを利用して作成したグループの設定を参照したり編集するには、Group Settings APIを使用します。

Group Settings APIを利用するには、OAuthクライアントIDの作成が必要になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/3d4874b7-9b12-fa7b-601b-ec7ea46ed7ac.png)

下記ページを参考にOAuthクライアントIDを作成します。

https://support.google.com/workspacemigrate/answer/9222992?hl=ja

なお、Workato連携において個別に必要となる設定事項については下記を参照ください。

### OAuth同意画面

#### スコープの追加
`https://www.googleapis.com/auth/apps.groups.settings` をスコープに追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/d0af9bb8-43ad-22e9-d2d5-581aa05f04a2.png)

### OAuth クライアントIDの作成

アプリケーションの種類は「ウェブアプリケーション」を選択し、承認済みのリダイレクトURIに `https://www.workato.com/oauth/callback` を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/cbb6b032-8075-f4b3-0d62-6fd5ed16209e.png)

# コネクションの作成

## Google Workspaceコネクターの追加

### １．Google Workspaceコネクターを追加ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/a41a9671-7448-ff66-b37e-f49a0fb1fb5b.png)

### ２．「Connect」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/0bcd2ad2-ce84-3d32-deea-f4f432a33f2f.png)

### ３．Workatoに許可する情報を選択し、「Continue」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/5b85d887-e895-d371-11a0-31a9ba4187e7.png)

### ４．「Connect」が「Disconnect」になれば、接続完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/cc81d603-85ad-770b-fe4c-7f154727711f.png)

### HTTPコネクターの追加

### １．HTTPコネクターを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/813276d8-4c61-2ce6-6232-27f51275c9ba.png)

### ２．HTTPコネクターの設定を行います。設定後「Connect」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/003f744e-5f52-d5aa-b003-64b05e723bfa.png)

※以下に示す設定項目以外はデフォルトのままとします。

#### Authenticate Type
OAuth 2 (authorization code grant)

#### OAuth2 authorization URL
`https://accounts.google.com/o/oauth2/v2/auth?response_type=code&scope=https://www.googleapis.com/auth/apps.groups.settings&access_type=offline`

#### OAuth2 token URL
`https://accounts.google.com/o/oauth2/token`

#### OAuth2 client ID
Google Cloud Platformの「OAuthクライアントID作成」時に発行されたクライアント ID

#### OAuth2 client secret
Google Cloud Platformの「OAuthクライアントID作成」時に発行されたクライアント シークレット

### ３．内容確認のうえ、「許可」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/2a3f2b70-fde0-342c-0c31-fe872b190f1d.png)

### ４．「Connect」が「Disconnect」になれば、接続完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/9a91a732-b82f-e72d-af23-df47ce5d68e4.png)

# レシピの作成
次のようなレシピを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/50504dc5-d2f6-3379-4776-8a9866466d89.png)

## トリガー
任意のトリガーを定義します。

## アクション
### Step2
変数と値を定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6b6efa00-94b7-366e-0f71-1f71410a069b.png)

### Step3
グループ作成のための定義を行います。
#### １．Google Workspace コネクターを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e4f249be-011c-5604-6212-9834d84d3848.png)

#### ２．Custom actionを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/a61bdf6f-e645-fec1-1ed7-30037a8d4825.png)

#### ３．Connectionを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/9c595f6e-7954-4875-5f49-5e53b21e7daf.png)

#### ４．次のとおり定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6aa4ea80-069d-0a2f-a06b-2de53c03d693.png)

##### Action name
任意の名称

##### Method
POST

##### Path
`/admin/directory/v1/groups`

##### Request type
JSON request body

##### Response type
JSON response

##### Input - Request body parameters
「Use JSON」をクリックし、以下のJSONをもとにスキーマを作成します。

```
{
   "email": "sales_group@example.com",
   "name": "Sales Group",
   "description": "This is the Sales group."
}
```

##### Input - Data
各項目に対して、変数をデータピルより選択してセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/581b75c8-e956-7a2d-c1de-cc0e3aece438.png)

##### Response body
「Use JSON」をクリックし、以下のJSONをもとにスキーマを作成します。

```
{
  "kind": "",
  "etag": "",
  "id": "",
  "email": "",
  "role": "",
  "type": "",
  "status": ""
}
```

### Step4
グループに対するオーナー追加のための定義を行います。

#### １．Step3の１～３と同様の操作を行います。

#### ２．次のとおり定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/799461b2-9afc-3184-7f6d-f653dfb8624f.png)

##### Action name
任意の名称

##### Method
POST

##### Path
`/admin/directory/v1/groups/<group_email>/members`
※`<group_email>` は、データピルより変数を選択してセットします。

##### Request type
JSON request body

##### Response type
JSON response

##### Input - Request body parameters
「Use JSON」をクリックし、以下のJSONをもとにスキーマを作成します。

```
{
   "email": "liz@example.com",
    "role": "MEMBER"
}
```

##### Input - Data
Emailに対して、変数をデータピルより選択してセットします。Roleには、 `OWNER` と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/5f10546c-760d-d690-15b9-ca7f98f4dc6f.png)


##### Response body
「Use JSON」をクリックし、以下のJSONをもとにスキーマを作成します。

```
{
   "kind": "directory#member",
   "id": "group member's unique ID",
   "email": "liz@example.com",
   "role": "MEMBER",
   "type": "GROUP"
  }
```

### Step5
グループの設定を変更します。

なお、Googleグループの仕様あるいは不具合により、 **グループの設定変更を何らか行わないと、本来メンバー全員が参照可能なグループであっても、「すべてのグループ」に表示されない** 場合があります。設定項目の変更が無い場合は、とりあえずデフォルト値をセットするのが良いでしょう。

#### １．HTTPコネクターを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/524bdc7c-4b38-b4e0-6279-b776a503270c.png)

#### ２．「Send request」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/99cb47d3-8616-c615-3608-bf9aa141b100.png)

#### ３．作成したコネクションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b3e47b69-4f39-87d5-daa7-83e3724a7b6e.png)

#### ４．次のとおり定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/72fccc46-857d-70df-449f-4b215eca6cab.png)

##### Request name
任意の名称

##### Method
PATCH

##### Request URL
`https://www.googleapis.com/groups/v1/groups/<group_email>`
※`<group_email>` は、データピルより変数を選択してセットします。

##### Request content type
JSON

##### Request body
必要な設定内容に応じて定義します。

```
{"WhoCanJoin":"CAN_REQUEST_TO_JOIN"}
```

※パラメータは以下を参照ください。

https://developers.google.com/admin-sdk/groups-settings/v1/reference/groups


##### Request headers
以下のキーおよび値を追加します。

```
Header name: Content-Type
Value: application/json
```

##### Response content type
JSON

##### Encoding
UTF-8

##### Response body
「Use JSON」をクリックし、以下のJSONをもとにスキーマを作成します。

```
{
  "kind": "groupsSettings#groups",
  "email": "test-group@example.local",
  "name": "test-group",
  "description": "Test group",
  "whoCanJoin": "CAN_REQUEST_TO_JOIN",
  "whoCanViewMembership": "ALL_MEMBERS_CAN_VIEW",
  "whoCanViewGroup": "ALL_MEMBERS_CAN_VIEW",
  "whoCanInvite": "ALL_MANAGERS_CAN_INVITE",
  "allowExternalMembers": "false",
  "whoCanPostMessage": "ANYONE_CAN_POST",
  "allowWebPosting": "true",
  "maxMessageBytes": 26214400,
  "isArchived": "false",
  "archiveOnly": "false",
  "messageModerationLevel": "MODERATE_NONE",
  "replyTo": "REPLY_TO_IGNORE",
  "customReplyTo": "",
  "sendMessageDenyNotification": "false",
  "defaultMessageDenyNotificationText": "",
  "showInGroupDirectory": "true",
  "allowGoogleCommunication": "false",
  "membersCanPostAsTheGroup": "false",
  "messageDisplayFont": "DEFAULT_FONT",
  "includeInGlobalAddressList": "true",
  "spamModerationLevel": "MODERATE",
  "whoCanLeaveGroup": "ALL_MEMBERS_CAN_LEAVE",
  "whoCanContactOwner": "ANYONE_CAN_CONTACT",
  "whoCanAdd": "ALL_MANAGERS_CAN_ADD",
  "customFooterText": "",
  "includeCustomFooter": "false",
  "whoCanAddReferences": "NONE",
  "whoCanAssignTopics": "NONE",
  "whoCanUnassignTopic": "NONE",
  "whoCanTakeTopics": "NONE",
  "whoCanMarkDuplicate": "NONE",
  "whoCanMarkNoResponseNeeded": "NONE",
  "whoCanMarkFavoriteReplyOnAnyTopic": "NONE",
  "whoCanMarkFavoriteReplyOnOwnTopic": "NONE",
  "whoCanUnmarkFavoriteReplyOnAnyTopic": "NONE",
  "whoCanEnterFreeFormTags": "NONE",
  "whoCanModifyTagsAndCategories": "NONE",
  "favoriteRepliesOnTop": "true",
  "whoCanApproveMembers": "ALL_MANAGERS_CAN_APPROVE",
  "whoCanModerateMembers": "OWNERS_AND_MANAGERS",
  "whoCanModerateContent": "OWNERS_AND_MANAGERS",
  "whoCanAssistContent": "NONE",
  "whoCanModifyMembers": "OWNERS_AND_MANAGERS",
  "whoCanBanUsers": "OWNERS_AND_MANAGERS",
  "whoCanPostAnnouncements": "OWNERS_AND_MANAGERS",
  "whoCanDeleteTopics": "OWNERS_AND_MANAGERS",
  "whoCanDeleteAnyPost": "OWNERS_AND_MANAGERS",
  "whoCanLockTopics": "OWNERS_AND_MANAGERS",
  "whoCanMoveTopicsIn": "OWNERS_AND_MANAGERS",
  "whoCanMoveTopicsOut": "OWNERS_AND_MANAGERS",
  "whoCanApproveMessages": "OWNERS_AND_MANAGERS",
  "whoCanHideAbuse": "NONE",
  "whoCanMakeTopicsSticky": "NONE",
  "customRolesEnabledForSettingsToBeMerged": "false",
  "enableCollaborativeInbox": "false",
  "whoCanDiscoverGroup": "ALL_IN_DOMAIN_CAN_DISCOVER",
  "defaultSender": "DEFAULT_SELF"
}
```

# 動作確認

以上のレシピを実行し、グループが追加されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6eb74461-5558-7748-131c-0ba2afcc59ba.png)



# 参考情報

https://support.workato.com/en/support/discussions/topics/1000084066

https://venntechnology.com/blog/2017/09/connecting-google-cloud-to-workato

https://support.google.com/a/answer/10427204?hl=ja

https://support.google.com/workspacemigrate/answer/9222992?hl=ja

https://developers.google.com/identity/protocols/oauth2

https://developers.google.com/admin-sdk/directory/v1/guides/manage-groups

https://developers.google.com/admin-sdk/groups-settings/v1/reference/groups

https://developers.google.com/admin-sdk/directory/v1/guides/manage-group-members?hl=ja