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

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

En esta guía, se proporcionan ejemplos de cómo administrar las notificaciones de cambios de estado de productos. Puedes usar estos ejemplos para administrar las notificaciones de otros eventos si cambias 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.
  • Se deben aceptar solicitudes HTTP POST con el encabezado Content-Type y el valor application/json.
  • Debes 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. Recomendamos usar un URI de devolución de llamada único por cuenta avanzada y por tipo de evento para minimizar la carga de solicitudes de envío a un solo URI.

Esta es una solicitud de ejemplo para suscribirte a las notificaciones sobre cambios en el estado de los productos de una cuenta de comerciante específica. Usa el ID del comerciante de la cuenta que debe recibir las notificaciones como merchantId en la URL de la solicitud y el ID del comerciante de la cuenta para la que quieres recibir notificaciones como targetMerchantId en el cuerpo de la solicitud. Si tu cuenta es independiente sin cuentas vinculadas y quieres recibir notificaciones en tu propia cuenta, usa tu 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 exitosas muestran un name para tu suscripción, incluido el ID de suscripción:

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

Puedes usar este name para GET y DELETE suscripciones individuales.

Si quieres suscribirte a las notificaciones de cambios en el estado de los productos para todas las 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 a fin de 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 en el 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. A continuación, se muestra un controlador de Spring Boot de muestra que puedes 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"
"managing_account": "accounts/merchantId"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "GE"
  "reporting_context": SHOPPING_ADS
},
"changes" {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "JP"
  "reporting_context": SHOPPING_ADS
},
changes {
  "old_value": "eligible"
  "new_value": "disapproved"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
resource_id: "ONLINE~en~US~1234"
resource: "accounts/targetMerchantId/products/ONLINE~en~US~1234"

Cómo probar tu implementación

A continuación, se ofrece una notificación de ejemplo que puedes usar para probar tu URI de devolución de llamada y decodificación:

curl --header "Content-Type: application/json" --header "Accept: text/plain" --request POST --data '{"message":{"data":
"ImFjY291bnQiOiAiYWNjb3VudHMvMTIzNCIKIm1hbmFnaW5nX2FjY291bnQiOiAiYWNjb3VudHMvNTY3OCIKInJlc291cmNlX3R5cGUiOiBQUk9EVUNUCiJhdHRyaWJ1dGUiOiBTVEFUVVMKImNoYW5nZXMiOiB7CiAgIm9sZF92YWx1ZSI6ICJlbGlnaWJsZSIKICAicmVnaW9uX2NvZGUiOiAiVVMiCiAgInJlcG9ydGluZ19jb250ZXh0IjogU0hPUFBJTkdfQURTCn0KInJlc291cmNlX2lkIjogIk9OTElORX5lbn5VU34wMDAwMDAwMDAwMDAiCiJyZXNvdXJjZSI6ICJhY2NvdW50cy8xMjM0L3Byb2R1Y3RzL09OTElORX5lbn5VU34wMDAwMDAwMDAwMDAi"}}' https://{callBackUri}

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

"account": "accounts/1234"
"managing_account": "accounts/5678"
"resource_type": PRODUCT
"attribute": STATUS
"changes": {
  "old_value": "eligible"
  "region_code": "US"
  "reporting_context": SHOPPING_ADS
}
"resource_id": "ONLINE~en~US~000000000000"
"resource": "accounts/1234/products/ONLINE~en~US~000000000000"