Recibe notificaciones push sobre los cambios en los datos de tu cuenta

Puedes usar la API de Merchant Notifications para recibir notificaciones push sobre los cambios en los datos de la cuenta. Por ejemplo, si te suscribes a las notificaciones de cambios de estado de los productos, puedes recibir notificaciones en tiempo real cuando se rechace un producto. Puedes suscribirte a las notificaciones de cualquiera de tus cuentas secundarias o de otras cuentas vinculadas.

En esta guía, se proporcionan ejemplos de cómo administrar notificaciones para cambios en el estado de los productos. Puedes usar estos ejemplos para administrar notificaciones de otros eventos. Para ello, cambia el valor del campo registeredEvent en tus solicitudes. Para obtener una lista completa de los tipos de eventos, consulta la referencia de la API de Merchant Notifications.

Suscribirse

Para recibir notificaciones, necesitas un callBackUri. Tu URI de devolución de llamada debe cumplir con los siguientes requisitos:

  • Debe ser una dirección HTTPS de acceso público con un certificado SSL válido firmado por una autoridad certificadora.
  • Debes aceptar solicitudes HTTP POST con el encabezado Content-Type y el valor application/json.
  • Debe mostrar uno de los siguientes códigos de respuesta para confirmar que se recibió la notificación.
    • 102
    • 200
    • 201
    • 202
    • 204

Puedes usar el mismo URI de devolución de llamada para varias suscripciones. Te recomendamos que uses un URI de devolución de llamada único por cuenta avanzada y por tipo de evento para minimizar la carga de solicitudes push en un solo URI.

A continuación, se incluye un ejemplo de solicitud de suscripción a notificaciones sobre cambios en el estado del producto para una cuenta de comerciante específica. Usa el ID del comercio de la cuenta que debe recibir las notificaciones como merchantId en la URL de la solicitud y el ID del comercio de la cuenta para recibir notificaciones como targetMerchantId en el cuerpo de la solicitud. Si tu cuenta es independiente sin cuentas vinculadas y deseas recibir notificaciones de la propia cuenta, usa tu propio ID de comerciante en ambos lugares.

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/
{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Las llamadas correctas muestran un name para tu suscripción, incluido un ID de suscripción:

{
  "name":"accounts/merchantId/notificationsubscriptions/subscriptionId",
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "targetAccount": "accounts/targetMerchantId",
  "callBackUri": "https://example.com"
}

Puedes usar esta name para GET y DELETE suscripciones individuales.

Para suscribirte a notificaciones sobre cambios en el estado de los productos de todas tus cuentas vinculadas, incluye "allManagedAccounts": true en lugar de targetAccount en tu solicitud:

POST https://merchantapi.googleapis.com/notifications/v1beta/accounts/merchantId/notificationsubscriptions/

{
  "registeredEvent": "PRODUCT_STATUS_CHANGE",
  "allManagedAccounts": true,
  "callBackUri": "https://example.com"
}

Para actualizar una suscripción existente, usa PATCH con un update_mask para especificar los campos que deseas actualizar y los valores nuevos en el cuerpo JSON:

PATCH /notifications/v1beta/accounts/merchantId/notificationsubscriptions/subscriptionId?update_mask=callBackUri

{
  "​callBackUri": "https://my-own-personal-domain.com"
}

Cómo decodificar notificaciones

Después de crear una suscripción, recibirás notificaciones del callBackUri especificado en el siguiente formato:

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

Los datos de la notificación están codificados. Puedes decodificar los datos a un formato de texto legible para usarlos en tu implementación. Este es un controlador de arranque de primavera de muestra que podrías usar para procesar los datos codificados:

@RestController
public class ExampleController {
@RequestMapping(value = "/push",
  method = RequestMethod.POST,
  consumes = {"application/json"},
  produces = {"text/plain"})
  @ResponseStatus(HttpStatus.OK)
  public void doStuff(@RequestBody String message) {
        //wrapped message
        JSONObject jsonObject = new JSONObject(message);
        JSONObject jsonMessage = jsonObject.getJSONObject("message");
        message = jsonMessage.getString("data");
        byte[] decodedBytes = Base64.getDecoder().decode(message);
        String decodedMessage = new String(decodedBytes);
        // Implement your business logic here
  }
}

Este es un ejemplo de un base64_encoded_string que se decodificó:

{
  "account": "accounts/targetMerchantId",
  "managingAccount": "accounts/merchantId",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }, {
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "JP",
    "reportingContext": "SHOPPING_ADS"
  },{
    "oldValue": "eligible",
    "newValue": "disapproved",
    "regionCode": "GE",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~1234",
  "resource": "accounts/targetMerchantId/products/ONLINE~en~US~1234",
  "expirationTime": "2024-10-22T02:43:47.461464Z"
}

Si no hay un campo oldValue en la notificación, significa que se agregó un producto nuevo a tu cuenta. Si no hay un campo newValue, significa que el producto se borró de tu cuenta.

El campo reportingContext solo admite (SHOPPING_ADS, LOCAL_INVENTORY_ADS, YOUTUBE_SHOPPING, YOUTUBE_CHECKOUT) del valor de enumeración ReportingContextEnum.

Cómo probar tu implementación

Esta es una notificación de muestra que puedes usar para probar tu URI de devolución de llamada y la decodificación:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ewogICJhY2NvdW50IjogImFjY291bnRzLzEyMzQiLAogICJtYW5hZ2luZ0FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIsCiAgInJlc291cmNlVHlwZSI6ICJQUk9EVUNUIiwKICAiYXR0cmlidXRlIjogIlNUQVRVUyIsCiAgImNoYW5nZXMiOiBbewogICAgIm9sZFZhbHVlIjogImVsaWdpYmxlIiwKICAgICJyZWdpb25Db2RlIjogIlVTIiwKICAgICJyZXBvcnRpbmdDb250ZXh0IjogIlNIT1BQSU5HX0FEUyIKICB9XSwKICAicmVzb3VyY2VJZCI6ICJPTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAicmVzb3VyY2UiOiAiYWNjb3VudHMvMTIzNC9wcm9kdWN0cy9PTkxJTkV+ZW5+VVN+MDAwMDAwMDAwMDAwIiwKICAiZXhwaXJhdGlvblRpbWUiOiAiMjAyNC0xMC0yMlQwMjo0Mzo0Ny40NjE0NjRaIgp9"}}' https://{callBackUri}

En respuesta a esta llamada, el URI de devolución de llamada debe mostrar un código de respuesta correcta. El mensaje decodificado debe tener el siguiente valor:

{
  "account": "accounts/1234",
  "managingAccount": "accounts/5678",
  "resourceType": "PRODUCT",
  "attribute": "STATUS",
  "changes": [{
    "oldValue": "eligible",
    "regionCode": "US",
    "reportingContext": "SHOPPING_ADS"
  }],
  "resourceId": "ONLINE~en~US~000000000000",
  "resource": "accounts/1234/products/ONLINE~en~US~000000000000",
  "expirationTime": "2024-10-22T02:43:47.461464Z"
}