You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: substitui fetch por https.get nos 4 nós toolCode do agente Alicia
fetch não está disponível no ambiente Node.js dos nós toolCode do n8n.
Todos os 4 tools (buscar_insights, listar_campanhas, listar_conjuntos,
buscar_insights_multiplas_contas) agora usam require('https') + httpGet,
igual ao padrão já funcional no nó Buscar e Formatar Todos.
https://claude.ai/code/session_01TSV3FcRdbPFXKZUAftjEoQ
Copy file name to clipboardExpand all lines: n8n-alicia-meta-ads.json
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -340,7 +340,7 @@
340
340
"parameters": {
341
341
"name": "buscar_insights",
342
342
"description": "Busca métricas/insights do Meta Ads. Use para: gasto (spend), leads (actions), impressões, cliques, CTR, CPC, alcance. Envie JSON com: object_id (ID da conta ex: act_123456 OU ID de campanha), date_preset (today/yesterday/this_week_mon_today/last_7d/last_14d/last_30d/last_month), fields (ex: spend,impressions,clicks,ctr,cpc,actions,reach,cost_per_action_type), level opcional (account/campaign/adset/ad). IMPORTANTE: Para leads, inclua 'actions' nos fields e filtre por action_type = onsite_conversion.total_messaging_connection.",
343
-
"jsCode": "let params;\ntry { params = JSON.parse(query); } catch(e) { return 'Erro: envie JSON com object_id e date_preset'; }\nconst token = 'EAAeVLzZANk8oBQ79Ue5UimCCCYL9uNZCH9EZA7vZAJtqB5B9aQ6mO53EnUI1b8Cskpq9tRsYZAaDKvZB1kLZABjbqgwi3aenhyPnAtQkeineasNmaZA7vue9ndlaErc59UFZBaMBeDnBC8ZBpXtn9PdUP4OMQvkd53QZAL1jI9SC49WGZCvgopdZABkhGKCEuVStyYGRfYPrlhksx7HHkqZBNWo5gMLhREik5hvkp1JA7X';\nconst objectId = params.object_id;\nconst datePreset = params.date_preset || 'today';\nconst fields = params.fields || 'spend,impressions,clicks,ctr,cpc,actions,reach,cost_per_action_type';\nconst level = params.level || '';\nif (!objectId) return 'Erro: object_id é obrigatório';\nlet url = `https://graph.facebook.com/v19.0/${objectId}/insights?date_preset=${encodeURIComponent(datePreset)}&fields=${encodeURIComponent(fields)}&access_token=${token}`;\nif (level) url += `&level=${encodeURIComponent(level)}`;\ntry {\n const res = await fetch(url);\n const data = await res.json();\n if (data.error) return `Erro Meta API: ${data.error.message} (código: ${data.error.code})`;\n if (!data.data || data.data.length === 0) return 'Nenhum dado encontrado para o período solicitado.';\n return JSON.stringify(data.data);\n} catch(e) { return `Erro de conexão: ${e.message}`; }"
343
+
"jsCode": "let params;\ntry { params = JSON.parse(query); } catch(e) { return 'Erro: envie JSON com object_id e date_preset'; }\nconst https = require('https');\nconst httpGet = (u) => new Promise((resolve, reject) => { https.get(u, (res) => { let d = ''; res.on('data', c => d += c); res.on('end', () => { try { resolve(JSON.parse(d)); } catch(err) { reject(err); } }); }).on('error', reject); });\nconst token = 'EAAeVLzZANk8oBQ79Ue5UimCCCYL9uNZCH9EZA7vZAJtqB5B9aQ6mO53EnUI1b8Cskpq9tRsYZAaDKvZB1kLZABjbqgwi3aenhyPnAtQkeineasNmaZA7vue9ndlaErc59UFZBaMBeDnBC8ZBpXtn9PdUP4OMQvkd53QZAL1jI9SC49WGZCvgopdZABkhGKCEuVStyYGRfYPrlhksx7HHkqZBNWo5gMLhREik5hvkp1JA7X';\nconst objectId = params.object_id;\nconst datePreset = params.date_preset || 'today';\nconst fields = params.fields || 'spend,impressions,clicks,ctr,cpc,actions,reach,cost_per_action_type';\nconst level = params.level || '';\nif (!objectId) return 'Erro: object_id é obrigatório';\nlet url = `https://graph.facebook.com/v19.0/${objectId}/insights?date_preset=${encodeURIComponent(datePreset)}&fields=${encodeURIComponent(fields)}&access_token=${token}`;\nif (level) url += `&level=${encodeURIComponent(level)}`;\ntry {\n const data = await httpGet(url);\n if (data.error) return `Erro Meta API: ${data.error.message} (código: ${data.error.code})`;\n if (!data.data || data.data.length === 0) return 'Nenhum dado encontrado para o período solicitado.';\n return JSON.stringify(data.data);\n} catch(e) { return `Erro de conexão: ${e.message}`; }"
344
344
},
345
345
"id": "13abddfb-207b-4d02-aa60-c7b8658c7860",
346
346
"name": "Tool: Buscar Insights",
@@ -355,7 +355,7 @@
355
355
"parameters": {
356
356
"name": "listar_campanhas",
357
357
"description": "Lista todas as campanhas de uma conta de anúncios. Envie JSON com: account_id (formato: act_XXXXXXXXX). Retorna: id, nome, status, objetivo, budget diário e total. Use para encontrar o ID de uma campanha específica antes de buscar os insights.",
"description": "Lista conjuntos de anúncios (adsets) de uma conta ou campanha. Envie JSON com: account_id (act_XXXXXXXXX) OU campaign_id (ID numérico). Retorna: id, nome, status e budget.",
"description": "Busca insights de MÚLTIPLAS contas ao mesmo tempo. Use quando o usuário não especificar cliente. Envie JSON com: account_ids (array de IDs ex: ['act_111','act_222']), date_preset, fields.",
388
-
"jsCode": "let params;\ntry { params = JSON.parse(query); } catch(e) { return 'Erro: envie JSON com account_ids (array), date_preset e fields'; }\nconst token = 'EAAeVLzZANk8oBQ79Ue5UimCCCYL9uNZCH9EZA7vZAJtqB5B9aQ6mO53EnUI1b8Cskpq9tRsYZAaDKvZB1kLZABjbqgwi3aenhyPnAtQkeineasNmaZA7vue9ndlaErc59UFZBaMBeDnBC8ZBpXtn9PdUP4OMQvkd53QZAL1jI9SC49WGZCvgopdZABkhGKCEuVStyYGRfYPrlhksx7HHkqZBNWo5gMLhREik5hvkp1JA7X';\nconst accountIds = params.account_ids || [];\nconst datePreset = params.date_preset || 'today';\nconst fields = params.fields || 'spend,impressions,clicks,actions,reach';\nif (accountIds.length === 0) return 'Erro: account_ids deve ser um array com pelo menos 1 conta';\ntry {\n const results = [];\n for (const accountId of accountIds) {\n const url = `https://graph.facebook.com/v19.0/${accountId}/insights?date_preset=${encodeURIComponent(datePreset)}&fields=${encodeURIComponent(fields)}&access_token=${token}`;\n const res = await fetch(url);\n const data = await res.json();\n if (!data.error && data.data && data.data.length > 0) {\n results.push({ account_id: accountId, data: data.data[0] });\n } else if (data.error) {\n results.push({ account_id: accountId, error: data.error.message });\n } else {\n results.push({ account_id: accountId, data: null, note: 'sem dados no período' });\n }\n }\n return JSON.stringify(results);\n} catch(e) { return `Erro de conexão: ${e.message}`; }"
388
+
"jsCode": "let params;\ntry { params = JSON.parse(query); } catch(e) { return 'Erro: envie JSON com account_ids (array), date_preset e fields'; }\nconst https = require('https');\nconst httpGet = (u) => new Promise((resolve, reject) => { https.get(u, (res) => { let d = ''; res.on('data', c => d += c); res.on('end', () => { try { resolve(JSON.parse(d)); } catch(err) { reject(err); } }); }).on('error', reject); });\nconst token = 'EAAeVLzZANk8oBQ79Ue5UimCCCYL9uNZCH9EZA7vZAJtqB5B9aQ6mO53EnUI1b8Cskpq9tRsYZAaDKvZB1kLZABjbqgwi3aenhyPnAtQkeineasNmaZA7vue9ndlaErc59UFZBaMBeDnBC8ZBpXtn9PdUP4OMQvkd53QZAL1jI9SC49WGZCvgopdZABkhGKCEuVStyYGRfYPrlhksx7HHkqZBNWo5gMLhREik5hvkp1JA7X';\nconst accountIds = params.account_ids || [];\nconst datePreset = params.date_preset || 'today';\nconst fields = params.fields || 'spend,impressions,clicks,actions,reach';\nif (accountIds.length === 0) return 'Erro: account_ids deve ser um array com pelo menos 1 conta';\ntry {\n const results = [];\n for (const accountId of accountIds) {\n const url = `https://graph.facebook.com/v19.0/${accountId}/insights?date_preset=${encodeURIComponent(datePreset)}&fields=${encodeURIComponent(fields)}&access_token=${token}`;\n const data = await httpGet(url);\n if (!data.error && data.data && data.data.length > 0) {\n results.push({ account_id: accountId, data: data.data[0] });\n } else if (data.error) {\n results.push({ account_id: accountId, error: data.error.message });\n } else {\n results.push({ account_id: accountId, data: null, note: 'sem dados no período' });\n }\n }\n return JSON.stringify(results);\n} catch(e) { return `Erro de conexão: ${e.message}`; }"
0 commit comments