Como integrar API de CPF em chatbots do WhatsApp Business

Guia prático para integrar a validação de CPF via API da CPFHub.io em chatbots do WhatsApp Business com exemplos de código.

Redação CPFHub.io
Redação CPFHub.io
··9 min de leitura
Como integrar API de CPF em chatbots do WhatsApp Business

Para integrar validação de CPF em um chatbot do WhatsApp Business, o fluxo consiste em receber a mensagem via webhook da WhatsApp Business API, extrair o CPF informado pelo usuário, consultar a API da CPFHub.io e responder com o nome do titular para confirmação. A implementação básica em Node.js ou Python leva menos de 30 minutos.

Introdução

O WhatsApp é o aplicativo de mensagens mais popular do Brasil, com mais de 120 milhões de usuários ativos. Para empresas, o WhatsApp Business e a WhatsApp Business API se tornaram canais fundamentais de atendimento ao cliente, vendas e onboarding.

Chatbots integrados ao WhatsApp Business podem automatizar processos que antes exigiam atendimento humano, incluindo a validação de CPF. Ao integrar a API de consulta de CPF da CPFHub.io ao chatbot, é possível verificar a identidade do usuário em tempo real — com latência de aproximadamente 900ms — sem nenhuma intervenção manual.


Casos de uso para validação de CPF no WhatsApp

Onboarding de novos clientes

O chatbot pode solicitar o CPF do cliente durante o cadastro, validar em tempo real e confirmar os dados sem intervenção humana.

Atendimento de suporte

Antes de fornecer informações sensíveis sobre conta ou pedido, o chatbot válida a identidade do solicitante por meio do CPF.

Vendas e negociação

Para vendas que exigem emissão de nota fiscal ou contrato, o chatbot coleta e válida o CPF diretamente na conversa.

Segunda via de documentos

Empresas de serviços (energia, telecomunicações, seguradoras) podem usar o CPF para localizar a conta do cliente e enviar segunda via de boletos ou documentos.

Agendamento de serviços

Clínicas, consultórios e prestadores de serviço podem validar o CPF do paciente ao agendar consultas pelo WhatsApp.


Arquitetura da integração

A integração envolve três componentes principais:

[WhatsApp Business API] <--> [Servidor do Chatbot] <--> [API CPFHub.io]
  1. O cliente envia uma mensagem no WhatsApp.
  2. A WhatsApp Business API entrega a mensagem ao servidor do chatbot (via webhook).
  3. O chatbot processa a mensagem e, quando necessário, consulta a API da CPFHub.io.
  4. O chatbot responde ao cliente no WhatsApp com os dados validados.

Fluxo conversacional

Um fluxo típico de validação de CPF no WhatsApp seria:

Bot: Olá! Para continuarmos, preciso verificar sua identidade.
    Por favor, informe seu CPF (apenas números).

Usuário: 12345678900

Bot: Aguarde um momento enquanto verifico seus dados...

[Chatbot consulta API da CPFHub.io]

Bot: Encontrei! Seu nome é João da Silva, correto?

Usuário: Sim

Bot: Identidade verificada com sucesso!
    Como posso ajudá-lo hoje?

Se o CPF for inválido ou não encontrado:

Bot: Não consegui localizar este CPF. Por favor, verifique
    o número e tente novamente.

Implementação com Node.js e Express

Servidor do chatbot

const express = require('express');
const app = express();
app.use(express.json());

const CPFHUB_API_KEY = process.env.CPFHUB_API_KEY;
const WHATSAPP_TOKEN = process.env.WHATSAPP_TOKEN;

// Estado das conversas (em produção, use Redis ou banco de dados)
const conversas = {};

// Webhook para receber mensagens do WhatsApp
app.post('/webhook', async (req, res) => {
    const message = req.body.entry?.[0]?.changes?.[0]?.value?.messages?.[0];

    if (!message) {
    return res.sendStatus(200);
    }

    const telefone = message.from;
    const texto = message.text?.body?.trim();

    if (!texto) {
    return res.sendStatus(200);
    }

    const estado = conversas[telefone] || { etapa: 'inicio' };

    if (estado.etapa === 'inicio') {
    await enviarMensagem(telefone,
    'Olá! Para continuarmos, preciso verificar sua identidade.\n' +
    'Por favor, informe seu CPF (apenas números).'
    );
    conversas[telefone] = { etapa: 'aguardando_cpf' };
    }
    else if (estado.etapa === 'aguardando_cpf') {
    const cpf = texto.replace(/\D/g, '');

    if (cpf.length !== 11) {
    await enviarMensagem(telefone,
    'O CPF deve conter 11 dígitos. Por favor, tente novamente.'
    );
    return res.sendStatus(200);
    }

    await enviarMensagem(telefone,
    'Aguarde um momento enquanto verifico seus dados...'
    );

    // Consultar API da CPFHub.io
    const resultado = await consultarCPF(cpf);

    if (resultado.success) {
    const nome = resultado.data.name;
    await enviarMensagem(telefone,
    `Encontrei! Seu nome é ${nome}, correto?\n` +
    'Responda SIM para confirmar ou NÃO para tentar outro CPF.'
    );
    conversas[telefone] = {
    etapa: 'confirmando_nome',
    cpf: cpf,
    nome: nome
    };
    } else {
    await enviarMensagem(telefone,
    'Não consegui localizar este CPF. ' +
    'Por favor, verifique o número e tente novamente.'
    );
    }
    }
    else if (estado.etapa === 'confirmando_nome') {
    if (texto.toUpperCase() === 'SIM') {
    await enviarMensagem(telefone,
    'Identidade verificada com sucesso!\n' +
    'Como posso ajudá-lo hoje?'
    );
    conversas[telefone] = {
    etapa: 'atendimento',
    cpf: estado.cpf,
    nome: estado.nome
    };
    } else {
    await enviarMensagem(telefone,
    'Por favor, informe o CPF correto (apenas números).'
    );
    conversas[telefone] = { etapa: 'aguardando_cpf' };
    }
    }

    res.sendStatus(200);
});

async function consultarCPF(cpf) {
    const response = await fetch(`https://api.cpfhub.io/cpf/${cpf}`, {
    method: 'GET',
    headers: {
    'x-api-key': CPFHUB_API_KEY,
    'Accept': 'application/json'
    },
    timeout: 10000
    });

    return response.json();
}

async function enviarMensagem(telefone, texto) {
    await fetch(
    `https://graph.facebook.com/v18.0/PHONE_NUMBER_ID/messages`,
    {
    method: 'POST',
    headers: {
    'Authorization': `Bearer ${WHATSAPP_TOKEN}`,
    'Content-Type': 'application/json'
    },
    body: JSON.stringify({
    messaging_product: 'whatsapp',
    to: telefone,
    type: 'text',
    text: { body: texto }
    }),
    timeout: 10000
    }
    );
}

app.listen(3000, () => {
    console.log('Chatbot rodando na porta 3000');
});

Implementação com Python e Flask

from flask import Flask, request, jsonify
import requests
import os

app = Flask(__name__)

CPFHUB_API_KEY = os.environ.get("CPFHUB_API_KEY")
WHATSAPP_TOKEN = os.environ.get("WHATSAPP_TOKEN")

# Estado das conversas
conversas = {}

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.get_json()
    message = (data.get("entry", [{}])[0]
    .get("changes", [{}])[0]
    .get("value", {})
    .get("messages", [{}])[0])

    telefone = message.get("from")
    texto = message.get("text", {}).get("body", "").strip()

    if not telefone or not texto:
    return jsonify({"status": "ok"}), 200

    estado = conversas.get(telefone, {"etapa": "inicio"})

    if estado["etapa"] == "inicio":
    enviar_mensagem(telefone,
    "Olá! Para continuarmos, informe seu CPF (apenas números).")
    conversas[telefone] = {"etapa": "aguardando_cpf"}

    elif estado["etapa"] == "aguardando_cpf":
    cpf = "".join(filter(str.isdigit, texto))

    if len(cpf) != 11:
    enviar_mensagem(telefone,
    "O CPF deve conter 11 dígitos. Tente novamente.")
    return jsonify({"status": "ok"}), 200

    resultado = consultar_cpf(cpf)

    if resultado.get("success"):
    nome = resultado["data"]["name"]
    enviar_mensagem(telefone,
    f"Encontrei! Seu nome é {nome}, correto? (SIM/NÃO)")
    conversas[telefone] = {
    "etapa": "confirmando",
    "cpf": cpf,
    "nome": nome
    }
    else:
    enviar_mensagem(telefone,
    "CPF não encontrado. Verifique e tente novamente.")

    elif estado["etapa"] == "confirmando":
    if texto.upper() == "SIM":
    enviar_mensagem(telefone,
    "Identidade verificada! Como posso ajudá-lo?")
    conversas[telefone] = {
    "etapa": "atendimento",
    "cpf": estado["cpf"],
    "nome": estado["nome"]
    }
    else:
    enviar_mensagem(telefone,
    "Informe o CPF correto (apenas números).")
    conversas[telefone] = {"etapa": "aguardando_cpf"}

    return jsonify({"status": "ok"}), 200

def consultar_cpf(cpf):
    response = requests.get(
    f"https://api.cpfhub.io/cpf/{cpf}",
    headers={
    "x-api-key": CPFHUB_API_KEY,
    "Accept": "application/json"
    },
    timeout=10
    )
    return response.json()

def enviar_mensagem(telefone, texto):
    requests.post(
    f"https://graph.facebook.com/v18.0/PHONE_NUMBER_ID/messages",
    headers={
    "Authorization": f"Bearer {WHATSAPP_TOKEN}",
    "Content-Type": "application/json"
    },
    json={
    "messaging_product": "whatsapp",
    "to": telefone,
    "type": "text",
    "text": {"body": texto}
    },
    timeout=10
    )

if __name__ == "__main__":
    app.run(port=3000)

Boas práticas para o chatbot

Segurança dos dados

  • Nunca exiba o CPF completo nas mensagens de resposta. Se necessário, mostre apenas os últimos 4 dígitos.
  • Armazene as chaves de API em variáveis de ambiente, nunca no código-fonte.
  • Implemente timeout nas requisições para evitar que o chatbot fique travado.

Experiência do usuário

  • Forneça instruções claras sobre o formato esperado (apenas números, 11 dígitos).
  • Exiba mensagens de erro específicas e orientativas.
  • Confirme os dados com o usuário antes de prosseguir.
  • Ofereça a opção de tentar novamente em caso de erro.

Rate limits

  • Respeite o rate limit da API (1 requisição a cada 2 segundos no plano grátis, 1 por segundo no plano Pro).
  • Em cenários de alto volume de conversas simultâneas, considere o plano Pro ou Corporativo.

Conformidade com a LGPD

  • Informe o usuário que seus dados serão consultados para verificação de identidade.
  • Armazene o consentimento do usuário antes de realizar a consulta.
  • Não retenha os dados retornados pela API além do necessário. A ANPD orienta que dados de identificação coletados via canais digitais devem seguir o princípio da necessidade e ter finalidade declarada.

Integração com plataformas de chatbot

Além da implementação direta, é possível integrar a API da CPFHub.io com plataformas populares de criação de chatbots:

  • Dialogflow (Google) -- Use fulfillment webhooks para chamar a API da CPFHub.io quando o bot detectar a intenção de validar CPF.

  • Botpress -- Crie uma ação customizada que consulta a API e retorna os dados para o fluxo do bot.

  • ManyChat -- Utilize a funcionalidade de chamadas externas (External Request) para integrar a API.

  • Take Blip -- Configure um builder com chamadas HTTP para a API da CPFHub.io.


Perguntas frequentes

Quais permissões da WhatsApp Business API são necessárias para esse fluxo?

É necessário ter acesso à WhatsApp Business API (via Meta for Developers ou um BSP — Business Solution Provider), configurar um webhook para receber mensagens e obter um token de acesso com a permissão whatsapp_business_messaging. A validação de CPF em si é feita pela CPFHub.io de forma independente.

O chatbot pode validar CPF em conversas de grupo no WhatsApp?

Não é recomendado. A verificação de identidade via CPF deve ocorrer em conversas individuais (1:1), onde o usuário tem contexto de que está fornecendo um dado pessoal. Grupos do WhatsApp não são adequados para esse tipo de fluxo por questões de privacidade e conformidade com a LGPD.

Como lidar com alta concorrência de verificações simultâneas no chatbot?

No plano grátis o rate limit é de 1 requisição a cada 2 segundos. Para chatbots com múltiplas conversas simultâneas, implemente uma fila de requisições (ex: Bull no Node.js ou Celery no Python) ou migre para o plano Pro (1 req/s) ou Corporativo para eliminar o gargalo.

Quanto tempo leva para integrar a API CPFHub.io ao chatbot?

A integração básica leva menos de 30 minutos: crie uma conta em cpfhub.io, gere a API key no painel e adicione a função consultarCPF ao webhook existente do seu chatbot. Os exemplos neste artigo em Node.js e Python estão prontos para uso em produção com pequenas adaptações.


Conclusão

Integrar a validação de CPF em chatbots do WhatsApp Business é uma forma eficiente de automatizar a verificação de identidade diretamente no canal de comunicação preferido dos brasileiros. Com a API da CPFHub.io, o fluxo completo — receber CPF, validar e confirmar nome — funciona de forma transparente para o usuário e sem intervenção manual para a empresa.

O tempo de resposta de aproximadamente 900ms garante que a experiência conversacional seja fluida, sem atrasos perceptíveis para o usuário. Com planos a partir de R$ 0 (50 consultas/mês), a solução é acessível para empresas de todos os portes.

Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e adicione validação de CPF ao seu chatbot do WhatsApp hoje mesmo.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

Redação CPFHub.io

Sobre a redação

Redação CPFHub.io

Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.

WhatsAppFale conosco via WhatsApp