Psicólogos
| Psicólogo | Plano | Assinatura | Mensalidade | Vencimento | Pacientes | Consultas (30d) | Cadastro |
|---|
Contas sem e-mail
Só você vê esta parte. A pessoa entra em agendazelo.com.br/login.html com o usuário e a senha, e não recebe e-mails do Zelo (os avisos chegam no sino e no celular).
| Nome | Usuário | Tipo | Psicólogo | Criada em |
|---|
Nenhuma conta sem e-mail ainda.
Cadastros não ativos
Só você vê esta parte. Quem criou conta e ainda não é psicólogo ativo: parou no meio do cadastro, está no teste, o teste acabou, atrasou ou cancelou. O botão abre o WhatsApp com uma mensagem pronta, que você pode mudar antes de enviar.
Pediram ajuda da equipe
Logo depois de criar a agenda, a Maria pergunta se a pessoa quer que a equipe do Zelo chame no WhatsApp. Estas disseram que sim. "Chamar" abre o WhatsApp com a mensagem pronta; depois toque em "Já chamei" para tirar daqui.
Essas contas foram criadas quando o e-mail de confirmação não chegava, e a pessoa ficou sem conseguir entrar. "Liberar" termina o cadastro por ela: a conta passa a entrar com o e-mail e a senha que ela escolheu e o psicólogo aparece na aba Psicólogos, no teste grátis. A pessoa recebe o e-mail "Sua conta no Zelo foi aprovada".
| Nome | Situação | Cadastro | Último acesso |
|---|
Ninguém parado no momento.
Página inicial
O número que atende o botão flutuante "Quero agendar uma conversa" em agendazelo.com.br. Sem número, o botão não aparece. A mudança chega ao site em até 1 minuto.
Falta um passo no Supabase (uma vez só)
Abra o Supabase, vá em SQL Editor, cole o código abaixo e toque em Run. Depois recarregue esta página.
create table if not exists configuracoes (
chave text primary key,
valor jsonb not null default '{}'::jsonb,
atualizado_em timestamptz not null default now(),
atualizado_por uuid
);
alter table configuracoes enable row level security;
Suporte dentro do app
O botão "Suporte" no topo da tela do paciente e do psicólogo. A pessoa escolhe o motivo, descreve rapidinho e a conversa abre neste WhatsApp, já com o texto escrito. Sem número, o botão não aparece.
Uso do app
Quais ferramentas os psicólogos abrem no app e quem está usando. Conta só a abertura da tela: nada do que está escrito nela (notas, áudios, pacientes ou valores).
Falta um passo no Supabase (uma vez só)
Rode o arquivo 17-v1.111-uso.sql no SQL Editor do Supabase e recarregue esta página. Até lá o app funciona normal, só não conta o uso.
Ferramentas mais usadas
Ordem: quantos psicólogos abriram cada uma. Toque num psicólogo lá embaixo para ver só as dele.
Psicólogos ativos por dia
Quantos entraram e abriram alguma ferramenta. Passe o dedo ou o mouse na barra.
Celular ou computador
Por psicólogo
Quem mais usou no período: dias em que entrou, último uso e as ferramentas que mais abre.
Fluxo do site
Como as pessoas andam pela página inicial até o cadastro de psicólogo: de onde vêm, até onde leem, em que botão tocam e quantas se cadastram. Cada visita conta uma vez. É anônimo: nenhum nome, e-mail, IP ou dado de paciente.
Falta um passo no Supabase (uma vez só)
Abra o Supabase, vá em SQL Editor, cole o código abaixo e toque em Run. Depois recarregue esta página. Até lá o site funciona normal, só não conta nada.
-- v1.77 — Fluxo da página comercial e pixel do Meta.
-- Rode uma vez no Supabase (SQL Editor → cole tudo → Run). Pode rodar de novo sem problema.
-- Deve aparecer "Success. No rows returned".
-- Configurações (já existe desde a v1.57; aqui só por garantia). O ID do pixel fica na chave 'meta_pixel'.
create table if not exists configuracoes (
chave text primary key,
valor jsonb not null default '{}'::jsonb,
atualizado_em timestamptz not null default now(),
atualizado_por uuid
);
alter table configuracoes enable row level security;
-- Eventos anônimos da página: nada de nome, e-mail, telefone, IP ou dado clínico.
-- "sessao" é um código sorteado no navegador que some quando a aba fecha.
create table if not exists eventos_site (
id bigint generated always as identity primary key,
criado_em timestamptz not null default now(),
sessao text not null check (sessao ~ '^[a-z0-9]{16,40}$'),
tipo text not null check (tipo in ('visita','secao','cta','whatsapp','cadastro_aberto','cadastro_concluido')),
pagina text not null check (pagina in ('inicio','cadastro')),
alvo text check (alvo is null or alvo ~ '^[a-z0-9_-]{1,40}$'),
utm_source text check (char_length(utm_source) <= 80),
utm_medium text check (char_length(utm_medium) <= 80),
utm_campaign text check (char_length(utm_campaign) <= 80),
utm_content text check (char_length(utm_content) <= 80),
referencia text check (char_length(referencia) <= 100),
anuncio_meta boolean not null default false,
dispositivo text check (dispositivo is null or dispositivo in ('celular','computador'))
);
create index if not exists eventos_site_criado_em on eventos_site (criado_em);
-- Só o servidor (chave de serviço) lê e grava. Sem política = ninguém de fora acessa.
alter table eventos_site enable row level security;
Funil
Quantas visitas chegaram a cada passo. Embaixo do número, quanto isso é do passo anterior: onde cai muito é onde a página precisa de ajuste.
Visitas por dia
Verde escuro: dia com pelo menos um cadastro. Passe o dedo ou o mouse na barra para ver o número.
De onde vieram
"anúncio" = veio de anúncio pago (utm_medium=pago ou link do Meta).
Celular ou computador
Em que botão tocaram
Botões "Criar minha agenda" de cada parte da página.
Até onde leram
Das visitas, quantas chegaram a cada parte da página, na ordem em que aparecem.
Campanhas
Pelo utm_campaign do link (nome da campanha no Meta).
Anúncios
Pelo utm_content do link (nome do anúncio no Meta).
Link dos anúncios
No Gerenciador de Anúncios, em cada anúncio: Rastreamento › Parâmetros de URL, cole o texto abaixo. O Meta troca as partes entre chaves pelo nome real, e aqui aparece de qual campanha e anúncio veio cada cadastro.
Na bio e nos posts do Instagram, use: agendazelo.com.br/?utm_source=instagram&utm_medium=bio
Pixel do Meta
DesligadoLiga o pixel na página inicial e no cadastro. Ele só carrega para quem toca em "Aceitar" no aviso de cookies (LGPD). Eventos enviados ao Meta: PageView, CliqueCriarAgenda, Contact (WhatsApp) e CompleteRegistration (cadastro concluído, o melhor para otimizar a campanha).
Onde pego o ID do pixel
- Abra business.facebook.com › Gerenciador de Eventos.
- Toque em Conectar fontes de dados › Web › Conectar. Dê o nome "Zelo site".
- Quando ele perguntar como instalar, escolha Instalar o código manualmente e pode fechar: o código já está no site.
- Copie o ID (só números, aparece embaixo do nome do conjunto de dados), cole aqui e salve.
- Em Configurações do conjunto, adicione o domínio agendazelo.com.br. Depois abra o site, aceite os cookies e veja o PageView chegar em Testar eventos.
Este aparelho
Para as suas visitas de teste não entrarem nos números. Vale só para este navegador.
Mensalidades
Quem pagou e quem não pagou a mensalidade do mês (o mês do vencimento), da plataforma inteira. Quem pagou fora do app, pelo link do cartão ou num Pix sem comprovante, você marca como pago aqui.
Comprovantes
O psicólogo paga a mensalidade pelo Pix na aba Financeiro do painel e manda o comprovante. Confira no extrato se o dinheiro caiu e confirme aqui: a assinatura fica em dia por mais um mês e ele recebe o aviso.
Falta um passo no Supabase (uma vez só)
Abra o Supabase, vá em SQL Editor, cole o conteúdo do arquivo sql/v1.62-financeiro.sql e toque em Run. Depois recarregue esta página.
Comprovantes para conferir
Preço dos planos
O preço padrão de cada plano, em reais por mês. Vale para todos os psicólogos, inclusive os que entrarem depois, e é o valor que já vem no Pix (quem está no teste grátis paga o Plus). Para alguém pagar diferente, ou não pagar, abra a ficha da pessoa em Psicólogos e mude a mensalidade ou marque cortesia; quem tem mensalidade própria paga só o mensal.
O semestral e o anual são pagos de uma vez, pelo período inteiro, e têm fidelidade: quem cancelar antes recebe de volta o que falta usar menos 30%, como está nos termos de uso. A página comercial mostra estes preços, sem falar da fidelidade; a pessoa vê e aceita os termos do plano no app, antes do Pix. Deixe o semestral ou o anual vazio para não oferecer.
Pix e cartão
Pix da mensalidade
A conta que recebe. O nome e a cidade aparecem no app do banco de quem paga: escreva como estão no seu banco. O valor sai do preço do plano (aba Preço dos planos) ou da mensalidade própria na ficha do psicólogo.
WhatsApp do financeiro (cartão de crédito)
Enquanto o cartão não está ligado, quem escolhe "Cartão de crédito" é levado a este WhatsApp com a mensagem "Desejo fazer o pagamento por cartão de crédito", o nome, o e-mail e o plano. A equipe responde com o link de pagamento.
Avisos e e-mails
Lembretes, confirmação de presença e avisos de atraso que o Zelo manda sozinho, a cada minuto. Aqui aparece se está tudo ligado e o que falhou.
Falta um passo no Supabase (uma vez só)
Abra o Supabase, vá em SQL Editor, cole o código abaixo e toque em Run. Depois recarregue esta página.
-- v1.57 — processo contra faltas. Rodar uma vez no Supabase (SQL Editor).
-- Pode rodar de novo sem problema: tudo é "if not exists".
-- Presença: o paciente confirma pelo e-mail ou pelo app, e a tela da
-- sessão registra quando cada um entrou na sala.
alter table consultas
add column if not exists presenca_confirmada_em timestamptz,
add column if not exists remarcar_pedido_em timestamptz,
add column if not exists paciente_entrou_em timestamptz,
add column if not exists psicologo_entrou_em timestamptz;
-- Registro de cada aviso que o Zelo manda (e-mail, app, e futuramente
-- WhatsApp). A chave única garante que nenhum aviso sai duas vezes, e o
-- status mostra no back-office o que falhou.
create table if not exists envios (
id bigserial primary key,
chave text not null unique,
consulta_id uuid references consultas(id) on delete cascade,
psicologo_id uuid,
tipo text not null,
canal text not null,
destinatario text not null,
status text not null default 'enviando',
detalhe text,
criado_em timestamptz not null default now(),
atualizado_em timestamptz not null default now()
);
create index if not exists envios_criado_em_idx on envios (criado_em desc);
alter table envios enable row level security;
-- Já criada na v1.56 (WhatsApp do site); repetida aqui por segurança.
create table if not exists configuracoes (
chave text primary key,
valor jsonb not null default '{}'::jsonb,
atualizado_em timestamptz not null default now(),
atualizado_por uuid
);
alter table configuracoes enable row level security;
Últimas falhas
| Quando | Aviso | Canal | Para | Erro |
|---|
Testar os avisos
Manda cada aviso do Zelo com dados de exemplo, com "[Teste]" no assunto: o e-mail para o endereço abaixo e o push para os aparelhos da sua conta. Nenhum paciente ou psicólogo recebe nada, e nenhuma consulta de verdade é usada.