Ofertas (Offers)¶
O módulo de Ofertas é o catálogo central de produtos da plataforma. Nele residem todos os produtos promovidos ou vendidos pelo operador, sejam originários de redes internacionais de afiliados (ClickBank) ou infoprodutos e e-commerces próprios.
Campos Principais da Entidade¶
| Campo | Tipo | Descrição |
|---|---|---|
id |
BV_ID |
Identificador único nominal gerado pela plataforma. |
product_name |
string | Nome comercial do produto ou infoproduto. |
product_url |
string | URL da página de vendas principal ou VSL do produtor. |
category |
string | Categoria temática (ex: Saúde, Finanças, Relacionamento, Software). |
affiliate_network |
enum | Rede de origem: CLICKBANK, INS, MARKETHEALTH, PROPRIETARY, etc. |
affiliate_id |
string | Identificador do produto na rede de afiliados (ex: ID do vendor no ClickBank). |
target_audience |
string | Descrição do avatar, dores, desejos e perfil demográfico. |
compliance_risk |
enum | Classificação de risco de compliance: LOW, MEDIUM, HIGH, VERY_HIGH. |
country |
string | País principal de destino do tráfego (ex: US, BR, CA, UK). |
currency |
enum | Moeda base da oferta (padrão USD). |
Modelos de Comissionamento e Payout¶
Para garantir que os cálculos determinísticos de margem, break-even e ROAS permaneçam matematicamente exatos, cada oferta armazena seu modelo de remuneração:
| Campo | Significado |
|---|---|
payout_model |
Tipo de remuneração (DDL brandvelia.offers: cpa, revshare, hybrid). |
commission_amount |
Valor nominal pago por conversão (em USD). |
commission_type |
Natureza do recebimento: ONE_TIME (venda única) ou RECURRING (assinatura/rebill). |
payout_frequency |
Periodicidade dos pagamentos efetuados pela rede. |
max_payout |
Teto máximo de comissão por lead/venda, quando aplicável. |
Construtor de HopLinks (LinkBuilder)¶
Para ofertas do ClickBank, a tela de detalhes inclui o LinkBuilder Card, gerando links com:
- Anexação obrigatória do extclid preenchido com o click_id da visita;
- Parâmetros estruturados aff_sub1 (Campanha), aff_sub2 (Criativo), aff_sub3 (AdSet/Ângulo), aff_sub4 (Fonte de Tráfego: meta, google, tiktok, etc.);
- Link final pronto para inserção no botão de CTA das landing pages ou anúncios diretos.
Integração com o Radar e Snapshots¶
- Opportunity Score: Cada oferta exibe sua pontuação de oportunidade calculada pelo Radar.
- Histórico de Snapshots: Acesso aos dados históricos de gravity, payout inicial e taxas de conversão coletados no marketplace.
- Preparar lançamento: CTA principal abre a mesma jornada persistente
(
/app/campaigns/wizard?launch_id=<uuid>); formulário manual segue como opção avançada.
Página de vendas e termos de afiliado (resolução automática)¶
Ao lançar uma campanha, a página de vendas do produtor vem sozinha — o operador
não precisa colar URL. O servidor resolve (rota POST /api/offers/[offerId]/sales-page,
after() do Radar e import do cloner), nesta ordem:
- Importação anterior da mesma oferta/identidade de marketplace (revisões não
bloqueadas; URL sem
hop/hopId/affiliate) → origemLANDING_CLONE. - Campos da oferta (
sales_page_url/url, nunca hosts ClickBank) →OFFER_FIELD. - Sondagem só com o vendor:
https://hop.clickbank.net/?vendor=<VENDOR>com redirect manual, lendo só o host do 1ºLocation; depois busca o caminho doLocationsem query e a raiz do host, seguindo redirects até o pitch →VENDOR_PROBE. - Campo manual (formulário da oferta ou "Trocar URL" no passo Pressel) →
MANUAL, que sempre vence. O HopLink do operador (affiliate=) é recusado e nunca é buscado.
Os termos de afiliado são lidos numa etapa própria, qualquer que seja a origem:
/affiliates/ → /affiliate/ → /jv/ no host do produtor (e o Location da sondagem
com hop=0, sem hopId, como último recurso). A leitura é determinística (regex, só
inglês) e grava trechos + 4 flags tri-estado (true/false só com evidência; null =
desconhecido): terms_prohibit_copy, terms_prohibit_brand_bidding,
terms_require_keyword_approval, terms_prohibit_paid_search. Termos que proíbem
anunciar a marca vencem a política de tráfego VERIFIED. Releitura: "Tentar de novo" ou
automaticamente quando têm mais de 30 dias.
Limites: 6 buscas a cada 10 min por workspace e cooldown de 30 min por oferta sem URL.
Todo fetch passa por lib/cloner/safe-fetch.ts (DNS checado a cada salto contra IPs
privados, loopback, link-local, CGNAT, ULA e metadata; prazo e teto de bytes). A auditoria
(offer.sales_page_resolved) guarda só host + caminho de cada salto, sem query.