SDK web
Pour les jeux HTML5 (itch.io, CrazyGames, Poki, votre propre site) et les apps web. Un seul fichier, sans dépendance, environ 77 Ko (26 Ko compressé). Il ajoute un bouton de chat, ou s'ouvre depuis votre propre bouton Aide.
Installation
Téléchargez inngame.js et hébergez-le avec votre jeu (ou chargez-le depuis cette adresse). Le plus court : une balise avec la clé publique de l'app (inbox → Réglages → Apps → Général) :
<script src="inngame.js" data-app-key="app_…"></script>
La balise lit aussi data-language et data-base-url. Le SDK parle à https://app.inngame.app par défaut. Ou démarrez-le vous-même pour passer des options :
<script src="inngame.js"></script>
<script>
Inngame.init({
appKey: "app_…",
appVersion: "1.2.0",
launcher: false, // no floating button: open it from your menu
context: () => ({ level: player.level, coins: player.coins }),
onItemGranted: (item) => inventory.add(item.id, item.quantity),
});
helpButton.onclick = () => Inngame.open();
</script>
Il se charge aussi en module CommonJS (require("./inngame.js")) pour les bundlers. Types TypeScript : téléchargez inngame.d.ts à côté du script (import Inngame = require("./inngame"), ou la variable globale window.Inngame). Chaque option et chaque rappel y est documenté.
Ce que les joueurs obtiennent

- Le chat dans leur langue : 25 langues pour l'interface, et les réponses de votre équipe traduites par le serveur, avec « Voir l'original ».
- Les photos de leur appareil, réduites avant l'envoi et modérées par le serveur.
- Les messages écrits hors ligne attendent dans le navigateur (même après un rechargement) et partent au retour de la connexion, jamais en double.
- Les réponses en temps réel par WebSocket, avec interrogation périodique en secours. Une pastille compte les réponses non lues chat fermé.
- Votre titre, votre texte d'accueil, votre logo et vos couleurs réglés dans le tableau de bord (Apparence : accent, fond, texte, en-tête, bulles de l'équipe et du joueur, ou un modèle comme Dark fantasy ou Sci-fi), en clair ou en sombre selon leur système.
- Votre annonce en haut (une panne, un bug connu), traduite, jusqu'à l'heure choisie dans l'inbox.
- Sous le titre : votre délai de réponse habituel, ou votre heure de retour hors horaires, à leur heure locale.
- Les cartes : avis sur la boutique, liens, demandes de remboursement Apple, objets à récupérer, offres, écrans, restauration des achats et note de satisfaction de 1 à 5. Les cartes d'avis et de remboursement envoyées avec le libellé anglais par défaut du serveur (
defaultLabel: true) affichent le texte du SDK dans la langue du joueur. - Plein écran sur téléphone ; Échap le ferme sur ordinateur.
Contexte joint à chaque message
Adresse de la page, écran et fenêtre, navigateur, langue, fuseau horaire, temps depuis le chargement, les 50 dernières erreurs et alertes de la console (plus les erreurs non interceptées), et ce que renvoie votre fonction context(), sous game. Coupez la capture de la console avec captureLogs: false. L'équipe voit tout à côté de la conversation.
Objets et offres
Quand l'équipe envoie un objet, le joueur touche Récupérer. Le SDK envoie un nonce aléatoire et n'appelle onItemGranted que si le serveur confirme que cette demande l'emporte : un objet n'est jamais donné deux fois, même avec deux onglets ouverts ou un réseau capricieux. Sans onItemGranted, le bouton reste désactivé. Pour donner l'objet côté serveur, utilisez plutôt le webhook item.claimed.
onOffer(offerId) et onScreen(screen, value) ferment le chat et passent la main au jeu ; onRestorePurchases() est appelé en laissant le chat ouvert. Sans le rappel correspondant, le tap est signalé à l'équipe comme échoué.
Les cartes d'avis ouvrent l'url de la carte, ou les identifiants de boutique des réglages Avis de l'app (page d'évaluation Steam, App Store sur les appareils tactiles Apple, sinon Google Play). Les cartes link ouvrent leur url dans un nouvel onglet (http(s) uniquement). Les cartes refund (remboursements Apple) ouvrent la page « Signaler un problème » d'Apple, où le joueur demande le remboursement à Apple : la feuille de remboursement intégrée n'existe que dans les apps iOS natives.
Identité
Les joueurs commencent anonymes ; le navigateur garde le jeton de l'appareil dans le localStorage, la conversation est donc toujours là à la visite suivante. Pour la rattacher à vos comptes :
await Inngame.identify({ userId: "u_42", name: "Nova", token: jwtFromYourServer });
Sans token, l'identifiant n'est qu'une étiquette, jamais une fusion. Vous pouvez aussi passer l'identité au démarrage avec l'option user. Pour les achats, Inngame.user.purchaseToken est l'UUID Inngame de ce joueur : passez-le à votre boutique ou à votre service d'abonnement. Voir Identité des joueurs.
Référence
| Appel | Rôle |
|---|---|
Inngame.init(options) | appKey (obligatoire), baseUrl, language (par défaut : celle du navigateur), appVersion, user (identité au démarrage), launcher, position ("right" ou "left"), theme ("light", "dark", ou celui du système), zIndex, captureLogs, context, et les rappels des cartes onItemGranted, onOffer, onScreen, onRestorePurchases. Renvoie une promesse ; les appels suivants renvoient la même. |
Inngame.open() · close() · toggle() | Afficher ou masquer le chat. |
Inngame.unread · isOpen · user · config · version | État courant : réponses non lues, chat affiché, le joueur (id, name, verified, identified, language, blocked, purchaseToken), réglages de l'inbox (apparence, annonce, disponibilité, avis), version du SDK ("0.2.3"). |
Inngame.on(event, fn) | "unread" (nombre), "message" (une réponse est arrivée), "open", "close". Renvoie une fonction qui retire l'écouteur. |
Inngame.identify(identity) | {userId, name, email, token, metadata}. Renvoie le joueur. |
Inngame.track(name, props, opensChat) | Un événement du jeu pour les automatisations ; avec opensChat: true, une automatisation peut ouvrir le chat, et la promesse renvoie true si c'est le cas. |
Inngame.logout() | Ce navigateur continue avec un nouveau joueur anonyme. |
Inngame.deleteData() | Efface le joueur, ses conversations et ses photos, puis démarre un nouveau joueur anonyme. Renvoie true. |
Inngame.isUnavailable() | true tant que votre support est indisponible (votre espace Inngame est suspendu). Le chat affiche alors « Le support est indisponible pour le moment. Réessayez plus tard. » dans la langue du joueur et masque la zone de saisie ; les messages non envoyés attendent et partent au retour du support. Le SDK revérifie toutes les 10 minutes chat ouvert et à chaque ouverture, et revient à la normale tout seul. En attendant, track renvoie false, identify null (l'identité est gardée pour plus tard) et deleteData false ; rien ne lève d'exception dans votre code. |