Automação de WhatsApp para solicitações de limpeza de reservatório em SP

Descubra como automatizar o WhatsApp para captar pedidos de limpeza de reservatório em São Paulo usando WordPress, APIs e fluxos inteligentes.

Como transformar cada mensagem de WhatsApp em uma solicitação estruturada de limpeza de reservatório sem perder o controle do processo?

Empresas de saneamento em São Paulo recebem dezenas de pedidos por dia pelo aplicativo, mas a maioria ainda anota endereços em papel ou planilhas soltas. O resultado é retrabalho, erros de deslocamento e clientes insatisfeitos. A automação resolve isso conectando o formulário do site diretamente à conversa no WhatsApp, com validação de dados e rastreamento completo.

O segredo não está em instalar um plugin genérico, mas em desenhar um fluxo que respeite as regras do Meta Business Manager e a arquitetura do WordPress. Neste guia, mostro como montar essa ponte usando a API oficial, webhooks seguros e templates aprovados — tudo dentro do painel que sua equipe já conhece.

Por que a API oficial do WhatsApp é o único caminho viável

Muitos gestores tentam atalhos com ferramentas não oficiais que simulam navegador ou usam números pessoais. Isso viola os termos do Meta e derruba a conta no primeiro pico de demanda. A API Business exige verificação de empresa, domínio confirmado e templates de mensagem pré-aprovados para iniciar conversas fora da janela de 24 horas.

No WordPress, a integração acontece via REST API ou plugin dedicado que registra um endpoint para receber status de entrega, leitura e respostas do cliente. Cada solicitação de limpeza de reservatório gera um post type personalizado com campos: endereço completo, tipo de reservatório (caixa d’água, cisterna, torre), volume estimado e data preferida. O webhook valida o CEP contra a base dos Correios antes de disparar o template “Nova Solicitação” para a equipe de campo.

Estrutura de dados e post types no WordPress

Crie um Custom Post Type chamado solicitacao_reservatorio com suporte a título, editor e campos personalizados via ACF ou Meta Box. Os campos essenciais são:

  1. cep_origem (texto, máscara 00000-000)
  2. tipo_reservatorio (select: caixa_dagua, cisterna, torre, outro)
  3. volume_litros (numérico)
  4. data_preferida (date picker)
  5. status_whatsapp (select: pendente, enviado, entregue, lido, respondido)
  6. whatsapp_message_id (texto, ID retornado pela API)

Essa estrutura permite consultas rápidas no painel e relatórios por região. O gancho save_post dispara a função que monta o payload JSON para a API do WhatsApp, usando o template aprovado com variáveis dinâmicas: {{1}} = nome do cliente, {{2}} = endereço formatado, {{3}} = tipo e volume.

Fluxo de validação e envio do template

O formulário no front-end usa JavaScript vanilla para buscar o endereço completo via API ViaCEP assim que o usuário sai do campo CEP. Se o CEP não for da Grande São Paulo, o botão de envio fica desabilitado e aparece aviso de área não atendida. Isso evita leads fora da rota e economiza créditos de mensagem.

No back-end, a função enviar_template_whatsapp($post_id):

  • Recupera os campos do post
  • Monta array com to (número da central), type: template, template.name: nova_solicitacao, language.code: pt_BR, components com parâmetros
  • Faz POST para https://graph.facebook.com/v18.0/{PHONE_NUMBER_ID}/messages com header Authorization: Bearer {ACCESS_TOKEN}
  • Atualiza status_whatsapp e whatsapp_message_id conforme resposta
  • Registra log em tabela customizada para auditoria
function enviar_template_whatsapp( $post_id ) {
    $cep = get_field( 'cep_origem', $post_id );
    if ( ! validar_cep_sp( $cep ) ) return;
    
    $payload = [
        'messaging_product' => 'whatsapp',
        'to' => CENTRAL_WHATSAPP_NUMBER,
        'type' => 'template',
        'template' => [
            'name' => 'nova_solicitacao',
            'language' => [ 'code' => 'pt_BR' ],
            'components' => [ [
                'type' => 'body',
                'parameters' => [
                    [ 'type' => 'text', 'text' => get_field( 'nome_cliente', $post_id ) ],
                    [ 'type' => 'text', 'text' => formatar_endereco( $post_id ) ],
                    [ 'type' => 'text', 'text' => get_field( 'tipo_reservatorio', $post_id ) . ' - ' . get_field( 'volume_litros', $post_id ) . 'L' ],
                ]
            ] ]
        ]
    ];
    
    $response = wp_remote_post( WHATSAPP_API_ENDPOINT, [
        'headers' => [ 'Authorization' => 'Bearer ' . WHATSAPP_TOKEN, 'Content-Type' => 'application/json' ],
        'body' => wp_json_encode( $payload ),
        'timeout' => 15
    ]);
    
    if ( is_wp_error( $response ) ) {
        update_field( 'status_whatsapp', 'erro_envio', $post_id );
        logar_erro_whatsapp( $post_id, $response->get_error_message() );
        return;
    }
    
    $body = json_decode( wp_remote_retrieve_body( $response ), true );
    if ( isset( $body['messages'][0]['id'] ) ) {
        update_field( 'whatsapp_message_id', $body['messages'][0]['id'], $post_id );
        update_field( 'status_whatsapp', 'enviado', $post_id );
    }
}
add_action( 'acf/save_post', 'enviar_template_whatsapp', 20 );

Webhook para receber respostas e atualizar status

Configure no Meta Developer o callback URL apontando para https://seusite.com/wp-json/whatsapp/v1/webhook. O endpoint valida a assinatura X-Hub-Signature-256 com o App Secret e processa apenas eventos messages e statuses.

Quando o técnico responde “OK” ou “A CAMINHO” no WhatsApp, o webhook identifica o whatsapp_message_id original, busca o post correspondente e atualiza status_whatsapp para respondido. Se o cliente final reagir à mensagem (clicar em botão de confirmação), o mesmo fluxo marca confirmado_cliente.

Essa bidirecionalidade elimina planilhas paralelas. O painel do WordPress passa a ser a fonte única da verdade. Para aprofundar a gestão de dados sensíveis em formulários, veja acessibilidade WCAG em formulários de orçamento no centro de São Paulo.

Roteamento inteligente por região e tipo de serviço

São Paulo tem zonas com restrição de circulação de caminhões pesados e horários de silêncio. O sistema deve rotear a solicitação para a equipe correta antes de disparar o WhatsApp. Use taxonomia zona_atendimento (norte, sul, leste, oeste, centro, abc) e tipo_equipe (leve, media, pesada).

No save_post, consulte a tabela de CEP por zona (importada da prefeitura) e defina os termos automaticamente. O template de WhatsApp pode incluir variável {{4}} com o nome da equipe responsável, facilitando a triagem visual no celular do gestor.

Essa lógica também serve para priorizar emergências: se tipo_reservatorio for “torre” e volume_litros > 10000, marque prioridade: alta e dispare template adicional para o plantonista. Para entender como medir a conversão desses leads, consulte analytics de conversão para leads de desentupimento no Mandaqui.

Monitoramento, logs e fallback para falhas

Nenhuma integração é 100% estável. Crie tabela wp_whatsapp_logs com colunas: id, post_id, evento (envio, entrega, leitura, resposta, erro), payload_json, created_at. Um cron job diário via WP Crontrol verifica solicitações com status_whatsapp = 'enviado' há mais de 1 hora sem atualização e reenvia o template (respeitando limite de 1 reenvio por dia).

Configure alerta por e-mail ao administrador quando houver 3 erros consecutivos no webhook ou na API de envio. O log deve ser consultável no painel via submenu “Logs WhatsApp” com filtros por data, status e post_id.

Para equipes que precisam de área do cliente com histórico, a estrutura já suporta: área do cliente para histórico de manutenções em Moema.

Conclusão prática

Automatizar o WhatsApp para limpeza de reservatório em São Paulo exige disciplina de arquitetura: API oficial, templates aprovados, validação de CEP, webhook assinado e painel unificado no WordPress. O código acima é ponto de partida testado em produção. Implemente em staging, rode testes de carga com 50 envios simultâneos e ajuste timeouts. O resultado é zero papel, rastreabilidade total e equipe de campo recebendo endereços validados no celular — sem digitação manual.

limpeza de reservatório São Paulo

Checklist prático

0 de 8 concluídos

Perguntas frequentes

É possível usar o WhatsApp Business API sem um número dedicado?

Não. A API oficial exige um número de telefone verificado e vinculado a uma conta do Meta Business Manager. Números pessoais ou compartilhados não são aceitos para uso em produção.

Como garantir que o formulário do site envie dados corretos para o WhatsApp?

Use webhooks seguros e valide os campos no front-end e no back-end antes de disparar a mensagem. O plugin de integração deve tratar erros de conexão e repetir tentativas automaticamente.

Qual a diferença entre chatbot e automação via API nativa?

Chatbots costumam rodar em plataformas terceiras com limitações de fluxo. A API nativa permite controle total sobre mensagens, templates aprovados e integração direta com banco de dados do WordPress.

Posso enviar mensagens proativas para clientes que já solicitaram serviço?

Sim, desde que use templates pré-aprovados pelo Meta e o cliente tenha optado por receber comunicações. Mensagens livres só são permitidas dentro da janela de 24 horas após interação do usuário.

Como medir a conversão de leads vindos do WhatsApp no WordPress?

Integre eventos de clique no botão de WhatsApp com Google Analytics 4 ou Matomo via dataLayer. Registre cada abertura de conversa como evento personalizado e cruze com formulários de orçamento concluídos.