=== Chat App Brasil ===
Contributors: lupeedesign
Tags: whatsapp, woocommerce, whatsapp notifications, abandoned cart, whatsapp button
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 3.0.7
WC requires at least: 7.0
WC tested up to: 9.8
License: GPLv2 or later

Envie mensagens WhatsApp automáticas para clientes WooCommerce. Notificações, carrinho abandonado, PIX, rastreamento e botão WhatsApp.

== Descrição ==

**Chat App Brasil** é o plugin WhatsApp para WooCommerce mais completo do Brasil. Conecte sua loja ao WhatsApp e envie mensagens automáticas para seus clientes em cada etapa da jornada de compra — do novo pedido até o pós-venda.

Integração oficial com a plataforma **ChatAppBrasil** — sem necessidade de WhatsApp Business API direta.

= Por que usar o Chat App Brasil? =

* ✅ **WhatsApp + WooCommerce nativos** — sem configurações complexas
* ✅ **Botão flutuante WhatsApp** customizável com rastreamento de cliques
* ✅ **Recuperação de carrinho abandonado** via WhatsApp (CartBounty)
* ✅ **PIX via WhatsApp** — QR code automático (Mercado Pago e Asaas)
* ✅ **Rastreamento de pedidos** — Correios e Melhor Envio
* ✅ **Assinaturas WooCommerce** — notificações de renovação e cancelamento
* ✅ **Back In Stock** — avisa cliente quando produto volta ao estoque
* ✅ **HPOS compatível** — WooCommerce 7.1+

= Funcionalidades Principais =

**Notificações Automáticas de Pedido**
Cada status do WooCommerce dispara mensagem personalizada ao cliente e
opcionalmente ao administrador. Toggle individual por notificação — a mensagem
permanece salva mesmo quando desativada. Status suportados:
* Novo pedido, pendente, em espera, processando, concluído, cancelado,
  reembolsado, falhado, nota de pedido, status personalizados

**Aba Pagamentos — Mercado Pago PIX**
Envio automático do QR code e código copia e cola. Dois modos:
* Imediato: envia em tempo real
* Lembrete: envia somente se não pago após X minutos (cancela se pagar antes)
* Notificação de PIX expirado: avisa o cliente quando o tempo expira

**Aba Pagamentos — Asaas PIX**
Integração completa com o gateway Asaas para pagamentos via PIX.
Mesmas opções de imediato/lembrete do Mercado Pago. QR code + código copia e cola.

**Aba Pagamentos — Asaas Boleto**
Envio automático do link do boleto quando um pedido Asaas Boleto é criado.
Use %boleto_url% na mensagem para incluir o link.

**Aba Pagamentos — PIX Expirado**
Notificação unificada para Mercado Pago e Asaas quando o PIX expira sem
pagamento. Configura quantos minutos após a geração do PIX disparar o aviso.

**Aba Rastreamento — Correios e Melhor Envio**
Notificação automática quando o pedido é concluído e há código de rastreio.
Detecta automaticamente Correios (WooCommerce Correios) e Melhor Envio.
Tags: %tracking_code%, %tracking_url%

**Recuperação de Carrinho Abandonado**
Até 3 follow-ups via CartBounty Free ou Pro, com intervalo configurável.
Toggle independente por follow-up.

**Pós-venda (Aftersales)**
Mensagem X horas após conclusão do pedido.

**Back In Stock**
Notificação via WhatsApp quando produto volta ao estoque.

**Easy Digital Downloads (EDD)**
Notificações de novo pedido e pedido completo para produtos digitais.

**Contact Form 7 / Caldera Forms**
Mensagens disparadas via formulários com substituição de tags e quebras de linha.

**Botão Flutuante WhatsApp**
SVG configurável: posição, tamanho (40-200px), distância da borda (0-300px),
efeito pulsante, tooltip, mensagem pré-preenchida, ocultar por dispositivo.

**Rastreamento de Cliques**
Cada clique no botão é registrado via AJAX (visitantes e logados).

**Disparo em Massa**
Posts/produtos para lista de números, mensagens personalizadas, importação de clientes.

**Logs de Mensagens**
Estatísticas (enviadas, erros, dedup), linhas expansíveis com link ao pedido,
botão de reenvio, abas por tipo, paginação, link direto ao pedido WooCommerce.

**Notas Privadas nos Pedidos**
Nota automática a cada envio WhatsApp com status, número e link de reenvio.

**Proteção e Segurança**
Deduplicação configurável, rate limiting, filtro de horário, monitoramento de
erros (pausa automática após 1h de falhas), erros técnicos em linguagem amigável.

**Compatibilidade HPOS**
Totalmente compatível com HPOS (WooCommerce 7.1+).

== Instalação ==

1. Plugins > Adicionar Novo > Enviar Plugin > selecione o .zip
2. Ative o plugin
3. Chat App Brasil > Configuração > insira seu Access Token
4. Configure mensagens em Notificações, Pagamentos, Rastreamento e demais abas

== Tags Disponíveis ==

= Pedido =
%id%, %order_key%, %order_date%, %order_time%, %order_link%, %order_status%,
%product%, %product_name%, %order_subtotal%, %order_shipping%, %order_total%,
%order_discount%, %currency%, %cust_note%, %shipping_method%,
%payment_method_title%, %payment_url%

= Cliente =
%billing_first_name%, %billing_last_name%, %billing_email%, %billing_phone%,
%billing_city%, %billing_state%, %billing_address_1%

= Entrega =
%shipping_first_name%, %shipping_address_1%, %shipping_city%, %shipping_state%

= Rastreamento =
%tracking_code% — código de rastreio (Correios ou Melhor Envio)
%tracking_url%  — link de rastreamento

= Pagamentos =
%pix_code%   — código copia e cola PIX (Mercado Pago ou Asaas)
%boleto_url% — link do boleto (Asaas)
%payment_url% — link de pagamento pendente do WooCommerce

= Outros =
%shop_name%, %note%
Spintax: {Olá|Oi|Bom dia} — variação aleatória por envio

== FAQ ==

= Como enviar mensagem WhatsApp automática no WooCommerce? =
Configure seu token em Chat App Brasil > Configuração e defina as mensagens em Chat App Brasil > Notificações. O WhatsApp é enviado automaticamente em cada mudança de status do pedido.

= É possível enviar o QR code do PIX pelo WhatsApp? =
Sim. O plugin integra com Mercado Pago PIX e Asaas PIX. O QR code é enviado automaticamente como imagem junto com o código copia e cola quando o pedido é criado.

= Funciona com WhatsApp Business? =
Sim. A plataforma ChatAppBrasil usa a API do WhatsApp Business. Você precisa de uma conta ativa em chatappbrasil.com.

= Como recuperar carrinho abandonado pelo WhatsApp? =
Instale o CartBounty Free ou Pro, configure os follow-ups na aba Carrinho Abandonado e o plugin envia mensagens automáticas via WhatsApp para clientes que abandonaram o carrinho.

= Posso enviar código de rastreamento pelo WhatsApp? =
Sim. Instale WooCommerce Correios ou Melhor Envio. Quando o pedido for concluído com código de rastreio, o plugin envia automaticamente na aba Rastreamento.

= O botão não aparece =
Preencha o número em Chat App Brasil > Botão.

= Mensagens não enviadas =
Confirme o Access Token, verifique os Logs e certifique que a mensagem não está vazia.
Veja se há alerta de "Envios pausados" no painel.

= PIX Asaas não envia =
Verifique se o plugin WooCommerce Asaas está ativo e se o método de pagamento
do pedido é "asaas-pix". O meta __ASAAS_ORDER precisa estar salvo.

= Tracking não envia =
O código de rastreio precisa estar disponível no momento em que o pedido é
marcado como Concluído. Verifique se WooCommerce Correios ou Melhor Envio
está ativo e com código cadastrado no pedido.

= Vi "Envios pausados" =
WhatsApp desconectado. Acesse dashboard.chatappbrasil.com, reconecte e clique
em "Reativar envios" no alerta do painel.

== Changelog ==

= 3.0.7 =
* CORRECAO: Adicionado o callback que faltava para o retry do Asaas PIX (wlp_asaas_pix_retry). Antes o evento era agendado quando o meta __ASAAS_ORDER ainda nao estava salvo, mas nunca era tratado, e a mensagem podia nunca ser enviada
* CORRECAO: A deduplicacao deixou de bloquear lembretes, PIX expirado e reenvios manuais (envios com parametro resend), que agora sempre passam
* MELHORIA: Unificado o log das mensagens de Back In Stock (removida a gravacao manual duplicada); agora ha um unico registro por envio, identificado como Back in Stock e com o nome do cliente
* MELHORIA: A aba Debug agora exibe um quadro fixo com as integracoes suportadas e suas versoes instaladas (Melhor Envio, Mercado Pago, Asaas, Correios, CartBounty, Back In Stock Notifier, WooCommerce, etc), indicando ativo/nao instalado, alem da versao do plugin, do WordPress e do PHP

= 3.0.6 =
* CORRECAO: Back In Stock voltou a disparar o WhatsApp quando o e-mail de retorno ao estoque e enviado. O handler resolvia o produto do assinante por uma chave de meta errada (cwginstock_product_id) e abortava; agora usa cwginstock_pid/cwginstock_bypass_pid. Tambem passou a ouvir os eventos de envio automatico e manual (cwginstock_auto_email_sent e cwginstock_manual_email_sent)
* MELHORIA: Nova aba Back In Stock no log, no mesmo estilo dos Carrinhos abandonados, listando os assinantes elegiveis (com telefone) com status "Aguardando estoque" (ampulheta), "E-mail enviado" e "WhatsApp enviado", alem do status de estoque atual do produto

= 3.0.5 =
* CORRECAO: PIX expirado nao era agendado quando o modo de envio estava em "Lembrete" (a funcao retornava antes de agendar). Agora o PIX expirado e agendado em qualquer modo, no Mercado Pago e no Asaas
* CORRECAO: A mensagem de PIX expirado nunca disparava porque exigia o pedido em pending/on-hold, mas ao expirar o gateway ja cancela o pedido. Agora ela e enviada a menos que o cliente tenha pago (processando/concluido/reembolsado)
* MELHORIA: Back In Stock mais robusto na leitura do telefone do assinante (tenta multiplas chaves de meta, incluindo subscriber_phone) e o cron deixou de excluir assinantes por causa do nome da chave de telefone

= 3.0.4 =
* MELHORIA: Log de mensagens agora tem busca por nome, telefone ou numero do pedido, e filtro por tipo de mensagem (pedido concluido, processando, falhou, aguardando, PIX gerado, envio de rastreio, carrinho abandonado, assinatura, Back in Stock, etc). A busca e o filtro respeitam a paginacao
* MELHORIA: Cada envio agora registra o nome do cliente no log e a mensagem de carrinho abandonado passou a ser identificada como tal (antes caia em "Pedido")

= 3.0.3 =
* CORREÇÃO: Deteccao do plugin Melhor Envio na aba Rastreamento. O plugin verificava o arquivo melhor-envio-cotacao.php (inexistente) e a classe MelhorEnvio\MelhorEnvio (inexistente), exibindo "nao esta instalado ou ativo" mesmo com o Melhor Envio ativo. Agora detecta pela constante MELHORENVIO_VERSION, pela classe Melhor_Envio_Plugin e pelo arquivo correto melhor-envio-beta.php

= 3.0.2 =
* CORREÇÃO: Lembrete de carrinho abandonado não é mais enviado quando o cliente já fez a compra. Antes de disparar, o plugin verifica via wc_get_orders (compatível com HPOS) se já existe pedido pago (processando ou concluído) para o e-mail ou telefone do carrinho e, em caso positivo, marca o carrinho como concluído para não reenviar
* UX: Tela de Carrinhos abandonados passa a ocultar carrinhos sem número de telefone e a exibir apenas carrinhos criados após a ativação do plugin (wlp_install_date). Contagem e paginação ajustadas aos mesmos filtros
* UX: Carrinhos que viraram venda agora exibem o selo "(recuperado)" na coluna Status WA e um aviso no detalhe; o botão de envio manual fica oculto nesses casos
* FILTRO: Novo hook wlp_converted_order_statuses para personalizar quais status de pedido contam como "já comprou" (padrão: processando e concluído)

= 3.0.1 =
* ARQUITETURA: wlp-main.php refatorado de 3.300 para 1.942 linhas com separação em 7 PHP Traits
* ARQUITETURA: Criado includes/trait-wlp-api.php — HTTP client, send_msg, process_variables, QR image
* ARQUITETURA: Criado includes/trait-wlp-orders.php — process_states, order_receive, resend
* ARQUITETURA: Criado includes/trait-wlp-payments.php — MP PIX, Asaas PIX, Asaas Boleto, expirados
* ARQUITETURA: Criado includes/trait-wlp-cart.php — CartBounty, abandoned_order, aftersales
* ARQUITETURA: Criado includes/trait-wlp-subscriptions.php — 7 eventos de assinatura WCS
* ARQUITETURA: Criado includes/trait-wlp-tracking.php — Correios e Melhor Envio
* ARQUITETURA: Criado includes/trait-wlp-bis.php — Back In Stock + watchers + cron
* PERFORMANCE: CSS do painel extraído para assets/css/wlp-admin.css (cache do browser)
* PERFORMANCE: Endpoint público AJAX get_base_url removido; URL injetada via wp_localize_script
* PERFORMANCE: Limpeza de cliques (90 dias) movida do AJAX público para cron diário
* SEGURANÇA: Validação de tamanho (máx. 2 MB) e MIME (JPEG/PNG/WebP/GIF) antes do envio de mídia
* CORREÇÃO: Normalização de posição do botão agora aplica corretamente o mapa de variantes legadas
* LIMPEZA: Variável $curl_err morta removida
* LIMPEZA: UI de wlp_autoresponders sem backend removida do JS administrativo
* CONFIABILIDADE: Watchers BIS (save_post, meta, transition_post_status) registrados como hooks
* UX: Aba "📚 Tags" adicionada ao painel de Notificações com referência completa de variáveis
* UX: Frequência do cron de carrinho abandonado configurável na tela de Segurança (1/2/5/10 min)
* DEPRECIADO: wlp_bis_legacy_hook(), remove_emoji(), wlp_wa_encoding() marcados @deprecated

= 2.9.8 =
* PERFORMANCE: Cron do carrinho abandonado configurável (1, 2, 5 ou 10 min) com padrão de 5 min
* CONFIABILIDADE: Watchers BIS registrados como hooks formais (save_post, updated_post_meta, transition_post_status)
* DEPRECIADO: wlp_bis_legacy_hook(), remove_emoji(), wlp_wa_encoding() marcados com @deprecated
* UX: Aba "📚 Tags" exposta no painel de Notificações (render_help)

= 2.9.7 =
* SEGURANÇA: Endpoint público AJAX get_base_url removido; URL injetada via wp_localize_script
* PERFORMANCE: DELETE de retenção de cliques movido do AJAX para cron diário wlp_button_cleanup_clicks
* SEGURANÇA: Validação de tamanho (máx. 2 MB) e MIME antes do envio de mídia
* LIMPEZA: Variável $curl_err morta removida
* CORREÇÃO: Normalização de posição do botão aplica corretamente $pos_map[$val]
* LIMPEZA: UI wlp_autoresponders removida do JS (backend nunca implementado)

= 2.9.6 =
* SEGURANÇA: MD5 substituído por wp_hash() na validação do Access Token
* SEGURANÇA: @unserialize substituído por is_serialized() + allowed_classes false
* SEGURANÇA: cURL manual substituído por WP_Http no envio de imagens
* PERFORMANCE: Hook admin_init de migração com guard (só registra se necessário)
* LIMPEZA: Lottie Player removido (hook + método enqueue_lottie)
* CORREÇÃO: Posições do botão normalizadas (left-bottom → bottom-left)
* LIMPEZA: uninstall.php remove logs JSONL, flags de migração e transients

= 2.9.6 =
* SEGURANÇA: MD5 substituído por wp_hash() (HMAC-SHA256) na validação do Access Token
* SEGURANÇA: @unserialize substituído por verificação com is_serialized() + allowed_classes false
* SEGURANÇA: cURL manual substituído por WP_Http (wp_remote_post) no envio de imagens
* SEGURANÇA: Todos os dados de log já usam esc_html() na renderização (proteção XSS)
* PERFORMANCE: Hook admin_init de migração agora só registra se a migração ainda não ocorreu
* PERFORMANCE: Código morto do Lottie Player removido (hook + método enqueue_lottie)
* CORREÇÃO: Posições do botão flutuante normalizadas (left-bottom → bottom-left)
* LIMPEZA: uninstall.php agora remove logs JSONL, flags de migração e transients

= 2.9.0 =
* NOVO: Integração Asaas PIX — QR code + código copia e cola, modos imediato/lembrete
* NOVO: Integração Asaas Boleto — link do boleto via %boleto_url%
* NOVO: Notificação de PIX expirado — compartilhada entre Mercado Pago e Asaas
* NOVO: Aba Pagamentos — centraliza Mercado Pago PIX, Asaas PIX, Asaas Boleto e PIX Expirado
* NOVO: Aba Rastreamento — Correios e Melhor Envio com detecção automática
* NOVO: Tags %tracking_code%, %tracking_url% — código e link de rastreio
* NOVO: Tags %order_status%, %order_time%, %payment_url% — novas tags para mensagens
* CORRIGIDO: Notificação de "envios pausados" aparecia duplicada no painel admin
* ATUALIZADO: readme.txt e readme-en_US.txt completos para v2.9.0

= 2.8.0 =
* NOVO: Lembrete PIX, notas privadas nos pedidos, toggle por notificação
* NOVO: Linhas expansíveis nos logs, monitoramento de erros, friendly errors
* CORRIGIDO: Estatísticas de logs, quebra de linha CF7, botão Limpar Logs

= 2.7.5 =
* Rate limiting, filtro de horário, dedup configurável, Back In Stock, debug mode

= 2.7.0 =
* Compatibilidade HPOS, wc_get_order(), WC_Order API

= 2.0.0 =
* Botão flutuante SVG com preview, rastreamento de cliques

= 1.0.0 =
* Lançamento inicial
