Pular para o conteúdo principal

Módulo de tienda de recompensas

El módulo de la tienda de recompensas proporciona funcionalidad para interactuar con el sistema de la tienda de recompensas de Gamanza Engage. Permite a los desarrolladores recuperar productos, realizar pedidos, administrar suscripciones de disponibilidad de productos y recuperar información de pedidos.

Acceder al módulo

El módulo de la tienda de recompensas se puede acceder a través del SDK del cliente web de Gamanza Engage:

const sdk = GamanzaEngageWebClientSDK.getInstance();
const rewardShop = sdk.RewardShop;

Métodos

getAllProducts

Devuelve una lista paginada de productos disponibles en la tienda de recompensas en función de las preferencias del jugador autenticado actual.

Firma:

getAllProducts(request: ProductFiltersRequest): Promise<PaginationResponse<ProductType[]>>

Parámetros

NombreTipoDescripción
requestProductFiltersRequestParámetros de filtrado y paginación para la solicitud de productos

Devuelve

TipoDescripción
Promise<PaginationResponse<ProductType[]>>Una promesa que se resuelve en una respuesta paginada que contiene una matriz de productos

Ejemplo

// Recuperar la primera página de productos activos BONUS para la lista de la barra lateral
const response = await sdk.RewardShop.getAllProducts({
page: 1,
limit: 12,
listType: ProductListTypeEnum.SIDEBAR_SHOP,
rewardType: [RewardShopTypeEnum.BONUS]
});

// PaginationResponse<ProductType[]>
console.log(response.page, response.totalPages);
response.docs.forEach((product) => {
console.log(product._id, product.name, product.status);
// productEligibility usa EligibilityMap; comprueba el tipo para impulsar las reglas de la IU
if (product.productEligibility.type === EligibilityType.QUICK_FILTERS) {
// Ejemplo: leer mensajes de error de visibilidad por idioma
const visibility = product.productEligibility.productVisibility;
if (visibility.type === VisibilityType.QUICK_FILTERS) {
visibility.errorMessages.forEach((m) => console.log(m.language, m.title));
}
}
});

getProductById

Obtiene los detalles de un producto específico por ID.

Firma:

getProductById(id: string): Promise<ProductType | null>

Parámetros

NombreTipoDescripción
idstringEl identificador único del producto

Devuelve

TipoDescripción
Promise<ProductType | null>Una promesa que se resuelve en los detalles del producto o nulo si no se encuentra

Ejemplo

const producto = await sdk.RewardShop.getProductById("product-id-123");
if (!producto) {
console.log("Producto no encontrado o no disponible");
} else {
console.log(producto.name, producto.reward);
// Ejemplo: revisar remainingItems/stock y elegibilidad
const remaining = producto.remainingItems ?? producto.stock ?? 0;
const eligible =
producto.productEligibility.type === EligibilityType.ALL_PLAYERS ||
(producto.productEligibility.type === EligibilityType.QUICK_FILTERS &&
producto.productEligibility.isPlayerEligibility);
console.log(`Quedan: ${remaining} | Elegible: ${eligible}`);
}

suscribirse a la disponibilidad del producto

Permite que un jugador se suscriba a la lista de canales para ser notificado cuando un producto que está agotado vuelve a estar disponible.

Firma:

suscribirse a la disponibilidad del producto(idProducto: string): Promise<SimpleResponse<null>>

Parámetros

NombreTipoDescripción
idProductostringEl identificador único del producto al que suscribirse

Devuelve

TipoDescripción
Promise<SimpleResponse<null>>Una promesa que se resuelve en una respuesta simple que indica éxito o fracaso

Ejemplo

const response = await sdk.RewardShop.suscribirse a la disponibilidad del producto("product-id-123");
if (response.ok) {
console.log("Suscripción a la disponibilidad del producto exitosa");
}

¿El jugador está suscrito a la disponibilidad del producto

Valida si el jugador ya está suscrito para recibir notificaciones sobre el ID de producto de referencia.

Firma:

¿El jugador está suscrito a la disponibilidad del producto?(idProducto: string): Promise<SubscribedToProductAvailabilityResponse | null>

Parámetros

NombreTipoDescripción
idProductostringEl identificador único del producto

Devuelve

TipoDescripción
Promise<SubscribedToProductAvailabilityResponse | null>Una promesa que se resuelve en información de suscripción o nulo si no está suscrito

Ejemplo

const subscription = await sdk.RewardShop.¿El jugador está suscrito a la disponibilidad del producto?("product-id-123");
if (subscription) {
console.log(`El jugador está suscrito desde ${subscription.createdAt}`);
}

el jugador realiza un pedido en la tienda de recompensas

Permite al jugador autenticado actual comprar un producto de la tienda de recompensas. Esta función permite a los jugadores realizar un pedido en la tienda de recompensas.

Firma:

el jugador realiza un pedido en la tienda de recompensas(pedidoProducto: ProductOrderRequest): Promise<SimpleResponse<OrderProductType>>

Parámetros

NombreTipoDescripción
pedido de productoSolicitud de orden de compraLos detalles del pedido, incluidos el ID del producto, la cantidad, la información de envío, etc.

Devoluciones

TipoDescripción
Promise<SimpleResponse<OrderProductType>>Una promesa que se resuelve en una respuesta simple que contiene el pedido creado o un error

Ejemplo

const order = await sdk.RewardShop.playerPlaceRewardShopOrder({
recipientName: "John Doe",
playerLanguage: "en",
shippingAddress: {
streetNumber: "123",
street: "Main St",
city: "New York",
zipCode: "10001",
country: "USA",
deliverInCasino: false
},
dateOfPurchase: new Date().toISOString(),
itemId: "product-id-123",
quantity: 1,
comment: {
comment: "Please deliver ASAP",
createdBy: "player"
},
activation: true
});

getOrderFormCustomFields

Gamanza Engage permite crear campos personalizados para el formulario de compra de la Tienda de Recompensas. Esta función devuelve la lista de campos personalizados disponibles creados en la interfaz de administración.

Firma:

getOrderFormCustomFields(): Promise<RewardShopOrderFormCustomField[]>

Devoluciones

TipoDescripción
Promise<RewardShopOrderFormCustomField[]>Una promesa que se resuelve en una matriz de campos personalizados para el formulario de pedido

Ejemplo

const customFields = await sdk.RewardShop.getOrderFormCustomFields();

getPlayerOrders

Devuelve una lista paginada de pedidos realizados por el jugador autenticado actual.

Firma:

getPlayerOrders(request: PlayerOrderFiltersType): Promise<PaginationResponse<OrderProductType[]>>

Parámetros

NombreTipoDescripción
solicitudPlayerOrderFiltersTypeParámetros de filtrado y paginación para la solicitud de pedidos

Devoluciones

TipoDescripción
Promise<PaginationResponse<OrderProductType[]>>Una promesa que se resuelve en una respuesta paginada que contiene una matriz de pedidos

Ejemplo

const orders = await sdk.RewardShop.getPlayerOrders({
page: 1,
limit: 10,
status: "completed"
});

Interfaces relacionadas

ProductFiltersRequest

Extiende la interfaz PaginationRequest con opciones de filtrado adicionales para los productos.

interface ProductFiltersRequest extends Omit<PaginationRequest, 'sortBy'> {
rewardType?: RewardShopTypeEnum[];
listType?: ProductListTypeEnum;
}

PlayerOrderFiltersType

Extiende la interfaz PaginationRequest con opciones de filtrado adicionales para los pedidos de los jugadores.

interfaz PlayerOrderFiltersType extiende PaginationRequest {
status?: string;
rewardType?: string;
sortBy?: string;
}

TipoDeProducto

Representa un producto en la Tienda de Recompensas.

interfaz TipoDeProducto {
_id: string;
name: string;
label?: string;
description: string;
tags: NameIdType[];
translations: TipoDeTranslacionDeProducto[];
imagenMóvil: string;
imagenDePc: string;
images?: TipoDePrevisualización[];
recompensa: Recompensa;
stock?: number;
itemsRestantes?: number;
ranks?: Omitir<Rango, 'imageUrl'>[];
/**
* Este paso determina qué jugadores pueden comprar el Producto de la Tienda de Recompensas.
* Habrá 2 opciones disponibles.
*/
eligibilidadDeProducto: ElegibilidadMap[keyof ElegibilidadMap];
status: TipoDeStatusGeneral;
brands: unknown[];
creadoPor?: string;
creadoEn?: string;
actualizadoEn?: string;
}

TipoDeTranslacionDeProducto

Representa el contenido localizado de un producto.

type TipoDeTranslacionDeProducto = TipoDeTranslacion & {
descripcionLarga?: string;
};

OpcionesDeVisibilidad

Configuración utilizada cuando el tipo de visibilidad es QUICK_FILTERS.

interfaz OpcionesDeVisibilidad {
type: TipoDeVisibilidad;
mensajesDeError: (Pick<TipoDeTranslacion, 'language' | 'description'> & { title: string; })[];
paises: {
type: TipoDeReglaDeFiltro;
filters: { id: string; name: string; }[]; // Código ISO del país y nombre legible por humanos
};
ranks: {
type: TipoDeReglaDeFiltro;
filters: (Pick<Rango, 'name'> & { id: string })[];
};
}

MapaDeVisibilidad

Determina qué jugadores pueden ver un producto en la tienda.

interfaz MapaDeVisibilidad {
[TipoDeVisibilidad.ALL_PLAYERS]: Pick<OpcionesDeVisibilidad, 'errorMessages'> & {
type: TipoDeVisibilidad.ALL_PLAYERS;
};
[TipoDeVisibilidad.QUICK_FILTERS]: OpcionesDeVisibilidad & { type: TipoDeVisibilidad.QUICK_FILTERS };
[TipoDeVisibilidad.ONLY_ELIGIBLE]: Pick<OpcionesDeVisibilidad, 'errorMessages'> & {
type: TipoDeVisibilidad.ONLY_ELIGIBLE;
};
}

MapaDeElegibilidad

Define qué jugadores pueden comprar el producto.

interfaz MapaDeElegibilidad {
[TipoDeElegibilidad.ALL_PLAYERS]: {
type: TipoDeElegibilidad.ALL_PLAYERS;
isPlayerEligibility: boolean;
};
[TipoDeElegibilidad.QUICK_FILTERS]: {
type: TipoDeElegibilidad.QUICK_FILTERS;
isPlayerEligibility: boolean;
países: {
type: TipoDeReglaDeFiltro;
filters: { id: string; name: string; }[];
};
ranks: {
type: TipoDeReglaDeFiltro;
filters: (Pick<Rango, 'name'> & { id: string })[];
};
visibilidadDeProducto: MapaDeVisibilidad[keyof MapaDeVisibilidad];
};
}

SolicitudDeOrdenDeProducto

Representa la solicitud para colocar una orden de un producto.

interfaz SolicitudDeOrdenDeProducto {
nombreDelDestinatario: string;
idiomaDeljugador: string;
direccionDeEnvío: TipoDeAgregarDeDireccionDeEnvioDeProducto;
fechaDeCompra: string;
idDelElemento: string;
cantidad: number;
comentario: {
comentario: string;
creadoPor: string;
};
activación: boolean;
teléfonoDelJugador?: string;
emailDelJugador?: string;
camposPersonalizados?: Record<string, string | number>;
}

TipoDeOrdenDeProducto

Representa una orden realizada por un jugador.

interfaz TipoDeOrdenDeProducto extiende Omitir<SolicitudDeOrdenDeProducto, 'activación' | 'comentario'> {
idDelJugador: string;
_id: string;
activación?: boolean;
status: string;
comentarios: [
{
comentario: string;
creadoPor: string;
status?: string;
},
];
tipoDeRecompensa: TipoDeEnumDetiendaDeRecompensas;
fechaDeCompra: string;
idiomaDeljugador: string;
precio: {
precioEnDivisaVirtual: number;
precioEnDineroFísico: number;
moneda: string;
};
cantidad: number;
nombreDelDestinatario: string;
direcciónDeEnvío: TipoDeAgregarDeDireccionDeEnvioDeProducto;
itemsRestantesDeBalance: number;
item: TipoDeProducto;
balanceDespués: number;
balanceAnterior: number;
rangoDeljugador: Pick<Rango, '_id' | 'name'>;
}

TipoDeAgregarDeDireccionDeEnvioDeProducto

Representa una dirección de envío para una orden de producto.

type TipoDeAgregarDeDireccionDeEnvioDeProducto = {
númeroDeCalle: string;
calle: string;
ciudad: string;
codigoPostal: string;
país: string;
entregarEnCasino: boolean;
nombreONumeroDeCasa?: string;
};

CampoPersonalizadoDeFormularioDeOrdenDetiendaDeRecompensas

Representa un campo personalizado para el formulario de orden de la Tienda de Recompensas.

interfaz CampoPersonalizadoDeFormularioDeOrdenDetiendaDeRecompensas {
type: string | number;
required: boolean;
key: string;
nombreDelCampo: string;
distribuciónDelCampo: 'oneColumn' | 'twoColumns';
display: {
nombreDelCampoDeVisualización: string;
textoDeAyuda: string;
language: string;
}[];
}

RespuestaDeHaberSuscritosADisponibilidadDeProducto

Representa la respuesta al comprobar si un jugador está suscrito a la disponibilidad del producto.

interface SubscribedToProductAvailabilityResponse {
createdAt: string;
itemId: string;
playerId: string;
_id: string;
}

PaginationResponse

Una interfaz genérica para respuestas paginadas.

interface PaginationResponse<T> {
docs: T;
hasNextPage: boolean;
hasPrevPage: boolean;
limit: number;
nextPage: number;
page: number;
pagingCounter: number;
prevPage: number | null;
totalDocs: number;
totalPages: number;
}

SimpleResponse

Una interfaz genérica para respuestas simples con estado de éxito/error.

interface SimpleResponse<T> {
ok: boolean;
error?: ErrorResponse;
data: T | null;
}

RewardShopTypeEnum

Enum que define los tipos de recompensas disponibles en la Tienda de Recompensas.

enum RewardShopTypeEnum {
BONUS = 'bonus',
BOOSTER = 'booster',
EXTERNAL = 'external_product',
XP = 'xp',
PRIZESHARK = 'prizeshark',
}

ProductListTypeEnum

Enum que define los tipos de listas de productos.

enum ProductListTypeEnum {
SIDEBAR_SHOP = 'SIDEBAR_SHOP',
}