Pular para o conteúdo principal

O exemplo

O console administrativo do Bridge fornece um exemplo de integração gerado com a configuração do workspace. A versão ampliada abaixo acrescenta validação e retorno visual do envio. Antes de executá-la, copie os valores de configuração do exemplo gerado para os campos de substituição. Adapte o formulário e o texto de consentimento à sua página. Acme Motors é uma empresa fictícia usada no exemplo abaixo. Substitua esse nome pela empresa que entrará em contato com o visitante e descreva as mensagens de WhatsApp que ele está aceitando receber. Veja os requisitos de consentimento. O script demonstra validação, retorno visual do envio e tratamento de erros. Mantenha inalterados os campos da requisição e a ação reCAPTCHA da configuração gerada.

O que o exemplo faz

  • Verifica os campos obrigatórios do formulário antes de obter um token de CAPTCHA.
  • Registra consent.capturedAt quando o visitante marca a caixa de seleção. Se o navegador restaurar um estado antigo com a caixa já marcada, solicita uma nova ação de consentimento.
  • Permite um envio por vez e mantém o botão desabilitado após a aceitação, evitando outro envio nessa instância do formulário.
  • Apresenta uma resposta 202 como aceita e enfileirada e exibe o requestId retornado como referência para suporte. Nunca informa que uma mensagem de WhatsApp foi entregue.
  • Mostra falhas recuperáveis de CAPTCHA e gera um token novo a cada tentativa manual. Não repete um POST automaticamente.
  • Trata uma falha de rede após o envio como um resultado incerto; não afirma que o lead foi rejeitado nem que é seguro reenviá-lo.
Esse retorno visual é implementado no cliente, não representa uma garantia de deduplicação no backend. Adapte as mensagens visíveis à sua página e use a referência de erros para o diagnóstico.

A chave de captura não é uma chave de API

O guia de autenticação orienta a nunca colocar uma chave no frontend. Essa regra se aplica à chave da API de integrações e continua válida. A captureKey é um valor de outro tipo.
Ao contrário da x-api-key usada pela API de integrações, a captureKey foi projetada para estar no HTML da página, onde qualquer pessoa pode lê-la. Ela não concede acesso de leitura a nenhum dado: apenas identifica a qual workspace pertence um envio. O abuso é limitado por duas outras verificações: o token de reCAPTCHA e a aceitação de envios somente dos domínios cadastrados para o workspace. Nunca use a chave da API de integrações aqui e nunca a coloque em uma página.

Inclua o ID do workspace na URL

O ID do workspace deve estar no corpo da requisição e na URL, como ?workspaceId=.... Ele precisa estar nos dois lugares porque o navegador envia uma requisição preliminar de CORS antes da requisição principal. Essa requisição preliminar não contém corpo. Sem o ID na URL, não conseguimos identificar o workspace nem retornar o cabeçalho que autoriza seu domínio, e o navegador bloqueia a requisição antes de enviá-la. É importante configurar isso corretamente desde o início: essa falha aparece como um erro de CORS no console do navegador, e a requisição principal não chega aos nossos logs, pois não saiu da página.

Gere o token de CAPTCHA no envio do formulário

Um token reCAPTCHA v3 vale por cerca de dois minutos. Se ele for gerado no carregamento da página, muitas vezes já terá expirado quando a pessoa terminar de preencher o formulário. A rejeição retorna 403, o que pode parecer um problema de permissão, embora a causa seja a expiração.

Gere um novo token para cada tentativa

Cada token pode ser verificado uma única vez. Se um envio falhar e você tentar novamente com o mesmo token, a repetição será indistinguível de um ataque e retornará o mesmo erro recebido por um bot. Sempre chame grecaptcha.execute novamente antes de tentar outro envio.

O que enviar

A referência do endpoint contém o contrato completo. Estes são os campos cujo significado não fica evidente apenas pelo esquema:
string
A marca comercializada pela landing page, não o ID de uma linha, canal ou telefone. Obrigatório somente se o workspace tiver marcas habilitadas. Nunca é necessário informar um ID de linha.
string
A origem e o caminho da página, sem a query string. Os parâmetros UTM são enviados separadamente em utm, e a query string completa pode conter IDs de cliques ou tokens de sessão que não devem ser armazenados. Envie https://example.com/offer, não https://example.com/offer?gclid=....
Sua declaração de que o visitante consentiu e de quando isso aconteceu. Veja os requisitos de consentimento: o texto de aceite no formulário não é opcional.
object
Coletado da query string com base em uma lista de permissões: parâmetros utm_* e quaisquer nomes adicionais configurados no console. Usamos uma lista de permissões, em vez de uma lista de exclusões, porque a coleta excessiva de dados não pode ser desfeita.

Após o envio

Uma resposta 202 significa que o lead foi aceito e colocado na fila. Isso não significa que uma mensagem foi enviada: o envio acontece depois, em um serviço separado. Informe ao visitante que entrará em contato em breve. Qualquer outra resposta é um erro. Consulte a referência de erros para entender cada caso e saber se você pode corrigi-lo.