참여자와 협력

이 가이드에서는 Google Meet REST API를 사용하여 이전 회의에 참석했거나 진행 중인 회의에 참여 중인 참석자에 대한 세부정보와 세션 정보를 가져오는 방법을 설명합니다.

참여자는 통화에 참여하거나 컴패니언 모드를 사용하거나 시청자로 시청 중인 사용자 또는 통화에 연결된 회의실 기기입니다. 사용자당 하나의 participants 리소스가 있습니다.

참여자 세션은 통화에 참여하는 각 참여자-기기 쌍에 대해 생성된 고유한 세션 ID입니다. 세션당 하나의 participantSessions 리소스가 있습니다. 참여자가 동일한 참여자-기기 쌍에서 동일한 통화에 여러 번 참여하면 각 참여자에게 고유한 세션 ID가 할당됩니다.

회의 스페이스 소유자 또는 참여자는 participantsparticipantSessions 리소스에서 모두 get()list() 메서드를 호출하여 참여자 레코드를 검색할 수 있습니다.

사용자 인증 정보로 인증하고 승인하면 Google Meet 앱이 사용자 데이터에 액세스하고 인증된 사용자를 대신하여 작업을 실행할 수 있습니다. 도메인 전체 위임으로 인증하면 각 사용자의 동의를 받지 않고도 애플리케이션의 서비스 계정이 사용자의 데이터에 액세스하도록 승인할 수 있습니다.

참여자

다음 섹션에서는 회의 레코드에서 참석자에 관한 정보를 가져오는 방법을 자세히 설명합니다.

participants 리소스가 user 필드와 결합됩니다. user는 다음 객체 중 하나여야 합니다.

  • signedinUser은 다음 중 하나입니다.

    • 개인용 컴퓨터, 휴대기기 또는 호환 기기 모드를 통해 참여하는 사용자입니다.

    • 회의실 기기에서 사용하는 로봇 계정입니다.

  • anonymousUser는 Google 계정에 로그인하지 않은 미확인 사용자입니다.

  • phoneUser는 Google 계정으로 로그인하지 않았기 때문에 사용자의 신원이 알려지지 않은 상태에서 전화를 통해 참여하는 사용자입니다.

세 객체 모두 displayName를 반환하지만 signedinUser는 Admin SDK API 및 People API와 상호 운용 가능한 고유한 user ID도 반환합니다. 형식은 users/{user}입니다. People API에서 user ID를 사용하는 방법에 관한 자세한 내용은 People API로 참여자 세부정보 가져오기를 참고하세요.

참여자 세부정보 가져오기

특정 참여자에 대한 세부정보를 가져오려면 name 경로 매개변수를 사용하여 participants 리소스의 get() 메서드를 사용합니다. 참여자 이름을 모르는 경우 list() 메서드를 사용하여 모든 참여자 이름을 나열할 수 있습니다.

이 메서드는 참여자 데이터를 participants 리소스의 인스턴스로 반환합니다.

다음 코드 샘플은 특정 참여자를 가져오는 방법을 보여줍니다.

자바

java-meet/samples/snippets/generated/com/google/apps/meet/v2/conferencerecordsservice/getparticipant/AsyncGetParticipant.java
import com.google.api.core.ApiFuture;
import com.google.apps.meet.v2.ConferenceRecordsServiceClient;
import com.google.apps.meet.v2.GetParticipantRequest;
import com.google.apps.meet.v2.Participant;
import com.google.apps.meet.v2.ParticipantName;

public class AsyncGetParticipant {

  public static void main(String[] args) throws Exception {
    asyncGetParticipant();
  }

  public static void asyncGetParticipant() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (ConferenceRecordsServiceClient conferenceRecordsServiceClient =
        ConferenceRecordsServiceClient.create()) {
      GetParticipantRequest request =
          GetParticipantRequest.newBuilder()
              .setName(ParticipantName.of("[CONFERENCE_RECORD]", "[PARTICIPANT]").toString())
              .build();
      ApiFuture<Participant> future =
          conferenceRecordsServiceClient.getParticipantCallable().futureCall(request);
      // Do something.
      Participant response = future.get();
    }
  }
}

Node.js

packages/google-apps-meet/samples/generated/v2/conference_records_service.get_participant.js
/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. Resource name of the participant.
 */
// const name = 'abc123'

// Imports the Meet library
const {ConferenceRecordsServiceClient} = require('@google-apps/meet').v2;

// Instantiates a client
const meetClient = new ConferenceRecordsServiceClient();

async function callGetParticipant() {
  // Construct request
  const request = {
    name,
  };

  // Run request
  const response = await meetClient.getParticipant(request);
  console.log(response);
}

callGetParticipant();

Python

packages/google-apps-meet/samples/generated_samples/meet_v2_generated_conference_records_service_get_participant_async.py
# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.apps import meet_v2


async def sample_get_participant():
    # Create a client
    client = meet_v2.ConferenceRecordsServiceAsyncClient()

    # Initialize request argument(s)
    request = meet_v2.GetParticipantRequest(
        name="name_value",
    )

    # Make the request
    response = await client.get_participant(request=request)

    # Handle the response
    print(response)

회의 레코드에서 참여자 이름을 특정 참여자 ID의 이름으로 바꿉니다.

모든 참여자 표시

회의 레코드의 모든 참여자에 관한 세부정보를 나열하려면 parent 경로 매개변수를 사용하여 participants 리소스의 list() 메서드를 사용합니다. 형식은 conferenceRecords/{conferenceRecord}입니다.

이 메서드는 earliestStartTime를 기준으로 내림차순으로 정렬된 회의 참석자 목록을 participants 리소스의 인스턴스로 반환합니다. 페이지 크기를 조정하고 쿼리 결과를 필터링하려면 페이징 맞춤설정 또는 참여자 목록 필터링을 참고하세요.

다음 코드 샘플은 회의 기록에 있는 모든 참여자를 나열하는 방법을 보여줍니다.

자바

java-meet/samples/snippets/generated/com/google/apps/meet/v2/conferencerecordsservice/listparticipants/AsyncListParticipants.java
import com.google.api.core.ApiFuture;
import com.google.apps.meet.v2.ConferenceRecordName;
import com.google.apps.meet.v2.ConferenceRecordsServiceClient;
import com.google.apps.meet.v2.ListParticipantsRequest;
import com.google.apps.meet.v2.Participant;

public class AsyncListParticipants {

  public static void main(String[] args) throws Exception {
    asyncListParticipants();
  }

  public static void asyncListParticipants() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (ConferenceRecordsServiceClient conferenceRecordsServiceClient =
        ConferenceRecordsServiceClient.create()) {
      ListParticipantsRequest request =
          ListParticipantsRequest.newBuilder()
              .setParent(ConferenceRecordName.of("[CONFERENCE_RECORD]").toString())
              .setPageSize(883849137)
              .setPageToken("pageToken873572522")
              .setFilter("filter-1274492040")
              .build();
      ApiFuture<Participant> future =
          conferenceRecordsServiceClient.listParticipantsPagedCallable().futureCall(request);
      // Do something.
      for (Participant element : future.get().iterateAll()) {
        // doThingsWith(element);
      }
    }
  }
}

Node.js

packages/google-apps-meet/samples/generated/v2/conference_records_service.list_participants.js
/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. Format: `conferenceRecords/{conference_record}`
 */
// const parent = 'abc123'
/**
 *  Maximum number of participants to return. The service might return fewer
 *  than this value.
 *  If unspecified, at most 100 participants are returned.
 *  The maximum value is 250; values above 250 are coerced to 250.
 *  Maximum might change in the future.
 */
// const pageSize = 1234
/**
 *  Page token returned from previous List Call.
 */
// const pageToken = 'abc123'
/**
 *  Optional. User specified filtering condition in EBNF
 *  format (https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form).
 *  The following are the filterable fields:
 *  * `earliest_start_time`
 *  * `latest_end_time`
 *  For example, `latest_end_time IS NULL` returns active participants in
 *  the conference.
 */
// const filter = 'abc123'

// Imports the Meet library
const {ConferenceRecordsServiceClient} = require('@google-apps/meet').v2;

// Instantiates a client
const meetClient = new ConferenceRecordsServiceClient();

async function callListParticipants() {
  // Construct request
  const request = {
    parent,
  };

  // Run request
  const iterable = meetClient.listParticipantsAsync(request);
  for await (const response of iterable) {
      console.log(response);
  }
}

callListParticipants();

Python

packages/google-apps-meet/samples/generated_samples/meet_v2_generated_conference_records_service_list_participants_async.py
# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.apps import meet_v2


async def sample_list_participants():
    # Create a client
    client = meet_v2.ConferenceRecordsServiceAsyncClient()

    # Initialize request argument(s)
    request = meet_v2.ListParticipantsRequest(
        parent="parent_value",
    )

    # Make the request
    page_result = client.list_participants(request=request)

    # Handle the response
    async for response in page_result:
        print(response)

상위 값을 회의 레코드 이름으로 바꿉니다.

페이지로 나누기 맞춤설정 또는 참석자 목록 필터링

다음 쿼리 매개변수를 전달하여 페이지로 나누거나 참가자를 필터링합니다.

  • pageSize: 반환할 최대 참여자 수입니다. 서비스가 이 값보다 더 적게 반환할 수 있습니다. 지정하지 않으면 최대 100명의 참여자가 반환됩니다. 최대값은 250이며, 250을 초과하는 값은 자동으로 250으로 변경됩니다.

  • pageToken: 이전 목록 호출에서 수신된 페이지 토큰입니다. 후속 페이지를 검색하려면 이 토큰을 입력합니다.

  • filter: 선택사항. participants 리소스 결과에서 특정 항목을 검색하는 쿼리 필터입니다.

    earliestStartTime 또는 latestEndTime 필드를 사용하여 특정 시간 전에 가입했거나 특정 시간 후에 퇴장한 사용자를 필터링할 수 있습니다. 두 필드 모두 RFC 3339 UTC 'Zulu' 형식의 타임스탬프 형식을 사용하며, 나노초 단위이며 소수점 이하 9자리({year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z)까지 지원합니다. 예를 들면 다음과 같습니다.

    • earliestStartTime < 2023-10-01T15:01:23Z
    • latestEndTime < 2023-10-01T15:01:23Z

    기존 회의에서 활성 상태인 모든 참여자를 나열하려면 latestEndTime IS NULL를 사용합니다.

People API로 참여자 세부정보 검색

참여자에 대한 세부정보를 가져오려면 People API의 people 리소스에서 get() 메서드를 사용합니다.

  1. 경로의 후행 구성요소를 사용하여 participant 리소스에서 사용자의 ID를 추출합니다. 예를 들어 participant 리소스 값이 conferenceRecords/abc-123/participants/12345이면 People API의 ID는 12345입니다.

  2. READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT ReadSourceType를 포함합니다. 이렇게 하면 Google Workspace 조직의 내부 사용자와 외부 연락처가 모두 응답에 포함됩니다.

다음 코드 샘플은 사용자의 조직 프로필과 연락처를 모두 검색하는 방법을 보여줍니다.

cURL

curl \
   'https://people.googleapis.com/v1/people/PERSON_ID?personFields=names%2CemailAddresses&sources=READ_SOURCE_TYPE_OTHER_CONTACT&sources=READ_SOURCE_TYPE_PROFILE&sources=READ_SOURCE_TYPE_CONTACT' \
   --header 'Authorization: Bearer ACCESS_TOKEN' \
   --header 'Accept: application/json' \
   --compressed

다음을 바꿉니다.

  • PERSON_ID: 찾을 사용자의 ID입니다.
  • ACCESS_TOKEN: 여러 API에 대한 액세스 권한을 부여하는 액세스 토큰입니다.

참여자 세션

다음 섹션에서는 회의 레코드에서 참석자의 참석자 세션에 관한 정보를 가져오는 방법을 자세히 설명합니다.

참여자 세션에 대한 세부정보 가져오기

특정 참여자 세션에 대한 세부정보를 가져오려면 name 경로 매개변수를 사용하여 participantSessions 리소스의 get() 메서드를 사용합니다. 참여자 세션 이름을 모르는 경우 list() 메서드를 사용하여 참여자의 모든 참여자 세션을 나열할 수 있습니다.

이 메서드는 참여자 이름을 participantSessions 리소스의 인스턴스로 반환합니다.

다음 코드 샘플은 특정 참여자 세션을 검색하는 방법을 보여줍니다.

자바

java-meet/samples/snippets/generated/com/google/apps/meet/v2/conferencerecordsservice/getparticipantsession/AsyncGetParticipantSession.java
import com.google.api.core.ApiFuture;
import com.google.apps.meet.v2.ConferenceRecordsServiceClient;
import com.google.apps.meet.v2.GetParticipantSessionRequest;
import com.google.apps.meet.v2.ParticipantSession;
import com.google.apps.meet.v2.ParticipantSessionName;

public class AsyncGetParticipantSession {

  public static void main(String[] args) throws Exception {
    asyncGetParticipantSession();
  }

  public static void asyncGetParticipantSession() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (ConferenceRecordsServiceClient conferenceRecordsServiceClient =
        ConferenceRecordsServiceClient.create()) {
      GetParticipantSessionRequest request =
          GetParticipantSessionRequest.newBuilder()
              .setName(
                  ParticipantSessionName.of(
                          "[CONFERENCE_RECORD]", "[PARTICIPANT]", "[PARTICIPANT_SESSION]")
                      .toString())
              .build();
      ApiFuture<ParticipantSession> future =
          conferenceRecordsServiceClient.getParticipantSessionCallable().futureCall(request);
      // Do something.
      ParticipantSession response = future.get();
    }
  }
}

Node.js

packages/google-apps-meet/samples/generated/v2/conference_records_service.get_participant_session.js
/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. Resource name of the participant.
 */
// const name = 'abc123'

// Imports the Meet library
const {ConferenceRecordsServiceClient} = require('@google-apps/meet').v2;

// Instantiates a client
const meetClient = new ConferenceRecordsServiceClient();

async function callGetParticipantSession() {
  // Construct request
  const request = {
    name,
  };

  // Run request
  const response = await meetClient.getParticipantSession(request);
  console.log(response);
}

callGetParticipantSession();

Python

packages/google-apps-meet/samples/generated_samples/meet_v2_generated_conference_records_service_get_participant_session_async.py
# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.apps import meet_v2


async def sample_get_participant_session():
    # Create a client
    client = meet_v2.ConferenceRecordsServiceAsyncClient()

    # Initialize request argument(s)
    request = meet_v2.GetParticipantSessionRequest(
        name="name_value",
    )

    # Make the request
    response = await client.get_participant_session(request=request)

    # Handle the response
    print(response)

참여자 이름을 참여자 세션의 특정 참여자 세션 ID 이름으로 바꿉니다.

모든 참여자 세션 나열

회의 기록에 있는 참여자의 모든 참여자 세션에 관한 세부정보를 나열하려면 parent 경로 매개변수를 사용하여 participantSessions 리소스의 list() 메서드를 사용합니다. 형식은 conferenceRecords/{conferenceRecord}/participants/{participant}입니다.

이 메서드는 startTime를 기준으로 내림차순으로 정렬된 참여자 세션 목록을 participantSession 리소스의 인스턴스로 반환합니다. 페이지 크기를 조정하고 쿼리 결과를 필터링하려면 페이징 맞춤설정 또는 참여자 세션 목록 필터링을 참고하세요.

다음 코드 샘플은 회의 레코드에 모든 참여자 세션을 나열하는 방법을 보여줍니다.

자바

java-meet/samples/snippets/generated/com/google/apps/meet/v2/conferencerecordsservice/listparticipantsessions/AsyncListParticipantSessions.java
import com.google.api.core.ApiFuture;
import com.google.apps.meet.v2.ConferenceRecordsServiceClient;
import com.google.apps.meet.v2.ListParticipantSessionsRequest;
import com.google.apps.meet.v2.ParticipantName;
import com.google.apps.meet.v2.ParticipantSession;

public class AsyncListParticipantSessions {

  public static void main(String[] args) throws Exception {
    asyncListParticipantSessions();
  }

  public static void asyncListParticipantSessions() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (ConferenceRecordsServiceClient conferenceRecordsServiceClient =
        ConferenceRecordsServiceClient.create()) {
      ListParticipantSessionsRequest request =
          ListParticipantSessionsRequest.newBuilder()
              .setParent(ParticipantName.of("[CONFERENCE_RECORD]", "[PARTICIPANT]").toString())
              .setPageSize(883849137)
              .setPageToken("pageToken873572522")
              .setFilter("filter-1274492040")
              .build();
      ApiFuture<ParticipantSession> future =
          conferenceRecordsServiceClient.listParticipantSessionsPagedCallable().futureCall(request);
      // Do something.
      for (ParticipantSession element : future.get().iterateAll()) {
        // doThingsWith(element);
      }
    }
  }
}

Node.js

packages/google-apps-meet/samples/generated/v2/conference_records_service.list_participant_sessions.js
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// ** This file is automatically generated by gapic-generator-typescript. **
// ** https://github.com/googleapis/gapic-generator-typescript **
// ** All changes to this file may be overwritten. **



'use strict';

function main(parent) {
  /**
   * This snippet has been automatically generated and should be regarded as a code template only.
   * It will require modifications to work.
   * It may require correct/in-range values for request initialization.
   * TODO(developer): Uncomment these variables before running the sample.
   */
  /**
   *  Required. Format:
   *  `conferenceRecords/{conference_record}/participants/{participant}`
   */
  // const parent = 'abc123'
  /**
   *  Optional. Maximum number of participant sessions to return. The service
   *  might return fewer than this value. If unspecified, at most 100
   *  participants are returned. The maximum value is 250; values above 250 are
   *  coerced to 250. Maximum might change in the future.
   */
  // const pageSize = 1234
  /**
   *  Optional. Page token returned from previous List Call.
   */
  // const pageToken = 'abc123'
  /**
   *  Optional. User specified filtering condition in EBNF
   *  format (https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form).
   *  The following are the filterable fields:
   *  * `start_time`
   *  * `end_time`
   *  For example, `end_time IS NULL` returns active participant sessions in
   *  the conference record.
   */
  // const filter = 'abc123'

  // Imports the Meet library
  const {ConferenceRecordsServiceClient} = require('@google-apps/meet').v2;

  // Instantiates a client
  const meetClient = new ConferenceRecordsServiceClient();

  async function callListParticipantSessions() {
    // Construct request
    const request = {
      parent,
    };

    // Run request
    const iterable = meetClient.listParticipantSessionsAsync(request);
    for await (const response of iterable) {
        console.log(response);
    }
  }

  callListParticipantSessions();
}

process.on('unhandledRejection', err => {
  console.error(err.message);
  process.exitCode = 1;
});
main(...process.argv.slice(2));

Python

packages/google-apps-meet/samples/generated_samples/meet_v2_generated_conference_records_service_list_participant_sessions_async.py
# This snippet has been automatically generated and should be regarded as a
# code template only.
# It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
#   client as shown in:
#   https://googleapis.dev/python/google-api-core/latest/client_options.html
from google.apps import meet_v2


async def sample_list_participant_sessions():
    # Create a client
    client = meet_v2.ConferenceRecordsServiceAsyncClient()

    # Initialize request argument(s)
    request = meet_v2.ListParticipantSessionsRequest(
        parent="parent_value",
    )

    # Make the request
    page_result = client.list_participant_sessions(request=request)

    # Handle the response
    async for response in page_result:
        print(response)

상위 값을 회의 레코드의 참석자 세션 이름으로 바꿉니다.

페이지로 나누기 맞춤설정 또는 참여자 세션 목록 필터링

다음과 같은 선택적 쿼리 매개변수를 전달하여 참가자 세션의 페이징을 맞춤설정하거나 필터링합니다.

  • pageSize: 반환할 최대 참여자 세션 수입니다. 서비스가 이 값보다 더 적게 반환할 수 있습니다. 지정하지 않으면 최대 100개의 참여자 세션이 반환됩니다. 최대값은 250이며, 250을 초과하는 값은 자동으로 250으로 변경됩니다.

  • pageToken: 이전 목록 호출에서 수신된 페이지 토큰입니다. 후속 페이지를 검색하려면 이 토큰을 입력합니다.

  • filter: 선택사항. participants 리소스 결과에서 특정 항목을 검색하는 쿼리 필터입니다.

    startTime 또는 endTime 필드를 사용하여 특정 시간 전에 가입했거나 특정 시간 후에 탈퇴한 사용자를 필터링할 수 있습니다. 두 필드 모두 RFC 3339 UTC 'Zulu' 형식의 타임스탬프 형식을 사용하며 나노초 단위이고 소수점 이하 9자리({year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z)까지 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    • startTime < 2023-10-01T15:01:23Z
    • endTime < 2023-10-01T15:01:23Z

    회의 레코드에서 활성 상태인 모든 참여자 세션을 나열하려면 endTime IS NULL를 사용합니다.