会議スペースのメンバーを管理する

会議スペースのメンバーは、会議スペースでロールを持つように構成されたユーザーです。これらのユーザーは、接続の許可をリクエスト(ノック)することなく会議スペースに参加できます。

会議の主催者は会議スペースに自動的に入室できますが、参加リクエストなしで会議に参加できる会議スペースのメンバーを追加で設定することもできます。また、会議で RoleCOHOST など)を持つようにメンバーを構成することもできます。これにより、会議中に会議を共同管理できますが、アーティファクトの自動生成やモデレーション設定の変更はできません。ノックせずに会議スペースにアクセスする方法について詳しくは、AccessType をご覧ください。

spaces.members リソースには、nameemailrole の各フィールドが含まれます。

なお、会議スペースのメンバーは参加者とは異なります。参加者とは、通話に参加しているユーザー、コンパニオン モードを使用しているユーザー、閲覧者として視聴しているユーザー、通話に接続されている会議室デバイスのことです。ユーザーごとに 1 つの conferenceRecords.participants リソースがあります。

一般的なメソッドの動作

Meet REST API を使用して会議スペースのメンバーを管理する場合、メソッドは次の規則を共有します。

  • パスパラメータ: 各メソッドはパスパラメータを使用します。createlistbatchUpdate メソッドは、parent フィールドを使用して会議スペース(spaces/{space})を参照します。deletegetpatch メソッドは、name フィールドを使用して、会議スペースとメンバー名(spaces/{space}/members/{member})で結果をフィルタします。

  • 戻り値の型: creategetpatch メソッドは、Member リソースのインスタンスを返します。list メソッドと batchUpdate メソッドは Member リソースのリストを返します(delete は空のレスポンス本文を返します)。

  • フィールド マスク: delete を除くすべてのメソッドでフィールド マスクがサポートされています。creategetlist メソッドでは、SystemParameterContextfields パラメータを使用して、返すフィールドを指定できます。fields パラメータを省略すると、API レスポンスのデフォルトは "name,email,role,user" になります。patch メソッドと batchUpdate メソッドでは、updateMask を使用して変更するフィールドを指定します。

  • FieldMask の使用: FieldMask は、API 呼び出し元がリクエストで返すか変更するフィールドを一覧表示する方法です。オブジェクト内の特定のフィールドのみを使用し、他のフィールドは変更しないように指定するフィールドのカンマ区切りリストです。FieldMask を使用すると、API は不要な作業を回避し、パフォーマンスを向上させることができます。フィールド マスクの詳細については、Google Sheets API のフィールド マスクを使用するをご覧ください。

メンバーを作成する

会議スペースにメンバーを追加するには、spaces.members リソースの create メソッドを使用します。

次のコードサンプルは、メンバーの作成方法を示しています。

Java

import com.google.apps.meet.v2.Member;
import com.google.apps.meet.v2.SpacesServiceClient;

public class CreateMember {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      Member member = Member.newBuilder()
          .setEmail("user@example.com")
          .setRole(Member.Role.COHOST)
          .build();
      Member response = client.createMember("spaces/SPACE_NAME", member);
      System.out.println("Member created: " + response.getName());
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function createMember(spaceName, email) {
  const client = new SpacesServiceClient();
  const [response] = await client.createMember({
    parent: spaceName,
    member: {
      email: email,
      role: 'COHOST',
    },
  });
  console.log(`Member created: ${response.name}`);
  return response;
}

Python

from google.apps import meet_v2

def create_member(space_name, email):
    client = meet_v2.SpacesServiceClient()
    member = meet_v2.Member(
        email=email,
        role=meet_v2.Member.Role.COHOST,
    )
    response = client.create_member(parent=space_name, member=member)
    print(f"Member created: {response.name}")
    return response

Apps Script

function createMember(spaceName, email) {
  const response = UrlFetchApp.fetch(
    `https://meet.googleapis.com/v2/${spaceName}/members`,
    {
      method: 'post',
      contentType: 'application/json',
      headers: {
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
      },
      payload: JSON.stringify({
        email: email,
        role: 'COHOST',
      }),
    }
  );
  const member = JSON.parse(response.getContentText());
  Logger.log('Member created: ' + member.name);
  return member;
}

cURL

curl -X POST \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "role": "COHOST"
  }'

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名の値は、会議スペースの一意のサーバー生成 ID に置き換えます。

メンバーの詳細を取得する

特定のメンバーの詳細を取得するには、spaces.members リソースで get メソッドを使用します。

次のコードサンプルは、メンバーを取得する方法を示しています。

Java

import com.google.apps.meet.v2.Member;
import com.google.apps.meet.v2.SpacesServiceClient;

public class GetMember {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      Member response =
          client.getMember("spaces/SPACE_NAME/members/MEMBER_NAME");
      System.out.println("Member role: " + response.getRole());
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function getMember(memberName) {
  const client = new SpacesServiceClient();
  const [response] = await client.getMember({name: memberName});
  console.log(`Member role: ${response.role}`);
  return response;
}

Python

from google.apps import meet_v2

def get_member(member_name):
    client = meet_v2.SpacesServiceClient()
    response = client.get_member(name=member_name)
    print(f"Member role: {response.role.name}")
    return response

Apps Script

function getMember(memberName) {
  // memberName format: "spaces/{space}/members/{member}"
  const response = UrlFetchApp.fetch(
    `https://meet.googleapis.com/v2/${memberName}`,
    {
      method: 'get',
      headers: {
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
      },
    }
  );
  const member = JSON.parse(response.getContentText());
  Logger.log('Member role: ' + member.role);
  return member;
}

cURL

curl -X GET \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME" \
  -H "Authorization: Bearer ACCESS_TOKEN"

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名とメンバー名の値は、会議スペースとメンバーの一意のサーバー生成 ID に置き換えます。

リストのメンバー

会議スペースのすべてのメンバーを一覧表示するには、spaces.members リソースで list メソッドを使用します。

次のコードサンプルは、メンバーを一覧表示する方法を示しています。

Java

import com.google.apps.meet.v2.Member;
import com.google.apps.meet.v2.SpacesServiceClient;

public class ListMembers {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      for (Member member :
          client.listMembers("spaces/SPACE_NAME").iterateAll()) {
        System.out.println("Member: " + member.getName() + " (" +
            member.getEmail() + ")");
      }
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function listMembers(spaceName) {
  const client = new SpacesServiceClient();
  const [members] = await client.listMembers({parent: spaceName});
  members.forEach((member) => {
    console.log(`Member: ${member.name} (${member.email})`);
  });
  return members;
}

Python

from google.apps import meet_v2

def list_members(space_name):
    client = meet_v2.SpacesServiceClient()
    response = client.list_members(parent=space_name)
    for member in response:
        print(f"Member: {member.name} ({member.email})")

Apps Script

function listMembers(spaceName) {
  const response = UrlFetchApp.fetch(
    `https://meet.googleapis.com/v2/${spaceName}/members`,
    {
      method: 'get',
      headers: {
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
      },
    }
  );
  const data = JSON.parse(response.getContentText());
  (data.members || []).forEach((member) => {
    Logger.log(`Member: ${member.name} (${member.email})`);
  });
  return data.members;
}

cURL

curl -X GET \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members" \
  -H "Authorization: Bearer ACCESS_TOKEN"

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名の値は、会議スペースの一意のサーバー生成 ID に置き換えます。

メンバーを更新する

会議スペースのメンバーのロールを更新するには、spaces.members リソースで patch メソッドを使用します。

次のコードサンプルは、メンバーを更新する方法を示しています。

Java

import com.google.apps.meet.v2.Member;
import com.google.apps.meet.v2.SpacesServiceClient;
import com.google.protobuf.FieldMask;

public class UpdateMember {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      Member member = Member.newBuilder()
          .setName("spaces/SPACE_NAME/members/MEMBER_NAME")
          .setRole(Member.Role.ROLE_UNSPECIFIED)
          .build();
      FieldMask updateMask =
          FieldMask.newBuilder().addPaths("role").build();
      Member response = client.updateMember(member, updateMask);
      System.out.println("Updated member: " + response.getName());
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function updateMember(memberName) {
  const client = new SpacesServiceClient();
  const [response] = await client.updateMember({
    member: {
      name: memberName,
      role: 'ROLE_UNSPECIFIED',
    },
    updateMask: {
      paths: ['role'],
    },
  });
  console.log(`Updated member: ${response.name}`);
  return response;
}

Python

from google.apps import meet_v2
from google.protobuf import field_mask_pb2

def update_member(member_name):
    client = meet_v2.SpacesServiceClient()
    member = meet_v2.Member(
        name=member_name,
        role=meet_v2.Member.Role.ROLE_UNSPECIFIED,
    )
    update_mask = field_mask_pb2.FieldMask(paths=["role"])
    response = client.update_member(member=member, update_mask=update_mask)
    print(f"Updated member: {response.name}")
    return response

Apps Script

function updateMember(memberName) {
  // memberName format: "spaces/{space}/members/{member}"
  const baseUrl = 'https://meet.googleapis.com/v2/';
  const url = `${baseUrl}${memberName}?updateMask=role`;
  const response = UrlFetchApp.fetch(url, {
    method: 'patch',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
    },
    payload: JSON.stringify({
      role: 'ROLE_UNSPECIFIED',
    }),
  });
  const member = JSON.parse(response.getContentText());
  Logger.log('Updated member: ' + member.name);
  return member;
}

cURL

curl -X PATCH \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME?updateMask=role" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "ROLE_UNSPECIFIED"
  }'

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名とメンバー名の値は、会議スペースとメンバーの一意のサーバー生成 ID に置き換えます。

メンバーをバッチ アップデートする

1 つのリクエストで複数のメンバーのロールを更新するには、spaces.members リソースの batchUpdate メソッドを使用します。

次のコードサンプルは、メンバーを一括更新する方法を示しています。

Java

import com.google.apps.meet.v2.BatchUpdateMembersRequest;
import com.google.apps.meet.v2.BatchUpdateMembersResponse;
import com.google.apps.meet.v2.Member;
import com.google.apps.meet.v2.SpacesServiceClient;
import com.google.apps.meet.v2.UpdateMemberRequest;
import com.google.protobuf.FieldMask;
import java.util.Arrays;

public class BatchUpdateMembers {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      UpdateMemberRequest req1 = UpdateMemberRequest.newBuilder()
          .setMember(Member.newBuilder()
              .setName("spaces/SPACE_NAME/members/MEMBER_1")
              .setRole(Member.Role.COHOST)
              .build())
          .build();
      UpdateMemberRequest req2 = UpdateMemberRequest.newBuilder()
          .setMember(Member.newBuilder()
              .setName("spaces/SPACE_NAME/members/MEMBER_2")
              .setRole(Member.Role.ROLE_UNSPECIFIED)
              .build())
          .build();
      BatchUpdateMembersRequest request =
          BatchUpdateMembersRequest.newBuilder()
              .setParent("spaces/SPACE_NAME")
              .addAllRequests(Arrays.asList(req1, req2))
              .setUpdateMask(
                  FieldMask.newBuilder().addPaths("role").build())
              .build();
      BatchUpdateMembersResponse response =
          client.batchUpdateMembers(request);
      System.out.println(
          "Updated " + response.getMembersCount() + " members.");
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function batchUpdateMembers(spaceName, member1, member2) {
  const client = new SpacesServiceClient();
  const [response] = await client.batchUpdateMembers({
    parent: spaceName,
    requests: [
      {
        member: {name: member1, role: 'COHOST'},
      },
      {
        member: {name: member2, role: 'ROLE_UNSPECIFIED'},
      },
    ],
    updateMask: {
      paths: ['role'],
    },
  });
  console.log(`Updated ${response.members.length} members.`);
  return response;
}

Python

from google.apps import meet_v2
from google.protobuf import field_mask_pb2

def batch_update_members(space_name, member_1, member_2):
    client = meet_v2.SpacesServiceClient()
    requests = [
        meet_v2.UpdateMemberRequest(
            member=meet_v2.Member(
                name=member_1, role=meet_v2.Member.Role.COHOST
            )
        ),
        meet_v2.UpdateMemberRequest(
            member=meet_v2.Member(
                name=member_2, role=meet_v2.Member.Role.ROLE_UNSPECIFIED
            )
        ),
    ]
    update_mask = field_mask_pb2.FieldMask(paths=["role"])
    response = client.batch_update_members(
        parent=space_name, requests=requests, update_mask=update_mask
    )
    print(f"Updated {len(response.members)} members.")
    return response

Apps Script

function batchUpdateMembers(spaceName, member1, member2) {
  const url =
      `https://meet.googleapis.com/v2/${spaceName}/members:batchUpdate`;
  const response = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
    },
    payload: JSON.stringify({
      requests: [
        {member: {name: member1, role: 'COHOST'}},
        {member: {name: member2, role: 'ROLE_UNSPECIFIED'}},
      ],
      updateMask: 'role',
    }),
  });
  const data = JSON.parse(response.getContentText());
  Logger.log(`Updated ${data.members.length} members.`);
  return data.members;
}

cURL

curl -X POST \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members:batchUpdate" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "requests": [
      {
        "member": {
          "name": "spaces/SPACE_NAME/members/MEMBER_1",
          "role": "COHOST"
        }
      },
      {
        "member": {
          "name": "spaces/SPACE_NAME/members/MEMBER_2",
          "role": "ROLE_UNSPECIFIED"
        }
      }
    ],
    "updateMask": "role"
  }'

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名とメンバー名の値は、会議スペースとメンバーの一意のサーバー生成 ID に置き換えます。

メンバーを削除する

会議スペースからメンバーを削除するには、spaces.members リソースの delete メソッドを使用します。

次のコードサンプルは、メンバーを削除する方法を示しています。

Java

import com.google.apps.meet.v2.SpacesServiceClient;

public class DeleteMember {
  public static void main(String[] args) throws Exception {
    try (SpacesServiceClient client = SpacesServiceClient.create()) {
      client.deleteMember("spaces/SPACE_NAME/members/MEMBER_NAME");
      System.out.println("Member deleted.");
    }
  }
}

Node.js

const {SpacesServiceClient} = require('@google-apps/meet').v2;

async function deleteMember(memberName) {
  const client = new SpacesServiceClient();
  await client.deleteMember({name: memberName});
  console.log('Member deleted.');
}

Python

from google.apps import meet_v2

def delete_member(member_name):
    client = meet_v2.SpacesServiceClient()
    client.delete_member(name=member_name)
    print("Member deleted.")

Apps Script

function deleteMember(memberName) {
  // memberName format: "spaces/{space}/members/{member}"
  UrlFetchApp.fetch(`https://meet.googleapis.com/v2/${memberName}`, {
    method: 'delete',
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
    },
  });
  Logger.log('Member deleted.');
}

cURL

curl -X DELETE \
  "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME" \
  -H "Authorization: Bearer ACCESS_TOKEN"

ACCESS_TOKEN は、API へのアクセス権を付与するアクセス トークンに置き換えます。

スペース名とメンバー名の値は、会議スペースとメンバーの一意のサーバー生成 ID に置き換えます。