ניהול חברי המרחב בפגישה

חבר במרחב לפגישה הוא משתמש שהוגדר לו תפקיד במרחב. המשתמשים האלה יכולים להצטרף למרחב הפגישה בלי לשלוח בקשת הצטרפות (שנקראת גם 'דפיקה בדלת').

מארגני הפגישה יכולים להיכנס אוטומטית למרחב הפגישה, אבל אתם יכולים גם להגדיר שמשתתפים נוספים במרחב הפגישה יוכלו להצטרף לפגישה בלי לשלוח בקשת הצטרפות. בנוסף, אפשר להגדיר לחברים Role בפגישה, כמו COHOST, כדי שיוכלו לנהל את הפגישה יחד עם המארגן במהלך שיחת ועידה, אבל הם לא יכולים להגדיר יצירה אוטומטית של ארטיפקטים או לשנות את הגדרות הניהול. מידע נוסף על גישה למרחב פגישות בלי לדפוק זמין במאמר AccessType.

המשאב spaces.members כולל את השדות name, email ו-role.

חשוב להבחין בין חבר במרחב הפגישה לבין משתתף. משתתף הוא אדם שהצטרף לשיחה או שמשתמש במצב Companion, צופה כצופה או מכשיר בחדר שמחובר לשיחה. יש משאב אחד conferenceRecords.participants לכל אדם.

התנהגויות נפוצות של שיטות

כשמנהלים את חברי המרחב לפגישות באמצעות ה-API בארכיטקטורת REST ב-Meet, יש כמה מוסכמות שמשותפות לכל ה-methods:

  • פרמטרים של נתיב: כל שיטה משתמשת בפרמטר של נתיב. השיטות 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 כדי לציין אילו שדות לשנות.

  • שימוש ב-FieldMask:FieldMask היא דרך שבה מתקשרים עם ה-API יכולים לציין את השדות שבקשה צריכה להחזיר או לשנות. זו רשימה של שדות שמופרדים באמצעות פסיקים, שבה מציינים רק שדות מסוימים באובייקט שבהם רוצים להשתמש, ומשאירים את השדות האחרים ללא שינוי. שימוש ב-FieldMask מאפשר ל-API להימנע מעבודה מיותרת ולשפר את הביצועים. מידע נוסף על מסכות שדות זמין במאמר בנושא שימוש במסכות שדות ב-Google Sheets API.

יצירת חבר

כדי להוסיף משתמש למרחב לפגישות, משתמשים בשיטה 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.

מחליפים את הערך של שם המרחב במזהה הייחודי שנוצר על ידי השרת עבור המרחב של הפגישה.

עדכון של חבר

כדי לעדכן את התפקיד של משתמש במרחב לפגישה, משתמשים ב-method ‏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.

מחליפים את הערכים של שם המרחב ושם המשתתף במזהים הייחודיים שנוצרו על ידי השרת עבור המרחב והמשתתפים.

מחיקת חברים

כדי להסיר משתמש ממרחב פגישה, משתמשים ב-method ‏ 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.

מחליפים את הערכים של שם המרחב ושם המשתתף במזהים הייחודיים שנוצרו על ידי השרת עבור המרחב והמשתתף.