WooCommerce adaptado para agendamento de desentupimento em SP

Como transformar o WooCommerce em sistema de agendamento para desentupidoras em São Paulo com slots, geolocalização e automações.

Mais de 60% dos chamados de desentupimento em São Paulo originam-se de buscas móveis com intenção imediata — o cliente não quer ligar, quer agendar em três toques. O WooCommerce, desenhado para produtos físicos, exige adaptações profundas para atender essa dinâmica: estoque vira disponibilidade de técnico, frete vira zona de cobertura, variação de produto vira tipo de serviço com duração distinta. Ignorar essas diferenças gera overbooking, técnicos ociosos e avaliações negativas no Google Meu Negócio.

A arquitetura recomendada separa o catálogo público (serviços agendáveis) da lógica operacional (agenda da equipe, roteirização, estoque de equipamentos). Use Custom Post Types para “Técnico”, “Veículo” e “Equipamento” com relacionamentos via meta fields; o pedido no WooCommerce torna-se apenas o gatilho que dispara a alocação via wc_rest_insert_order_object hook. Dessa forma, o painel do WordPress permanece leve para o cliente, enquanto a complexidade operacional roda em camada separada, acessível via REST API autenticada.

Validação de cobertura por CEP no carrinho

A primeira barreira técnica é impedir que um cliente da Zona Leste agende serviço se a base operacional atende apenas Zona Oeste e Centro. Implemente um campo de CEP no mini-carrinho (via `woocommerce_before_cart` action) que consome a API ViaCEP em tempo real e cruza com uma tabela `wp_service_areas` (post_type customizado com taxonomia `bairro_atendido`). Se o CEP não estiver coberto, bloqueie o botão "Finalizar compra" e exiba mensagem orientando para WhatsApp de plantão. O snippet abaixo ilustra a validação AJAX:
add_action( 'wp_ajax_check_service_area', 'devwp_check_service_area' );
add_action( 'wp_ajax_nopriv_check_service_area', 'devwp_check_service_area' );
function devwp_check_service_area() {
    $cep = sanitize_text_field( $_POST['cep'] );
    $bairro = devwp_get_bairro_from_cep( $cep ); // consome ViaCEP
    $atendido = get_posts([
        'post_type' => 'service_area',
        'tax_query' => [[
            'taxonomy' => 'bairro_atendido',
            'field' => 'slug',
            'terms' => sanitize_title( $bairro ),
        ]],
        'fields' => 'ids',
        'posts_per_page' => 1,
    ]);
    wp_send_json_success([ 'covered' => ! empty( $atendido ), 'bairro' => $bairro ]);
}

Slots de horário baseados em capacidade real

Diferente de hotelaria, onde o quarto é o recurso, aqui o recurso é o técnico + veículo + equipamento (ex.: hidrojato). Cada técnico tem jornada, habilidades (desentupimento de esgoto, caixa de gordura, fossa) e região preferencial. Modele isso com CPT `tecnico` e meta fields: `habilidades` (array), `veiculo_id`, `regiao_base`. Ao renderizar o calendário de agendamento (página do produto "Desentupimento de Pia"), consulte a agenda do dia via `GET /wp-json/wc/v3/bookings?date=2024-01-15&status=confirmed` e filtre por técnicos com a habilidade necessária e veículo disponível. Mostre apenas horários onde `count(alocacoes) < count(tecnicos_elegiveis)`.

Integração WhatsApp Business para confirmação e rastreamento

O cliente brasileiro confia no WhatsApp. Configure templates aprovados na Meta: `agendamento_confirmado`, `tecnico_a_caminho` (com link de rastreamento em tempo real via Mapbox), `servico_concluido` (com botão de avaliação). Disparos ocorrem via webhook no `woocommerce_order_status_changed`: `pending -> confirmed` dispara confirmação; `confirmed -> processing` (técnico saiu) dispara rastreamento; `processing -> completed` dispara avaliação. Evite disparos manuais — eles não escalam em pico de chuva. Para ver um exemplo de fluxo de notificações automatizadas, confira como [um consultor WordPress resolve logística em oficina mecânica em Americanópolis](/blog/consultor-wordpress-resolve-logistica-em-oficina-mecanica-em-americanopolis-na/).

Preço dinâmico por horário, distância e complexidade

O preço fixo no produto WooCommerce não reflete a realidade: desentupimento às 2h da madrugada custa mais; atendimento na Zona Sul a partir da base na Zona Norte tem taxa de deslocamento; caixa de gordura transbordando exige hidrojato (equipamento caro). Use a API `woocommerce_product_get_price` para injetar lógica:
add_filter( 'woocommerce_product_get_price', 'devwp_dynamic_service_price', 10, 2 );
function devwp_dynamic_service_price( $price, $product ) {
    if ( ! is_cart() && ! is_checkout() ) return $price;
    $cart_item = WC()->cart->get_cart_contents();
    $slot = $cart_item[0]['booking']['_start_date'] ?? null;
    $cep_destino = WC()->customer->get_shipping_postcode();
    $base_price = $price;
    // Madrugada (22h-6h): +50%
    if ( $slot && in_array( date('H', strtotime($slot)), range(22,23) + range(0,6) ) ) {
        $base_price *= 1.5;
    }
    // Distância > 15km da base: +2,50 reais/km
    $distancia = devwp_calc_distance( 'base_cep', $cep_destino );
    if ( $distancia > 15 ) $base_price += ( $distancia - 15 ) * 2.5;
    return round( $base_price, 2 );
}

Painel do técnico: rota otimizada e checklist de serviço

Desenvolva uma PWA (Progressive Web App) acessível em `tecnico.seusite.com.br` que consome `/wp-json/wp/v2/tecnico?per_page=100&search={user_id}` e `/wp-json/wc/v3/orders?status=processing&dp=2024-01-15`. O painel mostra a rota do dia ordenada por proximidade (algoritmo nearest-neighbor ou OR-Tools), com botões "Iniciar deslocamento", "Iniciar serviço", "Finalizar". Cada serviço tem checklist obrigatório (foto do antes/depois, laudo técnico, assinatura digital via canvas). Dados sincronizam via `PATCH /wp-json/wc/v3/orders/{id}` com meta fields customizados. A mesma abordagem de organização de rotina aparece em como [um desenvolvedor WordPress organiza rotina com troca de óleo em São Paulo](/blog/desenvolvedor-wordpress-organizando-rotina-com-troca-de-oleo-em-sao-paulo/).

Sincronização bidirecional com ERP/CRM da operação

A desentupidora provavelmente já usa um ERP para faturamento, estoque de peças (anéis de vedação, cabos, mangueiras) e folha de pagamento. O WordPress não deve substituí-lo — deve alimentá-lo. Configure webhooks no WooCommerce: `order.created`, `order.updated`, `booking.created`. No lado do ERP, exponha endpoint `/api/v1/sync/wordpress` que recebe payload assinado (HMAC SHA256) e devolve `tecnico_id`, `veiculo_id`, `numero_nfse`. Armazene a resposta no pedido via `update_post_meta( $order_id, '_erp_sync', $response )`. Falhas entram em fila de retentativa (ex.: Action Scheduler) com alerta no Slack da equipe técnica.

LGPD, SSL e conformidade para dados sensíveis

Agendamento coleta nome, telefone, endereço, tipo de imóvel — dados pessoais sensíveis sob LGPD. Além do certificado SSL válido (Let's Encrypt renovado via ACME ou certificado pago com HSTS), implemente: banner de consentimento granular (necessários, funcionais, marketing), registro de consentimento com timestamp e IP hash, botão "Excluir meus dados" na conta do cliente que anonimiza pedidos antigos (`wc_delete_order_data` hook). Use plugin como *Complianz* configurado para LGPD, mas revise os cookies de sessão do WooCommerce (`woocommerce_cart_hash`, `woocommerce_items_in_cart`) — eles são essenciais e não exigem opt-in.

A adaptação do WooCommerce para agendamento de desentupimento em São Paulo não é um projeto de configuração — é um projeto de engenharia de software sobre WordPress. Cada decisão arquitetural (CPT vs. meta fields, Bookings vs. CPT Agendamento, webhook vs. polling) define a escalabilidade quando a chuva de verão triplica a demanda. Comece pelo MVP: validação de CEP, slots reais, WhatsApp automatizado. Entregue valor em duas semanas. Itere com preço dinâmico, painel do técnico, sincronização ERP. E lembre-se: a experiência do cliente começa no agendamento, mas a reputação da desentupidora se consolida na pontualidade do técnico — algo que só uma desentupidora na capital paulista com processos digitais bem amarrados consegue garantir consistentemente.

Checklist prático

0 de 9 concluídos

Perguntas frequentes

O WooCommerce nativo suporta agendamento de serviços com janelas de horário?

Não nativamente. É necessário usar extensões como WooCommerce Bookings ou plugins customizados que adicionam slots de horário, duração do serviço e conflitos de agenda. A lógica de estoque padrão não resolve disponibilidade de técnicos em campo.

Como garantir que o cliente só agende para bairros atendidos?

Implemente validação de CEP no carrinho ou no checkout via API dos Correios ou ViaCEP, cruzando com uma tabela de áreas de cobertura. Bloqueie o avanço do pedido se o CEP não estiver na lista de bairros atendidos pela desentupidora.

É possível integrar o agendamento com WhatsApp Business para confirmação?

Sim. Use a API oficial do WhatsApp Business ou provedores homologados para disparar templates de confirmação, lembrete e reagendamento. O gatilho pode vir de hooks do WooCommerce como `woocommerce_checkout_order_processed` ou `woocommerce_order_status_changed`.

Como lidar com serviços de emergência 24h no mesmo sistema?

Crie um tipo de produto "Emergência" com preço diferenciado e fluxo de checkout simplificado. Use prioridade na fila de técnicos e notificação imediata via webhook para a central. O agendamento padrão segue fluxo normal com escolha de data/hora.

Qual a melhor forma de sincronizar a agenda dos técnicos com o painel do WordPress?

Desenvolva um painel administrativo customizado (ou use ACF + REST API) que consuma a agenda em tempo real. Técnicos acessam via app móvel ou PWA; alterações refletem no WooCommerce via webhooks bidirecionais, evitando overbooking.

Preciso de certificado SSL e LGPD para receber agendamentos online?

Sim. SSL é obrigatório para qualquer checkout. Para LGPD, colete apenas dados essenciais, tenha política de privacidade clara, registre consentimento e permita exclusão de dados. Use plugins de conformidade como GDPR Cookie Consent adaptados para LGPD.