import { GoogleAdsApi } from 'google-ads-api';
export async function handler(event, context) {
// 1. Inicializar cliente Google Ads com credenciais dos Secrets
const client = new GoogleAdsApi({
client_id: process.env.GADS_CLIENT_ID,
client_secret: process.env.GADS_CLIENT_SECRET,
developer_token: process.env.GADS_DEVELOPER_TOKEN,
});
const customer = client.Customer({
customer_id: String(process.env.GADS_CUSTOMER_ID).replace(/-/g, ''),
refresh_token: process.env.GADS_REFRESH_TOKEN,
});
// 2. Consultar métricas do dia
const today = new Date().toISOString().slice(0, 10);
const rows = await customer.query(`
SELECT
segments.date,
campaign.id,
campaign.name,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM campaign
WHERE segments.date = '${today}'
`);
// 3. Mapear dados para o formato da tabela do CDP
const metricsData = rows.map(row => ({
id: `${row.campaign.id}_${row.segments.date}`,
campaign_id: String(row.campaign.id),
campaign_name: row.campaign.name,
date: row.segments.date,
impressions: Number(row.metrics.impressions || 0),
clicks: Number(row.metrics.clicks || 0),
cost_micros: Number(row.metrics.cost_micros || 0),
conversions: Number(row.metrics.conversions || 0),
}));
// 4. Ingestão em lote no CDP
const cdpResponse = await fetch(`${process.env.CDP_API_URL}/api/cdp/data/google_ads_metrics`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.CDP_API_TOKEN}`,
},
body: JSON.stringify(metricsData),
});
const result = await cdpResponse.json();
return {
status: 'success',
total_ingested: metricsData.length,
cdp_result: result,
};
}