Quan sát các sự kiện họp bằng Python và API REST của Google Meet

Phần hướng dẫn này cho biết cách sử dụng API REST của Google Meet cùng với API Sự kiện của Google Workspace và Google Cloud Pub/Sub để quan sát và phản ứng với các sự kiện trong cuộc họp. Ứng dụng mẫu sẽ ghi lại thời điểm bắt đầu và kết thúc hội nghị, khi người tham gia tham gia hoặc rời khỏi cuộc họp, cũng như thời điểm có bất kỳ cấu phần phần mềm nào được tạo trong cuộc họp.

Để tìm hiểu thêm về cách làm việc với các sự kiện, hãy xem phần Đăng ký nhận thông tin về sự kiện Google Meet trong tài liệu về API Sự kiện của Google Workspace.

Điều kiện tiên quyết

Nếu bạn cần bật bất kỳ điều kiện tiên quyết nào trong số này cho tổ chức của mình, hãy yêu cầu quản trị viên Google Workspace bật các điều kiện đó:

Chuẩn bị môi trường

Phần này trình bày cách tạo và định cấu hình môi trường cục bộ cũng như dự án Google Cloud cho hướng dẫn này.

Tạo một thư mục đang hoạt động và môi trường ảo Python

Để tạo và kích hoạt một môi trường ảo mới, hãy chạy các lệnh sau trong thiết bị đầu cuối của bạn.

Linux/macOS

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate

Windows (dấu nhắc lệnh)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat

Windows (PowerShell)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1

Tạo một dự án trên Google Cloud

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > IAM và Quản trị viên > Tạo dự án.

    Chuyển đến trang Tạo dự án

  2. Trong trường Tên dự án, hãy nhập tên mô tả cho dự án của bạn.

    Không bắt buộc: Để chỉnh sửa Mã dự án, hãy nhấp vào Chỉnh sửa. Bạn không thể thay đổi mã dự án sau khi tạo dự án, vì vậy, hãy chọn một mã đáp ứng nhu cầu của bạn trong suốt vòng đời của dự án.

  3. Trong trường Location (Vị trí), hãy nhấp vào Browse (Duyệt qua) để xem các vị trí tiềm năng cho dự án của bạn. Sau đó, hãy nhấp vào Chọn.
  4. Nhấp vào Tạo. Bảng điều khiển của Google Cloud sẽ chuyển đến Trang tổng quan và dự án của bạn sẽ được tạo trong vòng vài phút.

Giao diện dòng lệnh (CLI) của gcloud

Trong một trong các môi trường phát triển sau đây, hãy truy cập vào Google Cloud CLI (`gcloud`):

  • Cloud Shell: Để sử dụng một thiết bị đầu cuối trực tuyến đã được thiết lập gcloud CLI, hãy kích hoạt Cloud Shell.
    Kích hoạt Cloud Shell
  • Local Shell: Để sử dụng môi trường phát triển cục bộ, hãy cài đặtinitialize gcloud CLI.
    Để tạo một dự án trên Google Cloud, hãy dùng lệnh "gcloud project create" (tạo dự án gcloud):
    gcloud projects create PROJECT_ID
    Thay thế PROJECT_ID bằng cách đặt mã nhận dạng cho dự án mà bạn muốn tạo.

Bật tính năng thanh toán cho dự án Google Cloud

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Thanh toán. Nhấp vào biểu tượng Trình đơn > Thanh toán > Dự án của tôi.

    Chuyển đến phần Thanh toán cho dự án của tôi

  2. Trong mục Chọn một tổ chức, hãy chọn tổ chức liên kết với dự án của bạn trên Google Cloud.
  3. Trong hàng dự án, hãy mở trình đơn Thao tác (), nhấp vào Thay đổi thông tin thanh toán rồi chọn tài khoản thanh toán Cloud.
  4. Nhấp vào Đặt tài khoản.

Giao diện dòng lệnh (CLI) của gcloud

  1. Để liệt kê các tài khoản thanh toán hiện có, hãy chạy:
    gcloud billing accounts list
  2. Liên kết tài khoản thanh toán với một dự án trên Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Thay thế các đoạn mã sau:

    • PROJECT_IDMã dự án của dự án Cloud mà bạn muốn bật tính năng thanh toán.
    • BILLING_ACCOUNT_IDmã tài khoản thanh toán để liên kết với dự án Google Cloud.

Thiết lập phương thức xác thực và uỷ quyền

Việc xác thực và uỷ quyền cho phép ứng dụng truy cập vào các tài nguyên của API REST API. Cần phải có sự cho phép của người dùng để gọi API REST của Meet. Phần này hướng dẫn bạn cách định cấu hình thông tin đăng nhập của người dùng và yêu cầu uỷ quyền.

Định cấu hình màn hình xin phép bằng OAuth và chọn phạm vi

Các bước sau đây đề xuất thông tin về phần giữ chỗ để định cấu hình màn hình xin phép bằng OAuth cho ứng dụng của bạn. Trước khi phát hành ứng dụng ra bên ngoài, hãy cập nhật thông tin này.

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > API và dịch vụ > màn hình đồng ý OAuth.

    Chuyển đến màn hình xin phép bằng OAuth

  2. Trong mục Loại người dùng, hãy chọn Nội bộ, rồi nhấp vào Tạo.
  3. Trong Tên ứng dụng, hãy nhập Meet REST API Tutorial.
  4. Hoàn tất biểu mẫu đăng ký ứng dụng, sau đó nhấp vào Lưu và tiếp tục.
  5. Nhấp vào Add or Remove Scopes (Thêm hoặc xoá phạm vi). Một bảng điều khiển sẽ xuất hiện với danh sách phạm vi cho từng API mà bạn đã bật trong dự án trên Google Cloud.
  6. Trong phần Thêm phạm vi theo cách thủ công, hãy dán các phạm vi sau:
    • https://www.googleapis.com/auth/meetings.space.created
  7. Nhấp vào Thêm vào bảng.
  8. Nhấp vào Cập nhật.
  9. Sau khi chọn các phạm vi mà ứng dụng của bạn yêu cầu, hãy nhấp vào Save and Continue (Lưu và tiếp tục).
  10. Nếu bạn đã chọn Bên ngoài cho loại người dùng, hãy thêm người dùng thử nghiệm:
    1. Trong phần Người dùng thử nghiệm, hãy nhấp vào Thêm người dùng.
    2. Nhập địa chỉ email của bạn và bất kỳ người dùng thử nghiệm nào khác được uỷ quyền, sau đó nhấp vào Lưu và tiếp tục.
  11. Xem lại tóm tắt đăng ký ứng dụng của bạn. Để chỉnh sửa, hãy nhấp vào Chỉnh sửa. Nếu quá trình đăng ký ứng dụng có vẻ ổn, hãy nhấp vào Back to Dashboard (Quay lại Trang tổng quan).

Tạo mã ứng dụng khách

Mã ứng dụng khách đóng vai trò là thông tin xác thực cho ứng dụng của bạn trong luồng OAuth 2.0. Vì ứng dụng chạy cục bộ, hãy tạo một mã ứng dụng khách trên máy tính.

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > API và dịch vụ > Thông tin xác thực.

    Chuyển đến phần Thông tin xác thực

  2. Nhấp vào Tạo thông tin xác thực > Mã ứng dụng khách OAuth.
  3. Nhấp vào Loại ứng dụng > Ứng dụng cho máy tính.
  4. Trong trường Tên, nhập tên cho thông tin đăng nhập. Tên này chỉ hiển thị trong bảng điều khiển Google Cloud.
  5. Nhấp vào Tạo. Màn hình ứng dụng OAuth đã tạo sẽ xuất hiện, cho thấy Mã ứng dụng khách và Mật khẩu ứng dụng khách mới.
  6. Nhấp vào OK. Thông tin xác thực mới tạo sẽ xuất hiện trong phần Mã ứng dụng OAuth 2.0.

Cài đặt thư viện xác thực của Google

Cài đặt thư viện xác thực của Google:

pip install google-auth google-auth-oauthlib

Thực thi uỷ quyền

API REST của Meet yêu cầu thông tin đăng nhập của người dùng ở dạng mã truy cập OAuth 2.0. Trong phần này, bạn triển khai quy trình OAuth 2.0 để yêu cầu mã truy cập và mã làm mới cho người dùng.

  1. Trong thư mục đang làm việc, hãy tạo tệp main.py rồi thêm những nội dung sau:

    import os
    import json
    
    from google.auth.transport import requests
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    
    def authorize() -> Credentials:
        """Ensure valid credentials for calling the Meet REST API."""
        CLIENT_SECRET_FILE = "./client_secret.json"
        credentials = None
    
        if os.path.exists('token.json'):
            credentials = Credentials.from_authorized_user_file('token.json')
    
        if credentials is None:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRET_FILE,
                scopes=[
                    'https://www.googleapis.com/auth/meetings.space.created',
                ])
            flow.run_local_server(port=0)
            credentials = flow.credentials
    
        if credentials and credentials.expired:
            credentials.refresh(requests.Request())
    
        if credentials is not None:
            with open("token.json", "w") as f:
                f.write(credentials.to_json())
    
        return credentials
    
    USER_CREDENTIALS = authorize()
    
  2. Để chạy mã, bạn phải cung cấp cả mã ứng dụng khách và mã bí mật đã tạo trước đó. Sao chép tệp mật khẩu ứng dụng khách đã tải xuống vào thư mục đang làm việc của dự án và đổi tên thành client_secret.json.

  3. Nếu bạn muốn kiểm tra cách hoạt động của tính năng uỷ quyền, hãy chạy lệnh sau. Ứng dụng nhắc cấp quyền và tạo tệp token.json trong thư mục làm việc của dự án sau khi yêu cầu được phê duyệt.

    python3 main.py
    

Thêm API REST của Meet

Mã uỷ quyền đã hoàn tất, đã đến lúc bật và gọi API REST của Meet.

Bật API

Mặc dù phần này tập trung vào API REST của Meet, nhưng hướng dẫn này cũng sử dụng Google Cloud Pub/Sub và API Sự kiện của Google Workspace.

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy bật API REST của Google Meet, API Sự kiện trong Google Workspace và Google Cloud Pub/Sub.

    Bật API

  2. Xác nhận rằng bạn đang bật API trong đúng dự án Google Cloud, sau đó nhấp vào Next (Tiếp theo).

  3. Xác nhận rằng bạn đang bật đúng API, sau đó nhấp vào Bật.

Giao diện dòng lệnh (CLI) của gcloud

  1. Nếu cần, hãy đặt dự án trên Google Cloud hiện tại thành dự án mà bạn đã tạo bằng lệnh gcloud config set project:

    gcloud config set project PROJECT_ID
    

    Thay thế PROJECT_ID bằng Mã dự án của dự án Google Cloud bạn đã tạo.

  2. Bật API REST của Google Meet, API Sự kiện trên Google Workspace và Google Cloud Pub/Sub bằng lệnh gcloud services enable:

    gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com
    

Cài đặt thư viện ứng dụng Meet REST API

Hãy làm theo các bước sau để cài đặt thư viện ứng dụng Meet REST API:

  1. Chạy lệnh:

    pip install google-apps-meet
    
  2. Chỉnh sửa tệp main.py để nhập ứng dụng:

    from google.apps import meet_v2 as meet
    

Tạo không gian

Giờ đây, API REST của Meet đã có sẵn, hãy xác định một hàm để tạo không gian họp có thể đăng ký.

Chỉnh sửa main.py và thêm:

def create_space() -> meet.Space:
    """Create a meeting space."""
    client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
    request = meet.CreateSpaceRequest()
    return client.create_space(request=request)

Đăng ký nhận thông tin về sự kiện

Để nhận các sự kiện về không gian hội họp, bạn hãy tạo một gói thuê bao bằng cách sử dụng API Sự kiện của Google Workspace. Bạn cũng phải tạo và đăng ký một chủ đề trên Google Cloud Pub/Sub. Chủ đề này đóng vai trò là điểm cuối thông báo mà ứng dụng của bạn nhận được các sự kiện.

Định cấu hình Google Cloud Pub/Sub

Để tạo và đăng ký theo dõi một chủ đề Pub/Sub:

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub.

    Chuyển đến Pub/Sub

    Hãy nhớ chọn dự án Cloud cho ứng dụng của bạn.

  2. Nhấp vào Tạo chủ đề rồi làm như sau:
    1. Nhập tên chủ đề là workspace-events.
    2. Chọn Thêm gói thuê bao mặc định.
    3. Nhấp vào Tạo. Tên đầy đủ của chủ đề có định dạng là projects/{project}/topics/{topic}. Hãy ghi lại tên này để sử dụng trong các bước sau.
  3. Cấp quyền truy cập để đăng thông báo Pub/Sub về chủ đề của bạn:
    1. Trên bảng điều khiển bên, hãy mở thẻ Quyền.
    2. Nhấp vào Add Principal (Thêm hiệu trưởng).
    3. Trong phần New principals (Tài khoản chính mới), hãy nhập meet-api-event-push@system.gserviceaccount.com.
    4. Trong phần Chỉ định vai trò, hãy chọn Pub/Sub Publisher.
    5. Nhấp vào Lưu.

    Có thể mất vài phút để cập nhật quyền cho chủ đề của bạn.

Giao diện dòng lệnh (CLI) của gcloud

  1. Trong dự án Cloud của bạn, hãy tạo một chủ đề bằng cách chạy lệnh sau:
    gcloud pubsub topics create workspace-events

    Kết quả sẽ cho thấy tên đầy đủ của chủ đề, có định dạng là projects/{project}/topics/{topic}. Hãy ghi lại tên này để sử dụng trong các bước sau.

  2. Cấp quyền đăng thông báo về chủ đề của bạn:
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    Có thể mất vài phút để cập nhật quyền cho chủ đề của bạn.

  3. Tạo gói thuê bao Pub/Sub cho chủ đề:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    Thay thế các đoạn mã sau:

    • TOPIC_NAME: Tên chủ đề mà bạn đã tạo ở bước trước.

Ghi lại tên chủ đề và đảm bảo giá trị của {project} là mã dự án trên Cloud cho ứng dụng của bạn. Sau này, bạn sẽ sử dụng tên chủ đề để tạo gói thuê bao Google Workspace.

Tạo một tài khoản dịch vụ

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > IAM và Quản trị viên > Tài khoản dịch vụ.

    Chuyển đến trang Tài khoản dịch vụ

  2. Nhấp vào Tạo tài khoản dịch vụ.
  3. Điền thông tin chi tiết về tài khoản dịch vụ, sau đó nhấp vào Tạo và tiếp tục.
  4. Không bắt buộc: Chỉ định vai trò cho tài khoản dịch vụ để cấp quyền truy cập vào các tài nguyên trong dự án Google Cloud của bạn. Để biết thêm thông tin, hãy tham khảo bài viết Cấp, thay đổi và thu hồi quyền truy cập vào tài nguyên.
  5. Nhấp vào Tiếp tục.
  6. Không bắt buộc: Nhập những người dùng hoặc nhóm có thể quản lý và thực hiện hành động bằng tài khoản dịch vụ này. Để biết thêm thông tin chi tiết, hãy tham khảo bài viết Quản lý mạo danh tài khoản dịch vụ.
  7. Nhấp vào Xong. Ghi lại địa chỉ email cho tài khoản dịch vụ.

Giao diện dòng lệnh (CLI) của gcloud

  1. Tạo tài khoản dịch vụ:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. Không bắt buộc: Chỉ định vai trò cho tài khoản dịch vụ để cấp quyền truy cập vào các tài nguyên trong dự án Google Cloud của bạn. Để biết thêm thông tin, hãy tham khảo bài viết Cấp, thay đổi và thu hồi quyền truy cập vào tài nguyên.

Sử dụng tài khoản dịch vụ

Sau khi tạo tài khoản dịch vụ, hãy tự cấp quyền truy cập để mạo danh tài khoản dịch vụ.

Bảng điều khiển Google Cloud

  1. Trong cột Hành động của tài khoản dịch vụ mới tạo, hãy nhấp vào > Quản lý quyền.
  2. Nhấp vào Thêm khoá > Cấp quyền truy cập.
  3. Nhập địa chỉ email của bạn trong phần Thêm người chính.
  4. Chọn Service accounts > Service Account token Creator (Tài khoản dịch vụ) làm vai trò.
  5. Nhấp vào Lưu.

Giao diện dòng lệnh (CLI) của gcloud

  1. Để thêm quyền này, hãy chạy gcloud iam service-accounts add-iam-policy-binding bằng địa chỉ email của tài khoản dịch vụ và người dùng.
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_EMAIL \
      --member="user:YOUR_EMAIL \
      --role="roles/iam.serviceAccountTokenCreator"
  2. Đăng nhập bằng gcloud để đặt thông tin xác thực mặc định của ứng dụng cho tài khoản dịch vụ. Khi được nhắc để uỷ quyền, hãy đăng nhập bằng chính tài khoản đã dùng trong các bước trước đó.
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

Cài đặt thư viện ứng dụng Pub/Sub

  1. Sử dụng pip để cài đặt thư viện ứng dụng cho Pub/Sub:

    pip install google-cloud-pubsub
    
  2. Sau đó, hãy chỉnh sửa main.py để nhập ứng dụng:

    from google.cloud import pubsub_v1
    

Tạo gói thuê bao của Google Workspace

Thêm mã sau vào main.py để xác định phương thức đăng ký sự kiện Meet. Mã này đăng ký tất cả sự kiện của một không gian họp. Khi người dùng đăng ký, các sự kiện sẽ được đăng lên chủ đề Pub/Sub.

def subscribe_to_space(space_name: str = None, topic_name: str = None):
    """Subscribe to events for a meeting space."""
    session = requests.AuthorizedSession(USER_CREDENTIALS)
    body = {
        'targetResource': f"//meet.googleapis.com/{space_name}",
        "eventTypes": [
            "google.workspace.meet.conference.v2.started",
            "google.workspace.meet.conference.v2.ended",
            "google.workspace.meet.participant.v2.joined",
            "google.workspace.meet.participant.v2.left",
            "google.workspace.meet.recording.v2.fileGenerated",
            "google.workspace.meet.transcript.v2.fileGenerated",
        ],
        "payloadOptions": {
            "includeResource": False,
        },
        "notificationEndpoint": {
            "pubsubTopic": topic_name
        },
        "ttl": "86400s",
    }
    response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
    return response

Tiếp theo, hãy thêm mã tương ứng để lấy và xử lý các sự kiện.

Nghe và xử lý các sự kiện

Tiếp tục chỉnh sửa main.py rồi thêm mã mẫu sau. Mã này triển khai bên nhận và sử dụng API Google Cloud Pub/Sub để lấy các sự kiện khi chúng có sẵn. Các phương thức của trình xử lý khác nhau sẽ in thông tin về các sự kiện tương ứng.

def format_participant(participant: meet.Participant) -> str:
    """Formats a participant for display on the console."""
    if participant.anonymous_user:
        return f"{participant.anonymous_user.display_name} (Anonymous)"

    if participant.signedin_user:
        return f"{participant.signedin_user.display_name} (ID: {participant.signedin_user.user})"

    if participant.phone_user:
        return f"{participant.phone_user.display_name} (Phone)"

    return "Unknown participant"


def fetch_participant_from_session(session_name: str) -> meet.Participant:
    """Fetches the participant for a session."""
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    # Use the parent path of the session to fetch the participant details
    parsed_session_path = client.parse_participant_session_path(session_name)
    participant_resource_name = client.participant_path(
        parsed_session_path["conference_record"],
        parsed_session_path["participant"])
    return client.get_participant(name=participant_resource_name)


def on_conference_started(message: pubsub_v1.subscriber.message.Message):
    """Display information about a conference when started."""
    payload = json.loads(message.data)
    resource_name = payload.get("conferenceRecord").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    conference = client.get_conference_record(name=resource_name)
    print(f"Conference (ID {conference.name}) started at {conference.start_time.rfc3339()}")


def on_conference_ended(message: pubsub_v1.subscriber.message.Message):
    """Display information about a conference when ended."""
    payload = json.loads(message.data)
    resource_name = payload.get("conferenceRecord").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    conference = client.get_conference_record(name=resource_name)
    print(f"Conference (ID {conference.name}) ended at {conference.end_time.rfc3339()}")


def on_participant_joined(message: pubsub_v1.subscriber.message.Message):
    """Display information about a participant when they join a meeting."""
    payload = json.loads(message.data)
    resource_name = payload.get("participantSession").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    session = client.get_participant_session(name=resource_name)
    participant = fetch_participant_from_session(resource_name)
    display_name = format_participant(participant)
    print(f"{display_name} joined at {session.start_time.rfc3339()}")


def on_participant_left(message: pubsub_v1.subscriber.message.Message):
    """Display information about a participant when they leave a meeting."""
    payload = json.loads(message.data)
    resource_name = payload.get("participantSession").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    session = client.get_participant_session(name=resource_name)
    participant = fetch_participant_from_session(resource_name)
    display_name = format_participant(participant)
    print(f"{display_name} left at {session.end_time.rfc3339()}")


def on_recording_ready(message: pubsub_v1.subscriber.message.Message):
    """Display information about a recorded meeting when artifact is ready."""
    payload = json.loads(message.data)
    resource_name = payload.get("recording").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    recording = client.get_recording(name=resource_name)
    print(f"Recording available at {recording.drive_destination.export_uri}")


def on_transcript_ready(message: pubsub_v1.subscriber.message.Message):
    """Display information about a meeting transcript when artifact is ready."""
    payload = json.loads(message.data)
    resource_name = payload.get("transcript").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    transcript = client.get_transcript(name=resource_name)
    print(f"Transcript available at {transcript.docs_destination.export_uri}")


def on_message(message: pubsub_v1.subscriber.message.Message) -> None:
    """Handles an incoming event from the Google Cloud Pub/Sub API."""
    event_type = message.attributes.get("ce-type")
    handler = {
        "google.workspace.meet.conference.v2.started": on_conference_started,
        "google.workspace.meet.conference.v2.ended": on_conference_ended,
        "google.workspace.meet.participant.v2.joined": on_participant_joined,
        "google.workspace.meet.participant.v2.left": on_participant_left,
        "google.workspace.meet.recording.v2.fileGenerated": on_recording_ready,
        "google.workspace.meet.transcript.v2.fileGenerated": on_transcript_ready,
    }.get(event_type)

    try:
        if handler is not None:
            handler(message)
        message.ack()
    except Exception as error:
        print("Unable to process event")
        print(error)


def listen_for_events(subscription_name: str = None):
    """Subscribe to events on the subscription."""
    subscriber = pubsub_v1.SubscriberClient()
    with subscriber:
        future = subscriber.subscribe(subscription_name, callback=on_message)
        print("Listening for events")
        try:
            future.result()
        except KeyboardInterrupt:
            future.cancel()
    print("Done")

Hoàn tất mã

Thêm mã sau vào main.py để gọi các phương thức tạo không gian, đăng ký sự kiện và lắng nghe. Cập nhật các hằng số TOPIC_NAMESUBSCRIPTION_NAME bằng tên chủ đề và tên gói thuê bao mà bạn đã tạo trước đây.

  1. Thêm mã vào main.py:

    space = create_space()
    print(f"Join the meeting at {space.meeting_uri}")
    
    TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID"
    SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
    
    subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name)
    listen_for_events(subscription_name=SUBSCRIPTION_NAME)
    

    Thay thế các đoạn mã sau:

    • PROJECT_ID: Mã dự án trên Cloud duy nhất cho ứng dụng của bạn, chẳng hạn như my-sample-project-191923.

    • TOPIC_ID: Tên của chủ đề Pub/Sub mà bạn đã tạo trong dự án trên Google Cloud của mình.

    • SUBSCRIPTION_ID: Tên gói thuê bao của bạn, chẳng hạn như workspace-events-sub.

  2. Chạy chương trình:

    python3 main.py
    

Nếu trước đây bạn chưa chạy chương trình, thì chương trình sẽ nhắc yêu cầu uỷ quyền lần đầu tiên. Cấp quyền truy cập vào ứng dụng để gọi API REST của Meet. Sau khi chương trình chạy thành công, bạn sẽ thấy kết quả tương tự như:

Join the meeting at https://meet.google.com/abc-mnop-xyz

Tham gia hội nghị

Để tạo sự kiện cho ứng dụng, hãy tham gia hội nghị này bằng URL mà ứng dụng hiển thị. Sau khi tham gia, bạn có thể thử những thao tác sau để kích hoạt các sự kiện:

  • Rời khỏi và tham gia lại cuộc họp.
  • Mời người khác hoặc gọi điện bằng điện thoại của bạn.
  • Bật tính năng ghi lại và chép lời.

Mỗi hoạt động này tạo ra một sự kiện mà ứng dụng nhận được và ghi vào bảng điều khiển Google Cloud.

Sử dụng ctrl-c để làm gián đoạn chương trình khi bạn hoàn tất.

Không bắt buộc: Các bước khác có thể thử

Ứng dụng ghi lại thông tin cơ bản về các sự kiện. Để tiếp tục khám phá API REST của Meet, hãy thử sửa đổi ứng dụng để thực hiện các thao tác bổ sung này.

Không bắt buộc: Dọn dẹp

Để tránh làm phát sinh phí cho tài khoản bảng điều khiển Google Cloud cho các tài nguyên dùng trong hướng dẫn này, bạn nên dọn dẹp mọi tài nguyên và dự án được tạo.

Cách xoá gói thuê bao:

Giao diện dòng lệnh

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub > Gói thuê bao

    Chuyển đến trang Gói thuê bao

  2. Chọn gói thuê bao đó rồi nhấp vào Thao tác khác.

  3. Nhấp vào Xoá. Cửa sổ Xóa gói thuê bao xuất hiện.

  4. Nhấp vào Xoá.

Giao diện dòng lệnh (CLI) của gcloud

  1. Xoá gói thuê bao:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
    

Cách xoá chủ đề:

Giao diện dòng lệnh

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub > Chủ đề

    Chuyển đến Chủ đề

  2. Chọn chủ đề rồi nhấp vào Thao tác khác.

  3. Nhấp vào Xoá. Cửa sổ Xoá chủ đề sẽ xuất hiện.

  4. Nhập delete rồi nhấp vào Xoá.

Giao diện dòng lệnh (CLI) của gcloud

  1. Xoá chủ đề:

    gcloud pubsub topics delete TOPIC_NAME
    

Cách xoá dự án:

Giao diện dòng lệnh

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Quản lý tài nguyên. Nhấp vào biểu tượng Trình đơn > IAM & Admin (IAM và quản trị viên) > Quản lý tài nguyên.

    Chuyển đến Trình quản lý tài nguyên

  2. Trong danh sách dự án, hãy chọn dự án bạn muốn xoá rồi nhấp vào biểu tượng Xoá .
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Shut Down (Tắt) để xoá dự án.

Giao diện dòng lệnh (CLI) của gcloud

  1. Để xoá một dự án, hãy sử dụng lệnh gcloud project delete (xoá dự án gcloud):

    gcloud projects delete PROJECT_ID