diff --git a/src/app/__tests__/commercial-truth-p0.test.tsx b/src/app/__tests__/commercial-truth-p0.test.tsx new file mode 100644 index 00000000..62592322 --- /dev/null +++ b/src/app/__tests__/commercial-truth-p0.test.tsx @@ -0,0 +1,77 @@ +/** @vitest-environment jsdom */ +import { describe, expect, it, vi, beforeEach } from "vitest"; +import { render, screen } from "@testing-library/react"; +import PrecosPage from "../precos/page"; +import AutomacaoWhatsAppPage from "../automacao-whatsapp/page"; +import { ProductsHubClient } from "@/components/products/products-hub-client"; +import { getBlogArticleBySlug } from "@/lib/blog"; + +vi.mock("@/lib/analytics", () => ({ + trackCtaWhatsAppClick: vi.fn(), + trackFunnelCtaClick: vi.fn(), + trackProductsPageCtaClicked: vi.fn(), + trackToolCardClick: vi.fn(), + trackEcosystemLinkClick: vi.fn(), +})); + +const BANNED = [ + "Piloto grátis", + "Piloto de 7 dias", + "1.000 mensagens", + "Mensagens ilimitadas", + "Métricas avançadas", + "métricas em tempo real", + "SLA dedicado", + "Suporte 24/7", + "responde 24/7", + "sem ocupar a equipe", + "handoff inteligente", + "handoff imediato", + "operações reais", + "em produção em operações reais", +]; + +function expectNoBannedClaims(text: string) { + for (const claim of BANNED) { + expect(text.toLowerCase()).not.toContain(claim.toLowerCase()); + } +} + +describe("P0 commercial truth", () => { + beforeEach(() => { + vi.stubEnv("NEXT_PUBLIC_WHATSAPP_NUMBER", "5511999999999"); + }); + + it("preços não promete cota, SLA, métrica avançada nem suporte 24/7", () => { + render(); + const text = document.body.textContent ?? ""; + expectNoBannedClaims(text); + expect(text).toMatch(/Implantação acompanhada/i); + expect(text).toMatch(/Operação mensal/i); + expect(text).not.toMatch(/R\$\s?\d/); + }); + + it("automação não promete autonomia 24/7 nem handoff inteligente", () => { + render(); + const text = document.body.textContent ?? ""; + expectNoBannedClaims(text); + expect(text).toMatch(/Automatize o repetitivo/i); + expect(text).toMatch(/segue para a equipe/i); + }); + + it("hub de produtos não usa operações reais como prova", () => { + render(); + const text = document.body.textContent ?? ""; + expectNoBannedClaims(text); + expect(screen.getByRole("heading", { name: /Produtos DevFlow/i })).toBeInTheDocument(); + }); + + it("artigo de custo operacional não afirma produção em clientes", () => { + const article = getBlogArticleBySlug("reduzir-custo-operacional-automacao"); + expect(article).toBeDefined(); + const text = `${article?.description ?? ""} ${article?.content ?? ""}`; + expectNoBannedClaims(text); + expect(text).toMatch(/organizar operações de atendimento/i); + expect(text).not.toMatch(/em produção/i); + }); +}); diff --git a/src/app/automacao-whatsapp/page.tsx b/src/app/automacao-whatsapp/page.tsx index 33e388c7..bb6242a1 100644 --- a/src/app/automacao-whatsapp/page.tsx +++ b/src/app/automacao-whatsapp/page.tsx @@ -11,44 +11,44 @@ const ogImage = `${baseUrl}/og-devflow.png`; const faqItems = [ { q: "Automação substitui atendente?", - a: "Substitui tarefas repetitivas e primeiro contato. Quando o cliente pede humano, há exceção ou venda complexa, o handoff deve ser imediato — com histórico e contexto na fila.", + a: "Não. Ela responde o que foi permitido. Quando a conversa exige contexto, exceção ou uma pessoa, ela segue para a equipe, com o histórico na fila.", }, { q: "Preciso de API oficial da Meta?", - a: "Para operação séria com múltiplos agentes, filas e métricas, o caminho é integração sobre a infraestrutura oficial. Veja o guia em WhatsApp Business API e como isso se conecta ao produto.", + a: "Sim. A operação usa a WhatsApp Cloud API oficial, com inbox, responsáveis e filas. A ativação do número é acompanhada.", }, { q: "Quanto tempo leva para ver valor?", - a: "A demo guiada mostra o fluxo em minutos. Piloto comercial depende do seu volume e canais; o importante é medir tempo de primeira resposta e taxa de conversão antes e depois.", + a: "A demo é uma simulação do fluxo. O diagnóstico define o que entra na implantação acompanhada.", }, ]; const heroBullets = [ - "Automação que responde 24/7 sem perder qualidade", - "Métricas em tempo real e handoff para equipe humana", - "Operação confiável para escalar o atendimento", + "Automatize o repetitivo e leve exceções para a equipe", + "Acompanhe responsáveis, filas e o estado das conversas", + "A configuração inicial é acompanhada pela DevFlow", ]; const features = [ { title: "Respostas automáticas", description: - "O sistema responde sozinho perguntas frequentes, 24/7, sem ocupar a equipe.", + "Pode responder automaticamente fluxos permitidos quando a automação está ativa.", }, { - title: "Handoff inteligente", + title: "Handoff para uma pessoa", description: - "Quando o cliente pede atendente ou o fluxo exige, a conversa vai para humano na hora.", + "Quando o cliente pede atendente ou o fluxo exige, a conversa segue para a equipe.", }, { - title: "Métricas por intent e horário", + title: "Estado da conversa", description: - "Veja o que foi automatizado e o que virou atendimento, em tempo real.", + "Acompanhe responsáveis, filas e o que ainda precisa de resposta.", }, { - title: "Visão operacional", + title: "Histórico compartilhado", description: - "Dashboards simples para acompanhar performance e volume da operação.", + "Quem assume a conversa vê o contexto que já estava no inbox.", }, ]; @@ -64,13 +64,13 @@ const howItWorksSteps = [ icon: MessageCircle, title: "Cliente envia mensagem no WhatsApp", description: - "O cliente manda a primeira mensagem. O sistema recebe e identifica a intenção.", + "O cliente manda a primeira mensagem. Se a automação estiver ativa, o fluxo permitido pode responder.", }, { icon: Zap, - title: "O sistema responde automaticamente", + title: "A automação responde o que foi permitido", description: - "Conforme a intenção, a resposta é enviada na hora — sem fila, sem espera.", + "Dúvidas do roteiro configurado podem ser respondidas automaticamente. O restante fica com a equipe.", }, { icon: UserRound, @@ -83,7 +83,7 @@ const howItWorksSteps = [ export const metadata: Metadata = { title: "Automação de WhatsApp para Empresas | DevFlow Labs", description: - "Automatize atendimento no WhatsApp com IA, métricas e controle da operação. Sistema de automação para empresas. Piloto grátis.", + "Automatize o repetitivo no WhatsApp e encaminhe exceções para a equipe. Implantação acompanhada.", keywords: [ "automação whatsapp empresa", "automação whatsapp atendimento", @@ -99,7 +99,7 @@ export const metadata: Metadata = { siteName: "DevFlow Labs", title: "Automação de WhatsApp para Empresas | DevFlow Labs", description: - "Automatize atendimento no WhatsApp com IA, métricas e controle da operação.", + "Automação supervisionada no WhatsApp: o repetitivo pode ser respondido e a exceção segue para a equipe.", url: `${baseUrl}/automacao-whatsapp`, images: [ { @@ -114,7 +114,7 @@ export const metadata: Metadata = { card: "summary_large_image", title: "Automação WhatsApp para Empresas | DevFlow Labs", description: - "Automatize atendimento no WhatsApp com IA, métricas e controle da operação.", + "Automação no repetitivo, com handoff para a equipe. Implantação acompanhada.", images: [ogImage], }, }; @@ -135,8 +135,7 @@ export default function AutomacaoWhatsAppPage() { Automação de WhatsApp para Empresas

- Automatize atendimento, organize conversas e nunca deixe um cliente - sem retorno. IA + métricas + handoff humano. + Automatize o repetitivo e leve exceções para a equipe. Inbox, responsáveis e handoff.

- Recursos para automatizar, medir e controlar o atendimento. + Automação supervisionada dentro da operação de conversas.

{features.map((feature) => ( @@ -304,7 +303,7 @@ export default function AutomacaoWhatsAppPage() { Automação por segmento

- Soluções prontas para o seu tipo de negócio. + Páginas de exemplo por segmento. O desenho do fluxo entra no diagnóstico.

{segmentLinks.map((item) => ( @@ -341,7 +340,7 @@ export default function AutomacaoWhatsAppPage() { Quer automatizar seu WhatsApp?

- Piloto de 7 dias para testar. Sem compromisso. + O próximo passo é o diagnóstico. A demo é uma simulação, com dados ilustrativos.

{ name: /Veja como uma operação WhatsApp organizada funciona/i, }) ).toBeInTheDocument(); - expect(screen.getByRole("heading", { name: /Fluxo guiado: da mensagem ao dashboard/i })).toBeInTheDocument(); + expect(screen.getByRole("heading", { name: /Fluxo guiado: da mensagem à fila/i })).toBeInTheDocument(); expect(screen.getAllByText(/Cliente chama no WhatsApp/i).length).toBeGreaterThan(0); - expect(screen.getByLabelText(/Dashboard operacional simulado/i)).toBeInTheDocument(); + expect(screen.getAllByText(/Dados ilustrativos/i).length).toBeGreaterThan(0); + expect(screen.getByLabelText(/Painel ilustrativo da operação/i)).toBeInTheDocument(); + expect(screen.queryByText(/SLA/i)).not.toBeInTheDocument(); + expect(screen.queryByText(/operação real/i)).not.toBeInTheDocument(); const diagnoseLinks = screen.getAllByRole("link", { name: /Agendar diagnóstico/i }); expect(diagnoseLinks[0]).toHaveAttribute("href", "/contato"); diff --git a/src/app/demo/_components/DemoGuidedExperience.tsx b/src/app/demo/_components/DemoGuidedExperience.tsx index 36b476e5..d99b04e1 100644 --- a/src/app/demo/_components/DemoGuidedExperience.tsx +++ b/src/app/demo/_components/DemoGuidedExperience.tsx @@ -215,7 +215,7 @@ export function DemoGuidedExperience() { Veja como uma operação WhatsApp organizada funciona

- Simule o fluxo de IA, handoff humano, fila e dashboard antes de agendar o diagnóstico. + Simulação para apresentar o fluxo do produto: automação, handoff e fila. Dados ilustrativos.

- IA no repetitivo, humano no que importa — WhatsApp Cloud API oficial, fila priorizada, SLA e dashboard - operacional. Diagnóstico consultivo antes da implementação. + Automação no repetitivo e pessoa quando precisa. WhatsApp Cloud API oficial, responsáveis e filas. + Demonstração da plataforma, com dados ilustrativos.

@@ -266,8 +266,8 @@ export function DemoGuidedExperience() { Teste com um cenário do seu segmento

- Simulação interativa: envie mensagens como cliente e veja triagem, resposta automática e handoff - humano — o mesmo tipo de fluxo que implementamos na operação real. + Simulação interativa: envie mensagens como cliente e veja resposta automática e handoff. + Dados ilustrativos, não uma operação de cliente.

@@ -539,8 +537,7 @@ export function DemoGuidedExperience() { Pronto para organizar sua operação no WhatsApp?

- Agende o diagnóstico consultivo ou fale no WhatsApp — mapeamos volume, gargalos, handoff, SLA e dashboard - antes de implementar. + Agende o diagnóstico ou fale no WhatsApp. Mapeamos volume, fila, responsáveis e handoff antes de implantar.

- Repetitivo resolvido sem escalar — equipe livre para o que importa. + Repetitivo tratado pela automação. A equipe fica nos casos que precisam de contexto.

); @@ -144,12 +144,12 @@ function StepContent({ stepId }: { stepId: number }) {

{[ - ["Status", "Com atendente"], - ["SLA", "8 min restantes"], - ["Prioridade", "Alta"], - ["Responsável", "Equipe comercial"], + ["Status", "Em atendimento"], + ["Fila", "Fila Comercial"], + ["Estado", "Precisa resposta"], + ["Responsável", "Bruno"], ["Origem", "WhatsApp"], - ["Próxima ação", "Responder proposta"], + ["Histórico", "Preservado na conversa"], ].map(([label, value]) => (
{label}
@@ -183,10 +183,10 @@ export function DemoGuidedFlow() { id="demo-guided-flow-heading" className="mt-4 text-balance text-2xl font-bold tracking-tight text-foreground sm:text-3xl" > - Fluxo guiado: da mensagem ao dashboard + Fluxo guiado: da mensagem à fila

- Cinco etapas mostram como IA, handoff humano, fila e SLA funcionam juntos numa operação real. + Simulação para apresentar o fluxo do produto. Dados ilustrativos de automação, handoff e fila.

diff --git a/src/app/demo/_components/DemoOperationalDashboard.tsx b/src/app/demo/_components/DemoOperationalDashboard.tsx index b916191d..1260fce0 100644 --- a/src/app/demo/_components/DemoOperationalDashboard.tsx +++ b/src/app/demo/_components/DemoOperationalDashboard.tsx @@ -3,7 +3,7 @@ import { AlertTriangle, Bot, Clock, MessageCircle, TrendingUp, Users } from "lucide-react"; import { cn } from "@/lib/utils"; -type DashboardHighlight = "bot" | "human" | "sla" | "waiting" | "opportunity" | null; +type DashboardHighlight = "bot" | "human" | "queue" | "waiting" | "opportunity" | null; type DemoOperationalDashboardProps = { highlight?: DashboardHighlight; @@ -13,49 +13,48 @@ type DemoOperationalDashboardProps = { const metrics = [ { id: "messages" as const, - label: "Msg 24h", - value: "847", + label: "Inbox", + value: "Compartilhado", icon: MessageCircle, color: "df-status-brand", highlightKey: null, }, { id: "bot" as const, - label: "Resolvidas pelo bot", - value: "612", - sub: "72%", + label: "Automação", + value: "No repetitivo", icon: Bot, color: "df-status-info", highlightKey: "bot" as const, }, { id: "human" as const, - label: "Em atendimento humano", - value: "18", + label: "Em atendimento", + value: "Com Bruno", icon: Users, color: "df-status-warning", highlightKey: "human" as const, }, { - id: "sla" as const, - label: "SLA em risco", - value: "3", + id: "queue" as const, + label: "Precisa resposta", + value: "Sem responsável", icon: AlertTriangle, color: "df-status-danger", - highlightKey: "sla" as const, + highlightKey: "queue" as const, }, { id: "waiting" as const, label: "Aguardando", - value: "7", + value: "Na fila", icon: Clock, color: "df-status-warning", highlightKey: "waiting" as const, }, { id: "opportunity" as const, - label: "Oportunidades preservadas", - value: "5", + label: "Transferido", + value: "Para Carla", icon: TrendingUp, color: "df-status-success", highlightKey: "opportunity" as const, @@ -72,18 +71,18 @@ export function DemoOperationalDashboard({ "df-surface-elevated rounded-xl p-4 shadow-sm sm:p-5", className )} - aria-label="Dashboard operacional simulado" + aria-label="Painel ilustrativo da operação" >

- Dashboard operacional + Demonstração da plataforma

- Simulação + Dados ilustrativos

- Visão em tempo real — fila, SLA, bot vs humano e oportunidades comerciais. + Simulação do estado das conversas: responsável, fila e handoff. Não é uma operação de cliente.

@@ -101,8 +100,7 @@ export function DemoOperationalDashboard({

{m.label}

-

{m.value}

- {m.sub &&

{m.sub}

} +

{m.value}

); })} @@ -111,7 +109,7 @@ export function DemoOperationalDashboard({

WhatsApp Cloud API oficial

- IA no repetitivo · handoff humano · fila priorizada · SLA rastreável + IA no repetitivo · handoff para uma pessoa · fila · histórico

diff --git a/src/app/demo/_components/DemoOpsPanel.tsx b/src/app/demo/_components/DemoOpsPanel.tsx index b3cc6c68..e8c40c8f 100644 --- a/src/app/demo/_components/DemoOpsPanel.tsx +++ b/src/app/demo/_components/DemoOpsPanel.tsx @@ -41,7 +41,7 @@ export function DemoOpsPanel(props: DemoOpsPanelVariant) {

Painel operacional (simulado)

Nenhuma conversa na fila ainda. Avance o fluxo guiado acima ou escolha um segmento abaixo para ver status, - handoff e fila em tempo real — tudo local, sem API externa. + handoff e fila nesta simulação — tudo local, sem API externa.

); @@ -55,7 +55,7 @@ export function DemoOpsPanel(props: DemoOpsPanelVariant) { aria-label="Prévia operacional da demonstração" >

- Evidência operacional (simulada) + Estado ilustrativo

O que sua equipe veria no painel — sem dados reais nem rede. diff --git a/src/app/demo/_components/LegacyDemoExperience.tsx b/src/app/demo/_components/LegacyDemoExperience.tsx index 903ae20b..91879452 100644 --- a/src/app/demo/_components/LegacyDemoExperience.tsx +++ b/src/app/demo/_components/LegacyDemoExperience.tsx @@ -19,7 +19,7 @@ const BOT_RESPONSES: Record = { pagamento: "Aceitamos PIX, cartão e dinheiro. No delivery, PIX ou cartão.", "quero ver preços": "Os preços variam por item. Qual produto ou prato te interessa? Ou prefere que eu conecte você com nossa equipe para uma proposta?", "quero falar com humano": "Sem problemas! Conectando você com nossa equipe agora. Um atendente deve responder em instantes.", - "quero testar automação": "Esta conversa já é a demonstração! O bot respondeu automaticamente. Na operação real, sua equipe recebe o handoff quando o cliente pede. Quer ver o site completo? https://devflowlabs.com.br", + "quero testar automação": "Esta conversa já é a demonstração. A automação respondeu o que este roteiro permite. Quando o cliente pede uma pessoa, a conversa segue para a equipe. Quer ver o site completo? https://devflowlabs.com.br", default: "Ótima pergunta! Nossa equipe pode te ajudar com isso. Quer que eu conecte você com um atendente?", }; @@ -198,7 +198,7 @@ export function LegacyDemoExperience() {

- Esta é uma demonstração. Na operação real, o bot usa IA e se integra ao seu atendimento. + Demonstração da plataforma. Dados ilustrativos: a automação responde o que foi permitido e a conversa segue para a equipe quando precisa.

diff --git a/src/app/demo/layout.tsx b/src/app/demo/layout.tsx index fa4e6b0f..60baf60f 100644 --- a/src/app/demo/layout.tsx +++ b/src/app/demo/layout.tsx @@ -5,7 +5,7 @@ const ogImage = `${baseUrl}/og-devflow.png`; const demoTitle = "Demo WhatsApp Platform | DevFlow Labs"; const demoDescription = - "Veja na prática como a DevFlow organiza atendimento e vendas no WhatsApp com IA, handoff humano, fila, SLA e dashboard operacional."; + "Demonstração da plataforma: simulação com dados ilustrativos de inbox, responsáveis, filas e handoff humano."; export const metadata: Metadata = { metadataBase: new URL(baseUrl), diff --git a/src/app/precos/page.tsx b/src/app/precos/page.tsx index 7dc352b9..015866a6 100644 --- a/src/app/precos/page.tsx +++ b/src/app/precos/page.tsx @@ -14,57 +14,41 @@ const ogImage = `${baseUrl}/og-devflow.png`; const plans = [ { - name: "Starter", - description: "Para negócios que querem sair do atendimento manual", - price: "Implantação guiada + mensalidade", + name: "Implantação acompanhada", + description: "Diagnóstico, desenho dos fluxos e configuração inicial com a DevFlow", + price: "Projeto de implantação", features: [ - "Até 1.000 mensagens/mês", - "1 número WhatsApp", - "Respostas automáticas essenciais", - "Inbox com handoff humano", - "Suporte por e-mail", + "Diagnóstico da operação", + "Desenho dos fluxos", + "Apoio na configuração do WhatsApp Cloud API", + "Configuração da equipe", + "Treinamento inicial", ], cta: "Agendar diagnóstico", - ctaText: "Quero agendar diagnóstico para avaliar implantação guiada e mensalidade da operação.", + ctaText: "Quero agendar um diagnóstico para implantar a operação de conversas no WhatsApp.", featured: false, }, { - name: "Pro", - description: "Para negócios com equipe e maior volume de atendimento", - price: "Implantação guiada + mensalidade", + name: "Operação mensal", + description: "A equipe segue atendendo no inbox depois da implantação", + price: "Mensalidade da plataforma", features: [ - "Mensagens ilimitadas*", - "Múltiplos números", - "Métricas avançadas", - "Integrações", - "Suporte prioritário", + "Inbox compartilhado", + "Responsáveis e filas", + "Histórico da conversa", + "Handoff para uma pessoa", + "Automação no repetitivo, quando configurada", ], - badgeLabel: "Mais recomendado", - cta: "Montar plano Pro", - ctaText: "Quero montar um plano Pro com implantação guiada para meu volume de atendimento.", + cta: "Agendar diagnóstico", + ctaText: "Quero entender a operação mensal da WhatsApp Platform depois da implantação acompanhada.", featured: true, }, - { - name: "Enterprise", - description: "Para operações com múltiplas unidades, SLA e personalização", - price: "Projeto sob medida", - features: [ - "Operação personalizada", - "SLA dedicado", - "Onboarding assistido", - "Treinamento da equipe", - "Suporte 24/7", - ], - cta: "Falar sobre escala", - ctaText: "Quero falar sobre escala com projeto sob medida, implantação e evolução contínua.", - featured: false, - }, ]; export const metadata: Metadata = { - title: "Preços | Automação WhatsApp | DevFlow Labs", + title: "Preços | Operação de conversas no WhatsApp | DevFlow Labs", description: - "Planos de automação de atendimento no WhatsApp. Starter, Pro e Enterprise. Piloto grátis para testar.", + "Implantação acompanhada e operação mensal da WhatsApp Platform. O escopo é definido no diagnóstico.", alternates: { canonical: `${baseUrl}/precos`, }, @@ -74,7 +58,7 @@ export const metadata: Metadata = { siteName: "DevFlow Labs", title: "Preços | DevFlow Labs", description: - "Planos de automação WhatsApp. Piloto grátis para testar.", + "Implantação acompanhada e mensalidade da operação de conversas no WhatsApp.", url: `${baseUrl}/precos`, images: [ { @@ -88,7 +72,7 @@ export const metadata: Metadata = { twitter: { card: "summary_large_image", title: "Preços | DevFlow Labs", - description: "Planos Starter, Pro e Enterprise — veja a demo antes da proposta.", + description: "Implantação acompanhada e operação mensal. Veja a demo antes do diagnóstico.", images: [ogImage], }, }; @@ -102,10 +86,10 @@ export default function PrecosPage() { id="precos-heading" className="df-text-primary text-4xl font-bold tracking-tight sm:text-5xl" > - Planos para operar seu WhatsApp com automação, inbox e atendimento humano + Implantação acompanhada e operação mensal

- A DevFlow Labs configura sua operação, ativa o número, organiza sua equipe e deixa o WhatsApp pronto para vender com controle. + O escopo e o valor saem do diagnóstico. Não há tabela pública de cotas, nem preço fechado nesta página.

-
+
{plans.map((plan) => (
{plan.featured && ( - {plan.badgeLabel} + Depois da implantação )}

@@ -178,7 +162,7 @@ export default function PrecosPage() { Antes de falar com vendas, veja a plataforma funcionando

- Veja a inbox, automações, handoff humano e métricas em uma demonstração guiada. + Veja uma simulação de inbox, responsáveis, fila e handoff. Dados ilustrativos.

- * O plano final depende do volume de mensagens, quantidade de números, integrações e nível de implantação. Projetos podem incluir setup inicial + mensalidade recorrente. + O combinado depende do volume, da quantidade de números e do desenho da operação. Não publicamos cota de mensagens nem suporte contínuo fora do horário combinado no diagnóstico.

@@ -213,7 +197,7 @@ export default function PrecosPage() {

Implantação guiada

- Configuramos número, inbox, automações iniciais, handoff e métricas. + Configuramos número, inbox, automações iniciais, responsáveis e handoff.

diff --git a/src/app/produtos/whatsapp-platform/__tests__/whatsapp-platform-page.test.tsx b/src/app/produtos/whatsapp-platform/__tests__/whatsapp-platform-page.test.tsx index f3e630fb..a47cbf4e 100644 --- a/src/app/produtos/whatsapp-platform/__tests__/whatsapp-platform-page.test.tsx +++ b/src/app/produtos/whatsapp-platform/__tests__/whatsapp-platform-page.test.tsx @@ -43,6 +43,17 @@ describe("P0 — Landing /produtos/whatsapp-platform", () => { expect(contact[0]).toHaveAttribute("href", "/contato"); }); + it("não vende SLA, score nem garantia de mensagem duplicada", () => { + render(); + const text = document.body.textContent ?? ""; + expect(text).not.toMatch(/SLA/i); + expect(text).not.toContain("Score 94"); + expect(text).not.toMatch(/zero mensagem duplicada/i); + expect(text).not.toMatch(/zero msg duplicada/i); + expect(text).not.toMatch(/dashboard operacional/i); + expect(text).toMatch(/Dados ilustrativos/i); + }); + it("secção final inclui CTA WhatsApp e link para demo", () => { render(); const final = screen.getByRole("region", { name: /Quer sair da conversa com um plano/i }); diff --git a/src/app/produtos/whatsapp-platform/page.tsx b/src/app/produtos/whatsapp-platform/page.tsx index 756a5386..7a645c79 100644 --- a/src/app/produtos/whatsapp-platform/page.tsx +++ b/src/app/produtos/whatsapp-platform/page.tsx @@ -21,14 +21,14 @@ export const metadata: Metadata = { canonical: `${baseUrl}/produtos/whatsapp-platform`, }, description: - "Oferta consultiva de implementação da operação de atendimento e vendas no WhatsApp com IA, inbox multiatendente, automação e dashboard operacional.", + "Implantação acompanhada da operação de conversas no WhatsApp: inbox compartilhado, responsáveis, filas, histórico e automação supervisionada.", openGraph: { type: "website", locale: "pt_BR", siteName: "DevFlow Labs", - title: "WhatsApp Platform | Atendimento e Vendas com Escala", + title: "WhatsApp Platform | Operação de conversas | DevFlow Labs", description: - "Diagnóstico inicial, implementação guiada e operação acompanhada para transformar o WhatsApp em um canal previsível de atendimento e vendas.", + "Diagnóstico, desenho dos fluxos e implantação acompanhada. Inbox compartilhado, responsáveis, filas e handoff humano.", url: `${baseUrl}/produtos/whatsapp-platform`, images: [ { @@ -43,7 +43,7 @@ export const metadata: Metadata = { card: "summary_large_image", title: "WhatsApp Platform | DevFlow Labs", description: - "Implementação consultiva de atendimento e vendas no WhatsApp com IA aplicada ao repetitivo e foco em resultado operacional.", + "Operação de conversas no WhatsApp com inbox compartilhado, responsáveis, filas e automação no repetitivo.", images: [ogImage], }, }; diff --git a/src/components/products/products-hub-client.tsx b/src/components/products/products-hub-client.tsx index 774187d8..d159ef62 100644 --- a/src/components/products/products-hub-client.tsx +++ b/src/components/products/products-hub-client.tsx @@ -196,8 +196,7 @@ export function ProductsHubClient() { Produtos DevFlow

- Produtos que sustentam operações reais de atendimento e vendas no WhatsApp e no - financeiro, com próximo passo comercial claro. + Produtos para organizar operações digitais no WhatsApp e no financeiro, com próximo passo comercial claro.

-

Não é chat. É caixa.

+

O que a operação faz

- Operação que imprime ticket: escala, controle e performance no mesmo lugar + Inbox, responsável, fila e handoff no mesmo lugar

- Você não compra “mensagem bonita”. Compra velocidade de resposta, prioridade certa e número que sustenta - meta. + A equipe atende junto, vê o contexto e encaminha a conversa quando ela precisa de uma pessoa.

diff --git a/src/components/sections/whatsapp/hero-section.tsx b/src/components/sections/whatsapp/hero-section.tsx index a095b853..22be8892 100644 --- a/src/components/sections/whatsapp/hero-section.tsx +++ b/src/components/sections/whatsapp/hero-section.tsx @@ -1,7 +1,6 @@ import Link from "next/link"; import { ArrowRight, - BarChart3, CheckCircle2, MessageCircleMore, Radio, @@ -14,29 +13,29 @@ import { whatsappAppUrl } from "@/lib/whatsapp-app-url"; import { cn } from "@/lib/utils"; const heroPoints = [ - "Diagnóstico da operação atual para priorizar gargalos de atendimento e vendas", - "Implementação guiada da IA no repetitivo com handoff para o time certo", - "Gestão diária com SLA, fila priorizada e dashboard operacional", + "Diagnóstico da operação e desenho dos fluxos, com implantação acompanhada", + "Automação no repetitivo, com a conversa seguindo para uma pessoa quando precisa", + "Responsáveis, filas e histórico para acompanhar quem está com cada conversa", ]; const queueItems = [ { - name: "ACME · Upgrade anual", - status: "Score 94 · respondendo agora · SLA 6m restantes", - dot: "df-dot-success", - tag: "Vendas", + name: "Mariana", + status: "Precisa resposta · Sem responsável", + dot: "df-dot-warning", + tag: "Fila Comercial", }, { - name: "Clínica Horizonte", - status: "Automação disparada há 9s · doc no ar", - dot: "df-dot-info", - tag: "Suporte", + name: "João", + status: "Com Bruno · Em atendimento", + dot: "df-dot-success", + tag: "Fila Comercial", }, { - name: "Studio North", - status: "Handoff p/ Carla · deal quente preservado", - dot: "df-dot-warning", - tag: "Prioridade", + name: "Ana", + status: "Transferido para Carla", + dot: "df-dot-info", + tag: "Fila Suporte", }, ]; @@ -63,7 +62,7 @@ export function HeroSection() { · - API oficial · inbox · IA · score · SLA + API oficial · inbox · responsáveis · filas
@@ -71,11 +70,11 @@ export function HeroSection() { id="whatsapp-hero-heading" className="df-text-primary text-balance text-[1.65rem] font-bold leading-[1.15] tracking-tight sm:text-4xl sm:leading-[1.12] lg:text-[2.65rem] lg:leading-[1.08]" > - Implementamos sua operação de WhatsApp para responder rápido e vender com previsibilidade + Organize o WhatsApp da equipe com responsável, fila e histórico

- Da arquitetura de atendimento ao painel operacional, a DevFlow configura o fluxo completo com - inbox multiatendente, automação e IA aplicada ao repetitivo. + A DevFlow implanta a operação de conversas: inbox compartilhado, mais de uma pessoa atendendo, + automação no repetitivo e handoff para a equipe.

@@ -144,39 +143,39 @@ export function HeroSection() {

- Operações · agora + Demonstração da plataforma

- Ao vivo + Dados ilustrativos
-

Painel operacional

- Atualizado agora +

Estado das conversas

+ Simulação
-

1.284

+

Precisa resposta

- Mensagens · últimas 24h + Sem responsável

-

74%

+

Com Bruno

- Fechadas sem humano + Fila Comercial

- -

+31%

+ +

Transferido

- Lead → venda · vs. semana passada + Para Carla

@@ -184,9 +183,9 @@ export function HeroSection() {

- Fila priorizada + Fila

- 2 SLA no limite + Aguardando responsável
{queueItems.map((item) => ( diff --git a/src/components/sections/whatsapp/positioning-section.tsx b/src/components/sections/whatsapp/positioning-section.tsx index 0a1622f0..79c59303 100644 --- a/src/components/sections/whatsapp/positioning-section.tsx +++ b/src/components/sections/whatsapp/positioning-section.tsx @@ -4,13 +4,13 @@ import { Section } from "@/components/layout/Section"; const positioningPillars = [ { icon: Building2, - title: "Seu time, seu lucro", - description: "Atendimento interno com padrão de franquia — velocidade e previsibilidade.", + title: "A equipe no mesmo inbox", + description: "Mais de uma pessoa atende, com responsável, fila e histórico compartilhado.", }, { icon: Handshake, - title: "Seu produto, seu cliente", - description: "Entregue operação white-label com governança: cada cliente com painel e fila própria.", + title: "Implantação acompanhada", + description: "Diagnóstico, desenho dos fluxos e configuração da equipe com a DevFlow.", }, ]; @@ -18,15 +18,15 @@ export function PositioningSection() { return (
-

Dois jeitos de ganhar

+

Como entra em operação

- Use por dentro ou venda por fora — a plataforma aguenta os dois modelos + A operação fica com a sua equipe. A implantação começa com a DevFlow.

- Mesma lógica de fila, score e SLA. Só muda quem assina a conta — você ou seu cliente. + A equipe distribui e transfere conversas dentro das filas. O número e os fluxos são configurados na implantação acompanhada.

@@ -48,10 +48,10 @@ export function PositioningSection() {

- Zero enrolação: é operação que paga conta + O que dá para acompanhar hoje

- Sem cosmético. Fila, prioridade e métrica para bater meta — hoje no seu CNPJ ou no do seu cliente. + Quem está com a conversa, o que ainda precisa de resposta e o histórico entre atendentes.

diff --git a/src/components/sections/whatsapp/problem-section.tsx b/src/components/sections/whatsapp/problem-section.tsx index d8375ccf..08bc6b04 100644 --- a/src/components/sections/whatsapp/problem-section.tsx +++ b/src/components/sections/whatsapp/problem-section.tsx @@ -19,8 +19,8 @@ const problems = [ }, { icon: AlertTriangle, - title: "Gestão no escuro", - description: "Sem SLA, score e conversão visíveis, você gerencia no improviso.", + title: "Ninguém sabe quem responde", + description: "Sem responsável e sem fila, a conversa fica no celular de alguém e o restante da equipe não vê o contexto.", }, { icon: Users, diff --git a/src/components/sections/whatsapp/product-preview-section.tsx b/src/components/sections/whatsapp/product-preview-section.tsx index 36c1e133..0e760b00 100644 --- a/src/components/sections/whatsapp/product-preview-section.tsx +++ b/src/components/sections/whatsapp/product-preview-section.tsx @@ -1,71 +1,70 @@ import Link from "next/link"; -import { ArrowRight, BarChart3, Bot, Clock3, Search, Users2 } from "lucide-react"; +import { ArrowRight, Bot, Search, Users2 } from "lucide-react"; import { Section } from "@/components/layout/Section"; import { PRIMARY_DEMO_CTA_LABEL } from "@/lib/conversion-copy"; import { cn } from "@/lib/utils"; const inboxRows = [ { - initials: "AC", - contact: "ACME · Upgrade anual", - meta: "Digitando resposta… · SLA 6m", - score: "94", - tone: "df-bg-success-soft", + initials: "MA", + contact: "Mariana", + meta: "Precisa resposta · Sem responsável", + state: "Fila", + tone: "df-bg-warning-soft", }, { - initials: "CH", - contact: "Clínica Horizonte", - meta: "Fluxo disparado há 9s · PDF enviado", - score: "81", - tone: "df-bg-info-soft", + initials: "JO", + contact: "João", + meta: "Com Bruno · Fila Comercial", + state: "Bruno", + tone: "df-bg-success-soft", }, { - initials: "SN", - contact: "Studio North · Proposta", - meta: "Carla assumiu há 1m · deal quente", - score: "88", - tone: "df-bg-warning-soft", + initials: "AN", + contact: "Ana", + meta: "Transferido para Carla", + state: "Carla", + tone: "df-bg-info-soft", }, ]; const automationRuns = [ { - name: "Qualificação B2B", - status: "14/min", + name: "Dúvidas frequentes", + status: "Quando ativa", tone: "df-bg-success-soft df-status-success", }, { - name: "Suporte nível 1", - status: "Ativo", + name: "Encaminhar para a equipe", + status: "Handoff", tone: "df-bg-info-soft df-status-info", }, { - name: "Pós-venda D+7", - status: "Disparou agora", + name: "Aguardando pessoa", + status: "Na fila", tone: "df-text-secondary bg-muted/25 border-border", }, ]; -const metricBars = [ - { label: "1ª resposta", value: "42s", pct: 78, hint: "meta batida" }, - { label: "Bot fecha", value: "71%", pct: 71, hint: "hoje" }, - { label: "Lead → MQL", value: "18%", pct: 52, hint: "vs ontem" }, +const conversationStates = [ + { label: "Precisa resposta", value: "Sem responsável" }, + { label: "Em atendimento", value: "Com Bruno" }, + { label: "Transferido", value: "Para Carla" }, ]; export function ProductPreviewSection() { return (
-

Isso roda agora

+

Demonstração da plataforma

- Sua fila respondendo sozinha enquanto o comercial fecha no timing certo + A fila deixa claro o que ainda precisa de resposta

- Veja ação no painel: mensagens entrando, automação disparando, SLA apertando e o lead certo subindo — sem - planilha, sem caos no celular. + Dados ilustrativos. A equipe vê quem está com a conversa, o que está na fila e quando a automação encaminha para uma pessoa.

@@ -82,20 +81,20 @@ export function ProductPreviewSection() { DevFlow WhatsApp Platform

- Produção + Dados ilustrativos
- - 14 msgs/min + + Precisa resposta - 3 fluxos ativos - 2 SLA críticos + Fila Comercial + Sem responsável
- Último evento há 3s + Simulação
@@ -110,7 +109,7 @@ export function ProductPreviewSection() { Buscar deal, tag ou ticket…
- {["Todas", "SLA em risco", "Minha fila"].map((tab, i) => ( + {["Todas", "Precisa resposta", "Minha fila"].map((tab, i) => (

{row.contact}

- - {row.score} + + {row.state}

{row.meta}

@@ -156,22 +155,21 @@ export function ProductPreviewSection() {

Conversa ativa

-

ACME · Upgrade anual

+

João · Fila Comercial

- Score 94 + Com Bruno - SLA 8m + Em atendimento - Vendas + Fila Comercial
- - SLA 6m · fila quente + Aguardando responsável
@@ -180,26 +178,26 @@ export function ProductPreviewSection() { Automação · agora - Vi renovação anual. Confirmo 42 licenças e já mando link de pagamento? + Posso confirmar o horário de entrega para o centro?
- Cliente · agora + Cliente - São 42 licenças. Preciso falar com alguém sobre desconto progressivo. + Preciso falar com alguém sobre uma exceção nesse pedido.
- Sistema · +1s + Equipe - Carla já entrou com score, histórico e última proposta — zero retrabalho. + Conversa transferida para Carla, com o histórico preservado.
-

Regras ativas

+

O que a equipe vê

- Score mexe na fila · SLA grita antes de estourar · handoff manda contexto · zero msg duplicada + Responsável da conversa · fila · histórico compartilhado · encaminhamento para uma pessoa

@@ -228,25 +226,14 @@ export function ProductPreviewSection() {
-

Resultado hoje

- +

Estado da conversa

+
- {metricBars.map((m) => ( -
-
-

- {m.label}{" "} - · {m.hint} -

-

{m.value}

-
-
-
-
+ {conversationStates.map((m) => ( +
+

{m.label}

+

{m.value}

))}
@@ -259,8 +246,7 @@ export function ProductPreviewSection() {

- Em 2 minutos você vê a fila, a automação e o SLA — o mesmo gatilho que o time sente quando o produto - trabalha por ele. + A demonstração mostra fila, responsável e handoff. Dados ilustrativos, não uma operação de cliente.

- Troca improviso por máquina de receita no WhatsApp + Uma camada operacional para as conversas do WhatsApp

- Menos heroísmo, mais processo: fila organizada, automação no lugar certo e número na mesa pra decidir rápido. + Inbox, responsável, fila e handoff. A implantação é acompanhada: diagnóstico, desenho dos fluxos e configuração da equipe.

- Mesma plataforma. Cenários diferentes. Mesmo ganho: velocidade + controle + O mesmo tipo de operação, em contextos diferentes

diff --git a/src/lib/blog.ts b/src/lib/blog.ts index b39392ec..792bb811 100644 --- a/src/lib/blog.ts +++ b/src/lib/blog.ts @@ -105,7 +105,7 @@ export const blogArticles: BlogArticle[] = [

Mensagens perdidas, ninguém sabe quem respondeu o quê. Use uma plataforma que centralize e organize.

5. Bot sem handoff

Bot que não encaminha para humano frustra. O cliente pede atendente e continua falando com máquina? Péssimo.

-

Conheça a automação DevFlow com handoff inteligente.

+

Conheça a automação DevFlow com handoff para a equipe.

`, }, { @@ -166,15 +166,15 @@ export const blogArticles: BlogArticle[] = [

Custo operacional sobe quando muita gente faz a mesma coisa manualmente: responder "qual o horário?", "tem em estoque?", "qual o prazo?". Automação no WhatsApp tira parte desse peso e deixa a equipe para o que realmente precisa de humano.

Onde a automação corta custo

    -
  • Respostas repetidas — bot responde 24h sem aumentar headcount
  • +
  • Respostas repetidas — a automação pode responder o que foi permitido, quando está ativa
  • Triagem — cliente já chega com contexto quando é passado para humano
  • Menos erro — resposta padronizada evita informação errada ou esquecida

Não é "trocar gente por bot"

-

É realocar tempo. Quem atendia 50 mensagens iguais por dia passa a cuidar de 20 conversas que exigem decisão e empatia. A empresa atende mais e gasta melhor.

+

É realocar tempo. A equipe deixa de repetir as mesmas respostas e fica com as conversas que exigem contexto.

Por onde começar

-

Liste as perguntas que mais se repetem. Automatize essas. Mantenha handoff rápido para humano. Meça tempo de resposta e satisfação antes e depois.

-

Automação WhatsApp DevFlow — em produção em operações reais. Leia também: planilha vs app financeiro para organizar custos do dia a dia.

+

Liste as perguntas que mais se repetem. Automatize essas. Mantenha o encaminhamento para a equipe quando a conversa exigir contexto.

+

Automação WhatsApp DevFlow — a arquitetura foi desenvolvida para organizar operações de atendimento via WhatsApp. Leia também: planilha vs app financeiro para organizar custos do dia a dia.

`, }, ]; diff --git a/src/lib/devflow-product-catalog.ts b/src/lib/devflow-product-catalog.ts index 4f331e74..cbfe02c8 100644 --- a/src/lib/devflow-product-catalog.ts +++ b/src/lib/devflow-product-catalog.ts @@ -29,9 +29,9 @@ export const DEVFLOW_PRODUCT_CATALOG: DevflowCatalogProduct[] = [ id: "whatsapp_platform", navItemKey: "produto_whatsapp", name: "WhatsApp Platform", - summary: "Inbox, IA no repetitivo, handoff humano e dashboard operacional", - cardPitch: "Transforme volume de mensagens em operação previsível.", - audience: "Negócios que vivem de WhatsApp e precisam de métricas e controle.", + summary: "Inbox compartilhado, responsáveis, filas e automação no repetitivo", + cardPitch: "Organize as conversas da equipe com responsável, fila e histórico.", + audience: "Negócios que atendem pelo WhatsApp e precisam sair do celular de cada pessoa.", href: "/produtos/whatsapp-platform", featured: true, badge: "Principal", diff --git a/src/modules/demo/__tests__/demo-flow.integration.test.ts b/src/modules/demo/__tests__/demo-flow.integration.test.ts index 5115c909..cf4f7f24 100644 --- a/src/modules/demo/__tests__/demo-flow.integration.test.ts +++ b/src/modules/demo/__tests__/demo-flow.integration.test.ts @@ -37,7 +37,7 @@ describe("demo flow integration", () => { const afterHandoff = { ...after2, ...reply2.opsPatch } as typeof after2; const queued = applyHandoffQueueVisual(afterHandoff); expect(queued.status).toBe("na_fila"); - expect(queued.queueHint).toContain("Posição"); + expect(queued.queueHint).toContain("aguardando responsável"); }); it("loja: fluxo mínimo até defaultReply", () => { diff --git a/src/modules/demo/resolver.ts b/src/modules/demo/resolver.ts index 258eb42b..9c374c23 100644 --- a/src/modules/demo/resolver.ts +++ b/src/modules/demo/resolver.ts @@ -45,7 +45,7 @@ export function buildOpsAfterUserMessage( threadPreview: preview, lastClientMessage: userText, status: previous.status === "nova" ? "bot_ativo" : previous.status, - queueHint: previous.status === "nova" ? "Bot respondendo — SLA em segundos" : previous.queueHint, + queueHint: previous.status === "nova" ? "Automação respondendo o roteiro permitido" : previous.queueHint, }; } @@ -63,11 +63,11 @@ export function resolveDemoUserMessage( if (isHandoffIntent(userText)) { return { botText: - "Handoff humano ativado.\n\nNa operação real esta conversa sai do bot, aparece na fila / inbox com contexto completo, e um agente assume com histórico e tags de triagem.\n\nO cliente vê algo como: “Estamos te conectando com alguém da equipe.”", + "Handoff nesta simulação.\n\nA conversa sai da automação e aparece na fila, com o histórico, para alguém da equipe assumir.\n\nO cliente vê algo como: “Estamos te conectando com alguém da equipe.”", kind: "handoff", opsPatch: { status: "aguardando_humano", - queueHint: "Conversa na fila — próximo agente disponível", + queueHint: "Na fila — aguardando responsável", threadPreview: opsBeforeReply.lastClientMessage ?? opsBeforeReply.threadPreview, }, }; @@ -103,6 +103,6 @@ export function applyHandoffQueueVisual(ops: DemoOpsState): DemoOpsState { return { ...ops, status: "na_fila", - queueHint: "Posição estimada: 1 — agente notificado", + queueHint: "Na fila — aguardando responsável", }; } diff --git a/src/modules/demo/scenarios.ts b/src/modules/demo/scenarios.ts index 9cc12558..df9b3186 100644 --- a/src/modules/demo/scenarios.ts +++ b/src/modules/demo/scenarios.ts @@ -1,7 +1,7 @@ import type { DemoScenarioDefinition, DemoScenarioId } from "./types"; const VALUE_PREFIX = - "Resposta instantânea 24/7: você captura o lead, qualifica no chat e só chama humano quando faz sentido.\n\n"; + "Simulação com dados ilustrativos. A automação responde o que este roteiro permite e encaminha a conversa para a equipe quando precisa.\n\n"; export const DEMO_SCENARIOS: Record = { restaurante: { @@ -17,7 +17,7 @@ export const DEMO_SCENARIOS: Record = { ], keywordReplies: { reserva: - "Perfeito — triagem automática: anotei interesse em mesa para sábado. Na operação real isso cai no painel com prioridade e sua equipe confirma horário e lugares.\n\nQuer incluir observação (aniversário, criança)?", + "Anotei interesse em mesa para sábado nesta simulação. A equipe confirma horário e lugares.\n\nQuer incluir observação (aniversário, criança)?", mesa: "Consigo registrar o pedido de mesa e avisar a equipe na hora. Prefere almoço ou jantar?", vegan: "Sim — temos opções vegetarianas e veganas no cardápio. Quer que eu liste os pratos ou já encaminhe para o chef confirmar disponibilidade do dia?", @@ -58,9 +58,9 @@ export const DEMO_SCENARIOS: Record = { morango: "Temos essência de morango (clássica e com notas extras). Quer saber marca disponível ou já separar retirada?", essência: - "Temos linha variada de essências. Diga o sabor ou marca que busco disponibilidade em tempo real no estoque integrado.", + "Nesta simulação, diga o sabor ou a marca para eu encaminhar a pergunta de disponibilidade à equipe.", essencia: - "Temos linha variada de essências. Diga o sabor ou marca que busco disponibilidade em tempo real no estoque integrado.", + "Nesta simulação, diga o sabor ou a marca para eu encaminhar a pergunta de disponibilidade à equipe.", menta: "Menta em estoque. Quer 50g, 100g ou outro formato?", entrega: "Fazemos entrega na região (motoboy / parceiros). Informe bairro para eu confirmar cobertura e prazo.", @@ -72,7 +72,7 @@ export const DEMO_SCENARIOS: Record = { "Preços mudam por marca e peso. Posso dar faixa ou transferir para o balcão com seu interesse já resumido.", carvão: "Carvão e acessórios — temos pacotes P e G. Quer retirada ou entrega?", pedido: - "Pedido registrado na fila interna. Na operação real o balcão vê o resumo e só confirma pagamento.", + "Pedido anotado nesta simulação. A equipe vê o resumo na fila e confirma o pagamento.", }, defaultReply: "Posso ajudar com estoque, sabores ou entrega. Se for algo muito específico, o handoff para o balcão é um toque — quer que eu faça isso?",