Paso 1
La página principal se carga iframe
Su sitio renderiza un iframe que apunta a /embed/{gameSlug}/frame/ con tenantId y parámetros de consulta opcionales mode o campaignId.
Embed API documentos
Comienza con la demostración en vivo, observa los eventos de la página principal y luego copia los patrones iframe y del oyente en tu sitio. El mismo flujo funciona para todos los juegos Games I Know y iframe.
Obtén una clave embedRealiza un movimiento en Tic Tac Toe iframe. El registro de eventos muestra GAME_STARTED, eventos de juego y cargas útiles de finalización exactamente como las recibe una página principal.
Contrato para eventos en toda la plataforma
Games I Know envía eventos embed para cada juego en la plataforma: Tic Tac Toe, Four in a Row, Bingo y I Know hoy, y cada nuevo juego embeddable que agreguemos en el futuro. No necesita una integración separada para cada título. Cree un oyente de página principal contra el contrato estándar (listo, GAME_STARTED, eventos de juego, finalización con datos del ganador y resultados firmados) y reutilícelo en todos los juegos embed actuales y futuros.
Utilice esta opción cuando ya sepa dónde debe aparecer el juego en su sitio web.
Utilice /embed/{gameSlug}/frame/ con su tenantId. No utilice iframe la página de destino SEO.
Ir al pasoFiltra en data.source === "gamesiknow", luego maneja los eventos de juego GAME_STARTED, GAME_COMPLETED y versión 1.
Ir al pasoEnvía resultId y signedToken a tu backend antes de otorgar créditos, recompensas o desbloqueos.
Ir al pasoUtilice su ID de inquilino real del panel de control del socio.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=YOUR_TENANT_ID"
title="Tic Tac Toe by Games I Know"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
loading="lazy"
allow="fullscreen"
referrerpolicy="no-referrer-when-downgrade"
allowfullscreen
></iframe>Un Games I Know embed es un iframe aislado en su dominio. Valida su inquilino y dominio contra el API, luego se comunica con su página principal a través de window.postMessage.
Paso 1
Su sitio renderiza un iframe que apunta a /embed/{gameSlug}/frame/ con tenantId y parámetros de consulta opcionales mode o campaignId.
Paso 2
El iframe llama a GET /embed/config (o /api/embed/config). Games I Know comprueba tu cuenta de socio, dominio permitido, acceso al juego y cuota de AI. Se registra un evento de análisis embed cargado en el servidor.
Paso 3
El iframe envía un evento de listo a la página principal para que pueda mostrar un estado de carga o redimensionar el marco usando payload.embedHeight.
Paso 4
Cuando comienza el juego, cada juego embeddable publica GAME_STARTED en la página principal y registra game_started en el servidor automáticamente. No se llama a ningún análisis API desde su sitio web.
Paso 5
Durante la partida, los eventos de juego de la versión 1, como move y mode_change, actualizan la interfaz de usuario o los análisis internos.
Paso 6
Al finalizar, cada juego embeddable envía GAME_COMPLETED al servidor principal con el resultado, el ganador y los jugadores para que tu página muestre los resultados de inmediato. El servidor iframe también firma el resultado mediante POST /embed/results e incluye resultId y signedToken en GAME_COMPLETED cuando la firma es exitosa. Tu servidor backend puede verificar esos tokens con una clave de servidor asociada antes de otorgar las recompensas.
Dos formatos de postMessage
Eventos del ciclo de vida usar un objeto plano con event: "GAME_STARTED" or event: "GAME_COMPLETED". Eventos de juego envolver datos en version: 1 con anidado payload. Siempre filtrar activado data.source === "gamesiknow".
La mayoría de las integraciones constan de cuatro decisiones: registrar el dominio, generar un token, instalar iframe y, a continuación, estar atento a los eventos de inicio y finalización.
Agregue todos los dominios que alojarán un Games I Know y un embed. Los dominios están normalizados, por lo que example.com y www.example.com se manejan de manera consistente.
Crea un token embed independiente para cada sitio web. Esto mantiene los análisis actualizados y prepara la cuenta para la tarificación futura basada en dominios.
Copie el iframe o el contenedor responsivo en su bloque HTML personalizado de CMS, área embed del creador de sitios web o plantilla frontend personalizada.
Gestiona los eventos postMessage GAME_STARTED y GAME_COMPLETED en tu página principal para mostrar el estado del partido y los detalles del ganador. Verifica los resultados firmados desde tu backend con una clave de servidor asociada antes de otorgar las recompensas.
Ancho
Utilice el 100% para que embed llene la columna de contenido disponible.
Altura
640px para la mayoría de los juegos. Tic Tac Toe también funciona a 600px. Usa payload.embedHeight de los eventos ready para redimensionar automáticamente.
Juegos
Utilice /embed/tic-tac-toe/frame/, /embed/four-in-a-row/frame/, /embed/bingo/frame/ o /embed/i-know/frame/.
Modo
Omita el modo para la elección del jugador, o pase mode=ai cuando desee que embed solicite AI primero.
El jugador elige el tipo de partida dentro del juego cuando hay disponible una cuota de AI.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=TENANT_ID"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
allow="fullscreen"
loading="lazy"
title="Tic Tac Toe by Games I Know"
></iframe>Solicita AI primero. Si se agota la cuota, recurre silenciosamente a PvP.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=TENANT_ID&mode=ai&campaignId=homepage-widget"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
allow="fullscreen"
loading="lazy"
title="Tic Tac Toe vs AI by Games I Know"
></iframe>Las URL de marco utilizan /embed/{gameSlug}/frame/. Las páginas de destino de SEO sin juego están disponibles en /embed/{gameSlug}/.
| Parámetro | Requerido | Descripción |
|---|---|---|
| ID del inquilino | Sí | Su ID de inquilino asociado del panel de socios Games I Know. También se acepta como partnerId para integraciones heredadas. |
| modo | No | Configurado para que la IA solicite el modo AI forzado. Se siguen aplicando las cuotas del servidor y las reglas de dominio. Si AI no está disponible, se recurre al modo jugador contra jugador. |
| ID de campaña | No | La etiqueta de campaña opcional se refleja en los eventos postMessage y se almacena en los análisis de socios para realizar pruebas A/B o segmentación a nivel de página. |
El mismo contrato se aplica a Tic Tac Toe, Four in a Row, Bingo, I Know y las próximas versiones embed.
Regla 1
Fuente del filtro
Ignorar los mensajes a menos que data.source sea gamesiknow.
Regla 2
Gestionar el ciclo de vida
Utilice GAME_STARTED y GAME_COMPLETED para conocer el estado del partido, el nombre del ganador y el resultado.
Regla 3
Verificar para obtener recompensas
Envía resultId y signedToken a tu backend antes de otorgar las recompensas.
| Evento | Cuando dispara | Formato | Campos clave |
|---|---|---|---|
| listo | Embed inicializado y configuración cargada. | Jugabilidad (versión 1) para todos los juegos, o plana para algunos envoltorios del ciclo de vida. | matchId, modo, embedHeight |
| JUEGO_INICIADO | Cada partida embeddable (actual y futura). Se activa cuando comienza una partida (por ejemplo, primer movimiento o inicio de ronda AI). | Ciclo de vida plano | juego, ID de socio, ID de campaña, modo, ID de partido (implícito a través del flujo de juego) |
| JUEGO_COMPLETADO | Cada partida de embeddable finaliza. Incluye el resultado, el ganador, el nombre del jugador ganador y los jugadores para que la página principal muestre los resultados inmediatamente. También incluye el ID del resultado y el token firmado cuando la firma del servidor es exitosa. | Ciclo de vida plano | resultado, ganador, nombreJugadorGanador, IDJugadorGanador, jugadores, puntuación, duraciónSegundos, IDResultado, tokenFirmado |
| CAMBIO DE PANTALLA COMPLETA INSERTAR | El jugador activa la pantalla completa en embed. | Ciclo de vida plano | carga útil.activa booleana |
Forma: { source, game, version: 1, event, payload }
Cada publicación de juego embeddable GAME_COMPLETED al padre con outcome, winner, y players cuando termina un partido. Cuando la firma tiene éxito, GAME_COMPLETED también incluye resultId y signedToken para verificación de backend.
{
"source": "gamesiknow",
"event": "GAME_STARTED",
"game": "tic-tac-toe",
"partnerId": "partner_your_tenant",
"campaignId": "homepage-widget",
"mode": "ai"
}{
"source": "gamesiknow",
"event": "GAME_COMPLETED",
"game": "tic-tac-toe",
"resultId": "res_abc123xyz",
"partnerId": "partner_your_tenant",
"campaignId": "homepage-widget",
"status": "completed",
"outcome": "player_1",
"score": 100,
"durationSeconds": 24,
"winnerPlayerId": "player_1",
"winnerPlayerName": "Player X",
"winner": {
"playerId": "player_1",
"participant": "player_1",
"type": "human",
"label": "Player 1",
"name": "Player X",
"score": 100
},
"players": [
{
"playerId": "player_1",
"participant": "player_1",
"type": "human",
"label": "Player 1",
"name": "Player X",
"score": 100,
"status": "winner"
},
{
"playerId": "player_2",
"participant": "ai_bot",
"type": "ai",
"label": "AI BOT",
"name": "AI Bot",
"score": 60,
"status": "lost"
}
],
"signedToken": "eyJ..."
}jugador_1
Ganó el primer jugador humano.
jugador_2
Ganó el segundo jugador humano.
bot de IA
El oponente AI ganó.
dibujar
No hay ganador.
Solo compatible con Tic Tac Toe y Four in a Row. Dirija el slug del juego y la acción a la ventana de contenido iframe.
// Parent page -> iframe (Tic Tac Toe or Four in a Row)
const iframe = document.querySelector("iframe");
iframe.contentWindow.postMessage(
{ game: "tic-tac-toe", action: "reset" },
"https://gamesiknow.com"
);
iframe.contentWindow.postMessage(
{ game: "tic-tac-toe", action: "get_state" },
"https://gamesiknow.com"
);Copia este detector de eventos en la página que aloja tu iframe. Gestiona el estado listo, el inicio del juego, los eventos de juego, la finalización firmada y los cambios de pantalla completa.
Filtra por origen, gestiona GAME_STARTED y GAME_COMPLETED para la interfaz de usuario del ganador y los eventos de juego durante la partida.
/**
* Games I Know embed listener (parent page)
* Handles lifecycle events (GAME_STARTED, GAME_COMPLETED) and
* version 1 gameplay events (move, mode_change, ...).
*/
const TRUSTED_ORIGIN = "https://gamesiknow.com"; // or your self-hosted origin
window.addEventListener("message", (event) => {
if (TRUSTED_ORIGIN !== "*" && event.origin !== TRUSTED_ORIGIN) return;
const data = event.data;
if (!data || data.source !== "gamesiknow") return;
// --- Lifecycle events (flat top-level event name) ---
if (data.event === "GAME_STARTED") {
console.log("Match started", {
game: data.game,
mode: data.mode,
partnerId: data.partnerId,
campaignId: data.campaignId,
});
return;
}
if (data.event === "GAME_COMPLETED") {
const winnerLabel = data.winner?.name ?? data.winnerPlayerName ?? null;
console.log("Match completed", {
game: data.game,
outcome: data.outcome, // player_1 | player_2 | ai_bot | draw
winner: data.winner,
winnerName: winnerLabel,
players: data.players,
});
if (winnerLabel) {
document.getElementById("game-winner")!.textContent = `${winnerLabel} won!`;
} else if (data.outcome === "draw") {
document.getElementById("game-winner")!.textContent = "Draw";
}
// For rewards: send resultId + signedToken to YOUR backend (never call verify from the browser)
if (data.resultId && data.signedToken) {
fetch("/api/reward-winner", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
resultId: data.resultId,
signedToken: data.signedToken,
userId: currentUserId,
}),
});
}
return;
}
if (data.event === "EMBED_FULLSCREEN_CHANGE") {
document.body.classList.toggle("embed-fullscreen-active", Boolean(data.payload?.active));
return;
}
// --- Gameplay events (version 1 envelope) ---
if (data.version === 1 && typeof data.event === "string") {
switch (data.event) {
case "ready":
resizeEmbed(data.payload?.embedHeight);
break;
case "mode_change":
console.log("Mode changed", data.payload?.mode);
break;
case "move":
console.log("Move", data.payload);
break;
default:
console.log("Gameplay event", data.event, data.payload);
}
}
});
function resizeEmbed(height) {
const iframe = document.querySelector('iframe[src*="/embed/"]');
if (iframe && typeof height === "number") iframe.style.height = `${height}px`;
}Lista de verificación de integración
Utilice GAME_COMPLETED en la página principal para mostrar quién ganó. Para las recompensas, verifique los resultados firmados desde su backend con una clave de servidor asociada; nunca llame a la verificación API desde el navegador JavaScript.
Solo del lado del servidor. Use resultId y signedToken de GAME_COMPLETED con autorización: Bearer gik_psk_…
POST https://api.gamesiknow.com/embed/results/verify
Authorization: Bearer gik_psk_your_secret_key
Content-Type: application/json
{
"resultId": "res_abc123xyz",
"signedToken": "signed_token_from_game_completed"
}
Call from your backend server only. The partner server key must belong to the same tenant as the signed result. Browser requests are rejected.{
"ok": true,
"resultId": "res_abc123xyz",
"partnerId": "partner_your_tenant",
"gameSlug": "tic-tac-toe",
"outcome": "player_1",
"score": 100,
"durationSeconds": 24
}Tu backend recibe tokens de la página principal, los verifica con Games I Know y luego otorga la recompensa.
// Example: Node.js / Express handler on YOUR server
app.post("/api/reward-winner", async (req, res) => {
const { resultId, signedToken, userId } = req.body;
const verify = await fetch("https://api.gamesiknow.com/embed/results/verify", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: `Bearer ${process.env.GAMESIKNOW_PARTNER_SERVER_KEY}`,
},
body: JSON.stringify({ resultId, signedToken }),
});
if (!verify.ok) return res.status(403).json({ error: "Invalid result" });
const result = await verify.json();
if (result.outcome !== "player_1") {
return res.status(400).json({ error: "Player did not win" });
}
await grantReward(userId, result);
return res.json({ ok: true });
});Games I Know registra estos eventos automáticamente cuando se carga iframe y los jugadores interactúan. Aparecen en el panel de control de socios. Para importar los mismos datos a tu propia base de datos, crea una clave de servidor de socio en la página de instalación y llama a GET /partners/analytics solo desde tu servidor backend.
Genere una clave de servidor de socio en Panel de socios → Instalar. Guárdela como secreto de servidor. Utilice los parámetros de consulta que se muestran a continuación para filtrar la exportación.
GET https://api.gamesiknow.com/partners/analytics
Autorización: Bearer gik_psk_tu_clave_secreta
Parámetros de consulta opcionales:
dominio: Nombre de host del sitio web registrado (example.com)
campañaId: Valor del parámetro iframe (campañaId)
gameSlug: tres en raya | cuatro en raya | bingo | i-know
desde: Fecha de inicio en UTC (AAAA-MM-DD)
hasta: Fecha de finalización en UTC (AAAA-MM-DD)
Ejemplo:
/partners/analytics?domain=www.example.com&gameSlug=tic-tac-toe&from=2026-05-01&to=2026-05-31
Llama solo desde tu servidor backend. Nunca expongas la clave de tu servidor de socios en el navegador (JavaScript).Todos los juegos embeddable envían los mismos eventos principales. Compare los tiempos y los eventos adicionales de cada título a continuación.
| Juego | JUEGO_INICIADO | Señal de finalización | Firmado | AI forzado | Height | Comandos de padre |
|---|---|---|---|---|---|---|
| Tic Tac Toe | Primer movimiento o AI inicio | JUEGO_COMPLETADO | Sí | Sí | 640px | reiniciar, obtener_estado |
| Four in a Row | Primer movimiento o AI inicio | JUEGO_COMPLETADO | Sí | Sí | 640px | reiniciar, obtener_estado |
| Bingo | Comienza el partido (AI o PvP) | JUEGO_COMPLETADO | Sí | Sí | 640px | Todavía no hay ninguno. |
| I Know | Comienza el partido (AI o PvP) | JUEGO_COMPLETADO | Sí | Sí | 640px | Todavía no hay ninguno. |
Esta página es la referencia técnica. Utilice estas guías cuando necesite pasos de instalación específicos para la plataforma o consejos sobre la colocación vertical. Todas las guías utilizan el mismo iframe y el mismo modelo de eventos documentado anteriormente.
Framework-specific iframe placement, event listeners, and production notes.
Copy-paste embed guides for no-code and low-code site builders.
Placement and UX recommendations for common website types.
¿Buscas páginas de resumen general como juegos iframe, widgets HTML5 o juegos embed gratuitos? Explorar todo embed guías en el centro.
Respuestas sobre detalles de integración, compatibilidad actual con el juego, comandos, resultados firmados y compatibilidad futura con el juego.
Sí. Los Games I Know y embed utilizan HTML estándar, por lo que funcionan en bloques HTML personalizados de WordPress, elementos embed de Webflow, áreas de código personalizado de Wix y Squarespace, HTML estático, React, Next.js y otros sitios personalizados. Primero, registre el dominio del sitio web en su panel de socios y luego pegue el fragmento de marco generado en la página donde debería aparecer el juego.
/embed/{gameSlug}/ es la página de inicio pública del juego embed. /embed/{gameSlug}/frame/ es el entorno de ejecución de iframe que debe pegarse en su sitio web. Utilice siempre la URL /frame/ en el código de iframe porque carga el juego jugable, valida su inquilino y dominio, y envía eventos de página principal.
Sí. Los juegos Games I Know y iframe están diseñados para navegadores móviles, tabletas, portátiles y ordenadores de escritorio. Utilice width="100%" y una altura recomendada de aproximadamente 640px para la mayoría de los embed. También puede escuchar el evento ready y usar payload.embedHeight si desea que su página principal cambie el tamaño de iframe automáticamente.
Los Games I Know, iframe y embed son gratuitos durante la beta de embed. No se requiere tarjeta de crédito para comenzar, y los embed beta actuales no incluyen anuncios. Crea una cuenta de socio gratuita, registra tu dominio y genera el fragmento iframe desde el panel de control.
Sí. Una cuenta de socio le proporciona un ID de inquilino y un fragmento iframe restringido al dominio. El iframe envía el ID de inquilino con la URL del marco para que Games I Know pueda validar al socio, el dominio permitido, el acceso al juego, la cuota de AI, la campaña de análisis y el flujo de verificación de resultados.
El embed tiene restricciones de dominio. Si alguien copia tu fragmento iframe en un sitio web no autorizado, Games I Know verifica el origen de la solicitud comparándolo con los dominios configurados para tu cuenta de socio y bloquea el uso no autorizado. Usa identificadores de campaña separados cuando quieras un análisis más preciso por sitio web o campaña.
Los Tic Tac Toe, Four in a Row, Bingo y I Know admiten iframe y embed actualmente. Cada juego envía el contrato de eventos estándar embed para el estado listo, el inicio del juego, la jugabilidad, la finalización, los datos del ganador, los análisis y la verificación de resultados. Se espera que los nuevos juegos compatibles con embed sigan el mismo patrón de eventos para que los socios no tengan que reconstruir su integración.
Cada juego embeddable utiliza dos formatos postMessage. Los eventos del ciclo de vida utilizan una forma plana con origen: gamesiknow y valores de evento como ready, GAME_STARTED, GAME_COMPLETED y EMBED_FULLSCREEN_CHANGE. Los eventos de juego utilizan la versión: 1 con nombres de eventos anidados como ready, mode_change, move, reset, undo y state. Filtrar siempre en data.source === "gamesiknow".
Sí. Se escucha el evento GAME_STARTED cuando comienza una partida, se utilizan eventos de juego como move y mode_change durante el juego, y se utiliza GAME_COMPLETED cuando finaliza una partida. GAME_COMPLETED incluye el resultado, el ganador, los jugadores, la puntuación, la duración y los identificadores de resultado cuando la firma está disponible. El análisis del lado del servidor también registra las cargas, los inicios, las finalizaciones, los intentos bloqueados y los clics en las llamadas a la acción (CTA).
Usa GAME_COMPLETED cuando termine una partida. Cada juego embeddable envía este evento de ciclo de vida con el resultado, el ganador, el nombre del jugador ganador y los jugadores. Cuando GAME_COMPLETED incluya resultId y signedToken, envíalos a tu servidor backend y llama a POST /embed/results/verify con la clave de tu servidor asociado antes de otorgar recompensas o créditos.
Agregue window.addEventListener("message", handler) en la página que aloja iframe. En el controlador, ignore los mensajes a menos que event.data.source === "gamesiknow". Cree una bifurcación en event.data.event para eventos del ciclo de vida, o en event.data.event más event.data.version === 1 para eventos de juego. Opcionalmente, valide event.origin con su origen Games I Know permitido.
Usa GAME_COMPLETED en la página principal para mostrar quién ganó inmediatamente (resultado, ganador, nombre del jugador ganador, jugadores). Para las recompensas, envía resultId y signedToken desde GAME_COMPLETED a tu backend, luego llama a POST /embed/results/verify con Authorization: Bearer gik_psk_… usando una clave de servidor de socio desde tu panel. El punto final de verificación es solo del lado del servidor; nunca lo llames desde el navegador JavaScript. Otorga recompensas solo después de que la verificación sea exitosa.
Obligatorio: tenantId (el ID de inquilino de su socio). Opcional: mode=ai para solicitar el modo AI forzado cuando la cuota lo permita, y campaignId para segmentar los análisis. Las URL de los marcos siguen el formato /embed/{gameSlug}/frame/?tenantId=YOUR_TENANT_ID.
Sí. Añade mode=ai a la URL iframe para solicitar primero el modo AI. Las reglas de cuota y dominio del servidor siguen vigentes, por lo que embed puede recurrir a la elección del jugador o al modo jugador contra jugador cuando el modo AI no esté disponible o se haya agotado la cuota.
Tic Tac Toe y Four in a Row aceptan mensajes de padre con el juego configurado como el slug del juego y la acción configurada como reset o get_state. iframe responde con un evento de juego de estado. Otros juegos embed aún no exponen comandos de padre.
Confirme que el dominio del sitio web esté activo antes de generar un token.
Utilice un token o ID de campaña independiente para cada sitio web o grupo de campaña.
Presta atención a los mensajes GAME_STARTED y GAME_COMPLETED en la página principal.
Mantén visible la marca Games I Know dentro de embed.
Verifique los resultados firmados en su sistema backend antes de otorgar premios o créditos.
La prueba forzó el modo AI y la reversión a PvP cuando se agotó la cuota de AI.
Comparta el sitio web, el CMS y la ubicación deseada para el juego. Podemos revisar con usted el cableado de su evento embed.