Управление участниками переговорной комнаты

Участник конференц-зала — это пользователь, которому назначена определенная роль в конференц-зале. Эти пользователи могут присоединиться к конференц-залу без запроса разрешения на подключение (также известного как «стук в дверь»).

While meeting organizers can automatically enter the meeting space, you can also configure additional meeting space members to join the meeting without knocking. Additionally, members can be configured to have a Role in the meeting, such as COHOST which allows them to co-manage the meeting during a conference, though they cannot configure auto artifacts or alter moderation settings. For more information about accessing a meeting space without knocking, see AccessType .

Ресурс spaces.members включает поля name , email и role .

Обратите внимание, что участник конференц-зала отличается от рядового участника . Рядовой участник — это человек, подключившийся к звонку, использующий режим «Сопровождение» , наблюдающий за происходящим в качестве зрителя, или устройство конференц-зала, подключенное к звонку. Для каждого участника существует отдельный ресурс conferenceRecords.participants .

Типичные модели поведения метода

При управлении участниками переговорного пространства с помощью REST API Meet методы используют следующие соглашения:

  • Параметры пути: Каждый метод использует параметр пути. Методы create , list и batchUpdate используют поле parent для ссылки на конференц-зал ( spaces/{space} ). Методы delete , get и patch используют поле name для фильтрации результатов по конференц-залу и имени участника ( spaces/{space}/members/{member} ).

  • Типы возвращаемых значений: Методы create , get и patch возвращают экземпляр ресурса Member . Методы list и batchUpdate возвращают список ресурсов Member ( delete возвращает пустое тело ответа).

  • Маски полей: Все методы, кроме delete , поддерживают маску поля. Для методов create , get и list можно использовать параметр fields в SystemParameterContext , чтобы указать, какие поля следует вернуть. Если параметр fields не указан, ответ API по умолчанию будет иметь вид "name,email,role,user" . Для методов patch и batchUpdate используется updateMask для указания полей, которые следует изменить.

  • Using a FieldMask: A FieldMask is a way for API callers to list fields a request should return or modify. It's a comma-delimited list of fields to specify only certain fields in an object are used while leaving the other fields unchanged. Using a FieldMask allows the API to avoid unnecessary work and improves performance. For more information on field masks, see Google Sheets API's Use field masks .

Создать участника

Чтобы добавить участника в пространство для совещаний, используйте метод create ресурса spaces.members .

В следующем примере кода показано, как создать элемент:

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.

Замените значение имени пространства уникальным идентификатором переговорной комнаты, сгенерированным сервером.

Получите подробную информацию об участнике.

Для получения подробной информации о конкретном участнике используйте метод get ресурса ` spaces.members .

Следующий пример кода демонстрирует, как получить доступ к элементу:

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.

Замените значения «название помещения» и «имя участника» уникальными идентификаторами, сгенерированными сервером для переговорной комнаты и участника.

Участники списка

Чтобы вывести список всех участников в конференц-зале, используйте метод list ресурса ` spaces.members .

Следующий пример кода демонстрирует, как вывести список участников:

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.

Замените значение имени пространства уникальным идентификатором переговорной комнаты, сгенерированным сервером.

Обновить данные участника

Чтобы изменить роль участника в пространстве для совещаний, используйте метод patch для ресурса spaces.members .

Следующий пример кода демонстрирует, как обновить элемент:

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.

Замените значения «название помещения» и «имя участника» уникальными идентификаторами, сгенерированными сервером для переговорной комнаты и участника.

Обновление участников пакетного режима

Для обновления ролей нескольких участников в одном запросе используйте метод batchUpdate ресурса spaces.members .

Следующий пример кода демонстрирует, как выполнить пакетное обновление участников:

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.

Замените значения «название помещения» и «имена участников» уникальными идентификаторами, сгенерированными сервером для переговорной комнаты и ее участников.

Удалить участника

Чтобы удалить участника из переговорного пространства, используйте метод delete ресурса spaces.members .

Следующий пример кода демонстрирует, как удалить участника:

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.

Замените значения «название помещения» и «имя участника» уникальными идентификаторами, сгенерированными сервером для переговорной комнаты и участника.