本页面介绍了如何通过解决或排查错误并调用
subscriptions.reactivate
方法来重新激活已暂停的 Google Workspace
订阅。
每当有错误阻止订阅接收事件时,Google Workspace 订阅都会暂停。例如,当订阅的目标资源或通知端点找不到时,订阅会暂停。解决订阅的所有错误后,您可以重新激活订阅以再次开始接收事件。
您可以通过以下方式了解已暂停的订阅:
- 您的应用会收到有关暂停的生命周期事件 。如果您的订阅因端点错误而暂停,您可能不会收到生命周期事件。
- 使用
subscriptions.get或subscriptions.list方法查看订阅的state字段是否设置为SUSPENDED。 - 您会收到有关向通知端点发送事件失败的通知。如需了解如何监控向 Google Cloud Pub/Sub 主题发送事件失败的情况,请参阅 处理消息 失败。
重新激活的订阅会保留原始到期日期。如需延长订阅的 到期时间,请参阅 更新或续订 Google Workspace 订阅。
Apps 脚本
- Google Workspace 订阅。如需创建订阅, 请参阅创建订阅。
- Apps 脚本项目:
- 使用您的 Google Cloud 项目,而不是 Apps 脚本自动创建的默认项目。
- 对于您为配置 OAuth 权限请求页面而添加的所有范围,您还必须将这些范围添加到 Apps 脚本项目中的
appsscript.json文件。例如,如果您指定了chat.messages范围,请添加以下内容: - 启用
Google Workspace Events高级服务。
"oauthScopes": [ "https://www.googleapis.com/auth/chat.messages" ]
需要针对订阅中的每种事件类型进行身份验证并使用适当的授权范围:
- 对于用户身份验证,需要一个或多个范围,这些范围至少支持订阅的一种事件类型。如需确定范围,请参阅按事件类型划分的范围。
- 如需以 Chat 应用的身份订阅 Chat 事件,需要进行 应用身份验证并获得管理员的一次性批准。
Python
- Python 3.6 或更高版本
- pip 软件包管理工具
- 适用于 Python 的最新 Google 客户端库。如需安装或更新这些库,请在命令行界面中运行以下命令:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- Google Workspace 订阅。如需创建订阅, 请参阅创建订阅。
需要针对订阅中的每种事件类型进行身份验证并使用适当的授权范围:
- 对于用户身份验证,需要一个或多个范围,这些范围至少支持订阅的一种事件类型。如需确定范围,请参阅按事件类型划分的范围。
- 如需以 Chat 应用的身份订阅 Chat 事件,需要进行 应用身份验证并获得管理员的一次性批准。
识别和解决错误
如需识别订阅的错误,请查看订阅的 suspensionReason 字段。您可以在收到有关暂停的
生命周期
事件时找到此字段,也可以使用
subscriptions.get方法查看订阅的所有字段。
下表显示了订阅可能出现的错误,以及在可能的情况下如何解决这些错误。如果您无法解决错误,可以 删除订阅,或等待 订阅到期。Google Workspace Events API 会自动删除已过期的订阅。
| 错误 | 说明 | 解决方法 |
|---|---|---|
|
授权用户已撤销订阅所需的一个或多个 OAuth 范围的授权。 | 获取另一个访问令牌。如需了解详情,请参阅 从 Google 授权服务器获取访问令牌。 |
|
订阅的目标资源已删除。 | 如果资源已恢复,请调用 reactivate
方法。否则,无需执行任何操作,因为如果没有原始目标资源,您无法重新激活
订阅。 |
|
授权用户无权再访问订阅的资源。 | 无需执行任何操作。您无法重新激活订阅,因为授权用户无法访问目标资源。 |
|
Google Workspace 应用无权向您的通知端点发送事件。 | 授予对发送事件的 Google Workspace 应用的服务账号的访问权限。 Service accounts:
对于 Pub/Sub 主题,请向服务账号授予 Pub/Sub Publisher 角色 ( roles/pubsub.publisher)
。 |
|
通知端点不存在或找不到。 | 检查端点是否仍处于活跃状态且正常运行。如需排查 Pub/Sub 主题的问题,请参阅问题排查 文档。 |
|
通知端点因配额不足或达到速率限制而无法接收事件。 | 申请增加配额。 |
|
网域管理员已撤消 Chat 应用的一个或多个 OAuth 范围的授权。 | 获得管理员批准。 |
|
授权创建订阅的 Chat 应用无权再访问订阅的目标资源。 | 重新获得对目标资源的访问权限。例如,如果目标资源是 Chat 聊天室,则 Chat 应用可能需要成为该聊天室的成员。 |
重新激活订阅
解决导致订阅暂停的错误后,请使用 reactivate 方法让订阅再次接收事件。该方法会检查所有错误是否已解决,并将订阅的 state 字段从 SUSPENDED 更改为 ACTIVE。
如需重新激活 Google Workspace 订阅,请执行以下操作:
Apps 脚本
在 Apps 脚本项目中,创建一个名为
reactivateSubscription的新脚本文件,并添加以下代码:function reactivateSubscription() { // The name of the subscription to reactivate. const name = 'subscriptions/SUBSCRIPTION_ID'; // Call the Workspace Events API using the advanced service. const response = WorkspaceEvents.Subscriptions.reactivate({}, name); console.log(response); }替换以下内容:
如需重新激活 Google Workspace 订阅,请在 Apps 脚本项目中运行函数
reactivateSubscription。
Python
在工作目录中,创建一个名为
reactivate_subscription.py的文件,并添加以下代码:"""Reactivate subscription.""" from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # Specify required scopes. SCOPES = [SCOPES] # Authenticate with Google Workspace and get user authentication. flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) CREDENTIALS = flow.run_local_server() # Call the Workspace Events API using the service endpoint. service = build( 'workspaceevents', 'v1', credentials=CREDENTIALS, ) NAME = 'subscriptions/SUBSCRIPTION_ID' response = service.subscriptions().reactivate(name=NAME).execute() print(response)替换以下内容:
SCOPES:支持订阅的每种事件类型的一个或多个 OAuth 范围 。格式为字符串数组。如需列出多个范围,请用英文逗号分隔。 例如,'https://www.googleapis.com/auth/chat.spaces.readonly', 'https://www.googleapis.com/auth/chat.memberships.readonly'。SUBSCRIPTION_ID:订阅的 ID。如需获取 ID,您可以使用以下任一方法:
在工作目录中,确保您已存储 OAuth 客户端 ID 凭据,并将该文件命名为
credentials.json。代码示例使用此 JSON 文件向 Google Workspace 进行身份验证并获取用户凭据。如需了解相关说明, 请参阅 创建 OAuth 客户端 ID 凭据。如需重新激活 Google Workspace 订阅,请在终端中运行以下命令:
python3 reactivate_subscription.py
Subscription 资源的实例。
如果请求失败,请参阅下一部分以排查其他错误。
以 Chat 应用的身份重新激活订阅
您可以以 Chat 应用的身份(而不是以用户的身份)重新激活 Chat 事件的订阅。该过程类似,但有以下例外情况:
指定允许 Chat 应用订阅 Chat 事件的授权范围。这些授权范围始终以
chat.app开头,并包括以下内容:https://www.googleapis.com/auth/chat.app.memberships:订阅 Chat 聊天室成员事件。https://www.googleapis.com/auth/chat.app.memberships.readonly:订阅 Chat 聊天室成员事件。https://www.googleapis.com/auth/chat.app.messages.readonly:订阅 Chat 聊天室消息和回应事件。https://www.googleapis.com/auth/chat.app.spaces:订阅 Chat 聊天室事件。https://www.googleapis.com/auth/chat.app.spaces.readonly:订阅 Chat 聊天室事件。
编写调用 Google Workspace Events API 的脚本
以下代码示例会重新激活 Chat 应用的 Google Workspace 订阅:
Python
"""Reactivate subscription."""
from google.oauth2 import service_account
from apiclient.discovery import build
# Specify required scopes.
SCOPES = [SCOPES]
# Specify service account details.
CREDENTIALS = (
service_account.Credentials.from_service_account_file('credentials.json')
.with_scopes(SCOPES)
)
# Call the Workspace Events API using the service endpoint.
service = build(
'workspaceevents',
'v1beta',
credentials=CREDENTIALS,
)
NAME = 'subscriptions/SUBSCRIPTION_ID'
response = service.subscriptions().reactivate(name=NAME).execute()
print(response)
替换以下内容:
SCOPES:指定允许 Chat 应用订阅 Chat 事件的授权范围。这些授权范围始终以chat.app开头,并包括以下内容:https://www.googleapis.com/auth/chat.app.memberships:订阅 Chat 聊天室成员事件。https://www.googleapis.com/auth/chat.app.memberships.readonly:订阅 Chat 聊天室成员事件。https://www.googleapis.com/auth/chat.app.messages.readonly:订阅 Chat 聊天室消息和回应事件。https://www.googleapis.com/auth/chat.app.spaces:订阅 Chat 聊天室事件。https://www.googleapis.com/auth/chat.app.spaces.readonly:订阅 Chat 聊天室事件。
SUBSCRIPTION_ID:订阅的 ID。如需获取 ID,您可以使用以下任一方法:
排查多个错误
如果您已解决导致订阅暂停的错误,但 reactivate 方法失败,则可能是订阅暂停后发生了其他错误。
如需识别其他错误,请查看失败请求的输出。输出包含仍存在的任何错误。
当您的订阅存在多个错误时,suspensionReason 字段的值始终使用导致订阅暂停的原始错误。