Устраните ошибки и повторно активируйте подписку на Google Workspace.

На этой странице объясняется, как повторно активировать приостановленную подписку на Google Workspace, устраняя ошибки и вызывая метод subscriptions.reactivate() .

Подписки на Google Workspace приостанавливаются всякий раз, когда из-за ошибки подписка не может получать события. Например, подписка приостанавливается, если не удается найти ее целевой ресурс или конечную точку уведомления. После устранения ошибок с подпиской вы можете повторно активировать подписку, чтобы снова начать получать события.

Узнать о приостановленной подписке можно следующими способами:

  • Ваше приложение получает событие жизненного цикла о приостановке. Если ваша подписка приостановлена ​​из-за ошибки конечной точки, вы можете не получить событие жизненного цикла.
  • Вы используете методы subscriptions.get() или subscriptions.list() чтобы проверить, установлено ли в поле state подписки значение SUSPENDED .
  • Вы получите уведомление о сбое доставки в конечную точку уведомлений. Подробнее об отслеживании сбоев доставки в темы Google Cloud Pub/Sub см. в разделе Обработка сбоев сообщений .

Для повторно активированных подписок сохраняется первоначальная дата истечения срока действия. Чтобы продлить срок действия подписки, см. раздел Обновление или продление подписки .

Скрипт приложений

  • Проект скрипта приложений:
    • Используйте свой проект Google Cloud вместо проекта по умолчанию, автоматически созданного Apps Script.
    • Для любых областей, которые вы добавили для настройки экрана согласия OAuth, вам также необходимо добавить области в файл appsscript.json в проекте Apps Script. Например:
    • "oauthScopes": [
        "https://www.googleapis.com/auth/chat.messages.readonly"
      ]
          
    • Включите расширенную службу Google Workspace Events .

Питон

  • Python 3.6 или выше
  • Инструмент управления пакетами pip
  • Новейшие клиентские библиотеки Google для Python. Чтобы установить или обновить их, выполните следующую команду в интерфейсе командной строки:
      pip3 install --upgrade google-api-python-client google-auth-oauthlib
      

Выявить и устранить ошибки

Чтобы определить ошибку подписки, просмотрите поле suspensionReason подписки. Это поле можно найти при получении события жизненного цикла о приостановке или с помощью метода subscriptions.get() для просмотра всех полей подписки.

В следующей таблице показаны возможные ошибки подписки и, если возможно, способы их устранения. Если вы не можете устранить ошибку, вы можете удалить подписку или дождаться истечения ее срока действия. API Google Workspace Events автоматически удаляет просроченные подписки.

Ошибка Описание Пути решения

USER_SCOPE_REVOKED

Авторизирующийся пользователь отозвал предоставление одной или нескольких областей OAuth, необходимых для подписки. Получите еще один токен доступа. Подробную информацию см. в разделе Получение токена доступа с сервера авторизации Google .

RESOURCE_DELETED

Целевой ресурс для подписки удален. Если ресурс восстановлен, вызовите метод reactivate() . В противном случае никаких действий не требуется, поскольку вы не сможете повторно активировать подписку без ее исходного целевого ресурса.

USER_AUTHORIZATION_FAILURE

Авторизирующийся пользователь больше не имеет доступа к ресурсу для подписки. Никаких действий не требуется. Повторно активировать подписку невозможно, так как авторизовавший ее пользователь не имеет доступа к целевому ресурсу.

ENDPOINT_PERMISSION_DENIED

Приложение Google Workspace не имеет доступа для доставки событий в вашу конечную точку уведомлений. Предоставьте доступ к сервисному аккаунту для приложения Google Workspace, которое доставляет события.

Для событий Google Chat учетной записью службы является chat-api-push@system.gserviceaccount.com . Для мероприятий Google Meet учетная запись службы — meet-api-event-push@system.gserviceaccount.com .

Для тем Pub/Sub назначьте сервисному аккаунту роль издателя Pub/Sub ( roles/pubsub.publisher) .

ENDPOINT_NOT_FOUND

Конечная точка уведомления не существует или не может быть найдена. Убедитесь, что конечная точка все еще активна и работает. Инструкции по устранению неполадок в темах Pub/Sub см. в документации по устранению неполадок .

ENDPOINT_RESOURCE_EXHAUSTED

Конечная точка уведомления не смогла получить события из-за недостаточной квоты или достижения ограничения скорости. Запросить увеличение квоты.

Повторно активировать подписку

После устранения ошибки, из-за которой ваша подписка была приостановлена, вы можете использовать метод reactivate() чтобы подписка снова могла получать события. Этот метод проверяет, устранены ли все ошибки, и меняет поле state вашей подписки с SUSPENDED на ACTIVE .

Чтобы повторно активировать подписку на Google Workspace:

Скрипт приложений

  1. В проекте Apps Script создайте новый файл сценария с именем 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);
    }
    

    Замените следующее:

    • SUBSCRIPTION_ID : идентификатор подписки. Чтобы получить идентификатор, вы можете использовать любое из следующих действий:
      • Значение поля uid .
      • Идентификатор имени ресурса, представленный в поле name . Например, если имя ресурса — subscriptions/subscription-123 , используйте subscription-123 .
  2. Чтобы повторно активировать подписку на Google Workspace, запустите функцию reactivateSubscription в проекте Apps Script.

Питон

  1. В своем рабочем каталоге создайте файл с именем 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('client_secrets.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 : идентификатор подписки. Чтобы получить идентификатор, вы можете использовать любое из следующих действий:
      • Значение поля uid .
      • Идентификатор имени ресурса, представленный в поле name . Например, если имя ресурса — subscriptions/subscription-123 , используйте subscription-123 .
  2. Убедитесь, что вы сохранили в своем рабочем каталоге учетные данные идентификатора клиента OAuth и назвали файл client_secrets.json . В примере кода этот файл JSON используется для аутентификации в Google Workspace и получения учетных данных пользователя. Инструкции см. в разделе Создание учетных данных идентификатора клиента OAuth .

  3. Чтобы повторно активировать подписку на Google Workspace, выполните в своем терминале следующую команду:

    python3 reactivate_subscription.py
API событий Google Workspace возвращает длительную операцию , содержащую экземпляр ресурса Subscription .

Если запрос не выполнен, см. следующий раздел, чтобы устранить дополнительные ошибки.

Устранение нескольких ошибок

Если вы устранили ошибку, приостановившую подписку, и метод reactivate() завершился сбоем, возможно, после приостановки вашей подписки возникла другая ошибка.

Чтобы выявить дополнительные ошибки, просмотрите выходные данные неудачного запроса. Вывод содержит любые ошибки, которые все еще присутствуют.

Если в вашей подписке имеется несколько ошибок, значение поля suspensionReason всегда использует исходную ошибку, из-за которой ваша подписка была приостановлена.