Saltar al contenido

Cómo funciona

El núcleo de notific.me tiene cinco piezas. Todo lo demás se construye encima.

Pieza Qué es Ejemplo
Event Algo pasó deploy.ok, lead.new, container.die
Policy Quién debe saberlo, cuándo, con qué urgencia y con qué nivel “Todo lo que viene de agentes de IA exige nivel 2”
Card Cómo se ve la notificación Resumen, tarjeta declarativa
Action Qué se puede hacer desde ella Aprobar, elegir una opción, abrir un panel
Reply La respuesta firmada que vuelve { question_set_id, version, answers, signature }
Cómo funciona notific.me, de punta a puntaTu sistema envía un evento o una pregunta. La API de ingesta lo valida, las reglas de política deciden si se entrega y a quién, la notificación con su tarjeta llega a la persona en la app, la persona decide y firma, el servidor acepta la decisión una sola vez y devuelve la respuesta firmada a tu sistema por webhook o long-poll.Tu sistemaSDK · REST · hookagente de IA (MCP)API de ingestavalida, deduplica,idempotenciaReglas de políticanotify · digestsuppress · escalateNotificaciónresumen + tarjeta+ preguntasPersonaapp · PWA · pushDecisión firmadanivel 0–4: biometríao código 2FAAceptación atómicagana una respuesta+ outboxRespuesta de vueltawebhook firmadoo long-poll del askentregarespuesta firmada
  1. Tu sistema envía un evento (POST /v0/events) o un grupo de preguntas (POST /v0/asks) con un token de servicio. También puede enviar cualquier webhook a un hook de entrada, o un agente de IA puede usar el servidor MCP.
  2. La API de ingesta valida el contenido según el protocolo abierto, une duplicados por dedup_key y hace seguros los reintentos con claves de idempotencia.
  3. Las reglas de política del workspace deciden qué pasa: notify, digest, suppress o escalate.
  4. Se crea una notificación para cada destinatario, con un resumen, una tarjeta y, en las preguntas, el grupo de preguntas.
  5. La persona la recibe en la app, en la app web o por push.
  6. La persona decide. El nivel define lo que hace falta: un toque, el dispositivo desbloqueado, biometría o un código 2FA, y quizá un quórum.
  7. El servidor acepta la respuesta de forma atómica: gana una respuesta, y la respuesta más el webhook a tu sistema se guardan en la misma transacción (outbox transaccional), así la decisión nunca se pierde.
  8. La respuesta firmada vuelve a tu sistema: como webhook a callback_url, firmado con Ed25519, o como resultado de la llamada ask() que hace long-poll.
Cómo deciden las reglas de políticaEl evento se compara con las reglas del workspace, en orden; la primera que coincide decide la acción: notify (avisa ahora), digest (resumen agrupado), suppress (se guarda, no se entrega) o escalate (avisa con prioridad alta y destinatarios extra). En el horario de silencio, notify pasa a digest, salvo que la regla ignore el silencio.Eventosource · typeseverity · horaReglas, en ordengana la primera;si no, la por defecto¿Horario de silencio?notify → digestsalvo bypass_quietnotifyse entrega ahoradigestagrupado en un resumensuppressguardado, no se entregaescalateprioridad alta + extras

Las reglas se evalúan en orden, y la primera que coincide decide. Si ninguna coincide, vale la acción por defecto del workspace. El horario de silencio puede convertir notify en resumen (o suprimirlo) por debajo de una severidad mínima. Más en Reglas y políticas.

Ciclo de vida de una preguntaPOST /v0/asks crea el question set en estado open. Tu código espera con GET /v0/asks/{id}?wait=60 (long-poll) o recibe un webhook. Termina como answered (respuesta firmada), timeout (se aplican las respuestas de on_timeout, con reply), expired o cancelled (sin respuesta).POST /v0/asks201 · Idempotency-KeyopenGET /v0/asks/{id}?wait=60o callback_urlansweredrespuesta firmadatimeoutrespuestas de on_timeoutexpired · cancelledsin respuesta (AskClosedError)

El ask() del SDK hace los dos pasos por ti: crea el grupo de preguntas y hace long-poll hasta la respuesta o el plazo. Mira Preguntas y respuestas.

Niveles de decisión de 0 a 4El servicio pide un nivel mínimo; el workspace solo puede subirlo. Vale el nivel más alto entre las preguntas. Nivel 0 es un toque, nivel 1 dispositivo desbloqueado, nivel 2 biometría o código 2FA (la ventana del 2FA puede cubrirlo), nivel 3 biometría o código 2FA en cada acción, en línea y con un plazo corto, nivel 4 es el nivel 3 más quórum de personas.Nivel del serviciolevel: 0–4 en ask()(por defecto 1)Mínimo del workspacepuede subir,nunca bajarNivel efectivoel más alto entrelas preguntas0 · toquemarcar leído, ver1 · dispositivo desbloqueadoreiniciar contenedor2 · biometría o 2FAla ventana 2FA puede cubrirlo3 · biometría o 2FA, cada acciónen línea · plazo corto4 · nivel 3 + quórumej.: 2 de 3 aprueban (app)

El servicio define el nivel mínimo en ask(). El workspace puede subirlo, nunca bajarlo. Vale el nivel más alto entre las preguntas, y una firma cubre todas las respuestas.

No todo dispositivo tiene lector de huellas, y el navegador no tiene biometría. Quien activa la verificación en dos pasos (una app autenticadora con códigos TOTP) firma decisiones de nivel 2 y 3 con el código de 6 dígitos.

Firmar una decisión con el código 2FASin biometría, quien activó el 2FA firma decisiones de nivel 2 y 3 con el código de 6 dígitos de la app autenticadora. El nivel 3 siempre pide el código. En el nivel 2, si la sesión está dentro de la ventana 2FA que eligió la persona, se firma sin escribir el código; si no, la persona escribe el código, el servidor lo verifica (±30 segundos, un solo uso, 5 errores en 15 minutos bloquean) y un código válido abre la ventana para esa sesión.Abre la decisiónsin biometría aquí(navegador, PWA)¿Nivel?2 o 3Escribe el código de 6 dígitosde la app autenticadoraEl servidor verifica±30 s · un solo uso5 errores / 15 min = bloqueo¿Ventana 2FA abierta?en esta sesión,0–240 min, tú eligesRespuesta aceptadaauth_method: "totp"(código válido abre la ventana)Se firma sin códigosolo nivel 2nivel 3válidonivel 2nosí
  • El nivel 3 siempre pide un código nuevo, en cada acción.
  • El nivel 2 puede usar una ventana 2FA que la persona elige en su cuenta (desactivada, 5, 15, 30, 60, 120 o 240 minutos). Tras un código válido, esa sesión firma decisiones de nivel 2 sin volver a escribir el código. Con 50 aprobaciones pendientes, nadie quiere escribir 50 códigos.
  • La biometría siempre es una solicitud por decisión.
  • El nivel 4 (quórum) sigue exigiendo la app con biometría.
Cómo llega la notificación a la personaCon la app abierta, la notificación llega por el gateway WebSocket en milisegundos. Con la app cerrada, el relay de push la envía por APNs (iOS), FCM (Android) o Web Push para la PWA instalada, cifrada de punta a punta. Cuando la app se abre de nuevo, sincroniza de forma incremental desde un cursor.Notificaciónpara cada destinatario¿App abierta?Gateway WebSocketdecenas de milisegundosRelay de pushen general 1–2 s,sin garantíaLa bandeja se actualizaapp · web · PWAAPNsapp iOSFCMapp AndroidWeb PushPWA · VAPID · cifradoAl abrir: sync por cursorsíno
  • App abierta: el gateway WebSocket entrega en decenas de milisegundos.
  • App cerrada: el relay de push envía por APNs (iOS), FCM (Android) o Web Push para la PWA instalada. Web Push está cifrado de punta a punta, así que puede mostrar el título y el resumen.
  • Cuando la app se abre de nuevo, sincroniza de forma incremental desde un cursor, sin perder nada.

Mira App, PWA y push.