Documentación

Módulos de aprovisionamiento

La pieza que separa vender un servicio de entregarlo, para que el núcleo de facturación no sepa nada de paneles de juegos ni de hipervisores.

Diseñado, sin construir

La interfaz está definida; el módulo manual llega con la instancia y el de Pterodactyl, después.

1. Qué resuelve un módulo

Cuando alguien compra en tu tienda, hay que hacer dos cosas que no tienen nada que ver entre sí: cobrar y facturar, por un lado, y entregar lo vendido, por otro. Entregar significa crear un servidor en un panel, dar de alta una cuenta de correo o, sencillamente, avisarte para que lo hagas tú.

Un módulo de aprovisionamiento es lo que conecta lo segundo con lo primero. El núcleo de facturación no sabe qué es un egg de Pterodactyl, ni cuánta memoria lleva un plan: eso vive dentro del módulo y en la configuración del producto. Es la diferencia entre un sistema que sirve para vender cualquier cosa y uno que solo sirve para vender servidores de juegos.

Es también una corrección deliberada de lo que teníamos: en el sistema del que viene Payezz, los identificadores del panel de juegos estaban metidos en el esquema del núcleo, con columnas propias en las tablas de usuarios y pedidos. Aquí salen del núcleo y se quedan en la configuración del módulo.

2. La interfaz

Todo módulo implementa la misma interfaz, ProvisioningModule. Cada operación recibe el servicio y la configuración del producto, y devuelve un resultado explícito: nunca lanza una excepción para indicar «no se pudo».

interface ProvisioningModule {
  id: string                 // 'manual', 'pterodactyl', ...

  aprovisionar(ctx): Resultado   // alta: crear lo vendido
  suspender(ctx):    Resultado   // impago: cortar el acceso
  reactivar(ctx):    Resultado   // pago recuperado: devolverlo
  cambiarPlan(ctx):  Resultado   // subida o bajada de plan
  terminar(ctx):     Resultado   // baja: destruir y liberar

  // Comparar lo que dice Payezz con lo que hay de verdad
  // en el sistema remoto, y proponer correcciones.
  reconciliar(ctx):  Diferencias

  // Qué acciones puede ver el comprador en su panel
  // (arrancar, parar, reinstalar, abrir consola...).
  accionesDeCliente(ctx): Accion[]
}

Las operaciones son idempotentes. Aprovisionar dos veces el mismo servicio no crea dos servidores: la segunda llamada reconoce lo ya creado y devuelve el mismo resultado. Esto no es un lujo: los reintentos son normales cuando hay una red por medio.

3. Estados del servicio

El servicio, no el pedido, es lo que se renueva y lo que un módulo entrega. Su ciclo es explícito y cada transición queda registrada con su motivo, para poder responder meses después a la pregunta «por qué se canceló esto».

EstadoQué significaLlamada al módulo
pendingPagado y todavía sin entregaraprovisionar
activeEntregado y funcionandoNinguna
suspendedImpago o incidencia: sin acceso, sin borrarsuspender y reactivar
cancelledBaja solicitada, pendiente de fin de periodoNinguna todavía
terminatedDestruido y liberadoterminar

4. Reconciliación

Dos sistemas que se hablan por red acaban discrepando: un servidor borrado a mano en el panel, un alta que falló a medias, un cambio de plan que se aplicó en un sitio y no en el otro. La reconciliación compara lo que Payezz cree que existe con lo que existe de verdad.

Aquí hay una lección heredada que sí merece la pena contar: el sistema del que viene Payezz tiene una pantalla de reconciliación que solo diagnostica. Lista las diferencias y ahí se queda; corregirlas es trabajo manual, una por una. Un informe que no puede actuar acaba siendo un informe que nadie abre.

En Payezz, reconciliar devuelve diferencias con una acción correctiva asociada, que el proveedor aplica desde el panel, de una en una o todas juntas, y que queda registrada como cualquier otra acción administrativa.

5. Módulos previstos

MóduloPara quéEstado
manualTú entregas el servicio a mano. Payezz te crea la tarea, te avisa y lleva el estado.Diseñado, sin construir
pterodactylServidores de juegos: alta, suspensión, cambio de plan y borrado en el panel.Diseñado, sin construir

El módulo manual no es el hermano pobre: es ciudadano de primera clase, porque buena parte de lo que se vende en este sector se entrega a mano, y porque es lo que permite usar Payezz para vender algo que no habíamos previsto.

Otros paneles del sector, como cPanel, Plesk, Proxmox o VirtFusion, no tienen módulo hoy. La comparativa de la portada los marca «en camino» precisamente por eso, aunque la competencia sí los tenga.

6. Dónde vive la configuración

Cada producto guarda su module_config, un objeto cuyo contenido lo define el módulo: para pterodactyl, el nodo o grupo, el egg, los límites de memoria, disco y procesador; para manual, la plantilla de la tarea y a quién avisar.

El núcleo no interpreta ese objeto: lo guarda, lo valida contra el esquema que declara el módulo y se lo pasa entero en cada llamada. Por eso añadir un módulo nuevo no obliga a migrar el esquema de la base de datos.

¿Necesitas un módulo que no está en la lista? Cuéntanos cuál y qué operaciones te hacen falta en hola@payezz.app.