Serie 01 · Build a Tiny CPaaS · Capítulo 3 de 5 · Routing

Decida el canal y registre la evidencia

Aprenda a separar la decisión de enrutamiento de la ejecución del canal. El router evalúa la política, verifica la firma y delega a un adaptador. Cada decisión produce una evidencia auditable para medición y multitenencia. Plataforma Mobiconnect: Business API y AI sobre Open Telco, Open API, CAMARA y GSMA Open Gateway.

Avanzado Sandbox simulado Capítulo 3 · 2 ejercicios · Requisito: capítulos 1–2
Alcance verificado. Esta lección se ejecuta en el navegador, con datos simulados. Sin APIs CAMARA productivas desde la academia. Sin Entitlements pagados en ub3r.io; el cobro vía Entitlements se configura en el Hub. Rendimiento y disponibilidad: NO MEDIDO.

01 · Objetivos

Qué construirá en esta lección

Al finalizar, usted distinguirá tres responsabilidades: decidir, ejecutar y registrar. Esta separación permite cambiar de canal sin reescribir la lógica de negocio y facilita la auditoría por tenant.

  • Decidir: evaluar tenant, channels y policy sin efectos secundarios.
  • Ejecutar: delegar a un único adaptador por intento (voz, mensajería o QoD simulado).
  • Registrar: añadir al ledger un evento por cada intento, exitoso o no.

Políticas admitidas en el simulador

PolíticaComportamientoUso
verified-onlySolo enruta si la firma, el antirrepetición, el tenant y el canal se verifican correctamente. En caso contrario, registra el rechazo y no ejecuta.Por defecto. Recomendada.
least-costOrdena los canales por coste configurado y prueba uno a la vez, en orden.Coste [por validar] en sandbox.
failoverSi el adaptador probado devuelve error, intenta el siguiente canal disponible. Cada intento queda registrado; solo puede haber un resultado exitoso por mensaje.Requiere evidencia por intento.

Eventos de telemetría previstos para la academia: page_view · chapter_start · crosslink_click, sin datos personales. Implementación: [por validar].

02 · Diagrama

Cómo decide Router-Z

El mensaje ingresa una sola vez. Router-Z evalúa la política, verifica firma, antirrepetición, tenant y canal; después, un adaptador ejecuta por intento. En modo failover puede haber varios intentos sucesivos, pero solo uno puede resultar exitoso. El ledger y la medición observan, no deciden.

Diagrama de flujo de Router-Z De izquierda a derecha: API del tenant de ejemplo, Router-Z con política y verificación, tres adaptadores de voz, mensajería y QoD simulado, y registro en ledger y medición por tenant. En modo failover se puede reintentar con el siguiente adaptador, pero solo un intento puede resultar exitoso. API tenant tenant-demo Router-Z policy + firma + antireplay route(msg) decide · no ejecuta Voice adaptador Messaging adaptador QoD simulado · CAMARA Ledger evidencia por intento Metering por tenant Failover intenta canales en orden; solo uno puede ejecutar con éxito Observan · no deciden
Figura 1 — Router-Z: decisión centralizada, ejecución delegada por intento y registro auditable de cada intento. QoD como capacidad CAMARA simulada en navegador. Sin ejecución productiva desde ub3r.io.
Lea el diagrama asíLa API aporta el contexto del tenant de ejemplo. Router-Z aplica la política y verifica firma, antirrepetición, tenant y canal. El adaptador probado ejecuta el intento. Ledger y Metering reciben la misma evidencia por cada intento.
Error frecuenteMezclar decisión y ejecución en el adaptador impide auditar y cambiar de canal sin riesgo. Mantenga la decisión pura, verificable y registre cada intento, no solo el resultado final.

03 · Pseudocódigo de referencia

El contrato mínimo de Router-Z

Pseudocódigo — no se ejecuta en esta página

Tres funciones, un contrato. El bloque siguiente describe el comportamiento evaluado en los ejercicios de esta lección como referencia conceptual; no corresponde a código ejecutado en el navegador.

// router.pseudo — contrato de referencia, no ejecutado en esta página
const route = router.route(msg, {
  tenant: "tenant-demo",
  channels: ["voice", "messaging", "qod"],
  policy: "verified-only"
});

for (const intento of route.intentos) {
  ledger.append(intento.evidencia); // se registra cada intento
  if (intento.verified) {
    adapter.execute(intento.channel, msg);
    break; // un único intento exitoso posible
  }
}

Estado de ejecución real en esta página: NO MEDIDO (pseudocódigo). Verificación de firma, antirrepetición, tenant y canal: [por validar] en implementación productiva.

Campos de la evidencia por intento

CampoContenido
tenantIdentificador del tenant de ejemplo. Sin datos personales.
channelCanal probado en este intento: voz, mensajería o QoD simulado.
policyPolítica aplicada y orden de evaluación.
verifiedResultado booleano de la verificación de firma, antirrepetición, tenant y canal.
rejectionMotivo registrado cuando verified es falso.
Regla de cobro. Sin Entitlements pagados en ub3r.io. La medición de esta lección es didáctica; el cobro vía Entitlements se configura en el Hub. Ver producto.

04 · Ejercicios calificados

Ejercicio 3.1 — Seleccione y justifique el canal

Lea el caso, seleccione una opción, redacte su justificación y compruebe su criterio con la solución. El resultado no se envía a ningún servidor; contenido y solución visibles sin JavaScript.

Caso: política failover con el primer canal no disponible

Un mensaje del tenant de ejemplo tenant-demo llega con policy: "failover" y channels: ["voice","messaging","qod"]. El adaptador de voz devuelve error. Según el contrato de esta lección, ¿qué canal debe intentarse a continuación y por qué?

Seleccione una opción, justifique su respuesta y pulse «Comprobar respuesta». Sin puntuación externa; el resultado se evalúa solo en este navegador.

Sin respuesta comprobada.

Ver solución y explicación — Ejercicio 3.1

Respuesta correcta: A. Con failover, Router-Z prueba los canales en el orden declarado tras cada fallo. Mensajería es el siguiente canal en la lista y no se ha agotado. La opción B viola el contrato de un intento por canal antes de avanzar. La opción C omite el orden declarado sin justificación de política.

Criterio evaluado: justificar la secuencia de intentos y el registro de evidencia por cada uno, no solo identificar el canal final.

Ejercicio 3.2 — Verificación insuficiente

Un mensaje del tenant de ejemplo tenant-demo llega con policy: "verified-only" y la verificación de antirrepetición falla, aunque la firma es válida. Seleccione la acción correcta y justifíquela.

Ver solución y explicación — Ejercicio 3.2

Respuesta correcta: B. verified-only exige que todas las verificaciones configuradas —firma, antirrepetición, tenant y canal— sean válidas. Basta con que una falle para que el sistema registre el rechazo y no ejecute. La opción A ignora la antirrepetición; la opción C es incorrecta porque la academia no utiliza credenciales productivas.

Progreso local. Al comprobar el ejercicio 3.1, esta página marca el capítulo 3 como «en curso» únicamente en este navegador, sin enviar datos a ningún servidor.

Lista de comprobación

Serie 01 · Capítulo 3 · Requiere capítulos 1–2. Duración [por validar].

sandbox · salida de referencia

Salida de referencia (pseudocódigo), no generada en vivo por esta página:

  1. intento 1 → channel: voice → verified: false
  2. ledger.append(rejection: "adapter-error")
  3. intento 2 → channel: messaging → verified: true
  4. ledger.append(evidence: "executed")
  5. Resultado: un único intento exitoso registrado

05 · Siguiente paso

Continúe la serie

Practique el mismo contrato con fallos de adaptador en el laboratorio simulado, o revise el catálogo completo.

Laboratorio simulado

Pruebe failover sin riesgo

Fuerce un error en el adaptador de voz y observe cómo Router-Z intenta el siguiente canal, con evidencia registrada por cada intento.

Abrir laboratorioSandbox en navegador

Capítulo 4 de 5

Medición por tenant

Convierta la evidencia de esta lección en cargos auditables con límites configurables mediante Entitlements.

Producto

De aprender a construir

Explore cómo el mismo contrato de Router-Z se traslada al producto de Mobiconnect, con Entitlements configurables por tenant.