Hướng dẫn này trình bày cách sử dụng Google Meet REST API cùng với Google Workspace Events API và Google Cloud Pub/Sub để theo dõi và phản ứng với các sự kiện trong không gian họp Meet. Ứng dụng mẫu ghi lại thời điểm các hội nghị bắt đầu và kết thúc, thời điểm người tham gia tham gia hoặc rời đi và thời điểm có sẵn các cấu phần phần mềm cuộc họp được tạo.
Thay vì đăng ký theo dõi một không gian họp cụ thể, bạn có thể đăng ký theo dõi một người dùng Meet để nhận sự kiện cho mọi không gian họp mà người dùng đó sở hữu hoặc tổ chức. Để biết thông tin chi tiết, hãy xem phần Đăng ký nhận thông báo về sự kiện trên Google Meet trong tài liệu về Google Workspace Events API.
Đ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 đó:
- Một tài khoản Google Workspace có quyền truy cập vào Google Meet.
- Quyền tạo một dự án trên Google Cloud.
- Đã cài đặt Python 3.
- Đã cài đặt gcloud CLI.
Chuẩn bị môi trường
Phần này hướng dẫn 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 thư mục làm việc 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.
Linux/macOS
mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate
Windows (dòng 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
- Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > IAM và Quản trị > Tạo dự án.
-
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ã dự án đáp ứng nhu cầu của bạn trong suốt thời gian tồn tại của dự án.
- Trong trường Location (Vị trí), hãy nhấp vào Browse (Duyệt xem) để hiện các vị trí tiềm năng cho dự án của bạn. Sau đó, hãy nhấp vào Chọn.
- Nhấp vào Tạo. Bảng điều khiển 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.
gcloud CLI
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 đã 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 đặt và khởi động CLI gcloud.
Để tạo một dự án trên Cloud, hãy dùng lệnhgcloud projects create
: Thay thế PROJECT_ID bằng cách đặt mã nhận dạng cho dự án mà bạn muốn tạo.gcloud projects create PROJECT_ID
Bật tính năng thanh toán cho dự án trên Google Cloud
Bảng điều khiển Google Cloud
- Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Thanh toán. Nhấp vào Trình đơn > Thanh toán > Dự án của tôi.
- Trong phần Chọn một tổ chức, hãy chọn tổ chức được liên kết với dự án Google Cloud của bạn.
- Trong hàng dự án, hãy mở trình đơn Hành động ( ), nhấp vào Thay đổi thông tin thanh toán rồi chọn tài khoản thanh toán trên đám mây.
- Nhấp vào Thiết lập tài khoản.
gcloud CLI
- Để liệt kê các tài khoản thanh toán hiện có, hãy chạy lệnh:
gcloud billing accounts list
- 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ế nội dung sau:
PROJECT_ID
là Mã dự án cho dự án trên Đám mây mà bạn muốn bật tính năng thanh toán.BILLING_ACCOUNT_ID
là mã tài khoản thanh toán cần liên kết với dự án trên Google Cloud.
Thiết lập tính năng xác thực và uỷ quyền
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 Meet REST API. Bạn cần có quyền uỷ quyền của người dùng để gọi Meet REST API. 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 đồng ý OAuth và chọn phạm vi
Các bước sau đây đề xuất thông tin giữ chỗ để định cấu hình màn hình đồng ý OAuth cho ứng dụng của bạn. Trước khi xuất bản ứng dụng ra bên ngoài, hãy cập nhật thông tin này.
- Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > Google Auth platform > Thương hiệu.
- Nếu đã định cấu hình Google Auth platform, bạn có thể định cấu hình các chế độ cài đặt sau đây cho Màn hình đồng ý OAuth trong phần Thương hiệu, Đối tượng và Quyền truy cập vào dữ liệu. Nếu bạn thấy thông báo Google Auth platform chưa được định cấu hình, hãy nhấp vào Bắt đầu:
- Trong phần Thông tin ứng dụng, trong mục Tên ứng dụng, hãy nhập
Meet REST API Tutorial
. - Trong phần Email hỗ trợ người dùng, hãy chọn một địa chỉ email hỗ trợ mà người dùng có thể liên hệ với bạn nếu họ có thắc mắc về sự đồng ý của mình.
- Nhấp vào Tiếp theo.
- Trong phần Đối tượng người xem, hãy chọn Nội bộ.
- Nhấp vào Tiếp theo.
- Trong phần Thông tin liên hệ, hãy nhập Địa chỉ email để bạn có thể nhận thông báo về mọi thay đổi đối với dự án của mình.
- Nhấp vào Tiếp theo.
- Trong phần Hoàn tất, hãy xem kỹ Chính sách dữ liệu người dùng của dịch vụ API của Google. Nếu bạn đồng ý, hãy chọn Tôi đồng ý với Chính sách dữ liệu người dùng của dịch vụ API của Google.
- Nhấp vào Tiếp tục.
- Nhấp vào Tạo.
- 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:
- Nhấp vào Đối tượng.
- Trong phần Người dùng kiểm thử, hãy nhấp vào Thêm người dùng.
- Nhập địa chỉ email của bạn và mọi người dùng kiểm thử được uỷ quyền khác, sau đó nhấp vào Lưu.
- Nhấp vào Quyền truy cập vào dữ liệu > 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 các phạm vi cho từng API mà bạn đã bật trong dự án Google Cloud.
- Trong mục 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
- Nhấp vào Thêm vào bảng.
- Nhấp vào Cập nhật.
- 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 Lưu.
Để biết thêm thông tin về cách định cấu hình sự đồng ý của OAuth, hãy xem phần Bắt đầu sử dụng Google Auth platform.
Tạo mã ứng dụng khách
Mã ứng dụng khách đóng vai trò là thông tin đăng nhập cho ứng dụng của bạn trong các luồng OAuth 2.0. Vì ứng dụng chạy cục bộ, hãy tạo mã ứng dụng dành cho máy tính.
- Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > Google Auth platform > Ứng dụng.
- Nhấp vào Tạo ứng dụng.
- Nhấp vào Loại ứng dụng > Ứng dụng dành cho máy tính.
- Trong trường Name (Tên), hãy nhập tên cho thông tin đăng nhập. Tên này chỉ xuất hiện trong Google Cloud Console.
- Nhấp vào Tạo.
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 các thư viện xác thực của Google
Cài đặt các thư viện xác thực của Google:
pip install google-auth google-auth-oauthlib
Thực thi việc uỷ quyền
Meet REST API yêu cầu thông tin đăng nhập của người dùng dưới dạng mã truy cập OAuth 2.0. Trong phần này, bạn sẽ 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.
Trong thư mục làm việc, hãy tạo tệp
main.py
rồi thêm 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()
Để chạy mã, bạn cần có cả mã ứng dụng và mật khẩu đã tạo trước đó. Sao chép tệp khoá bí mật của ứng dụng đã tải xuống vào thư mục làm việc của dự án rồi đổi tên thành
client_secret.json
.Nếu bạn muốn kiểm thử cách hoạt động của quy trình uỷ quyền, hãy chạy lệnh sau. Ứng dụng sẽ nhắc bạn uỷ quyền và tạo một 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 Meet REST API
Sau khi hoàn tất mã uỷ quyền, đã đến lúc bật và gọi Meet REST API.
Bật các API
Mặc dù phần này tập trung vào Meet REST API, nhưng hướng dẫn này cũng sử dụng Google Cloud Pub/Sub và Google Workspace Events API.
Bảng điều khiển Google Cloud
Trong Google Cloud Console, hãy bật Google Meet REST API, Google Workspace Events API và Google Cloud Pub/Sub.
Xác nhận rằng bạn đang bật các API trong dự án Cloud chính xác, sau đó nhấp vào Tiếp theo.
Xác nhận rằng bạn đang bật đúng API, sau đó nhấp vào Bật.
gcloud CLI
Nếu cần, hãy đặt dự án hiện tại trên Cloud thành dự án mà bạn đã tạo bằng lệnh
gcloud config set project
:gcloud config set project PROJECT_ID
Thay PROJECT_ID bằng Mã dự án của dự án trên Cloud mà bạn đã tạo.
Bật Google Meet REST API, Google Workspace Events API 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:
Chạy lệnh:
pip install google-apps-meet
Chỉnh sửa tệp
main.py
để nhập khách hàng:from google.apps import meet_v2 as meet
Tạo không gian
Giờ đây, khi Meet REST API đã 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 báo về sự kiện
Để nhận các sự kiện về một không gian họp, bạn tạo một lượt đăng ký bằng Google Workspace Events API. Bạn cũng phải tạo và đăng ký một chủ đề Google Cloud Pub/Sub đóng vai trò là điểm cuối thông báo nơi ứng dụng của bạn nhận được các sự kiện.
Định cấu hình Google Cloud Pub/Sub
Cách tạo và đăng ký một chủ đề Pub/Sub:
Bảng điều khiển Google Cloud
- Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub.
Đảm bảo bạn đã chọn dự án trên Đám mây cho ứng dụng của mình.
- Nhấp vào
- Nhập
workspace-events
làm tên chủ đề. - Giữ nguyên lựa chọn Thêm gói thuê bao mặc định.
- Nhấp vào Tạo. Tên chủ đề đầy đủ của bạn có định dạng là
projects/{project}/topics/{topic}
. Ghi lại tên này để sử dụng trong các bước sau.
Tạo chủ đề và làm như sau:
- Nhập
- Cấp quyền truy cập để xuất bản thông báo Pub/Sub cho chủ đề của bạn:
- Trên bảng điều khiển bên, hãy mở thẻ Quyền.
- Nhấp vào Thêm người uỷ quyền.
- Trong phần Bên giao đại diện mới, hãy nhập
meet-api-event-push@system.gserviceaccount.com
. - Trong phần Chỉ định vai trò, hãy chọn
Pub/Sub Publisher
. - Nhấp vào Lưu.
Quá trình cập nhật quyền cho chủ đề có thể mất vài phút.
gcloud CLI
- 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ẽ hiển thị tên đầy đủ của chủ đề, được định dạng là
projects/{project}/topics/{topic}
. Ghi lại tên này để sử dụng trong các bước sau. - Cấp quyền xuất bản thông báo cho 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'
Quá trình cập nhật quyền cho chủ đề có thể mất vài phút.
- Tạo gói thuê bao Pub/Sub cho chủ đề:
gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME
Thay thế nội dung 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ị cho {project}
là mã dự án trên Cloud cho ứng dụng của bạn. Sau này, bạn 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
- Trong bảng điều khiển Google Cloud, hãy chuyển đến phần Trình đơn > IAM và Quản trị > Tài khoản dịch vụ.
- Nhấp vào Tạo tài khoản dịch vụ.
- Điền thông tin tài khoản dịch vụ, rồi nhấp vào Tạo và tiếp tục.
- Trong phần Cấp cho tài khoản dịch vụ này quyền truy cập vào dự án, hãy thêm các vai trò sau:
roles/pubsub.subscriber
- Nhấp vào Tiếp tục.
- Không bắt buộc: Nhập người dùng hoặc nhóm có thể quản lý và thực hiện các thao tác bằng tài khoản dịch vụ này. Để biết thêm thông tin, hãy tham khảo bài viết Quản lý hoạt động mạo danh tài khoản dịch vụ.
- Nhấp vào Xong. Ghi lại địa chỉ email của tài khoản dịch vụ.
gcloud CLI
- Tạo tài khoản dịch vụ:
gcloud iam service-accounts create meet-event-listener \ --display-name="meet-event-listener"
- Cấp các vai trò cần thiết cho tài khoản dịch vụ:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:meet-event-listener@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/pubsub.subscriber"
Thay
PROJECT_ID
bằng mã dự án trên Google Cloud.
Sử dụng tài khoản dịch vụ
Sau khi tạo tài khoản dịch vụ, hãy cấp cho chính bạn quyền truy cập để mạo danh tài khoản dịch vụ.
Bảng điều khiển Google Cloud
- 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 biểu tượng > Quản lý quyền.
- Nhấp vào Thêm khoá > Cấp quyền truy cập.
- Nhập địa chỉ email của bạn trong phần Thêm người dùng.
- Chọn Tài khoản dịch vụ > Trình tạo mã thông báo tài khoản dịch vụ làm vai trò.
- Nhấp vào Lưu.
- Quay lại thiết bị đầu cuối và đăng nhập bằng
gcloud
để đặt thông tin đăng nhập mặc định của ứng dụng thành tài khoản dịch vụ. Khi được nhắc uỷ quyền, hãy đăng nhập bằng cùng một tài khoản đã dùng trong các bước trước.gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
gcloud CLI
- Để thêm quyền, 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"
- Đăng nhập để đặt thông tin xác thực mặc định của ứng dụng thành tài khoản dịch vụ. Khi được nhắc uỷ quyền, hãy đăng nhập bằng cùng một 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
Sử dụng
pip
để cài đặt thư viện ứng dụng cho Pub/Sub:pip install google-cloud-pubsub
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 Google Workspace
Thêm mã sau vào main.py
để xác định một phương thức đăng ký nhận sự kiện Meet. Mã này đăng ký nhận tất cả sự kiện cho một không gian họp. Khi được đă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 để kéo và xử lý các sự kiện.
Lắng nghe và xử lý các sự kiện
Tiếp tục chỉnh sửa main.py
và thêm mã mẫu sau. Mã này triển khai phía nhận và sử dụng API Google Cloud Pub/Sub để kéo các sự kiện khi chúng được cung cấp. Các phương thức 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 hằng số TOPIC_NAME
và SUBSCRIPTION_NAME
bằng tên chủ đề và tên gói thuê bao mà bạn đã tạo trước đó.
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) if (subscription.status_code) == 200: listen_for_events(subscription_name=SUBSCRIPTION_NAME) else: print(f"Subscription to Meet events failed, response data: {subscription.content}")
Thay thế nội dung sau:
PROJECT_ID
: Mã dự án duy nhất trên Đám mây 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 Cloud.SUBSCRIPTION_ID
: Tên gói thuê bao của bạn, chẳng hạn nhưworkspace-events-sub
.
Chạy chương trình:
python3 main.py
Nếu trước đây bạn chưa chạy chương trình này, thì lần đầu tiên, chương trình sẽ nhắc bạn uỷ quyền. Cấp quyền truy cập cho ứ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ư sau:
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ị bằng URL mà ứng dụng hiển thị. Sau khi tham gia, bạn có thể thử các thao tác sau để kích hoạt sự kiện:
- Rời khỏi rồi 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.
- Bật bản ghi âm và bản chép lời.
Mỗi hoạt động trong số này sẽ 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 bạn nên thử
Ứng dụng này ghi lại thông tin cơ bản về các sự kiện. Để tiếp tục khám phá Meet REST API, hãy thử sửa đổi ứng dụng để thực hiện các thao tác bổ sung sau.
Sử dụng People API để truy xuất thêm thông tin về những người tham gia đã đăng nhập.
def subscribe_to_user(user_name: str = None, topic_name: str = None) -> requests_lib.Response: """Subscribe to events for a user.""" session = requests.AuthorizedSession(USER_CREDENTIALS) body = { "targetResource": f"//cloudidentity.googleapis.com/users/{user_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 service = build("people", "v1", credentials=USER_CREDENTIALS) response = ( service.people() .get(resourceName="people/me", personFields="names,emailAddresses") .execute() ) resource_name = response.get("resourceName") if resource_name.startswith("people/"): resource_name = resource_name[len("people/") :] subscription = subscribe_to_user(topic_name=TOPIC_NAME, user_name=resource_name)
Đảm bảo thêm "https://www.googleapis.com/auth/userinfo.profile" vào phương thức uỷ quyền trong các mẫu thông tin đăng nhập ở trên.
Sử dụng Google Drive API để tải bản ghi và bản chép lời xuống.
Thay vì tải bản chép lời xuống từ Google Drive, hãy truy xuất bản chép lời bằng cách sử dụng các phương thức bản chép lời có cấu trúc trong API REST của Meet.
nhận không gian thay vì tạo không gian
def get_space(meeting_code: str) -> meet.Space: """Get a meeting space.""" client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS) return client.get_space(name="spaces/" + meeting_code)
Nhớ thêm "https://www.googleapis.com/auth/meetings.space.readonly" vào phương thức uỷ quyền trong các mẫu thông tin đăng nhập ở trên.
Không bắt buộc: Dọn dẹp
Để tránh phát sinh phí cho tài khoản Google Cloud Console của bạn đối với các tài nguyên được 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 đã tạo.
Cách xoá gói thuê bao:
Giao diện dòng lệnh
Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub > Gói thuê bao
Chọn gói thuê bao rồi nhấp vào biểu tượng
Tuỳ chọn khác.Nhấp vào Xóa. Cửa sổ Xoá gói thuê bao sẽ xuất hiện.
Nhấp vào Xóa.
gcloud CLI
Xoá gói thuê bao:
gcloud pubsub subscriptions delete SUBSCRIPTION_NAME
Cách xoá chủ đề:
Giao diện dòng lệnh
Trong bảng điều khiển Google Cloud, hãy chuyển đến Trình đơn > Pub/Sub > Chủ đề
Chọn chủ đề rồi nhấp vào biểu tượng
Tuỳ chọn khác.Nhấp vào Xóa. Cửa sổ Xoá chủ đề sẽ xuất hiện.
Nhập
delete
rồi nhấp vào Xoá.
gcloud CLI
Xoá chủ đề:
gcloud pubsub topics delete TOPIC_NAME
Cách xoá dự án:
Giao diện dòng lệnh
- Trong Google Cloud Console, hãy chuyển đến trang Quản lý tài nguyên. Nhấp vào Trình đơn > IAM và Quản trị > Quản lý tài nguyên.
- 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á .
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
gcloud CLI
Để xoá một dự án, hãy dùng lệnh gcloud projects delete:
gcloud projects delete PROJECT_ID
Chủ đề có liên quan
- Tìm hiểu về các loại sự kiện trên Meet mà bạn có thể đăng ký nhận thông báo.
- Tìm hiểu thêm về những việc mà Google Meet REST API có thể làm và xem tài liệu tham khảo.
- Tạo một gói thuê bao Google Workspace cho không gian hoặc người dùng cuộc họp Meet bằng Google Workspace Events API.
- Để tìm hiểu thêm về quy trình xác thực, hãy xem phần Định cấu hình màn hình xin phép bằng OAuth và chọn phạm vi.