Requisitos en Masnet
Antes de configurar el sistema receptor, prepare el destino en Masnet. Los pasos son los mismos para todos los sistemas.
- Abra Empresa › Integraciones, vaya a la pestaña Destinos y seleccione Nuevo destino. Si la integración aún no tiene datos autorizados, Masnet le pedirá autorizarlos primero.
- En Dirección del destino (https) escriba la URL pública del receptor. Debe ser
https, puerto 443 u 8443 y un nombre DNS público: no se admiten usuario en la URL, fragmento, direcciones IP ni nombres internos. Se admite una cadena de consulta; Masnet trata la URL completa como una credencial. - En Formato elija JSON estándar (
application/json) o CloudEvents estructurado (application/cloudevents+json). El contenido del evento es el mismo; consulte Webhooks. - Seleccione Crear destino. Masnet muestra el secreto de firma (
whsec_…) una sola vez. Guárdelo de inmediato en el almacén de secretos del receptor; no podrá consultarlo después. - Seleccione Probar destino y luego Enviar prueba. La integración solo se activa con una prueba exitosa; después use Activar destino.
Recepción en Logic Apps
Configure el flujo de recepción como se describe en la guía de Azure Logic Apps y Power Automate: disparador de solicitud HTTP, URL con sig= en Dirección del destino (https) y verificación de la firma en una función antes de escribir en Dataverse.
Verificación y escritura
- Después de la verificación, use un condicional sobre
triggerOutputs()['headers']['masnet-event-type']para elegir la rama por tipo de evento. - Para evitar duplicados, guarde
webhook-iden una columna de la fila y consúltela antes de escribir; si ya existe, termine sin cambios. Si su tabla define una clave alternativa, la operación de *upsert* de Dataverse evita ese paso. - Para evitar retrocesos, guarde el
sequenceúltimo aplicado porsubjecty descarte el evento si el recibido es menor o igual. - Escriba en Dataverse con la acción del conector o con la API web:
POST [URI de la organización]/api/data/v9.2/<conjunto de entidades>crea una fila y responde 204 con la cabeceraOData-EntityId.
Ejemplo de mapeo: contract.status_changed
Los nombres de tabla y columna siguientes son un ejemplo: corresponden a una tabla personalizada que su organización debe crear. Los campos de Masnet son los del evento com.masnet.contract.status_changed.v1, dentro de data.object.
| Campo del evento | Columna de ejemplo en Dataverse | Observación |
|---|---|---|
data.object.id | new_masnetid | Identificador de Masnet del contrato (UUID). |
data.object.contract_code | new_contractcode | Grupo business. |
data.object.status | new_status | Estado abierto: ignore valores desconocidos. |
data.object.tender.code | new_tendercode | Grupo public. |
data.previous.status | new_previousstatus | Solo viene si cambió el estado. |
sequence del envoltorio | new_sequence | Para descartar eventos antiguos. |
cabecera webhook-id | new_lastwebhookid | Para idempotencia. |
Respuesta
Responda 200 o 202 desde el flujo después de verificar la firma. Si la escritura en Dataverse es lenta, separe la recepción del procesamiento con una cola para responder antes de 15 segundos.
Prueba con el evento de prueba
- En Masnet, seleccione Probar destino y Enviar prueba.
- Compruebe que la rama del evento de prueba (
com.masnet.integration.test.v1) termina sin escribir en Dataverse. - Pruebe una escritura real después de activar el destino, con un contrato de un entorno de pruebas.
Operación: duplicados y orden
- Idempotencia.
webhook-ididentifica el evento y se conserva en los reintentos y los reenvíos. Registre los identificadores ya procesados y descarte los repetidos con una respuesta 2xx. - Orden. Cada recurso (
subject) lleva unsequencecreciente. Descarte un evento cuyosequencesea menor o igual al último que aplicó para esesubject. Los eventos de recursos distintos no tienen orden entre sí. - Reintentos. Masnet reintenta cualquier respuesta distinta de 2xx durante un máximo de 72 horas; el calendario completo está en Webhooks.
- Rotación del secreto. Al rotar con superposición, el secreto anterior sigue vigente 24 horas y
webhook-signaturetrae dos firmasv1,…separadas por un espacio. Acepte el evento si cualquiera coincide.
Diagnóstico
Masnet registra el código de respuesta de cada intento en el historial de entregas. Estos son los efectos de cada respuesta del receptor:
| Respuesta del receptor | Efecto en Masnet |
|---|---|
| 2xx | Entrega exitosa. Significa recepción, no procesamiento de negocio. |
| 3xx | No se sigue la redirección. Cuenta como fallo y se reintenta; el historial muestra el Location sin su cadena de consulta. |
| 400, 401, 403, 404 y otros 4xx o 5xx | Fallo reintentable hasta 72 horas desde el inicio del ciclo de entrega. |
| 410 | Masnet desactiva el destino y cancela lo pendiente. Use 410 solo si el destino debe dejar de recibir eventos. |
| 413 | El evento se marca como no entregable a ese destino y no se reintenta. |
429 o 503 con Retry-After | Se respeta Retry-After (segundos o fecha HTTP) hasta un máximo de 1 hora. |
| Sin respuesta en 15 segundos | Tiempo agotado (5 s de conexión, 15 s en total). Es un fallo reintentable: responda 2xx y procese de forma asíncrona. |