Skip to content

Instantly share code, notes, and snippets.

@mmoreram
Last active May 19, 2026 14:51
Show Gist options
  • Select an option

  • Save mmoreram/b1c31ebeb71ed28b665097c8d874d22b to your computer and use it in GitHub Desktop.

Select an option

Save mmoreram/b1c31ebeb71ed28b665097c8d874d22b to your computer and use it in GitHub Desktop.
Apisearch - Popular products by query

Documentación del Evento: apisearch_item_was_clicked

Este evento se dispara a nivel de ventana (window) mediante postMessage cada vez que un usuario hace clic en un elemento de los resultados de búsqueda de APIsearch.

A continuación se detalla la estructura del evento y cómo suscribirse a él desde cualquier parte de la aplicación.


Estructura del Mensaje (payload)

Cuando te suscribas al evento, recibirás un objeto data con las siguientes propiedades:

Propiedad Tipo Descripción
name string El nombre del evento. Siempre será "apisearch_item_was_clicked".
app_id string Identificador único de la aplicación en APIsearch.
index_id string Identificador del índice de búsqueda utilizado.
item_id string/number ID del artículo o producto sobre el que se hizo clic.
site string El sitio o canal actual desde donde se realiza la acción.
device string El tipo de dispositivo del usuario (ej. desktop, mobile).
userType string Tipo de usuario (ej. guest, logged-in).
query array La búsqueda que originó el resultado, formateada como array.
result array Información o datos del resultado del clic.
position number La posición con base 1 (o 0) del elemento dentro del listado de resultados.

Cómo suscribirse al evento (Ejemplo de código)

Para escuchar este evento desde otro script o componente, debes añadir un listener al evento message de la ventana global.

⚠️ Nota de seguridad: Es una buena práctica validar siempre el origen (origin) o el nombre del evento (name) antes de procesar los datos para evitar reaccionar a mensajes no deseados de otras herramientas de terceros.

// 1. Definir la función que manejará el evento
function handleApiSearchClick(event) {
    // Validar que el mensaje contenga datos y que sea el evento que buscamos
    if (event.data && event.data.name === "apisearch_item_was_clicked") {
        const payload = event.data;
        
        console.log("¡Evento APIsearch detectado!");
        console.log("Producto clicado ID:", payload.item_id);
        console.log("Posición en el ranking:", payload.position);
        
        // Aquí puedes añadir tu lógica de analítica, tracking, etc.
        // Ejemplo: MyAnalytics.track('Search Click', payload);
    }
}

// 2. Escuchar los mensajes de la ventana
window.addEventListener("message", handleApiSearchClick);

// 3. (Opcional) Limpiar el listener cuando ya no sea necesario (ej. desmontar componente)
// window.removeEventListener("message", handleApiSearchClick);

GET Top Products by Query

Devuelve la lista ordenada de IDs de producto más clicados para una query de búsqueda concreta (o consulta vacía) en un mes determinado o período dinámico.

Endpoint

GET [https://internal.apisearch.cloud/v1/](https://internal.apisearch.cloud/v1/){app_id}/indices/{index_id}/{month}/products-by-query/{query_text}

Path Parameters

Parámetro Tipo Descripción
app_id string Identificador de la aplicación.
index_id string Identificador del índice.
month string Mes en formato YYYYMM (ej. 202605) que hace referencia al funnel mensual agregado. También acepta los magic months para períodos dinámicos: 100015 (últimos 15 días) o 100030 (últimos 30 días).
query_text string Texto de la búsqueda. Si se envía vacío, devuelve los productos más clicados en la página inicial (consulta vacía). Si no existe en el funnel, se devuelve un array vacío.

Authentication

Requiere token de autenticación con permisos de métricas (metrics / full_metrics).

Response

200 OK — Array JSON con los IDs de producto ordenados por número de clics descendente. Devuelve [] si el mes/período no tiene datos o si la query no aparece en el funnel.

Ejemplos

Request (Búsqueda por texto y mes específico)

GET [https://internal.apisearch.cloud/v1/my-app/indices/my-index/202605/products-by-query/pantalones](https://internal.apisearch.cloud/v1/my-app/indices/my-index/202605/products-by-query/pantalones)
Authorization: Bearer <token>

Request (Consulta vacía en página inicial y período dinámico de 30 días)

GET [https://internal.apisearch.cloud/v1/my-app/indices/my-index/100030/products-by-query/](https://internal.apisearch.cloud/v1/my-app/indices/my-index/100030/products-by-query/)
Authorization: Bearer <token>

Response — query con resultados

[
    "a3f7c821-4e2b-4d10-9f63-bc5e17a0d348",
    "7d1b9f02-c3a4-4e8f-b2d1-06e4a7c95f11",
    "e29d4c67-8b3f-4a21-97e0-3f1d82b60c54",
    "51a8e3d4-f0c2-4b7a-8e6d-9a2c4f103b77"
]

Response — query sin datos o período sin funnel

[]

Notas

  • El orden del array refleja la popularidad de clic: el primer elemento es el producto más clicado para esa query en el mes o período indicado.
  • Si query_text está vacío, el endpoint asume una consulta global sin términos y devuelve el comportamiento de clics de la página inicial.
  • Si la query específica no existe en el funnel del mes o período, la respuesta es siempre [].
  • Para entornos multisite, existe una variante del endpoint que incluye el parámetro site en la URL: https://internal.apisearch.cloud/v1/{app_id}/indices/{index_id}/{site}/{month}/products-by-query/{query_text}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment