--- name: inngame description: Run a game's or app's player support through Inngame — read and answer players (auto-translated), handle AI drafts, triage bugs (merge duplicates, mark fixed in a version, GitHub issues, fix PRs), edit the FAQ, and install the Inngame SDK (0.2.2) in a Unity, iOS or web project in one go. Use for "check support", "answer the players", "what are players complaining about", "any new bugs?", "we shipped 1.4.3", "add Inngame to this game", "add in-game support/chat". --- # Inngame Inngame is the studio's in-game support desk: players write from inside the game (Unity or web SDK) or app (iOS SDK), the team answers from the web inbox, Telegram, Discord — or from you. ## Connect Prefer the MCP server; fall back to the CLI. - **MCP** (Claude Code): `claude mcp add --transport http inngame https://app.inngame.app/mcp --header "Authorization: Bearer $INNGAME_API_KEY"` - **CLI** (0.1.2+): `npx inngame login ig_sk_…` then `npx inngame --help`. Add `--json` to any command to parse output. - Keys are created in the dashboard (https://app.inngame.app) → Settings → API keys. Scopes: `read` (read only), `reply` (also answer, notes, tags, bugs, FAQ, players), `all` (also AI pause, announcement, FAQ import/generation, audit log, `request_fix`). Each MCP tool's description says the scope it needs; a `403 requires_reply` / `requires_admin` means the key's scope is too small — tell the user instead of retrying. - Docs: https://inngame.app/docs/agents (MCP tools, CLI, scopes) and https://inngame.app/docs/api (REST). If no key is configured, ask the user to create one; never invent one. ## Rules 1. **Money is human-only.** Never promise a refund or compensation. Use `propose_refund` (MCP) — a human admin approves it in the inbox. 2. **Releases are human-only.** `request_fix` asks the coding agent for a pull request; never merge or ship it yourself. Item gifts (in a message or an automation), letting the AI answer alone (`aiMode: "auto"`), API keys, members, integrations and billing are human-only too: the API answers `403 human_approval_required`. Suggest it in a note instead of retrying. 3. Players read your replies translated into their language: write plainly in the team's language, 2–5 sentences, no markdown headings. 4. Never ask players for passwords or payment details. Don't quote internal notes to players. 5. If a player is angry, reports harassment, a legal or safety issue, leave a `note` for the team and set priority 2 instead of improvising. 6. A human reply in the inbox turns the built-in AI off for that conversation. Use `update_conversation` with `aiMode: "draft"` to get AI drafts again; handing it back to an AI that answers alone (`auto`, or `inherit` when the app is in auto mode) is for a human. ## Triage the inbox 1. `list_conversations` (status `open`; filters `unread`, `tag`, `lang`, `q`, `app`; page with `before`). For each one worth handling, `get_conversation` (`get_older_messages` for long threads). 2. Look at `context` on player messages (level, version, device, logs), `customer` (identity, devices, metadata such as subscription status) and `bugs` (bugs the conversation is already filed under). 3. Answer from the FAQ (`list_faq`) and the conversation. If the answer is missing and comes up often, propose a FAQ article with `add_faq_article` (`published: false`) for the team to review. 4. AI drafts (`status: "draft"`): `approve_draft` (optionally edited) or `discard_draft`. `ask_ai` makes the AI write a draft now; `list_saved_replies` has the team's canned answers. Sent something wrong (wrong player, wrong answer)? `unsend_message` removes it from the player's chat. You can only unsend messages from the AI, automations and agents; tell a human if a person's message needs to go. A player asks for their data? `export_player_data` (CLI: `inngame export-player `) gives the full JSON; send it to the team, not to an unverified sender. A player asks to be deleted? Tell a human admin: you can't delete players, and the game's "Delete my support data" button does it on the spot. 5. Tag (`tag_conversation`, `untag_conversation`), file bug reports under a bug (`link_conversation_to_bug`), close what is solved with `update_conversation` `status: "closed"` (or snooze with `snoozeUntil`). To reach a player who has no open conversation: `list_players` (search) then `message_player`. `update_player` sets the team-facing name or blocks an abusive player. 6. End with a short summary for the user: answered, waiting on the team, refunds proposed, bugs found. ## Bugs Player reports are grouped into bugs (the AI detects them; you can also file a conversation with `link_conversation_to_bug`). CLI equivalents in brackets. 1. `list_bugs` (`inngame bugs`): filters `status` (open, fixed, released, wontfix/closed, comma-separated, or all), `app`, `q`, `sort` (`players` = most reported, `newest`, `recent`). Each bug has `reports` (players), `reports24h` (spikes matter), `versions`, `platforms`, `fixedInVersion`, GitHub issue and `url`. `count_bugs` (`inngame bugs counts`) for totals. 2. `get_bug` (`inngame bugs show `): players per day, version / platform / device / OS breakdown, last error and log lines, reports with the player's message (translated) and conversation. 3. Duplicates: `merge_bugs` (`inngame bugs merge --into `), same app only; the duplicate is deleted, reports move over. 4. `open_github_issue` (`inngame bugs issue `) if there is none (needs the GitHub integration). `request_fix` (`inngame bugs request-fix `, key scope `all`) asks the repository's coding agent for a PR. 5. When the fix ships: `mark_bug_fixed` with the version (`inngame bugs fixed --version 1.4.3`) — Inngame tells every reporter, in their language, when they run that version or later. `reopen_bug` if players still hit it, `close_bug` for won't-fix. 6. When you mention a bug to the user, give its `url` (its page in the dashboard). ## FAQ and reports - `list_faq`, `add_faq_article` (prefer `published: false` so the team reviews), `update_faq_article`, `delete_faq_article`; with scope `all`: `import_faq` (from the studio's help page or sitemap) and `generate_faq` (unpublished drafts from past conversations). - `get_stats`, `get_weekly_digest` (`inngame week`), `list_automations`, `get_audit_log` (scope `all`). - Outage or known bug: `set_announcement` (`inngame announce --hours 4`); `set_ai_paused` to stop the AI for a whole app. ## Install the SDK ### Unity (2022 LTS or Unity 6; mobile, Steam, consoles with gamepad) 1. `Packages/manifest.json` → add `"gg.inngame.sdk": "https://github.com/inngame/sdk-unity.git#0.2.2"` (or a local `file:` path to the `sdk-unity` folder). 2. In the first scene's bootstrap: `InngameSDK.Inngame.Configure("app_…", new InngameOptions { PauseGameWhileOpen = true })` (app key from `list_apps` or the inbox). 3. When the player is known: `Inngame.Identify(playerId, playerName)`; on Steam builds `Inngame.IdentifySteam(ticketProvider)`. 4. A "Support" entry in the pause or settings menu calling `Inngame.OpenChat`, reachable with mouse, touch and gamepad; show `Inngame.UnreadChanged` as a badge. 5. Context with `Inngame.SetContext("level", …)`; card hooks `Inngame.OnItemGranted`, `Inngame.OnOffer`, `Inngame.RegisterScreen` if the game has them. 6. Compile and fix errors. Don't touch gameplay beyond these hooks. Read `README.md` of the SDK package for the exact API before writing code. ### iOS (Swift, SwiftUI or UIKit) 1. Swift Package: `https://github.com/inngame/sdk-ios` from `0.2.2`. 2. `Inngame.configure(appKey:)` at launch, `Inngame.identify(userId:name:email:)` after login, `Inngame.logout()` on sign-out. 3. A "Help" row in Settings presenting `InngameChatView()` (or `Inngame.present(from:)` in UIKit); `Inngame.setPushToken(_:)` and `Inngame.handleNotification(_:)` for push. ### Web (HTML5 games, web apps) 1. Download `https://inngame.app/sdk/inngame.js` into the project's static files; load it with a `