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.
Configuración del flujo
- En Logic Apps, cree un flujo con el disparador Request (llamado «When a HTTP request is received» en la documentación). Power Automate ofrece un disparador equivalente de solicitud HTTP.
- Deje el método en POST (es el valor por defecto) y el esquema JSON del cuerpo vacío, o genérelo con un evento de ejemplo de Eventos.
- Guarde el flujo. El cuadro HTTP URL muestra la URL de devolución de llamada, con parámetros de consulta que incluyen
sig=(firma de acceso compartido). - Copie esa URL completa y escríbala en Dirección del destino (https) en Masnet. Masnet admite cadenas de consulta, cifra la URL completa como un secreto, muestra en la interfaz solo el host y la ruta con la consulta enmascarada y no la registra en logs ni en métricas.
- Trate la URL como una credencial: no la pegue en tickets ni en repositorios. Si se expone, regenere la clave de acceso del flujo en Azure y actualice la dirección del destino en Masnet.
Verificación de la firma
La firma es v1, seguido de base64(HMAC-SHA256) calculado con la clave binaria que resulta de decodificar en base64 lo que sigue a whsec_, sobre los bytes webhook-id + . + webhook-timestamp + . + cuerpo exacto. Verifique siempre sobre los bytes recibidos, antes de interpretar el JSON.
El diseñador de Logic Apps interpreta el cuerpo JSON antes de que usted pueda acceder a él, de modo que reconstruirlo con una expresión puede producir bytes distintos de los firmados. Para evitarlo, llame desde el flujo a una función de Azure (disparador HTTP) o a un servicio propio que reciba el cuerpo sin interpretar, reenviando las tres cabeceras webhook-*, y que use la verificación de Node.js, Python, Java o C#.
Con el formato CloudEvents estructurado el tipo de contenido es application/cloudevents+json; según la documentación de Logic Apps, un contenido que no es application/json se trata como una unidad binaria. Compruebe en su flujo cuál de los dos formatos le entrega los bytes sin alterar.
Expresiones útiles del disparador (ilustrativas):
// Idempotency key (Request trigger outputs)
triggerOutputs()['headers']['webhook-id']
// Event type
triggerOutputs()['headers']['masnet-event-type']
// Event data (the JSON body, parsed by the designer)
triggerBody()?['data']?['object']Respuesta
Si el flujo no incluye una acción Response, el punto de conexión responde de inmediato 202 Accepted, que Masnet considera éxito. Si agrega una acción Response, use el código 200 o 202 tras verificar la firma, y 401 si es inválida; Azure no admite códigos 3xx en esa acción. Si la respuesta tarda más que el límite de espera de Azure, el llamante recibe 408, y Masnet corta de todos modos a los 15 segundos.
Prueba con el evento de prueba
- En Masnet, seleccione Probar destino y Enviar prueba.
- En el historial de ejecuciones del flujo, abra la ejecución y compruebe que
masnet-event-typevalecom.masnet.integration.test.v1. - Active el destino solo después de una prueba exitosa.
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. |
| 401 o 403 del punto de conexión de Azure | La URL sig= cambió o se copió incompleta. Copie de nuevo la URL y actualícela con Cambiar dirección del destino. |