Intégrations
Branchez les outils que votre équipe utilise déjà. Tout se règle par app, sous Réglages → Apps → votre app → Intégrations dans l'inbox. Seul un admin connecté peut brancher, modifier ou retirer une intégration : les clés d'API ne le peuvent pas, une clé qui fuite ne peut donc ni détourner les messages de vos joueurs ni lire vos identifiants. Une clé d'API reçoit 403 human_approval_required, même avec le droit all. Les exemples d'API ci-dessous utilisent le cookie de session d'un admin. Les secrets sont chiffrés au repos et jamais renvoyés par l'API.
Toutes les adresses ci-dessous utilisent https://app.inngame.app. Celles que vous avez déjà collées ailleurs avec l'ancienne adresse inngame.meffysto.workers.dev continuent de marcher.
Telegram
Répondez aux joueurs depuis un groupe Telegram. Chaque joueur a son sujet avec sa fiche ; vous répondez dedans.
- Créez un bot avec @BotFather et copiez son jeton.
- Créez un groupe pour votre équipe et activez les Sujets (conseillé : un sujet par joueur). Ajoutez le bot comme admin pour qu'il puisse créer les sujets.
- Dans Inngame, collez le jeton du bot et choisissez le groupe : Inngame liste les groupes où le bot a été ajouté (sinon écrivez d'abord quelque chose dans le groupe), ou vous saisissez l'identifiant du chat à la main (par exemple
-1001234567890). Inngame installe le webhook et publie une confirmation dans le groupe. Les canaux ne sont pas pris en charge.
Sans sujets, les messages des joueurs arrivent en notifications et vous répondez en y répondant. Dans les deux cas :
- Les messages arrivent traduits, avec le contexte du jeu et les photos ; vos réponses (texte ou photos) repartent traduites.
- Boutons sous chaque message : Fermer, Laisser l'IA répondre, Demander un avis et Ouvrir (la conversation dans l'inbox). Les brouillons de l'IA arrivent avec Envoyer, Jeter et Modifier dans Inngame. Les boutons et les messages du bot sont en français quand la langue de l'organisation est le français (Réglages → Organisation).
- Commandes dans le sujet d'un joueur (ou en réponse à sa notification) :
/close,/reopen,/ai,/draft,/noai,/review,/block. Partout dans le groupe :/stats(7 derniers jours),/pauseet/resume(l'IA de toute l'app),/help. - Répondre à un joueur coupe l'IA pour cette conversation. Les réponses envoyées depuis l'inbox ou par l'IA sont recopiées en silence dans le sujet, pour que chacun voie tout le fil.
- Les alertes de vague de bugs et le point hebdomadaire sont aussi publiés dans le groupe.
- Associez les identifiants Telegram aux membres de l'équipe (
members:{"<telegram user id>": "<inngame user id>"}, 100 au plus) pour que les réponses soient signées du bon nom. Dans un studio d'une personne, les réponses sont signées de votre nom automatiquement.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/telegram \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"botToken": "123456:ABC...", "chatId": "-1001234567890"}'
# botToken can be omitted later to keep the saved one
# Before connecting: list the groups the bot is in → {"groups": [{"id", "title", "topics"}], "botUsername"}
curl -X POST https://app.inngame.app/v1/apps/$APP_ID/integrations/telegram/groups \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" -d '{"botToken": "123456:ABC..."}'
# Send a test notification
curl -X POST https://app.inngame.app/v1/apps/$APP_ID/integrations/telegram/test -b "ig_session=$INNGAME_SESSION"
Discord
Un fil par joueur dans un salon forum (conseillé) ou un salon textuel du serveur de votre équipe. Le salon doit être réservé à votre équipe : tout ce qui s'écrit dans le fil d'un joueur lui est envoyé comme réponse du support, Inngame refuse donc un salon visible par @everyone ou par un rôle sans la permission Gérer les messages. Un serveur communautaire public convient, avec un salon de support privé à l'intérieur.
- Invitez le bot Inngame avec Add to Discord dans Réglages → Apps → votre app → Intégrations → Discord (l'installation lie ce serveur à votre app, aucun autre studio ne peut donc y brancher le bot partagé), ou utilisez votre propre bot : créez une application dans le portail développeur de Discord, activez l'intent Message Content, et réglez son Interactions Endpoint URL sur
https://app.inngame.app/hooks/discord/<appId>/interactions. - Copiez l'identifiant du salon (Mode développeur → clic droit sur le salon → Copier l'identifiant du salon) et branchez. Avec votre propre bot, donnez aussi son jeton, l'identifiant de l'application et la clé publique.
Inngame enregistre les commandes slash sur votre serveur et publie une confirmation. Écrivez dans le fil d'un joueur pour répondre (texte ou images) ; cela coupe l'IA pour cette conversation. Commandes dans le fil d'un joueur : /close, /reopen, /ai, /draft, /noai, /review, /block ; partout : /stats, /pause, /resume (avec leur description en français pour les clients Discord en français). Boutons, brouillons et réponses recopiées marchent comme sur Telegram, et les alertes de vague de bugs et le point hebdomadaire sont publiés dans le salon. Commandes et boutons ne marchent que pour les membres qui ont la permission Gérer les messages (ou Administrateur, Gérer le serveur, Gérer les fils) ou un compte Inngame associé (members : {"<discord user id>": "<inngame user id>"}, qui signe aussi leurs réponses) ; vous pouvez ouvrir les commandes à un autre rôle dans Paramètres du serveur → Intégrations → votre bot.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/discord \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"channelId": "112233445566778899"}'
# own bot: add "botToken", "applicationId", "publicKey"
Steam
Nécessaire pour l'identité Steam vérifiée. Inngame vérifie chaque ticket avec ISteamUserAuth/AuthenticateUserTicket de Steam.
- Dans Steamworks, créez une clé Web API d'éditeur (Users & Permissions → Manage Groups → votre groupe → Web API key).
- Dans Inngame, saisissez l'App ID Steam et cette clé.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/steam \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"appId": "480", "webApiKey": "0123456789ABCDEF0123456789ABCDEF"}'
# webApiKey can be omitted later to keep the saved one
Pour les cartes d'avis Steam, renseignez aussi l'App ID Steam dans les réglages de l'app (settings.reviews.steamAppId) ou dans les options du SDK.
GitHub
Transforme les bugs regroupés en tickets, et demande un correctif à un agent de code.
- Créez un jeton d'accès personnel à granularité fine limité au dépôt du jeu, avec Issues : lecture et écriture.
- Branchez le dépôt (
owner/name) et le jeton. - Pour recevoir des PR de correctif, installez sur le dépôt un agent de code qui répond aux mentions, comme la GitHub Action Claude Code (
@claude). UtilisezfixMentionsi le vôtre répond à un autre nom.
Les tickets portent les étiquettes bug et inngame et contiennent le résumé, le nombre de joueurs touchés, les versions de l'app, les plateformes et des extraits de journaux, jamais l'identité des joueurs. Demander un correctif (request_fix dans le MCP) ouvre le ticket si besoin, puis le commente en mentionnant fixMention (@claude par défaut) pour demander un correctif minimal et une pull request, en précisant de ne pas fusionner. À la sortie, renseignez fixedInVersion sur le bug et Inngame prévient chaque joueur qui l'a signalé dès qu'il lance cette version.
Tout cela se trouve sur la page Bugs de l'inbox : joueurs touchés au fil du temps, versions, plateformes et appareils, dernière erreur des journaux, conversations liées, et boutons pour ouvrir le ticket, marquer le bug corrigé dans une version (avec le nombre de joueurs déjà dessus), fermer, rouvrir ou fusionner les doublons. Chaque bug a un lien vers cette page, https://app.inngame.app/bugs/<bugId>?org=<orgId> (org bascule l'inbox sur le bon studio).
Alertes de vague : quand 5 joueurs signalent le même bug en 24 heures, Inngame prévient l'équipe une fois par bug : dans l'inbox, dans Telegram et Discord (avec un bouton vers la page du bug), et par un webhook bug.spike.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/github \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"repo": "lantern-games/lantern-quest", "token": "github_pat_...", "fixMention": "@claude"}'
# token can be omitted later to keep the saved one
# With an API key: open the issue for a bug (scope reply), ask for a fix (scope all), mark it fixed (scope reply)
curl -X POST https://app.inngame.app/v1/bugs/$BUG_ID/github-issue -H "Authorization: Bearer $INNGAME_API_KEY"
curl -X POST https://app.inngame.app/v1/bugs/$BUG_ID/request-fix -H "Authorization: Bearer $INNGAME_API_KEY"
curl -X PATCH https://app.inngame.app/v1/bugs/$BUG_ID -H "Authorization: Bearer $INNGAME_API_KEY" \
-H "Content-Type: application/json" -d '{"fixedInVersion": "1.4.2"}'
Remboursements Stripe et Google Play
Les admins remboursent depuis la conversation. Seul un admin connecté peut rembourser ; les agents et les clés d'API peuvent seulement proposer un remboursement, qu'un admin approuve ensuite (règles). Chaque remboursement ajoute une note à la conversation et déclenche un webhook refund.issued.
# Admin session only. provider: stripe {paymentId, amountCents?}, googleplay {orderId, revoke?}, apple {transactionId}; optional "message" to the player
curl -X POST https://app.inngame.app/v1/conversations/$CONV_ID/refund \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"provider": "stripe", "paymentId": "pi_3Q...", "amountCents": 499}'
# Agents and API keys (scope reply): propose, a human admin approves
curl -X POST https://app.inngame.app/v1/conversations/$CONV_ID/refund-proposal \
-H "Authorization: Bearer $INNGAME_API_KEY" -H "Content-Type: application/json" \
-d '{"provider": "stripe", "reference": "pi_3Q...", "amountCents": 499, "reason": "Charged twice"}'
Stripe
Utilisez une clé restreinte (rk_live_…, ou rk_test_… pour essayer) avec l'écriture sur les remboursements seulement, ou une clé secrète. Les admins remboursent alors un paiement pi_… ou ch_…, en totalité ou en partie.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/stripe_payments \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"secretKey": "rk_live_..."}'
Google Play
Créez un compte de service Google Cloud, donnez-lui accès à votre app dans la Play Console (données financières et gestion des commandes), et envoyez sa clé JSON avec le nom du paquet. Les admins remboursent par numéro de commande ; l'achat est aussi révoqué, sauf si vous passez "revoke": false. Le même compte de service sert à lire les notifications de Google Play.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/googleplay \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"packageName": "com.lanterngames.quest", "serviceAccountJson": "{...}"}'
Apple
Seul Apple peut rembourser les achats de l'App Store. Depuis une conversation, un admin envoie au joueur la feuille officielle de demande de remboursement d'Apple pour un identifiant de transaction ; Apple décide, en général sous 48 heures. Rien à configurer. Dans les apps iOS natives (SDK iOS) et les builds iOS de Unity, la carte ouvre cette feuille ; dans le SDK web et sur les autres plateformes, elle ouvre la page « Signaler un problème » d'Apple, où le joueur fait la même demande.
Push : APNs et FCM
Inngame envoie un push quand l'équipe ou l'IA répond et que le joueur n'a pas le chat ouvert. Les jetons signalés morts par Apple ou Google sont effacés.
APNs (iOS)
Créez une clé d'authentification APNs (.p8) dans votre compte Apple Developer (Certificates, Identifiers & Profiles → Keys). Envoyez-la avec son Key ID, votre Team ID et le bundle id de l'app. La même clé marche pour les jetons de développement (apns_sandbox) et de production.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/apns \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"keyId": "ABC123DEFG", "teamId": "XYZ987WVUT", "bundleId": "com.lanterngames.quest", "p8": "-----BEGIN PRIVATE KEY-----\n..."}'
FCM (Android)
Dans la console Firebase, Paramètres du projet → Comptes de service → Générer une nouvelle clé privée, puis envoyez le JSON.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/integrations/fcm \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"serviceAccountJson": "{...}"}'
Transmettez ensuite le jeton de l'appareil depuis le jeu : Unity, iOS.
Push pour votre équipe
Votre équipe peut recevoir une notification sur son téléphone ou son ordinateur quand un joueur écrit, même inbox fermée. Chacun l'active pour son propre appareil dans Réglages → Préférences → Notifications push. Rien à configurer pour le studio.
- Sur iPhone et iPad, ajoutez d'abord l'inbox à l'écran d'accueil (Partager → Sur l'écran d'accueil) et ouvrez-la de là : Apple ne permet le push qu'aux apps web installées. Android et les navigateurs d'ordinateur marchent tout de suite.
- Seuls les messages qui demandent un humain sonnent : si l'IA répond seule à une conversation, personne n'est réveillé, et quand elle passe la main vous recevez une notification « On a besoin de vous » avec sa raison. Une conversation assignée ne prévient que la personne assignée ; sinon, tous les abonnés. Personne n'est prévenu pour une conversation tant qu'il a l'inbox ouverte. Les notifications sont dans la langue de chaque membre.
- Les notifications sont chiffrées de bout en bout pour chaque appareil (Web Push, RFC 8291) : Apple, Google ou Mozilla les acheminent sans pouvoir les lire. Les désactiver, ou un appareil qui ne les accepte plus, supprime l'abonnement.
- Les abonnements push sont personnels : les clés d'API et les agents ne peuvent pas en créer.
RevenueCat
Les événements d'abonnement deviennent des déclencheurs d'automatisations, et la fiche de chaque joueur montre le statut de son abonnement, sa formule et sa date de renouvellement (métadonnées subscription_status, plan, renews_on). Il en va de même pour toutes les sources d'abonnement ci-dessous.
- Branchez RevenueCat dans Inngame. Vous obtenez une adresse de webhook et une valeur d'en-tête
Authorization. - Dans RevenueCat, Integrations → Webhooks : collez l'adresse et l'en-tête d'autorisation.
- Dites à RevenueCat qui est le joueur : connectez-le avec le jeton d'achat Inngame (
Purchases.logIn(Inngame.PurchaseToken)), ou avec l'identifiant de votre propre compte si vous identifiez les joueurs par JWT ou Steam. Un simple identifiant non vérifié n'est jamais associé à un abonnement.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/subscriptions/revenuecat -b "ig_session=$INNGAME_SESSION"
# → {"webhookUrl": "https://app.inngame.app/hooks/revenuecat/app_...", "authorizationHeader": "Bearer ..."}
# Calling it again returns the same URL and secret.
| Événement RevenueCat | Événement Inngame |
|---|---|
INITIAL_PURCHASE | trial_started ou subscription_started |
RENEWAL | trial_converted ou subscription_renewed |
CANCELLATION | trial_cancelled, subscription_cancelled, ou refunded (annulations par le service client) |
BILLING_ISSUE | billing_issue |
EXPIRATION | trial_expired ou subscription_expired |
UNCANCELLATION | subscription_renewed |
NON_RENEWING_PURCHASE | subscription_started |
Servez-vous-en comme déclencheur d'une automatisation : par exemple, sur billing_issue, attendre une heure, puis envoyer un message avec un lien pour mettre à jour le moyen de paiement. Les dix événements d'abonnement sont trial_started, trial_converted, trial_cancelled, trial_expired, subscription_started, subscription_renewed, subscription_cancelled, billing_issue, subscription_expired et refunded.
Notifications de l'App Store
Sans RevenueCat, Inngame peut lire directement les App Store Server Notifications d'Apple (version 2). Chaque notification est un JWS signé par Apple ; Inngame vérifie la chaîne de certificats jusqu'à Apple Root CA - G3 et refuse tout le reste, même sur l'adresse secrète.
- Réglages → Apps → votre app → Intégrations → Notifications de l'App Store → Brancher, puis copiez l'adresse du webhook.
- Dans App Store Connect : votre app → Informations sur l'app → App Store Server Notifications. Collez l'adresse pour la production et le sandbox, version 2.
- Au moment de l'achat, passez le jeton d'achat Inngame comme
appAccountTokende StoreKit. Inngame l'émet par joueur : personne ne peut revendiquer les achats d'un autre.
guard let token = Inngame.purchaseToken else { return } // a UUID, ready after the first session
let result = try await product.purchase(options: [.appAccountToken(token)])
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/subscriptions/appstore -b "ig_session=$INNGAME_SESSION"
# → {"webhookUrl": "https://app.inngame.app/hooks/appstore/app_...?s=..."}
Correspondance : SUBSCRIBED → subscription_started (ou trial_started pour un essai gratuit), DID_RENEW → subscription_renewed, DID_CHANGE_RENEWAL_STATUS avec renouvellement automatique coupé → subscription_cancelled (ou trial_cancelled) et remis → subscription_renewed, DID_FAIL_TO_RENEW → billing_issue, EXPIRED et GRACE_PERIOD_EXPIRED → subscription_expired (ou trial_expired), REFUND → refunded. La notification de test d'Apple est acceptée.
Notifications de Google Play
Les notifications en temps réel pour les développeurs de Google Play passent par Pub/Sub. Elles ne disent pas qui a payé : Inngame relit donc l'abonnement chez Google avec le compte de service branché pour les remboursements Google Play ; le contenu poussé n'est jamais pris pour argent comptant.
- Branchez Google Play (nom du paquet et compte de service) si ce n'est pas déjà fait.
- Réglages → Apps → votre app → Intégrations → Notifications de Google Play → Brancher, puis copiez l'adresse du webhook.
- Dans Google Cloud, créez un sujet Pub/Sub, donnez à
google-play-developer-notifications@system.gserviceaccount.comle rôle Éditeur Pub/Sub (Publisher), et ajoutez un abonnement push vers l'adresse du webhook. Choisissez le sujet dans la Play Console → Configuration de la monétisation. - À l'achat, appelez
setObfuscatedAccountId(Inngame.PurchaseToken)sur les paramètres du flux de facturation. Inngame vérifie aussi que la notification correspond à l'état actuel de l'abonnement chez Google.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/subscriptions/googleplay -b "ig_session=$INNGAME_SESSION"
# → {"webhookUrl": "https://app.inngame.app/hooks/googleplay/app_...?s=..."}
Correspondance : PURCHASED → subscription_started, RENEWED/RECOVERED/RESTARTED → subscription_renewed, CANCELED → subscription_cancelled, ON_HOLD/IN_GRACE_PERIOD → billing_issue, REVOKED → refunded, EXPIRED → subscription_expired.
Adapty
Réglages → Apps → votre app → Intégrations → Adapty → Brancher donne une adresse de webhook et une valeur d'en-tête d'autorisation. Dans Adapty → Integrations → Webhooks, collez les deux pour la production (et le sandbox si vous voulez des achats de test). Inngame répond à la requête de vérification d'Adapty. Les joueurs sont retrouvés par customer_user_id : utilisez le jeton d'achat Inngame (Adapty.identify(Inngame.PurchaseToken)), ou l'identifiant de votre propre compte si les joueurs sont vérifiés par JWT ou Steam.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/subscriptions/adapty -b "ig_session=$INNGAME_SESSION"
# → {"webhookUrl": "https://app.inngame.app/hooks/adapty/app_...", "authorizationHeader": "Bearer ..."}
Correspondance (noms d'événements par défaut d'Adapty) : trial_started, trial_converted, trial_expired gardent leur nom ; trial_renewal_cancelled → trial_cancelled ; subscription_started et subscription_initial_purchase → subscription_started ; subscription_renewed, subscription_renewal_reactivated et trial_renewal_reactivated → subscription_renewed ; subscription_renewal_cancelled → subscription_cancelled ; billing_issue_detected et entered_grace_period → billing_issue ; subscription_expired → subscription_expired ; subscription_refunded → refunded.
Superwall
Superwall signe chaque webhook (v2) avec un secret qu'il n'affiche qu'une fois. Dans Inngame, Réglages → Apps → votre app → Intégrations → Superwall affiche l'adresse du webhook, https://app.inngame.app/hooks/superwall/<appId> ; créez le webhook dans Superwall (Integrations → Webhooks) avec elle, puis recollez le secret de signature (whsec_…) dans Inngame. Les requêtes à la signature fausse, ou vieilles de plus de 5 minutes, sont refusées. Les joueurs sont retrouvés par app_user_id et ses alias : utilisez le jeton d'achat Inngame comme identifiant d'utilisateur Superwall, ou l'identifiant de votre propre compte si les joueurs sont vérifiés par JWT ou Steam.
curl -X PUT https://app.inngame.app/v1/apps/$APP_ID/subscriptions/superwall \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" -d '{"signingSecret": "whsec_..."}'
# → {"webhookUrl": "https://app.inngame.app/hooks/superwall/app_..."}
Correspondance : initial_purchase → subscription_started (ou trial_started), non_renewing_purchase → subscription_started, renewal → subscription_renewed (ou trial_converted), uncancellation et subscription_extended → subscription_renewed, cancellation → subscription_cancelled (ou trial_cancelled), billing_issue → billing_issue, expiration → subscription_expired (ou trial_expired), refund → refunded.
Webhooks
Envoyez les événements d'Inngame à votre propre serveur : donner les objets récupérés, garder une trace des remboursements, prévenir quelqu'un lors d'une vague de bugs. Les webhooks appartiennent au studio, éventuellement limités à une app (appId), et se gèrent dans Réglages → Webhooks ou par l'API, par un admin connecté uniquement : les clés d'API reçoivent 403 human_approval_required. Le secret (whsec_…) n'est renvoyé qu'une fois, à la création.
# Create (https only; events defaults to ["*"]) → {"id": "wh_...", "secret": "whsec_..."}
curl -X POST https://app.inngame.app/v1/webhooks \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" \
-d '{"url": "https://api.lanterngames.com/inngame", "appId": "app_...", "events": ["item.claimed", "refund.issued"]}'
# List (with last_status, last_error, pending retries, and the list of events) · send a ping · delete
curl https://app.inngame.app/v1/webhooks -b "ig_session=$INNGAME_SESSION"
curl -X POST https://app.inngame.app/v1/webhooks/$WEBHOOK_ID/test -b "ig_session=$INNGAME_SESSION"
curl -X DELETE https://app.inngame.app/v1/webhooks/$WEBHOOK_ID -b "ig_session=$INNGAME_SESSION"
Chaque envoi est un POST de {"id": "evt_…", "type", "created" (ms), "appId", "data"}, signé dans l'en-tête inngame-signature : t=<secondes unix>,v1=<HMAC-SHA256 de "t.body" avec votre secret, en base64url>. Répondez en 2xx sous 8 secondes ; les erreurs réseau, 408, 429 et 5xx sont retentées pendant environ une journée avec le même identifiant d'événement. Détails et code de vérification : API REST et webhooks.
| Événement | Quand | data |
|---|---|---|
message.created | Un message est envoyé dans une conversation (joueur, équipe ou IA ; pas les brouillons ni les notes). | conversationId, playerId, message |
item.claimed | Un joueur récupère une carte d'objet (une fois par carte). | messageId, conversationId, player, card, action |
card.action | Un joueur touche, ferme ou n'arrive pas à ouvrir toute autre carte. | Comme item.claimed. |
refund.issued | Un admin a remboursé ou envoyé la feuille de remboursement Apple. | conversationId, playerId, provider, id, status |
bug.spike | 5 joueurs ont signalé le même bug en 24 heures (une fois par bug). | bugId, title, reports24h, url |
conversation.closed | Une conversation est fermée (inbox, API, Telegram ou Discord). | conversationId, playerId, by (inbox et API seulement) |
player.blocked | Un joueur est bloqué (inbox, API, Telegram ou Discord). | playerId, by (inbox et API seulement) |
message.retracted | L'équipe a retiré un message. | conversationId, messageId, playerId, by |
conversation.rated | Un joueur a noté une conversation fermée (satisfaction activée). | conversationId, messageId, rating (de 1 à 5), player |
digest.weekly | Le point hebdomadaire. Pour tout le studio (appId vaut null) : seuls les webhooks non limités à une app le reçoivent. | apps[], suggestions[] |
ping | Envoyé par la route de test, à ce webhook seulement. | hello |
Point hebdomadaire
Chaque lundi à partir de 08:00 UTC, Inngame envoie la semaine écoulée du support de chaque app active : conversations, messages des joueurs, réponses de l'équipe et de l'IA, délai moyen de première réponse, satisfaction, joueurs qui attendent depuis plus de 24 heures, passages de main de l'IA, étiquettes et bugs principaux (avec un lien vers leur page), et jusqu'à trois suggestions. Il part par e-mail à chaque admin, dans sa langue, vers le groupe Telegram et le salon Discord branchés sur chaque app (avec un bouton vers les statistiques), et vers vos webhooks sous le nom digest.weekly. Rien ne part après une semaine sans aucune activité. Rien à configurer.
Mettre en pause ou débrancher
Quiconque a l'accès en lecture, clés d'API comprises, peut lister les intégrations (sans les secrets) ; seul un admin connecté peut les mettre en pause, les relancer ou les débrancher. Le kind du chemin vaut telegram, discord, steam, github, stripe_payments, googleplay (remboursements), apns, fcm, revenuecat, appstore, googleplay_rtdn (notifications de Google Play), adapty ou superwall. Une source d'abonnement en pause refuse ses webhooks. Débrancher Telegram retire le webhook du bot ; débrancher Discord libère le serveur pour un autre studio.
# List (secrets are never returned)
curl https://app.inngame.app/v1/apps/$APP_ID/integrations -b "ig_session=$INNGAME_SESSION"
# Pause / resume
curl -X PATCH https://app.inngame.app/v1/apps/$APP_ID/integrations/telegram \
-b "ig_session=$INNGAME_SESSION" -H "Content-Type: application/json" -d '{"enabled": false}'
# Disconnect
curl -X DELETE https://app.inngame.app/v1/apps/$APP_ID/integrations/telegram -b "ig_session=$INNGAME_SESSION"