@vizertech/nextjs-capi
Version:
NextJS 13 Wrapper for fb pixel and capi for graph v17.0 API
60 lines (47 loc) • 2.02 kB
text/typescript
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