En Riqra utilizamos webhooks para notificar a su sistema la ocurrencia de eventos en su tienda, como el ingreso de un nuevo pedido.
Esto permitirá que su sistema pueda reaccionar a eventos casi en tiempo real (milisegundos) luego de ocurrido algún evento en su tienda. Además, podría ayudar a reducir el consumo de su cuota en nuestra API, aunque podrá continuar usando ambas interfaces a la vez.
Consideraciones clave
Cada vez que ocurra un evento en su tienda, enviaremos una notificación HTTP POST a la URL que haya configurado con toda la información del evento en formato JSON, esperando recibir una confirmación de su lado. Estos son algunas de las consideraciones que debe tener en cuenta:
Versatilidad
La URL puede estar implementada en cualquier lenguaje de programación (C#, Java, Nodejs, Python, etc), solo necesita del protocolo HTTP.
Seguridad
- El único puerto que necesitamos que esté expuesto es el 443.
- Debe validar el signature del evento para asegurarse que no tuvo alteraciones en tránsito, detallada en la sección Seguridad.
- La URL no necesita estar expuesta dentro de su sistema, puede estar en un servidor diferente y tener acceso privado a su sistema.
- Podríamos brindar una IP estática que permitir en su firewall.
Devolver un código de estado 200
Para informarnos de la correcta recepción del evento, su URL debe responder únicamente con el código de estado HTTP 200. De lo contrario, consideraremos que la notificación falló y volveremos a intentarla.
Tiempo de espera
Luego de notificar el evento a su URL, esperaremos hasta 30 segundos para recibir el código de estado 200. Si esto no ocurre, consideraremos que la notificación falló y volveremos a intentarla.
Si la ejecución de su webhook es muy pesada y empieza a tener inconvenientes, recuerde que no es necesario que esperar a terminar de ejecutar sus procesos para respondernos. Luego de recibir el evento, puede guardarlo en su sistema para ser procesado después, así puede devolver el código de estado 200 mucho más rápido y no llegar a este límite.
Reintentos
Cuando recibimos un código de estado diferente a 200 o se excede el tiempo de espera, intentaremos notificar el evento a su URL hasta 3 veces más.
Eventos repetidos
Considere que podría recibir un evento más de una vez si consideramos la notificación como fallida y volvemos a intentarla. Su sistema podría haber procesado correctamente el evento pero nosotros no haber recibido la respuesta correcta. Por ejemplo, si la conexión entre nosotros y su URL se pierde, si su URL demora más de 30 segundos en responder o si ocurre un error en su sistema, etc.
Orden de eventos
Considere que el orden de los eventos no está asegurado, así que podría recibir una actualización antes de una creación. Por ejemplo, si ingresó un nuevo pedido, intentamos notificar a su URL pero nos respondió con un error así que guardamos el evento para ser reintentado luego, se hace una actualización a ese pedido e intentamos notificar a su URL.
Aseguramiento
Es recomendado que aun así, se tenga una sonda que de tiempo en tiempo pueda consulta nuestra API para asegurarse que todas las entidades han sido recibidas por su sistema. Por ejemplo, si intentamos comunicarnos con su URL pero por problemas de red no pudo recibir nuestras notificaciones ni los reintentos, no estaría enterado que perdió eventos.