Módulo de eventos de RTM
El Módulo de Eventos de RTM proporciona funcionalidad para suscribirse y manejar eventos en tiempo real en el SDK de Gamanza Engage Web Client. Permite a los desarrolladores suscribirse a varios eventos, darse de baja de eventos y emitir datos a la conexión WebSocket.
Accediendo al módulo
El Módulo de Eventos de RTM se puede acceder a través de la instancia del SDK de Gamanza Engage:
const Events = sdk.Events;
Métodos públicos
suscribirse
Se suscribe para recibir eventos en tiempo real en función de la API de comunicación en tiempo real proporcionada por Gamanza Engage.
Firma:
suscribirse(evento, devolución de llamada, opciones)
Definición de tipo:
function suscribirse<T extends keyof EventTypeMap>(
evento: T,
devolución de llamada: SDKEventListener<T>,
opciones?: SubscriptionOptions
): string;
Parámetros:
| Nombre | Tipo | Descripción |
|---|---|---|
evento | keyof EventTypeMap | El nombre del evento al que suscribirse |
devolución de llamada | SDKEventListener<T> | La función de devolución de llamada que se llamará cuando se active el evento |
opciones | SubscriptionOptions (opcional) | Opciones adicionales para la suscripción |
Devuelve:
| Tipo | Descripción |
|---|---|
string | Un ID de suscripción único que se puede usar para darse de baja del evento |
Ejemplo:
// Suscribirse a eventos de subida de XP
const idDeSuscripción = rtmEvents.suscribirse('ranks:on:xpUp', (data, rawEvent) => {
console.log('El XP del jugador aumentó:', data.xpBalance);
console.log('Evento sin procesar:', rawEvent);
});
// Suscribirse con opciones
const idDeSuscripciónConOpciones = rtmEvents.suscribirse('ranks:on:levelUp',
(data, rawEvent) => {
console.log('El jugador subió de nivel a:', data.level.levelNumber);
},
{
once: true, // Solo activar una vez
timeout: 60000, // Tiempo de espera de 60 segundos
filter: (data) => data.level.levelNumber > 5 // Solo activar para niveles superiores a 5
}
);
anular suscripción
Elimina una suscripción individual por su identificador.
Firma:
anular suscripción(idDeSuscripción)
Definición de tipo:
function anular suscripción(idDeSuscripción: string): boolean;
Parámetros:
| Nombre | Tipo | Descripción |
|---|---|---|
idDeSuscripción | string | El ID de suscripción único devuelto por el método de suscribir |
Devuelve:
| Tipo | Descripción |
|---|---|
boolean | true si se eliminó correctamente la suscripción, false de lo contrario |
Ejemplo:
// Cancelar la suscripción a un evento
const subscriptionId = rtmEvents.subscribe('ranks:on:xpUp', callback);
const unsubscribed = rtmEvents.unsubscribe(subscriptionId);
if (unsubscribed) {
console.log('Se canceló la suscripción al evento con éxito');
} else {
console.log('No se pudo cancelar la suscripción o no se encontró la suscripción');
}
unsubscribeFromEvent
Elimina todas las suscripciones activas para un evento específico.
Firma:
unsubscribeFromEvent(event)
Definición de tipo:
function unsubscribeFromEvent<T extends keyof EventTypeMap>(event: T): number;
Parámetros:
| Nombre | Tipo | Descripción |
|---|---|---|
event | keyof EventTypeMap | El nombre del evento del que se va a cancelar la suscripción |
Devuelve:
| Tipo | Descripción |
|---|---|
number | El número de suscripciones que se eliminaron |
Ejemplo:
// Cancelar todas las suscripciones a eventos de aumento de XP
const removedCount = rtmEvents.unsubscribeFromEvent('ranks:on:xpUp');
console.log(`Se eliminaron ${removedCount} suscripciones`);
getEventsStats
Devuelve estadísticas sobre las suscripciones a eventos actuales.
Firma:
getEventsStats()
Definición de tipo:
function getEventsStats(): Record<string, any>;
Parámetros:
Ninguno
Devuelve:
| Tipo | Descripción |
|---|---|
Record<string, any> | Un objeto que contiene estadísticas sobre las suscripciones a eventos actuales |
Ejemplo:
// Obtener estadísticas de suscripción
const stats = rtmEvents.getEventsStats();
console.log('Suscripciones actuales:', stats);
emitToWebSocket
Envía datos utilizando el Servicio de mensajería Gamanza Engage (WebSockets).
Firma:
emitToWebSocket(event, data)
Definición de tipo:
function emitToWebSocket<T extends keyof EmitterTypeMap>(event: T, data: EmitterTypeMap[T]): void;
Parámetros:
| Nombre | Tipo | Descripción |
|---|---|---|
event | keyof EmitterTypeMap | El nombre del evento a emitir |
data | EmitterTypeMap[T] | Los datos a enviar con el evento |
Retorna:
| Tipo | Descripción |
|---|---|
void | Este método no devuelve ningún valor |
Ejemplo:
// Enviar un mensaje de reconocimiento
rtmEvents.emitToWebSocket('send:ack', { messageId: 'message-123' });
// Enviar un evento de seguimiento de análisis
rtmEvents.emitToWebSocket('send:analytics:event', {
eventName: 'button_click',
properties: {
buttonId: 'login-button',
timestamp: Date.now()
}
});
Eventos
El Módulo de Eventos RTM proporciona acceso a varios eventos en tiempo real a los que se puede suscribir. Estos eventos se agrupan en diferentes categorías en función de su funcionalidad.
Constantes de eventos
Para un mejor mantenimiento y para evitar errores tipográficos, se recomienda utilizar la constante exportada EVENTS. Estas constantes se organizan por espacio de nombres, coincidiendo con las categorías de las tablas a continuación.
Ejemplo de uso:
import { EVENTS } from '@gamanza/engage-web-client-sdk';
// Suscribirse utilizando la constante
sdk.Events.subscribe(EVENTS.RANKS.ON_XP_UP, (data) => {
console.log('XP actualizado:', data.xpBalance);
});
// O utilizando la constante de espacio de nombres para eventos de jugador
sdk.Events.subscribe(EVENTS.PLAYER.ON_GAMIFICATION_OPT_IN, (data) => {
console.log('El jugador se ha suscrito');
});
Eventos del sistema
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
SYSTEM.ON_ERROR | on:error | Eventos de error del sistema | Directo | FIRE_FORGET | propiedades de error adicionales |
Estructura de datos del evento de error
interface ErrorEventData extends BaseEventData {
[key: string]: unknown; // Propiedades de error adicionales
}
Eventos de rango
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
RANKS.ON_XP_UP | ranks:on:xpUp | Eventos de aumento de XP | Directo | FIRE_FORGET | playerId: string, level: Level, nextLevel?: Level, nextRank?: Rank, pointsUntilNextLevel: number, pointsUntilNextRank: number, rank: Rank, xpBalance: number, rewardsGroupId: string |
RANKS.ON_LEVEL_UP | ranks:on:levelUp | Eventos de subida de nivel | Directo | FIRE_FORGET | playerId: string, level: Level, nextLevel?: Level, nextRank?: Rank, pointsUntilNextLevel: number, pointsUntilNextRank: number, rank: Rank, xpBalance: number, claimReward: true, rewards: LoyaltyRewards[], rewardsGroupId: string |
RANKS.ON_RANK_UP | ranks:on:rankUp | Eventos de ascenso de rango | Directo | FIRE_FORGET | playerId: string, level: Level, nextLevel?: Level, nextRank?: Rank, pointsUntilNextLevel: number, pointsUntilNextRank: number, rank: Rank, xpBalance: number, claimReward: boolean, rewards: Reward[], rewardsGroupId: string |
RANKS.ON_MAX_CAP_REACHED | capsMultipliers:on:capReached | Eventos de alcance del límite máximo | Directo | FIRE_FORGET | playerId: string, type: string, limit: number, period: string, reached: boolean |
RANKS.ON_LEVEL_BOOSTER_ACTIVATED | ranks:on:levelBoosterActivated | Eventos de activación del potenciador de nivel | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: ActiveMetadataBoosterType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
RANKS.ON_LEVEL_BOOSTER_END | ranks:on:levelBoosterEnd | Eventos de finalización del potenciador de nivel | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: ActiveMetadataBoosterType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
PLAYER.ON_GAMIFICATION_OPT_IN | ranks:on:optIn | Eventos de aceptación de la ludificación | Directo | FIRE_FORGET | playerId: string, status: string |
PLAYER.ON_GAMIFICATION_OPT_OUT | ranks:on:optOut | Eventos de exclusión de gamificación | Directo | FIRE_FORGET | playerId: string, status: string |
Estructura de datos de eventos de aumento de XP
interface XpUpEventData extends BaseEventData {
playerId: string;
level: {
_id: string;
levelNumber: number;
};
nextLevel?: {
_id: string;
levelNumber: number;
};
nextRank?: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
pointsUntilNextLevel: number;
pointsUntilNextRank: number;
rank: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
xpBalance: number;
rewardsGroupId: string;
}
Estructura de datos de eventos de aumento de nivel
interface LevelUpEventData extends BaseEventData {
playerId: string;
level: {
_id: string;
levelNumber: number;
};
nextLevel?: {
_id: string;
levelNumber: number;
};
nextRank?: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
pointsUntilNextLevel: number;
pointsUntilNextRank: number;
rank: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
xpBalance: number;
claimReward: true;
rewards: LoyaltyRewards[];
rewardsGroupId: string;
}
Estructura de datos de eventos de aumento de rango
interface RankUpEventData extends BaseEventData {
playerId: string;
level: {
_id: string;
levelNumber: number;
};
nextLevel?: {
_id: string;
levelNumber: number;
};
nextRank?: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
pointsUntilNextLevel: number;
pointsUntilNextRank: number;
rank: {
_id: string;
name: string;
imageUrl: string;
translations: {
language: string;
name: string;
description: string;
}[];
};
xpBalance: number;
claimReward: boolean;
rewards: LoyaltyRewards[];
rewardsGroupId: string;
}
Tipo de recompensas de lealtad
LoyaltyRewards es una forma de recompensa especializada utilizada por los eventos de Lealtad (Rangos/Niveles).
export type LoyaltyRewards = Omit<Reward, 'rewardType'> & { type: RewardTypeEnum };
Estructura de datos de eventos de límite máximo de rangos alcanzado
interface RanksMaxCapReachedEventData extends BaseEventData {
playerId: string;
type: string;
limit: number;
period: string;
reached: boolean;
}
Estructura de datos de eventos de potenciador activo
interface ActiveBoosterEventData extends BaseEventData {
_id: string;
playerId: string;
rewardId: string;
boosterRate: number;
timeStart: string;
timeEnd: string;
status: string;
type: string;
boosterType?: RewardTypeEnum;
countDown?: {
days: number;
hours: number;
minutes: number;
seconds: number;
totalSeconds: number;
};
metadata?: {
[key: string]: unknown;
};
isNew?: boolean;
isRecentBooster?: boolean;
createAt?: string;
}
Estructura de datos de eventos de exclusión de gamificación
interface GamificationOptEventData extends BaseEventData {
playerId: string;
status: string;
}
Eventos de moneda virtual
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
VIRTUAL_CURRENCY.ON_WALLET_UPDATE | virtualCurrency:on:walletUpdate | Eventos de actualización del saldo de la billetera | Directo | FIRE_FORGET | balance: number, playerId: string |
VIRTUAL_CURRENCY.ON_TOKEN_BOOSTER_ACTIVATED | virtualCurrency:on:tokenBoosterActivated | Eventos de activación del impulsor de tokens | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: ActiveMetadataBoosterType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
VIRTUAL_CURRENCY.ON_TOKEN_BOOSTER_END | virtualCurrency:on:tokenBoosterEnd | Eventos de finalización del impulsor de tokens | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: ActiveMetadataBoosterType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
Estructura de datos del evento de actualización de la billetera
interface WalletUpdateEventData extends BaseEventData {
balance: number;
playerId: string;
}
Eventos de misiones
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
MISSIONS.ON_MISSION_BOOSTER_ACTIVATED | missions:on:missionsBoosterActivated | Eventos de activación del impulsor de misiones | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: MissionBoosterMetadataType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
MISSIONS.ON_MISSION_BOOSTER_END | missions:on:missionsBoosterEnd | Eventos de finalización del impulsor de misiones | Directo | FIRE_FORGET | _id: string, playerId: string, rewardId: string, boosterRate: number, timeStart: string, timeEnd: string, status: string, type: string, boosterType?: RewardTypeEnum, countDown?: ActiveCountdownBoosterType, metadata?: MissionBoosterMetadataType, isNew?: boolean, isRecentBooster?: boolean, createAt?: string |
MISSIONS.ON_MISSION_OBJECTIVE_UPDATE | missions:on:objectiveUpdate | Actualización de objetivos de la misión | Directo | FIRE_FORGET | playerId: string, bundleId: string, bundleStateId: string, missionId: string, missionStateId: string, objectiveId: string, objectiveStateId: string, objectiveSummary: any, date: string |
MISSIONS.ON_MISSION_OBJECTIVE_COMPLETE | missions:on:objectiveComplete | Eventos de finalización de objetivos de la misión | Directo | playerId: string, bundleId: string, bundleStateId: string, missionId: string, missionStateId: string, objectiveId: string, objectiveStateId: string, objectiveSummary: any, date: string | playerId: cadena de texto, bundleId: cadena de texto, bundleStateId: cadena de texto, missionId: cadena de texto, missionStateId: cadena de texto, objectiveId: cadena de texto, objectiveStateId: cadena de texto, objectiveSummary: cualquiera, date: cadena de texto |
MISSIONS.ON_MISSION_UPDATE | missions:on:missionUpdate | Eventos de actualización de la misión | Directo | FIRE_FORGET | playerId: string, easterEggs: any, _id: string, name: string, description: string, tags: string[], objectives: any[], validityTime: any, status: string, rewardCategories: any[], rewardClaimStatus: string, missionBundleState: any, bundleInternalDetails: any, bundleExternalDetails: any, enabled: boolean, version: number, state: string, missionBundleId: string, bundleStateId: string, missionId: string, endDate: string, startDate: string |
MISSIONS.ON_MISSION_COMPLETE | missions:on:missionComplete | Eventos de finalización de la misión | Directo | FIRE_FORGET | playerId: string, easterEggs: any, _id: string, name: string, description: string, tags: string[], objectives: any[], validityTime: any, status: string, rewardCategories: any[], rewardClaimStatus: string, missionBundleState: any, bundleInternalDetails: any, bundleExternalDetails: any, enabled: boolean, version: number, state: string, missionBundleId: string, bundleStateId: string, missionId: string, endDate: string, startDate: string |
MISSIONS.ON_MISSION_BUNDLE_COMPLETE | missions:on:missionBundleComplete | Eventos de finalización del paquete de misiones | Directo | FIRE_FORGET | playerId: string, bundleId: string, status: string, bundleSummary: any, date: string |
MISSIONS.ON_MISSION_BUNDLE_ASSIGNED | misiones:activadas:asignarPaqueteMisión | Eventos de asignación del paquete de misiones | Directo | OLVIDAR_INCENDIO | playerId: cadena, missionBundleExternalDescription: any, date: cadena |
MISIONES.CUANDO_TERMINA_MISION | misiones:cuando:finalizaMision | Evento desencadenado cuando un operador finaliza manualmente una misión desde el panel de administración. | Directo | OLVIDAR_INCENDIO | bundleId: cadena, missionId: cadena |
MISIONES.CUANDO_TERMINA_PAQUETE_MISION | misiones:cuando:finalizaPaquete | Evento desencadenado cuando un operador finaliza manualmente un paquete desde el panel de administración. | Directo y Difusión | OLVIDAR_INCENDIO | bundleId: cadena |
MISIONES.CUANDO_RECLAMADA_RECOMPENSA | misiones:cuando:reclamadaRecompensa | Evento desencadenado cuando el jugador reclama una recompensa del paquete de misiones. | Directo | OLVIDAR_INCENDIO | playerId: cadena, rewardId: cadena, status: RewardStatusEnum, missBundleStateId: cadena, missionStateId: cadena, timestamp: número |
Tipo de Estructura de Metadatos del Potenciador de Misiones
interfaz MissionBoosterMetadataType {
missionId: cadena;
bundleId: cadena;
missionDescription: cadena;
missionBundleExternalDetails: {
language: cadena;
name: cadena;
description: cadena;
};
rewardId: cadena;
bundleStateId: cadena;
missionStateId: cadena;
[key: cadena]: unknown;
}
Estructura de Datos de Eventos de Objetivo de Misión
interfaz MissionObjectiveEventData extends BaseEventData {
playerId: cadena;
bundleId: cadena;
bundleStateId: cadena;
missionId: cadena;
missionStateId: cadena;
objectiveId: cadena;
objectiveStateId: cadena;
objectiveSummary: {
_id: cadena;
conditionValue: cadena;
conditionType: cadena;
translations: Pick<TranslationType, 'language' | 'name' | 'description'>[];
missionEventType: cadena;
value: número;
completed: booleano;
state: MissionProgressType;
};
date: cadena;
}
Estructura de Datos de Eventos de Actualización de Misión
interfaz MissionUpdateEventData extends BaseEventData {
_id: cadena;
name: cadena;
description: cadena;
tags: SlimTagType[];
objectives: ObjectiveMissionTypes[];
validityTime: ValidityTimeType | ValidityTimePeriodType | ValidityTimeSpecificDateType;
status: MissionStatusEnum;
rewardCategories: MissionRewardCategoryType[];
rewardClaimStatus?: MissionClaimStatusType;
missionBundleState?: MissionProgressType;
bundleInternalDetails: InternalDetailType;
bundleExternalDetails: TranslationType[];
enabled: booleano;
version: número;
state?: MissionProgressType;
missionBundleId?: cadena;
bundleStateId?: cadena;
missionId?: cadena;
endDate?: cadena;
startDate?: cadena;
originalMissionBundleId: cadena;
playerId: cadena;
repetitionCount?: número;
repetitionEnabled: booleano;
playerId: cadena;
easterEggs?: EasterEggsType[];
}
Estructura de Datos de Eventos de Paquete de Misión
interfaz MissionBundleEventData extends BaseEventData {
playerId: cadena;
bundleId: cadena;
status: cadena;
bundleSummary: {
_id: cadena;
missionBundleExternalDescription: TranslationType;
state: MissionProgressType;
};
date: cadena;
}
Estructura de Datos de Eventos de Asignación de Paquete de Misión
interfaz MissionBundleAssignEventData extends BaseEventData {
playerId: cadena;
missionBundleExternalDescription: TranslationType[];
date: cadena;
}
Estructura de Datos de Eventos de Finalización de Misión
interfaz MissionEndedEventData extends BaseEventData {
/**
* El identificador único del paquete en el paquete asignado debe ser originalId
*/
bundleId: cadena;
/**
* Identificador único de la misión en el estado del paquete del jugador.
*/
missionId: cadena;
}
Estructura de Datos de Eventos de Finalización de Paquete de Misión
interfaz MissionBundleEndedEventData extiende BaseEventData {
/**
* El identificador único del paquete en el paquete asignado debe ser originalId
*/
bundleId: string;
}
Estructura de datos del evento de reclamación de recompensa de misión
interfaz MissionRewardClaimedEventData extiende BaseEventData {
playerId: string;
rewardId: string;
status: RewardStatusEnum;
missBundleStateId: string;
missionStateId: string;
timestamp: number;
}
Ejemplo
// Suscribirse a eventos de reclamación de recompensa de misión
sdk.Events.subscribe(EVENTS.MISSIONS.ON_MISSION_REWARD_CLAIMED, (data) => {
console.log(`Recompensa ${data.rewardId} reclamada con éxito!`);
console.log(`Estado: ${data.status}`);
});
Eventos de torneos
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
TORNEOS.ANTES_DEL_COMIENZO_DEL_TORNEO | torneos:antes:comienza | Eventos a punto de comenzar el torneo | Directo | FIRE_FORGET | playerId: string, tournamentId?: string, tournamentName: string, tournamentDescription: string, tournamentType: TournamentTypeEnum, optIn: boolean, maxNumberOfBets: number, timePeriod?: TimePeriodType, externalDetails: ExternalDetailsEntity[], industry: TournamentIndustryTypeEnum, leaderboardRewards: LeaderboardReward[] |
TORNEOS.CUANDO_COMIENZA_EL_TORNEO | torneos:cuando:comienza | Eventos de inicio de torneo | Directo | FIRE_FORGET | playerId: string, tournamentId?: string, tournamentName: string, tournamentDescription: string, tournamentType: TournamentTypeEnum, optIn: boolean, maxNumberOfBets: number, timePeriod?: TimePeriodType, externalDetails: ExternalDetailsEntity[], industry: TournamentIndustryTypeEnum, leaderboardRewards: LeaderboardReward[] |
TORNEOS.CUANDO_TERMINA_EL_TORNEO | torneos:cuando:terminó | Eventos de fin de torneo | Directo | FIRE_FORGET | externalDetails: ExternalDetailsEntity[], industry: TournamentIndustryTypeEnum, maxNumberOfBets: number, optIn: boolean, timePeriod?: TimePeriodType, tournamentDescription: string, tournamentId: string, tournamentName: string, tournamentType: TournamentTypeEnum, leaderboardRewards: LeaderboardReward[] |
TORNEOS.CUANDO_SE_CANCELA_EL_TORNEO | torneos:cuando:cancelado | Torneo cancelado por un administrador | Difusión | FIRE_FORGET | tournamentId?: string, externalDetails: ExternalDetailsEntity[] |
TORNEOS.CUANDO_EL_JUGADOR_GANA_RECOMPENSAS | torneos:cuando:elJugadorGanóRecompensas | Eventos de recompensas ganadas por el jugador del torneo | Directo | FUEGO_OLVIDAR | industria: TournamentIndustryTypeEnum, maxNumberOfBets: number, optIn: boolean, timePeriod?: TimePeriodType, tournamentDescription: string, tournamentId: string, tournamentName: string, tournamentType: TournamentTypeEnum, leaderboard: { position: number }, leaderboardRewards: LeaderboardReward[], earnedRewards?: { [key: string]: Reward } |
TORNEOS.EN_ACTUALIZACIÓN_DE_CLASIFICACIÓN | torneos:en:clasificaciónActualizada | Eventos de actualización de la clasificación de torneos | Transmisión | FUEGO_OLVIDAR | torneo: Omit<TournamentEventData, 'tournamentId'>[], clasificación: Omit<PlayerLeaderboard & { rankId: string }, 'leaderboardRewards'>[], marca_temporal: number |
TORNEOS.EN_ACTUALIZACIÓN_DE_CLASIFICACIÓN_DE_JUGADOR_DE_TORNEO | torneos:en:clasificaciónDeJugadorActualizada | Eventos de actualización de la clasificación de jugadores | Directo | FUEGO_OLVIDAR | torneos: { tournamentId: string, position: number, score: number, spinsLeft: number, type: TournamentTypeEnum, round?: RoundInfo }[], marca_temporal: number |
TORNEOS.EN_SIN_GIROS_RESTANTES | torneos:en:sinGirosRestantes | Eventos sin giros restantes | Directo | FUEGO_OLVIDAR | playerId: string, torneo: { _id: string } & Omit<TournamentEventData, 'tournamentId'> |
TORNEOS.EN_CLASIFICACIÓN_LISTA | torneos:en:clasificaciónLista | Eventos de clasificación lista | Transmisión | FUEGO_OLVIDAR | tournamentId: string, detallesExternos: ({ elegibilidadDisplayName?: string } & TranslationType)[], recompensasDeClasificación: LeaderboardReward[], elegibilidad: TournamentEligibilityType |
Estructura de datos del evento de notificaciones de torneos
// Equivalente a Omit<TournamentEventData, 'player' | 'earnedRewards' | 'internalDetails' | 'rewardsGroupId' | 'leaderboard' | 'eligibility' | 'objectives' | 'status' | '_id'>
interface TournamentNotificationsEventData extends BaseEventData {
playerId: string;
tournamentId?: string;
tournamentName: string;
tournamentDescription: string;
tournamentType: TournamentTypeEnum;
optIn: boolean;
maxNumberOfBets: number;
timePeriod?: TimePeriodType;
detallesExternos: ExternalDetailsEntity[];
industria: TournamentIndustryTypeEnum;
recompensasDeClasificación: LeaderboardReward[];
}
Estructura de datos del evento de torneo finalizado
interface TournamentEndedEventData extends BaseEventData {
detallesExternos: ExternalDetailsEntity[];
industria: TournamentIndustryTypeEnum;
recompensasDeClasificación: LeaderboardReward[];
maxNumberOfBets: number;
optIn: boolean;
timePeriod?: TimePeriodType;
tournamentDescription: string;
tournamentId: string;
tournamentName: string;
tournamentType: TournamentTypeEnum;
}
Estructura de datos del evento de torneo cancelado
// Equivalente a Pick<TournamentEventData, 'tournamentId' | 'externalDetails'>
interface TournamentCanceledEventData extends BaseEventData {
/**
* El identificador único del torneo. Opcional porque en algunas notificaciones de torneo es opcional en el tipo base.
*/
tournamentId?: string;
/**
* Información pública localizada sobre el torneo visible para el jugador.
*/
detallesExternos: ExternalDetailsEntity[];
}
Ejemplo de suscripción
// Escuchar cancelaciones de torneos (difusión)
const subId = sdk.Events.subscribe('torneos:cuando:cancelado', (data, raw) => {
console.log('Torneo cancelado:', data.tournamentId);
// Puede usar externalDetails para representar una copia localizada en la interfaz de usuario
};
Estructura de datos del evento de un jugador de torneo que ganó
interface TournamentPlayerWonEventData extends BaseEventData {
earnedRewards?: { [key: string]: Reward };
externalDetails: ExternalDetailsEntity[];
industry: TournamentIndustryTypeEnum;
leaderboardRewards: LeaderboardReward[];
maxNumberOfBets: number;
optIn: boolean;
timePeriod?: TimePeriodType;
tournamentDescription: string;
tournamentId: string;
tournamentName: string;
tournamentType: TournamentTypeEnum;
leaderboard: {
position: number;
};
}
Estructura de datos del evento de torneos actualizados
interface TournamentsUpdatedEventData extends BaseEventData {
tournament: Omit<TournamentEventData, 'tournamentId'>[];
leaderboard: Omit<PlayerLeaderboard & { rankId: string }, 'leaderboardRewards'>[];
timestamp: number;
}
Estructura de datos del evento de la actualización del tablero de clasificación del jugador
interface PlayerLeaderboardUpdatedEventData extends BaseEventData {
tournaments: {
tournamentId: string;
position: number;
score: number;
spinsLeft: number;
type: TournamentTypeEnum;
/**
* Round only exists for tournaments of type TournamentTypeEnum.HIGHEST_WIN but can be undefined
* under certain conditions.
* 1- If type is TournamentTypeEnum.MOST_POINTS
* 2- If type is TournamentTypeEnum.HIGHEST_WIN, and the player does not have any winning rounds
*/
round?: RoundInfo;
}[];
timestamp: number;
}
Estructura de datos del evento de giros restantes vacíos
interface SpinsLeftEmptyEventData extends BaseEventData {
playerId: string;
tournament: { _id: string } & Omit<TournamentEventData, 'tournamentId'>;
}
Estructura del tablero de clasificación del torneo listo
type TournamentLeaderboardReady = {
tournamentId: string;
externalDetails: ({ elegibilityDisplayName?: string } & TranslationType)[];
leaderboardRewards: LeaderboardReward[];
eligibility: TournamentEligibilityType;
};
Eventos CRM
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades |
|---|---|---|---|---|---|
CRM.CUANDO_LLEGA_LA_NOTIFICACIÓN_EN_SITIO | messageGateway:cuando:enviarNotificaciónEnSitio | Eventos de notificación in situ | Directo | BEST_EFFORT | msg: { type: string, contentHtml: string, language: string }, playerId: string |
CRM.CUANDO_NOTIFICACIÓN_DE_BUZÓN_RICO | messageGateway:cuando:enviarNotificaciónDeBuzónRico | Notificar al jugador sobre un mensaje de Rich Inbox que ha llegado. | Directo | BEST_EFFORT | message: RichInboxMessage, playerId: string, timestamp: number |
Estructura de datos del evento de notificación in situ
interface OnSiteNotificationEventData extends BaseEventData {
msg: {
type: string;
contentHtml: string;
language: string;
};
playerId: string;
}
Estructura de datos del evento de notificación de Rich Inbox
interface RichInboxMessage {
id: string;
title: string;
content: string;
createdAt: Date;
}
interface RichInboxMessageEventData extends BaseEventData {
message: RichInboxMessage;
playerId: string;
timestamp: number;
}
Ejemplo
// Suscribir a eventos de notificación de buzón enriquecido
sdk.Events.subscribe(EVENTS.CRM.ON_RICH_INBOX_NOTIFICATION, (data) => {
console.log('Nuevo mensaje de buzón enriquecido recibido:');
console.log('Título:', data.message.title);
console.log('Contenido:', data.message.content);
});
Eventos del Procesador de Recompensas
| Constante | Nombre del evento | Descripción | Tipo | Tipo de garantía | Propiedades | |
|---|---|---|---|---|---|---|
REWARD_PROCESSOR.ON_MANUAL_REWARD_AWARDED | rewardProcessor:on:manualRewardAwarded | Recompensa manual otorgada al jugador desde el Panel de Administración | Directo | FIRE_FORGET | playerId: string, rewardType: RewardTypeEnum, earnedReward: Reward (by type), rewardId: string, `source: 'manual' | 'automatic', timestamp: number, groupId?: string` |
REWARD_PROCESSOR.ON_REWARD_CLAIMED_BY_ADMIN | rewardProcessor:on:claimRewardAdmin | Recompensa reclamada por un operador administrador | Directo | FIRE_FORGET | playerId: string, rewardType: RewardTypeEnum, rewardId: string, `source: 'manual' | 'automatic', timestamp: number, groupId?: string` |
REWARD_PROCESSOR.ON_REWARD_CANCELLED | rewardProcessor:on:rewardCancelled | Recompensa cancelada por un operador administrador | Directo | FIRE_FORGET | playerId: string, rewardType: RewardTypeEnum, rewardId: string, `source: 'manual' | 'automatic', timestamp: number, groupId?: string` |
REWARD_PROCESSOR.ON_BONUS_REWARD_GRANTED | rewardProcessor:on:bonusRewardGranted | Evento despachado cuando se otorga un bono y está vinculado a una recompensa | Directo | FIRE_FORGET | playerId: string, rewardId: string, rewardType: RewardTypeEnum.BONUS_OFFER, groupId: string, bonusOfferId: string, currency?: string |
Estructura de datos del evento de recompensa manual otorgada
// Discriminated union por tipo de recompensa
// Datos de eventos
interface ManualRewardAwardedEventData_Tokens {
playerId: string;
rewardType: RewardTypeEnum.TOKENS; // 'tokens'
earnedReward: TokensReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
interface ManualRewardAwardedEventData_BonusOffer {
playerId: string;
rewardType: RewardTypeEnum.BONUS_OFFER; // 'bonus_offer'
earnedReward: BonusOfferReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
interface ManualRewardAwardedEventData_LevelBooster {
playerId: string;
rewardType: RewardTypeEnum.LEVEL_BOOSTER; // 'level_booster'
earnedReward: LevelBoosterReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
interface ManualRewardAwardedEventData_MissionBooster {
playerId: string;
rewardType: RewardTypeEnum.MISSION_BOOSTER; // 'mission_booster'
earnedReward: MissionBoosterReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
interface ManualRewardAwardedEventData_TokenBooster {
playerId: string;
rewardType: RewardTypeEnum.TOKEN_BOOSTER; // 'token_booster'
earnedReward: TokenBoosterReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
interface ManualRewardAwardedEventData_External {
playerId: string;
rewardType: RewardTypeEnum.EXTERNAL; // 'external'
earnedReward: ExternalReward;
rewardId: string;
source: 'manual' | 'automatic';
timestamp: number;
groupId?: string;
}
// Unión utilizada por el evento
// type ManualRewardAwardedEventData =
// | ManualRewardAwardedEventData_Tokens
// | ManualRewardAwardedEventData_BonusOffer
// | ManualRewardAwardedEventData_LevelBooster
// | ManualRewardAwardedEventData_MissionBooster
// | ManualRewardAwardedEventData_TokenBooster
// | ManualRewardAwardedEventData_External;
Estructura de datos de eventos de recompensa de bonificación
interface BonusRewardGranted extends BaseEventData {
playerId: string;
rewardId: string;
rewardType: RewardTypeEnum.BONUS_OFFER;
groupId: string;
/**
* Identificador de oferta de bonificación, devuelto en el evento de bonificación otorgada
* propagado por el operador cuando se confirma la bonificación otorgada.
*/
bonusOfferId: string;
currency?: string;
}
Enumeración de tipo de recompensa
enum RewardTypeEnum {
TOKENS = 'tokens',
BONUS_OFFER = 'bonus_offer',
LEVEL_BOOSTER = 'level_booster',
MISSION_BOOSTER = 'mission_booster',
TOKEN_BOOSTER = 'token_booster',
EXTERNAL = 'external',
MINI_GAME = 'mini_game',
}
Estructuras de recompensa ganada
// Campos base compartidos para recompensas de refuerzo
interface BaseReward {
type: RewardTypeEnum;
translations?: { language: string; description: string }[];
level: number;
activation: string;
boosterRate: number;
expirationValidityTime?: { timeType: string };
timeFrame: string; // Duración ISO8601
termsAndConditions?: { language: string; description: string };
}
interface TokensReward extends Pick<BaseReward, 'type'> {
type: RewardTypeEnum.TOKENS;
amount: number;
}
interface BonusOfferReward extends Pick<BaseReward, 'type'> {
type: RewardTypeEnum.BONUS_OFFER;
bonusByCurrency: {
[currency: string]: {
name: string;
bonusOfferId: string;
};
};
}
interface LevelBoosterReward extends BaseReward {
type: RewardTypeEnum.LEVEL_BOOSTER;
}
interface MissionBoosterReward extends BaseReward {
type: RewardTypeEnum.MISSION_BOOSTER;
}
interface TokenBoosterReward extends BaseReward {
type: RewardTypeEnum.TOKEN_BOOSTER;
}
interface ExternalReward extends Pick<BaseReward, 'type'> {
type: RewardTypeEnum.EXTERNAL;
imageUrl: string;
description: string;
}
Ejemplo
// Suscribirse a eventos de otorgamiento de recompensa manual
const subId = rtmEvents.subscribe('rewardProcessor:on:manualRewardAwarded', (data, raw) => {
// Campos comunes
console.log(data.playerId, data.rewardType, data.rewardId, data.source, data.timestamp, data.groupId);
// Filtrar por tipo de recompensa
switch (data.rewardType) {
case 'tokens':
console.log('Tokens otorgados:', data.earnedReward.amount);
break;
case 'bonus_offer':
console.log('Monedas de oferta de bonificación:', Object.keys(data.earnedReward.bonusByCurrency));
break;
case 'level_booster':
case 'mission_booster':
case 'token_booster':
console.log('Tasa de refuerzo:', data.earnedReward.boosterRate);
break;
case 'external':
console.log('Descripción de recompensa externa:', data.earnedReward.description);
break;
}
});
Interfaces relacionadas
SubscriptionOptions
Interfaz para configurar suscripciones a eventos.
interface SubscriptionOptions {
once?: boolean;
timeout?: number;
filter?: (data: any) => boolean;
maxRetries?: number;
autoAck?: boolean;
}
| Propiedad | Tipo | Descripción |
|---|---|---|
once | boolean (opcional) | Si es true, la suscripción se eliminará automáticamente después de recibir el primer evento |
timeout | número (opcional) | Tiempo en milisegundos después del cual se eliminará automáticamente la suscripción si no se recibe ningún evento |
filtro | Función (opcional) | Una función que recibe los datos del evento y devuelve un valor booleano que indica si el evento debe procesarse |
maxRetries | número (opcional) | Número máximo de reintentos para el procesamiento de eventos fallidos |
autoAck | booleano (opcional) | Si es true, los eventos se reconocerán automáticamente. El valor predeterminado es false |
SDKEventListener
Definición de tipo para las devoluciones de llamada del escuchador de eventos.
type SDKEventListener<T extends keyof EventTypeMap> = (
data: EventTypeMap[T],
internalRawEvent: InternalRawEvent<T>
) => void;
| Parámetro | Tipo | Descripción |
|---|---|---|
data | EventTypeMap[T] | Los datos del evento específicos para el tipo de evento |
internalRawEvent | InternalRawEvent<T> | Los datos de evento sin procesar recibidos del servidor |
InternalRawEvent
Interfaz que representa los datos de evento sin procesar recibidos del servidor.
interface InternalRawEvent<T extends keyof EventTypeMap> {
id: string;
event: T;
data: EventTypeMap[T];
timestamp: number;
guaranteeType: MessagingServiceGuaranteeType;
}
| Propiedad | Tipo | Descripción |
|---|---|---|
id | string | El identificador único del evento |
event | T | El nombre del evento |
data | EventTypeMap[T] | Los datos del evento |
timestamp | number | La marca de tiempo cuando se generó el evento |
garantíaTipo | TipoGarantíaServicioMensajería | El tipo de garantía del evento |
TipoGarantíaServicioMensajería
Un enumerado que define diferentes niveles de garantía para la entrega de mensajes.
enum TipoGarantíaServicioMensajería {
FIRE_FORGET = 'FIRE_FORGET',
BEST_EFFORT = 'BEST_EFFORT',
RELIABLE_DELIVERY = 'RELIABLE_DELIVERY',
RELIABLE_RECEIPT = 'RELIABLE_RECEIPT',
}
| Tipo de garantía | Descripción |
|---|---|
FIRE_FORGET | El mensaje se entrega al jugador solo si está conectado. Si está desconectado, el mensaje se descarta. |
BEST_EFFORT | El mensaje se entrega si está conectado. Si está desconectado, el mensaje se almacena y se entrega en la siguiente conexión. |
RELIABLE_DELIVERY | Igual que BEST_EFFORT, pero espera la notificación de ACK antes de marcar como entregado. |
RELIABLE_RECEIPT | Igual que BEST_EFFORT, pero el microservicio de origen se notifica cuando se entrega el mensaje. |
EmitterTypeMap
Un mapeo de los nombres de eventos de emisor a sus tipos de datos correspondientes.
interface EmitterTypeMap {
'send:ack': AckMessageEmitter;
'send:analytics:event': AnalyticsTrackingEventEmitter;
}
| Nombre del evento | Tipo de datos | Descripción |
|---|---|---|
send:ack | AckMessageEmitter | Emisor de mensajes de acuse de recibo para confirmar la recepción de eventos |
send:analytics:event | AnalyticsTrackingEventEmitter | Emisor de eventos de seguimiento de análisis |
AckMessageEmitter
Interfaz para mensajes de acuse de recibo.
interface AckMessageEmitter {
messageId: string;
}
| Propiedad | Tipo | Descripción |
|---|---|---|
messageId | string | El ID del mensaje que se está acusando de recibo |
AnalyticsTrackingEventEmitter
Interfaz para eventos de seguimiento de análisis.
interface AnalyticsTrackingEventEmitter {
properties: Record<string, any>;
}
| Propiedad | Tipo | Descripción |
|---|---|---|
eventName | string | El nombre del evento de análisis |
properties | Record<string, any> | Propiedades adicionales para el evento de análisis |