Funciones
Las funciones son código JavaScript que se ejecuta sobre cada evento en tránsito, entre su aplicación y los destinos. Úselas para filtrar eventos no deseados, transformar estructuras de datos o enriquecer eventos con datos externos.
Qué pueden hacer las funciones
| Capacidad | Ejemplo |
|---|---|
| Filtrar | Eliminar tráfico de bots, eventos de prueba o usuarios internos |
| Transformar | Renombrar campos, cambiar la estructura de eventos, normalizar datos |
| Enriquecer | Agregar geolocalización, datos de empresa o consultas a APIs de terceros |
| Enrutar | Enviar distintos eventos a diferentes tablas del almacén de datos |
Cómo escribir una función
Las funciones son código JavaScript que recibe un evento y devuelve un evento modificado (o "drop" para descartarlo).
Transformación básica
// Rename event properties to match your warehouse schemafunction transform(event, ctx) { if (event.type === 'track') { event.properties.source = event.properties.utm_source; delete event.properties.utm_source; } return event;}Filtrar eventos
// Drop events from internal usersfunction transform(event, ctx) { const internalDomains = ['graph8.com', 'yourcompany.com']; const email = event.traits?.email || event.properties?.email || '';
if (internalDomains.some(d => email.endsWith(`@${d}`))) { return 'drop'; // magic string — event is discarded } return event;}Enriquecer con una API externa
// Add company data from a third-party APIasync function transform(event, ctx) { const email = event.traits?.email; if (!email) return event;
const domain = email.split('@')[1]; const resp = await ctx.fetch(`https://api.example.com/company/${domain}`);
if (resp.ok) { const company = await resp.json(); event.traits.company_name = company.name; event.traits.company_size = company.employee_count; event.traits.industry = company.industry; }
return event;}Eliminar PII
// Remove sensitive fields before sending to warehousefunction transform(event, ctx) { delete event.traits?.phone; delete event.traits?.address; delete event.properties?.credit_card;
// Hash email for analytics (keep original for CRM) if (event.traits?.email) { event.traits.email_hash = ctx.crypto.sha256(event.traits.email); }
return event;}Enrutar a tablas personalizadas
// Send different events to different warehouse tablesfunction transform(event, ctx) { if (event.event === 'purchase') { event.JITSU_TABLE_NAME = 'purchases'; } else if (event.event === 'page') { event.JITSU_TABLE_NAME = 'pageviews'; } return event;}APIs disponibles
Las funciones se ejecutan en un entorno aislado con las siguientes APIs:
| API | Uso | Descripción |
|---|---|---|
ctx.fetch(url, options) | Solicitudes HTTP | Llamar a APIs externas (enriquecimiento, validación, webhooks) |
ctx.store | Almacenamiento persistente | Almacén clave-valor que persiste entre llamadas a funciones |
ctx.log | Registro | Escribir en el registro de Eventos en Vivo para depuración |
ctx.geo | Geolocalización | Datos de ubicación basados en IP (ciudad, país, región) |
ctx.ua | Agente de usuario | Información procesada del navegador y del dispositivo |
ctx.headers | Encabezados HTTP | Encabezados de la solicitud original |
ctx.getWarehouse | Consultas al almacén | Consultar su almacén de datos desde dentro de una función |
ctx.source | Metadatos de origen | Información sobre el flujo de origen |
ctx.destination | Metadatos de destino | Detalles del destino objetivo |
Administración de funciones
- Vaya a Connections > Functions en su panel de graph8
- Haga clic en + Create Function
- Escriba su JavaScript en el editor de código
- Pruébela con eventos de muestra usando el depurador integrado
- Vincúlela a un enlace flujo-destino
Las funciones incluyen un editor con resaltado de sintaxis y un depurador integrado que permite probarlas con cargas útiles de eventos de muestra.
Valores de retorno
| Retorno | Qué ocurre |
|---|---|
event (modificado) | El evento modificado se envía al destino |
| Nuevo objeto | Reemplaza por completo al evento original |
"drop" | El evento se descarta (no se envía a ningún destino) |
| Arreglo de objetos | Un evento se convierte en varios eventos |
| Nada | El evento original se envía sin cambios |