Tema
Protocolo
Cada conversa de venda no balcão: objetivo, estrutura, escada de planos e fechamento no recorrente.
Os números abaixo estão em painel na resposta de GET /v1/painel. A chamada sempre leva Id_unidade e o período. Toda lista de atendimentos vem em ordem de data e horário, do mais cedo para o mais tarde.
bash
curl "https://api.ouvixpro.ai/v1/painel?Id_unidade=375&de=2026-10-06&ate=2026-10-06" \
-H "Authorization: Bearer $OUVIX_API_KEY"Quer a tela pronta?
Esta mesma visão já vem montada em painel.tela.venda (cards com texto, cor e lista de evidências) e, mais leve, em GET /v1/tela?tela=venda. O guia Montando a tela mostra bloco a bloco.
| Campo | Tipo | O que é |
|---|---|---|
motivosNaoFechou | array | Por que o aluno novo saiu sem fechar, com quantidade. Valores em "Motivos de não fechar". |
protocolo | object | Venda e renovação: funil (conversas → apresentou o recorrente → fechou), listas fechadas / abertas / semDesfecho, passos do protocolo, planos e objeções. Campos na tabela "Dentro de protocolo". |
Como ler o desfecho
Cada conversa de plano com visitante cai em uma, e só uma, destas três listas de painel.protocolo:
| Lista | Regra | Na tela |
|---|---|---|
fechadas | fechou === true ou protocolo.plano_fechado preenchido | "Fechou · Recorrente R$ 129,90" |
abertas | fechou === false (saiu sem fechar e isso aparece no áudio) | "Não fechou", com motivo_nao_fechou |
semDesfecho | fechou === null (o áudio corta antes do fim) | "Sem desfecho no áudio" |
vendasN = fechadas.length + abertas.length + semDesfecho.length e fechouN = fechadas.length.
Regras que o leitor de desfecho aplica, na ordem:
- Fechou só com sinal forte na fala: link do contrato, cadastro do cartão, "fechou", liberação do acesso. A frase vem em
desfecho_venda.evidencia. - Diária avulsa (R$ 49,90) não é plano:
fechou=false,motivo_nao_fechou="diaria". - Cadastro digital ou ativação de quem já pagou antes não é venda: fica fora de
vendas(desfecho_venda.eh_venda=false). - Quem entra por Gympass/Wellhub ou TotalPass fica fora de
vendas(agregadorpreenchido). - Áudio cortado sem despedida nem combinado:
fechou=null.
Dentro de protocolo
| Campo | Tipo | O que é |
|---|---|---|
vendasN | number | Conversas de plano com visitante no período (fechadas + abertas + sem desfecho). |
recorrenteN | number | Quantas dessas conversas tiveram o recorrente (R$ 129,90) apresentado. |
fechouN | number | Quantas fecharam um plano. Igual a fechadas.length. |
fechadas | array | Atendimentos que fecharam plano (fechou=true ou protocolo.plano_fechado). Cada item tem id. |
abertas | array | Atendimentos que saíram sem fechar e isso aparece no áudio (fechou=false). Veja motivo_nao_fechou e desfecho_venda.proximo_passo. |
semDesfecho | array | Atendimentos em que o áudio corta antes do fim (fechou=null). Não contam nem como fechada nem como aberta. |
vendas | array | Todas as conversas de plano, em ordem de horário. União de fechadas, abertas e semDesfecho. |
objetivoPct | number / null | Percentual das conversas em que a recepção perguntou o objetivo. |
escadaPct | number / null | Percentual com a escada de planos na ordem (Prime → Recorrente → Anual → Quadrimestral). |
recorrentePct | number / null | Percentual em que o recorrente foi apresentado. |
registroPct | number / null | Percentual com nome, contato e origem registrados. |
fechamentoPct | number / null | Percentual em que a recepção pediu o fechamento ou fechou. |
avaliacaoPct | number / null | Percentual em que a avaliação física foi oferecida. |
experimentacaoN | number | Quem não fechou e saiu com visitas de experimentação marcadas. |
passosVenda | array | Os 7 passos do protocolo de venda: id, label, meta, feitos, total, pct e as listas fez / faltou (atendimentos com id). |
planos | array | Planos fechados no período: plano, label e qtd. |
objecoes | array | Objeções ditas por quem não fechou: tipo, label e qtd. |
renovacoesN | number | Conversas de renovação (aluno no Prime Mensal que podia ir pro Recorrente). |
oferecidas | number | Renovações em que o recorrente foi oferecido. |
migradas | number | Renovações que migraram para o recorrente. |
renovacoes | array | Conversas de renovação, em ordem de horário, com id. |
migradasLista | array | Renovações que migraram, com id. |
ficaramLista | array | Renovações que ficaram no plano antigo, com id. |
passosRenovacao | array | Passos do protocolo de renovação, no mesmo formato de passosVenda. |
motivosRenovacao | array | Por que não migrou: motivo (cartao, pensar, totalpass, outro), label e qtd. |
Dentro de desfecho_venda
Vem em cada atendimento de vendas, fechadas, abertas e semDesfecho.
| Campo | Tipo | O que é |
|---|---|---|
eh_venda | boolean | Verdadeiro quando é uma conversa de plano com visitante. Falso em cadastro digital, ativação de quem já pagou e check-in de agregador. |
fechou | boolean / null | true fechou um plano; false saiu sem fechar; null o áudio corta antes do fim. Só vem preenchido quando eh_venda=true. |
plano_fechado | string / null | Plano fechado: prime, recorrente, anual, quadrimestral, familia ou melhor_idade. Sempre null quando fechou=false. |
evidencia | string | A fala literal que prova o desfecho ("vou mandar o link do contrato", "eu fecho amanhã"). |
proximo_passo | string | O que ficou combinado quando não fechou (volta amanhã, WhatsApp, avaliação). |
Motivos de não fechar
Valores possíveis de motivo_nao_fechou e de motivosNaoFechou[].motivo.
| Valor | Rótulo na tela | Quando |
|---|---|---|
volta_depois | Volta outro dia pra fechar | Disse que volta amanhã ou outro dia para fechar (sem documento, sem cartão, vai trazer alguém). |
diaria | Pagou só a diária | Pagou a diária avulsa (R$ 49,90) e não entrou em plano. |
preco | Preço | Achou caro ou comparou preço. |
caro | Tá caro | Disse explicitamente que está caro. |
horario | Horário | O horário da academia ou da aula não serve. |
vai_pensar | Vai pensar | Vai pensar, sem data para voltar. |
vou_pensar | Disse que ia ver | "Vou ver", sem compromisso. |
conjuge | Vou ver com marido/esposa | Depende de outra pessoa. |
totalpass | TotalPass | Prefere ou já tem TotalPass. |
cartao | Não quer cartão | Não quis deixar o cartão no recorrente. |
pix | Quer pagar no Pix | Quer pagar à vista no Pix. |
so_olhando | Só olhando | Veio só conhecer. |
sem_oferta | Sem oferta da recepção | A recepção não ofereceu plano. |
outro | Outro | Qualquer outro motivo. |
Exemplo
json
{
"Id_unidade": "375",
"visao": "recepcao",
"de": "2026-10-06",
"ate": "2026-10-06",
"turno": "todos",
"painel": {
"motivosNaoFechou": [
{
"motivo": "volta_depois",
"label": "Volta outro dia pra fechar",
"qtd": 2
},
{
"motivo": "diaria",
"label": "Pagou só a diária",
"qtd": 1
}
],
"protocolo": {
"vendasN": 10,
"recorrenteN": 8,
"fechouN": 6,
"fechadas": [
{
"id": "2026-10-06:atend_35",
"horario": "17:40:28",
"fechou": true,
"protocolo": {
"cena": "venda_nova",
"plano_fechado": "recorrente"
}
}
],
"abertas": [
{
"id": "2026-10-06:atend_27",
"horario": "13:16:41",
"fechou": false,
"motivo_nao_fechou": "volta_depois",
"desfecho_venda": {
"eh_venda": true,
"fechou": false,
"plano_fechado": null,
"evidencia": "sem documento sem nada nem cartão mas eu fecho amanhã",
"proximo_passo": "Volta amanhã para fechar o quadrimestral."
}
}
],
"semDesfecho": [
{
"id": "2026-10-06:atend_4",
"horario": "06:36:20",
"fechou": null,
"truncado": true
}
],
"objetivoPct": 0,
"escadaPct": 40,
"recorrentePct": 80,
"registroPct": 10,
"fechamentoPct": 60,
"planos": [
{
"plano": "recorrente",
"label": "Recorrente R$ 129,90",
"qtd": 2
},
{
"plano": "quadrimestral",
"label": "Quadrimestral R$ 99,90",
"qtd": 2
}
],
"objecoes": [],
"renovacoesN": 0,
"oferecidas": 0,
"migradas": 0,
"motivosRenovacao": []
}
}
}