Ir para o conteúdo

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.

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:

  1. Importação anterior da mesma oferta/identidade de marketplace (revisões não bloqueadas; URL sem hop/hopId/affiliate) → origem LANDING_CLONE.
  2. Campos da oferta (sales_page_url/url, nunca hosts ClickBank) → OFFER_FIELD.
  3. 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 do Location sem query e a raiz do host, seguindo redirects até o pitch → VENDOR_PROBE.
  4. 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.