UGC Reactions from Real Creators
Real creator library videos at $11 and images at $8. Custom production from $25/video with a $250 minimum. Commercial licensing included.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Dashboard estático (index.html) + funções serverless na Vercel (api/*.js) que consolidam
Meta Ads (investimento, leads, CPL, visitas ao Instagram) e conversão real (matrículas) via
RD Station CRM, para as unidades Panobianco.
Sem nenhuma variável de ambiente configurada, o dashboard funciona em modo demonstração (dados fictícios), então é seguro publicar/testar antes de configurar produção.
api/meta.js recebe só ?endpoint=act_123.../insights?... do frontend, descobre a conta
(act_<id>) e resolve automaticamente qual token de META_API_TOKENS_JSON enxerga aquela
conta. O token nunca volta na resposta.api/rdstation.js usa RD_STATION_API_TOKEN só no servidor para buscar negociações ganhas.api/status.js informa ao frontend se há contas descobertas (booleano/contagem), nunca os
valores dos tokens.token_nao_configurado em api/meta.js).META_API_TOKENS_JSON (obrigatória para sair do modo demo)É um array simples de tokens, um por Business Manager — não precisa mapear conta por conta manualmente (cada BM tem ~12 contas, isso não escalaria):
["TOKEN_BM_1", "TOKEN_BM_2", "TOKEN_BM_3", "TOKEN_BM_4"]
Como isso funciona (descoberta automática): ao receber a primeira requisição (ou a cada 1h,
para renovar o cache), o backend (api/_lib/metaTokens.js) chama, para cada token da lista,
GET /me/adaccounts?fields=id,account_id,name na Graph API — o próprio endpoint que lista quais
contas de anúncio aquele token de Usuário do Sistema enxerga. Com isso monta em memória o mapa
conta → token, sem precisar saber de antemão quais IDs de conta existem em cada BM.
/me/adaccounts só lista contas atribuídas diretamente ao usuário do sistema. Uma conta
que o token consegue ler por outro caminho (ex: acesso herdado da BM — caso da Parque Prado,
antiga Campestre) não aparece ali. Para as contas cadastradas em shared/funil.js que a
descoberta não achar, o backend testa cada token direto na conta (resolveToken em
api/_lib/metaTokens.js, cache de 1h). IDs fora dessa lista nunca são sondados.UNIDADES do index.html
se for uma unidade nova.Como gerar um token de Usuário do Sistema sem expiração, por Business Manager:
/me/adaccounts enxergar as contas.ads_read (mínimo) ou
ads_management se o dashboard também precisar pausar/duplicar campanhas.META_API_TOKENS_JSON.Repita para cada Business Manager e junte todos os tokens num único array.
RD_STATION_API_TOKEN (opcional — habilita a métrica de conversão real)Token privado da API v1 do RD Station CRM (Configurações → Integrações → API).
Sem essa variável, as colunas de Convertidos/Taxa de Conversão/CAC mostram -- e o dashboard
segue funcionando normalmente com os dados do Meta.
| Variável | Default | Para que serve |
|---|---|---|
RD_STATION_SOURCE_MATCH | Facebook Ads,Busca Paga | Trechos (separados por vírgula) que identificam a origem Meta Ads no deal_source da negociação. |
RD_STATION_WON_STAGE_MATCH | (vazio) | Se preenchido, além do campo nativo "ganho" (win=true) do RD Station, também exige que o nome da etapa (deal_stage) contenha esse texto (ex: Matriculado). |
A unidade de cada negociação é identificada pelo nome da campanha (
deal.campaign.name, ex:"(MM) ENVIO DE LEADS - CONDADO") — não existe um campo personalizado confiável para isso no RD Station (o campo "Unidade" existe mas não é preenchido em nenhuma negociação). O cruzamento com o nome usado no Meta Ads é feito por aproximação (ignora acentuação/maiúsculas e aceita correspondência parcial). Negociações cujo texto não bate com nenhuma unidade conhecida ficam agrupadas emunmatchedna resposta de/api/rdstation— útil para depurar nomes de campanha divergentes sem perder o dado.
This is the beginning of the README. Read the rest at the original. Read the full README ↗