Обзор дополнительного API уведомлений

Вы можете использовать Notifications sub-API, чтобы получать push-уведомления об изменениях данных в аккаунтах Merchant Center. Вместо того чтобы периодически опрашивать API для обнаружения изменений, вы можете подписаться на фиды событий в реальном времени, которые доставляются непосредственно в настроенную вами конечную точку HTTPS.

Дополнительный API Notifications поддерживает уведомления для следующих сервисов:

  • Изменения статуса товара. Получайте оповещения в реальном времени, когда статус рассмотрения товара меняется (например, товар одобрен или отклонен) в любом из ваших связанных аккаунтов или дочерних аккаунтов.
  • Изменения в сервисах аккаунта. Получайте оповещения в реальном времени о создании, изменении или удалении ресурса AccountService (например, когда устанавливается, изменяется или удаляется связь с сервисом аккаунта).

Предварительные требования и настройка URI обратного вызова

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

  • Это должен быть общедоступный адрес HTTPS с действительным SSL-сертификатом, подписанным признанным центром сертификации.
  • Должен принимать HTTP-запросы POST с заголовком Content-Type, для которого задано значение application/json.
  • Чтобы подтвердить получение уведомления, необходимо вернуть один из следующих кодов статуса HTTP:

    • 102
    • 200
    • 201
    • 202
    • 204

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

Управление подписками

Дополнительный API Notifications предоставляет методы для создания, перечисления, получения, обновления и удаления конфигураций уведомлений.

Создание подписки

Создание подписки зависит от типа события, которое вы хотите получать. Для каждого типа события требуются разные поля конфигурации и разные структуры полезной нагрузки.

Чтобы узнать, как создавать подписки и просматривать примеры запросов для каждого типа событий, ознакомьтесь с соответствующими руководствами:

Получение списка подписок

Чтобы получить список всех подписок на уведомления для аккаунта, отправьте запрос GET к коллекции notificationsubscriptions:

GET https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions

Как получить подписку

Чтобы получить сведения об определенной подписке, используйте название ресурса подписки:

GET https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}

Обновление подписки

Чтобы изменить URI обратного вызова для существующей подписки, отправьте запрос PATCH с параметром update_mask, в котором указаны поля для обновления.

PATCH https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}?update_mask=callBackUri
{
  "callBackUri": "https://example.com/updated-callback"
}

Как удалить подписку

Чтобы перестать получать уведомления, удалите подписку:

DELETE https://merchantapi.googleapis.com/notifications/v1/accounts/{ACCOUNT_ID}/notificationsubscriptions/{SUBSCRIPTION_ID}

Расшифровка уведомлений

Когда происходит событие, Google отправляет уведомление на зарегистрированный вами callBackUri. Push-уведомление поступает в конверте JSON с полезной нагрузкой data, закодированной в base64:

{"message":{"data":"{base64_encoded_string}"}}

Декодируйте строку данных, чтобы получить доступ к полезной нагрузке события JSON. В примере ниже показано, как контроллер Spring Boot получает и декодирует push-уведомления.

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void handleNotification(@RequestBody String message) {
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        String encodedData = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(encodedData);
        String decodedPayload = new String(decodedBytes);
        // Process decodedPayload according to the registered event type
  }
}

Дальнейшие действия

Чтобы настроить подписки и обработку декодированных полезных нагрузок для определенных событий, ознакомьтесь со следующими статьями: