Un backend de casino que conecta slots, crupier en vivo y juegos de mesa de muchos proveedores necesita una única capa de agregación: sesiones emitidas por el operador, callbacks de saldo que sobreviven a reintentos y rollbacks, rondas que pueden cerrarse después de la sesión y una conciliación diaria con el informe propio de cada proveedor. Así se divide esa capa y dónde suelen romperse las integraciones de proveedores.
Un operador que construye su propio backend de casino y conecta slots, crupier en vivo y juegos de mesa de muchos proveedores acaba con tantos contratos de integración como proveedores: flujos de lanzamiento distintos, llamadas al monedero distintas, ideas distintas de lo que es una ronda. La capa de agregación los convierte en un único contrato interno, de modo que el monedero, el lobby, los bonos, los límites y los informes se escriben una sola vez y cada proveedor se adapta a ellos.
Lo que sigue es cómo suele dividirse esa capa: qué se queda con el proveedor, cómo se emiten las sesiones, cómo sobreviven los callbacks de saldo a los reintentos y a los rollbacks, cómo se registran las rondas cuando se cierran después de la sesión y cómo se concilia el resultado con las cifras propias del proveedor.
La respuesta corta es un único contrato interno con un adaptador por proveedor. El operador emite la sesión; cada cargo, abono y rollback lleva el ID de transacción del proveedor como clave de idempotencia acotada por proveedor y tipo de llamada; un rollback de una transacción que el monedero nunca vio se guarda, de modo que un original que llega tarde se rechaza; las rondas se registran como un estado que puede cerrarse después de que termine la sesión; y el informe propio de cada proveedor se concilia cada día con el libro mayor del monedero.
El proveedor ejecuta el juego: la generación de números aleatorios, la matemática del juego, el cliente del juego y su certificación por un laboratorio de pruebas. El operador se queda con todo lo que toca al jugador y al dinero: la identidad, el saldo, los límites, los bonos, el lobby y los registros que puedan pedir un regulador o una disputa con un jugador. La capa de agregación se sitúa entre ambos y debería ser el único código del lado del servidor que hable la API de cada proveedor.
Los proveedores se conectan al dinero de un operador de una de dos formas. En un monedero seamless, el saldo se queda con el operador, y el proveedor llama al monedero del operador en cada apuesta y cada ganancia. En un monedero de transferencia, antes de jugar, el operador mueve dinero a un saldo que se mantiene del lado del proveedor, y solo lo trae de vuelta cuando lo pide.
El resto de este artículo asume un monedero seamless, porque ahí cada apuesta y cada ganancia es una llamada al monedero.
El lanzamiento de un juego empieza del lado del operador. El backend comprueba que este jugador puede jugar a este juego ahora, lo que abarca el estado de la cuenta, la autoexclusión, los límites y si el juego puede ofrecerse en la jurisdicción del jugador. Después crea una sesión vinculada al jugador, al juego y a la moneda, y pasa un token opaco al proveedor en el lanzamiento. Cuando el servidor del proveedor hace el callback, ese token identifica de quién es el saldo al que se refiere la llamada.
Los documentos publicados para operadores lo dicen sin rodeos. La API de monedero de Hub88 dice que la validez del token no debe validarse para ganancias y rollbacks, ya que pueden llegar después de que se haya jugado la apuesta. VeliGames dice que el operador no puede rechazar la ganancia de una ronda aunque la sesión haya caducado.
Cualquier llamada entre dos servidores puede agotar el tiempo de espera después de que el otro lado ya haya hecho el trabajo. El proveedor no puede distinguir un cargo que falló de un cargo cuya respuesta se perdió, así que repite la llamada o cancela la transacción. El trabajo del monedero es hacer que las dos cosas sean seguras.
Los documentos de integración publicados muestran lo persistentes que son las repeticiones. La API de monedero de operador de Hub88 da una apuesta por fallida cuando no recibe HTTP 200, genera un rollback y reintenta ese rollback hasta 500 veces con backoff exponencial. Gamomat reintenta dos veces una solicitud fallida, con 500 ms de separación, después inicia un rollback y lo reintenta a intervalos que crecen de un segundo a 30 minutos. El timeout de monedero de Tom Horn Gaming es de 10 segundos, tras los cuales se envía automáticamente un rollback. Un monedero que pasa unos minutos caído se encuentra al volver con una cola de repeticiones y rollbacks, no con silencio.
La respuesta esperada a una repetición tampoco es estándar. Hub88 exige que las solicitudes con el mismo ID de transacción no se procesen dos veces y que la respuesta sea la misma para todos los duplicados; VeliGames pide un error con HTTP status 409 y DUPLICATE_TRANSACTION; Tom Horn Gaming tiene un código de resultado aparte para una referencia duplicada. El adaptador responde a cada proveedor en su propio formato, y el libro mayor que hay debajo sigue siendo el mismo.
El rollback de una transacción desconocida es fácil de hacer mal. Si el monedero no guarda nada, un cargo que solo se había retrasado en tránsito llega un momento después y tiene éxito, y el jugador paga una apuesta que el proveedor ya ha cancelado. Guardar primero el rollback y comprobar si existe bajo el bloqueo de cuenta del cargo cierra ese hueco.
Los proveedores enuncian esta regla en sus propios documentos. La API de operador de St8 dice que, cuando el operador recibe un ID de transacción de una cancelación que no ha procesado antes, el ID debe guardarse para evitar que se procese más tarde. Tom Horn Gaming espera su código de resultado de transacción desconocida cuando el monedero nunca gestionó el retiro al que se refiere un rollback.
Una ronda es la unidad de juego del proveedor, y rara vez corresponde a una sola transacción. Un giro de slot suele ser un cargo y un abono, a veces enviados en una sola llamada. El blackjack puede añadir cargos por dividir o doblar. La ruleta en vivo recoge apuestas de muchos jugadores durante una ventana de apuestas y las liquida todas cuando se conoce el resultado. Las rondas gratis pueden producir una serie de ganancias que van juntas.
El historial de rondas es lo que zanja una disputa con un jugador. Guarda cada asiento del libro mayor con el proveedor, el juego, la ronda, los importes, el saldo antes y después, y dos marcas de tiempo, la del proveedor y la del monedero, y enlaza los detalles de ronda propios del proveedor donde su API los ofrezca. Con eso, una pregunta sobre el dinero de un giro se responde a partir de los registros.
Los reguladores fijan el mínimo que tiene que cubrir este historial. GLI-19, la norma para sistemas de juego interactivo de Gaming Laboratories International, exige una función de recuperación de partidas para el jugador, ya sea como recreación o mediante descripción. Las normas técnicas para el juego remoto de la Comisión del Juego del Reino Unido (UK Gambling Commission) exigen al menos tres meses de historial de cuenta y de juego sin tener que contactar con el titular de la licencia, y al menos 12 meses previa solicitud. La directiva de protección del jugador de la Autoridad del Juego de Malta (Malta Gaming Authority) da al jugador acceso a su historial de juego de los seis meses inmediatamente anteriores.
Las slots reparten la carga en el tiempo, porque cada jugador gira según su propio reloj. Las mesas con crupier en vivo sincronizan a los jugadores: las apuestas de todos los que están en una mesa llegan en los segundos previos al cierre de las apuestas, y las ganancias de todos llegan juntas cuando se conoce el resultado. Una mesa popular repite eso para cada jugador que apostó.
Los adaptadores son donde viven las diferencias entre proveedores, y deberían ser el único lugar donde vivan. Cada adaptador se encarga de:
El contrato interno se mantiene pequeño: abrir una sesión, leer el saldo, cargar, abonar, cargar y abonar en una sola llamada, pagar sin apuesta, hacer rollback, cerrar una ronda, y un conjunto fijo de errores que el monedero puede devolver. Un proveedor nuevo es entonces un adaptador y una suite de pruebas, rara vez un cambio en el monedero.
Cada proveedor lleva su propio registro de cada ronda y factura al operador a partir de él. El libro mayor de la capa de agregación es el mismo dinero visto desde el lado del operador. Concilia los dos cada día, con el corte de día y la zona horaria de cada proveedor, por proveedor, moneda y juego:
Cuánto tiempo hay que conservar esa evidencia forma parte de la integración. Hub88 pide que cada ID de transacción se almacene en ambos lados durante al menos cuatro meses a efectos de conciliación, y la API de operador de Gamomat devuelve datos de conciliación para un rango de fechas o para una sola ronda.
La pregunta tiene tres tipos de respuesta, y venden cosas distintas. Los agregadores y los vendedores de plataforma le alquilan su capa al operador: un contrato, muchos proveedores, sus condiciones comerciales. Las plataformas llave en mano y white-label incluyen la capa dentro de una plataforma que pertenece al vendedor. Las empresas de ingeniería construyen la capa dentro del backend del operador, y el operador firma por sí mismo sus contratos con los proveedores.
Hables con el tipo que hables, estas preguntas muestran si un equipo ha construido esto antes:
Una respuesta que se queda en lo general en las dos primeras significa que los casos límite se encontrarían en producción.
amBrain es una empresa de desarrollo de software especializada en plataformas de trading, matching engines, sistemas de real-time bidding e ingeniería de plataformas de casino. amBrain lleva construyendo software desde 2019.
En iGaming, las cifras que amBrain publica como medidas son 500+ integraciones de proveedores externos y 12 operadores en producción.
amBrain trabaja en tres formatos: entrega completa, un equipo dedicado o ingenieros integrados en tu equipo. El cliente conserva la propiedad completa del producto y del código, salvo los componentes reutilizables de amBrain.
Este artículo explica cómo funciona una capa de agregación; no es un caso de estudio y no nombra a ningún cliente.
Así que la primera decisión no es con qué proveedores firmar. Es el contrato interno al que se adaptará cada proveedor, puesto por escrito con sus casos de error antes de que exista el primer adaptador.
Traiga su arquitectura actual y el modo de fallo que le preocupa, y lo repasaremos juntos en media hora.