Un backend de casino qui connecte des machines à sous, des jeux avec croupier en direct et des jeux de table issus de nombreux fournisseurs a besoin d'une seule couche d'agrégation : des sessions émises par l'opérateur, des callbacks de solde qui survivent aux retries et aux rollbacks, des tours de jeu qui peuvent se clôturer après la session, et une réconciliation quotidienne avec le propre rapport de chaque fournisseur. Voici comment cette couche se découpe et où les intégrations de fournisseurs cassent en général.
Un opérateur qui construit son propre backend de casino et connecte des machines à sous, des jeux avec croupier en direct et des jeux de table issus de nombreux fournisseurs se retrouve avec autant de contrats d'intégration que de fournisseurs : des flux de lancement différents, des appels au portefeuille différents, des idées différentes de ce qu'est un tour de jeu. La couche d'agrégation les transforme en un seul contrat interne, si bien que le portefeuille, le lobby, les bonus, les limites et le reporting sont écrits une seule fois et que chaque fournisseur y est adapté.
Ce qui suit montre comment cette couche se découpe en général : ce qui reste chez le fournisseur, comment les sessions sont émises, comment les callbacks de solde survivent aux retries et aux rollbacks, comment les tours de jeu sont enregistrés quand ils se clôturent après la session, et comment le résultat est réconcilié avec les propres chiffres du fournisseur.
La réponse courte, c'est un seul contrat interne avec un adaptateur par fournisseur. L'opérateur émet la session ; chaque débit, crédit et rollback porte l'ID de transaction du fournisseur comme clé d'idempotence cloisonnée par fournisseur et par type d'appel ; un rollback portant sur une transaction que le portefeuille n'a jamais vue est stocké, si bien qu'un original arrivé en retard est refusé ; les tours de jeu sont enregistrés comme un état qui peut se clôturer après la fin de la session ; et le propre rapport de chaque fournisseur est réconcilié chaque jour avec le grand livre du portefeuille.
Le fournisseur fait tourner le jeu : la génération de nombres aléatoires, les mathématiques du jeu, le client de jeu et sa certification par un laboratoire de test. L'opérateur garde tout ce qui touche au joueur et à l'argent : l'identité, le solde, les limites, les bonus, le lobby et les enregistrements que peuvent réclamer un régulateur ou un litige avec un joueur. La couche d'agrégation se place entre les deux et devrait être le seul code côté serveur à parler l'API de chaque fournisseur.
Les fournisseurs se connectent à l'argent d'un opérateur de l'une des deux manières suivantes. Dans un seamless wallet, le solde reste chez l'opérateur, et le fournisseur appelle le portefeuille de l'opérateur pour chaque mise et chaque gain. Dans un transfer wallet, l'opérateur déplace de l'argent vers un solde tenu du côté du fournisseur avant le jeu, et ne le rapatrie que lorsqu'il le demande.
La suite de cet article suppose un seamless wallet, car chaque mise et chaque gain y est un appel au portefeuille.
Le lancement d'un jeu commence du côté de l'opérateur. Le backend vérifie que ce joueur a le droit de jouer à ce jeu maintenant, ce qui couvre l'état du compte, l'auto-exclusion, les limites et la question de savoir si le jeu peut être proposé dans la juridiction du joueur. Il crée ensuite une session liée au joueur, au jeu et à la devise, et transmet un token opaque au fournisseur lors du lancement. Lorsque le serveur du fournisseur envoie un callback, ce token identifie à qui appartient le solde visé par l'appel.
Les documents publiés à l'intention des opérateurs le disent sans détour. L'API de portefeuille de Hub88 indique que la validité du token ne doit pas être vérifiée pour les gains et les rollbacks, puisqu'ils peuvent arriver après que la mise a été jouée. VeliGames indique que l'opérateur n'a pas le droit de rejeter le gain d'un tour de jeu, même si la session a expiré.
Tout appel entre deux serveurs peut tomber en timeout après que le travail a été effectué de l'autre côté. Le fournisseur ne peut pas distinguer un débit qui a échoué d'un débit dont la réponse s'est perdue, si bien qu'il répète l'appel ou annule la transaction. Le rôle du portefeuille est de rendre les deux sans risque.
Les documents d'intégration publiés montrent à quel point les répétitions sont persistantes. L'API de portefeuille opérateur de Hub88 considère une mise comme échouée lorsqu'elle ne reçoit pas de HTTP 200, génère un rollback et réessaie ce rollback jusqu'à 500 fois avec un backoff exponentiel. Gamomat réessaie deux fois une requête échouée, à 500 ms d'intervalle, puis lance un rollback et le réessaie à des intervalles croissants, d'une seconde à 30 minutes. Chez Tom Horn Gaming, le timeout du portefeuille est de 10 secondes, après quoi un rollback est envoyé automatiquement. Un portefeuille indisponible pendant quelques minutes retrouve à son retour une file de répétitions et de rollbacks, pas le silence.
La réponse attendue à une répétition n'est pas standard non plus. Hub88 exige que les requêtes portant le même ID de transaction ne soient pas traitées deux fois et que la réponse soit la même pour tous les doublons ; VeliGames demande une erreur avec HTTP status 409 et DUPLICATE_TRANSACTION ; Tom Horn Gaming a un code de résultat distinct pour une référence en double. L'adaptateur répond à chaque fournisseur sous la forme propre à celui-ci, et le grand livre sous-jacent reste le même.
Le rollback d'une transaction inconnue est facile à mal gérer. Si le portefeuille ne garde rien, un débit qui avait seulement été retardé en transit arrive un instant plus tard et réussit, et le joueur paie une mise que le fournisseur a déjà annulée. Stocker d'abord le rollback et vérifier sa présence sous le verrou de compte pris par le débit, c'est ce qui comble cette brèche.
Les fournisseurs énoncent cette règle dans leurs propres documents. L'API opérateur de St8 indique que lorsque l'opérateur reçoit, pour une annulation, un ID de transaction qu'il n'a pas traité auparavant, cet ID doit être enregistré afin d'empêcher qu'il ne soit traité plus tard. Tom Horn Gaming attend son code de résultat pour transaction inconnue lorsque le portefeuille n'a jamais traité le retrait auquel se rapporte un rollback.
Un tour de jeu est l'unité de jeu du fournisseur, et il correspond rarement à une seule transaction. Un spin de machine à sous, c'est souvent un débit et un crédit, parfois envoyés en un seul appel. Le blackjack peut ajouter des débits pour un split ou un doublement. La roulette en direct prend les mises de nombreux joueurs pendant une fenêtre de mise et les règle toutes quand le résultat est connu. Les tours gratuits peuvent produire une série de gains qui vont ensemble.
C'est avec l'historique des tours de jeu que se tranche un litige avec un joueur. Conservez chaque écriture au grand livre avec le fournisseur, le jeu, le tour de jeu, les montants, le solde avant et après, et deux horodatages, celui du fournisseur et celui du portefeuille, et reliez-y les propres détails de tour de jeu du fournisseur là où son API les propose. Avec cela, une question sur l'argent d'un spin trouve sa réponse dans les enregistrements.
Les régulateurs fixent le minimum que cet historique doit couvrir. GLI-19, la norme de Gaming Laboratories International pour les systèmes de jeu interactif, exige une fonction de rappel de jeu pour le joueur, soit sous forme de reconstitution, soit par description. Les normes techniques relatives au jeu à distance de la Commission britannique des jeux d'argent (UK Gambling Commission) exigent au moins trois mois d'historique du compte et de jeu accessibles sans contacter le titulaire de la licence, et au moins 12 mois sur demande. La directive de l'Autorité maltaise des jeux (Malta Gaming Authority) sur la protection des joueurs donne au joueur accès à son historique de jeu sur les six mois immédiatement précédents.
Les machines à sous étalent la charge dans le temps, car chaque joueur lance ses spins à son propre rythme. Les tables avec croupier en direct synchronisent les joueurs : les mises de tous les joueurs d'une table arrivent dans les secondes qui précèdent la clôture des mises, et les gains de tous arrivent ensemble quand le résultat est connu. Une table populaire répète cela pour chaque joueur qui a misé.
C'est dans les adaptateurs que vivent les différences entre fournisseurs, et ce devrait être le seul endroit où elles vivent. Chaque adaptateur gère :
Le contrat interne reste réduit : ouvrir une session, lire le solde, débiter, créditer, débiter et créditer en un seul appel, payer sans mise, faire un rollback, clôturer un tour de jeu, et un ensemble fixe d'erreurs que le portefeuille peut renvoyer. Un nouveau fournisseur, c'est alors un adaptateur et une suite de tests, rarement une modification du portefeuille.
Chaque fournisseur tient son propre enregistrement de chaque tour de jeu et facture l'opérateur à partir de celui-ci. Le grand livre de la couche d'agrégation, c'est le même argent vu du côté de l'opérateur. Réconciliez les deux chaque jour, selon la limite de journée et le fuseau horaire de chaque fournisseur, par fournisseur, par devise et par jeu :
La durée pendant laquelle ces preuves doivent être conservées fait partie de l'intégration. Hub88 demande que chaque ID de transaction soit stocké des deux côtés pendant au moins quatre mois à des fins de réconciliation, et l'API opérateur de Gamomat renvoie des données de réconciliation pour une plage de dates ou pour un seul tour de jeu.
La question appelle trois types de réponse, et ils vendent des choses différentes. Les agrégateurs et les éditeurs de plateformes louent leur couche à l'opérateur : un seul contrat, de nombreux fournisseurs, leurs conditions commerciales. Les plateformes clé en main et en marque blanche incluent la couche dans une plateforme qui appartient au prestataire. Les prestataires d'ingénierie construisent la couche dans le backend de l'opérateur, et l'opérateur signe lui-même ses contrats avec les fournisseurs.
Quel que soit le type d'acteur auquel vous vous adressez, ces questions montrent si une équipe a déjà construit cela :
Une réponse qui reste générale sur les deux premières signifie que les cas limites seraient découverts en production.
amBrain est une société de développement logiciel spécialisée dans les plateformes de trading, les matching engines, les systèmes de real-time bidding et l'ingénierie de plateformes de casino. amBrain développe des logiciels depuis 2019.
En iGaming, les chiffres qu'amBrain publie comme mesurés sont ceux de 500+ intégrations de fournisseurs tiers et de 12 opérateurs en production.
amBrain travaille en trois formats : la prestation complète, une équipe dédiée ou des ingénieurs intégrés à votre équipe. Le client conserve la pleine propriété du produit et du code, à l'exception des composants réutilisables d'amBrain.
Cet article explique comment fonctionne une couche d'agrégation ; ce n'est pas une étude de cas, et il ne nomme aucun client.
La première décision n'est donc pas de savoir quels fournisseurs signer. C'est le contrat interne auquel chaque fournisseur sera adapté, mis par écrit avec ses cas d'erreur avant que le premier adaptateur n'existe.
Apportez votre architecture actuelle et le mode de défaillance qui vous inquiète : nous les passerons en revue ensemble en une demi-heure.