UNPKG

@vizertech/nextjs-capi

Version:

NextJS 13 Wrapper for fb pixel and capi for graph v17.0 API

60 lines (47 loc) 2.02 kB
import type { NextApiRequest, NextApiResponse } from 'next'; import { getClientIpAddress, getClientFbc, getClientFbq, getClientUserAgent } from '../lib/request'; import { sendEvent } from './server-events'; import { FacebookEvent } from 'src/types'; async function handleEvent(req: NextApiRequest, res: NextApiResponse): Promise<any> { if(req.method !== 'POST') { return res.status(400).json({ message: 'Esta ruta debe ser post solamente' }); } if(!process.env.FB_ACCESS_TOKEN) { throw new Error('No se encuentra el token de acceso de facebook Graph API'); } if(!process.env.NEXT_PUBLIC_PIXEL_ID) { throw new Error('No se encuentra el id del pixel de facebook'); } if(!process.env.NEXT_PUBLIC_GRAPH_VERSION) { throw new Error('No se ha definido una version de la API Graph de Facebook'); } if(process.env.NEXT_PUBLIC_GRAPH_VERSION !== 'v16.0' && process.env.NEXT_PUBLIC_GRAPH_VERSION !== 'v17.0') { throw new Error('La versión de graph api definida no existe o ya fue deprecada, utilice la version 16 o 17 para quitar este error'); } let body = req.body as FacebookEvent; if(!body.event_name) { return res.status(400).json({ error: 'El nombre del evento es obligatorio' }); } if(body.user_data) body.user_data.fbp = getClientFbq(req); if(body.user_data) body.user_data.fbc = getClientFbc(req); if(body.user_data) body.user_data.client_ip_address = getClientIpAddress(req); if(body.user_data) body.user_data.client_user_agent = getClientUserAgent(req); const eventResponse = await sendEvent(body); const success = eventResponse.events_received === 1 ?? false; if(process.env.NEXT_PUBLIC_DEBUG === 'true') { return res.status(200).json({ debug: true, success, body, eventResponse }); } return res.status(200).json({ success }); } export default handleEvent