Un webhook es una dirección de tu sistema a la que enviamos el resultado cuando está listo. Así funcionan nuestras consultas al IMSS: mandas la petición, recibes un acuse de inmediato y el resultado llega solo.
¿Dudas técnicas? Habla con un ingeniero por WhatsApp — 0% bots.
Sigue el recorrido de una consulta:
El folio de la consulta se llama transactionId y es el mismo en el acuse y en el resultado.
No te quedas parado en el mostrador hasta que esté lista. Te dan un ticket, haces otra cosa y te avisan. Un webhook es eso mismo entre dos sistemas.
transactionId. El resultado llega con ese mismo folio: así sabes a qué consulta corresponde.Algunas consultas al IMSS toman más tiempo del que conviene esperar con una petición abierta. Por eso el resultado se entrega aparte.
| Qué | Por qué |
|---|---|
| Una dirección pública | Una URL https que podamos alcanzar desde internet. Ahí llega el resultado. |
| Contestar "recibido" en cuanto llegue | Responde con un código 2xx al recibir el mensaje y procésalo después. Así no se agota el tiempo del intento. |
| Reconocer mensajes repetidos | El mismo resultado puede llegar más de una vez. Usa el transactionId para no procesarlo dos veces. |
| Reconocer que somos nosotros | Al crear la consulta puedes mandar tus propios encabezados, por ejemplo un token. Los incluimos en la llamada a tu webhook para que la autentiques. |
2xx en 10 segundos. No seguimos redirecciones.billable te dice si ese resultado contó.Esto es todo lo que necesita un webhook para funcionar bien: reconocer la llamada, contestar de inmediato, descartar repetidos y decidir con type.
2xx va antes que tu lógica de negocio.status, type, message, data, transactionId y billable.INVALID_REQUEST en la misma llamada, no en el webhook, y no se cobra.app.post("/hooks/origoid", express.json(), (req, res) => { // 1. ¿viene de OrigoID? compara el token que tú enviaste if (req.get("authorization") !== `Bearer ${process.env.WEBHOOK_TOKEN}`) return res.sendStatus(401); res.sendStatus(200); // 2. contesta "recibido" const r = req.body; if (yaProcesado(r.transactionId)) return; // 3. descarta repetidos procesar(r.type, r.data); // 4. decide con type });
@app.post("/hooks/origoid") def origoid_webhook(): # 1. ¿viene de OrigoID? compara el token que tú enviaste if request.headers.get("Authorization") != f"Bearer {WEBHOOK_TOKEN}": return "", 401 r = request.get_json() if not ya_procesado(r["transactionId"]): # 3. descarta repetidos encolar(r["type"], r["data"]) # 4. decide con type return "", 200 # 2. contesta "recibido"
{
"status": "OK",
"type": "SUCCESS",
"message": "NSS found",
"data": { "nss": "00000000000" },
"transactionId": "39b972d3-20a8-539a-acfb-70657588df9b",
"billable": true
}
Una dirección de tu sistema que recibe mensajes. En lugar de que tú preguntes una y otra vez si ya está el resultado, nosotros te lo enviamos a esa dirección en cuanto está listo.
Necesitas una dirección https pública que reciba el mensaje. Puede ser un servidor tuyo, una función en la nube o un servicio de tu plataforma: cualquier cosa que acepte una petición y conteste "recibido".
Al crear la consulta puedes incluir tus propios encabezados, por ejemplo un token secreto. Los mandamos de vuelta en la llamada a tu webhook y tú verificas que coincidan.
Lo intentamos tres veces: de inmediato, al minuto y a los cinco minutos. Si las tres fallan, el resultado ya no se reenvía. En semanas cotizadas puedes consultarlo con el folio durante 24 horas.
Sí. El crédito se cobra cuando la consulta se resuelve, la reciba o no tu dirección, porque la consulta sí se realizó. El acuse inicial nunca se cobra.
Puede pasar. Por eso conviene guardar el folio, el transactionId, y descartar los mensajes que ya procesaste.
Te ayudamos a dejar tu webhook funcionando. Créditos de cortesía para probar en producción, tras una breve validación de tu empresa.