Repository navigation
Releases: Elevstudio-Dev/ElevCRM
Release list
v1.16.0
Adicionado
-
Chat interno — a equipe conversa entre si sem sair do CRM Um ícone de chat na barra superior, ao lado da busca, abre o
chat da equipe: um painel com os canais à esquerda e a conversa à direita,
como o WhatsApp da equipe — só que dentro do CRM, sem misturar com as
conversas dos clientes.Os canais:
- Geral — toda a equipe.
- Um por setor — quem está no setor e a gestão. Nasce sozinho quando o
setor é criado. - Conversa direta — você e uma pessoa. "Conversa direta" na lista, escolha
com quem, e pronto; o mesmo par nunca vira duas conversas.
A mensagem do colega aparece na hora, sem recarregar. Com o painel fechado, um
aviso mostra quem escreveu e o começo do texto, com "Abrir" para ir direto ao
canal. O ícone na barra mostra quantas mensagens você ainda não viu; abrir o
canal zera a contagem dele.Quem vê o quê é regra do banco, não da tela: um atendente que não está no
setor financeiro não vê o canal do financeiro, e a conversa direta entre duas
pessoas é só delas — nem o gestor lê. O histórico fica guardado.Só texto nesta primeira versão: sem anexos, sem menções, sem reações. Contas
de leitura (viewer) não participam do chat. -
Mensagens prontas com parâmetros, preenchidos numa janelinha na hora de usar Uma resposta rápida pode ter lacunas: {{numero_pedido}}, {{valor}},
{{data_entrega}} — qualquer nome entre chaves duplas vira um campo. Na hora
de usar a mensagem no inbox, abre uma janelinha com um campo por lacuna, na
ordem em que aparecem no texto, e uma prévia de como a mensagem vai sair. "Usar
mensagem" põe o texto pronto no campo de escrever; o envio continua sendo o
botão de sempre, para dar uma última olhada antes de chegar no cliente.Três lacunas chegam preenchidas sozinhas: {{nome}} e {{primeiro_nome}}
(do cadastro do contato) e {{atendente}} (quem está logado). Elas aparecem
na janelinha já com valor e podem ser corrigidas ali. Se o contato não tem nome
no cadastro, a janelinha pergunta — antes, "Olá {{nome}}" ia assim mesmo para
o cliente.Mensagem sem lacuna livre entra direto no campo, como sempre entrou.
No cadastro da mensagem (Configurações → Atendimento → Respostas rápidas) há
botões para inserir as lacunas automáticas no ponto do cursor, um campo para
criar uma lacuna nova, e uma linha que mostra o que a mensagem vai pedir. A
lista mostra as lacunas de cada mensagem.No campo de escrever do inbox há um botão ⚡ (o mesmo símbolo que o WhatsApp
Business usa) que abre a lista de mensagens prontas — o atalho "/" no começo
do texto continua funcionando.Para começar uma conversa com um contato que ainda não escreveu, o caminho é o
de antes: Contatos → "Iniciar conversa no Inbox" → escolher a mensagem pronta. -
Setores — a conversa vai para um grupo de pessoas, e o cliente escolhe qual no primeiro contato Uma loja de informática tem assistência, financeiro e recepção. Agora o CRM
tem isso também: setores. Em Configurações → Organização → Setores você
cria os setores, dá uma cor a cada um e diz quem atende em cada um. Uma pessoa
pode estar em mais de um setor.Quem está num setor vê a fila do setor. Um atendente da assistência vê as
conversas da assistência e as que ainda não têm setor; não vê as do
financeiro. Gestores e administradores continuam vendo tudo, e quem não está
em setor nenhum também. As mensagens seguem a mesma regra da conversa.O menu de primeiro contato. Ligue-o na mesma tela e, quando alguém escrever
pela primeira vez, o sistema responde com a saudação e a lista numerada
(1 - Assistência, 2 - Financeiro, 3 - Recepção). O cliente responde com o
número ou com o nome — sem acento, com erro de digitação, "quero o 2", tudo
vale — e a conversa vai para o setor. Se não der para entender, o sistema
lembra uma vez; depois, a conversa cai no setor padrão que você escolher (ou
fica na fila geral). Enquanto o menu está no ar, o atendimento automático não
responde: primeiro o setor, depois o atendimento. A saudação, o lembrete e a
confirmação são seus para escrever, e a tela mostra a prévia de como o cliente
vai receber.Transferir entre setores. No cabeçalho da conversa, "Opções → Transferir
para setor…". A conversa vai para a fila do setor escolhido — quem era o
responsável deixa de ser — e o fio ganha a linha "Fulano transferiu para o
setor Financeiro". A escolha do cliente no menu também aparece ali.No inbox: a etiqueta colorida do setor em cada conversa e um filtro "Todos
os setores" ao lado dos outros. O rodízio de atendimento, quando ligado,
passa a sortear só entre as pessoas do setor da conversa.Nada muda para quem não criar setor nenhum.
Alterado
-
O menu lateral saiu; a navegação sobe para a barra e a conversa ganha a tela inteira O menu lateral foi removido. Ele carregava vinte links em seis grupos e ocupava
240 pixels de toda tela — inclusive do inbox, que é onde o atendente passa o
dia. Sem ele, a conversa vai de borda a borda: em um monitor de 1280 pixels, a
área de mensagens quase dobra.A navegação passou a ter duas portas, e só duas:
- As abas na barra superior, ao lado da busca: Inbox, Contatos,
Funis, Agenda e IA. São as telas de uso diário, nessa ordem — a
ordem do WhatsApp, de onde vem quem usa isto. Em telas menores que 1024
pixels as abas viram ícones; abaixo de 768, uma gaveta. - Configurações, pela engrenagem ao lado da busca. Ela deixou de ser "só a
sua conta e a sua empresa" e virou o inventário do sistema inteiro:
Atendimento, CRM, Agente de IA, Canais, Análise e Organização, cada grupo
uma seção, cada tela um cartão com a frase que diz para que serve. Tudo que
não é aba está ali — e continua no atalho de busca (⌘K / Ctrl+K), que já
varria o mesmo registro.
O que mudou de lugar, para quem já sabia o caminho antigo:
- Conexões, Webhooks, Nuvemshop, Desempenho, Audit Log,
Radar, Respostas rápidas, Produtos, Etapas do funil e
Marcadores eram itens do menu; agora estão em Configurações, no grupo de
sempre. - Agentes, Follow-ups e Roteadores eram itens do menu; a aba
IA abre a vitrine com eles e com as outras dez telas de IA. - A versão instalada e o aviso de "Nova versão" (só para o dono do
servidor) saíram do rodapé do menu e foram para o menu do avatar, no canto
direito — com um ponto pulsando sobre o avatar quando há versão nova. - A bolinha de saúde das conexões ficava ao lado de "Conexões" no menu;
agora fica sobre a engrenagem de Configurações, para quem é admin.
Nada muda de endereço: todo link salvo continua abrindo a mesma tela. A
preferência "menu recolhido" deixa de existir, porque não há mais menu para
recolher. - As abas na barra superior, ao lado da busca: Inbox, Contatos,
v1.14.0 — o projeto de origem inteiro chega ao cliente
Adicionado
-
A IA pode ser limitada a atender só leads de origem conhecida Num número de WhatsApp que também é usado para falar com clientes, fornecedores
e contatos pessoais, a IA respondia todo mundo assim que um agente era
publicado. Agora dá para ligar, por canal, o modo "só atende quem eu autorizei":
a IA fica em silêncio por padrão e só assume a conversa quando o lead veio de
uma origem elegível — uma submissão nova de formulário, uma campanha
identificada, ou uma liberação manual pela tela. Histórico antigo, existência do
contato, conversa anterior ou reinício de um worker nunca autorizam sozinhos.Esse limite vale para TODOS os caminhos de resposta automática — o motor do
agente, o follow-up, o texto fixo de fluxo, o worker de resposta legado e a
passagem para humano por sentimento. Não há atalho: nenhum deles envia mensagem
de IA para uma conversa não autorizada.Além disso, e independentemente desse modo: quando você responde um cliente à
mão pelo próprio WhatsApp (celular, ou outra plataforma na mesma conta), a IA
para naquela conversa para não responder junto.
Essa pausa dura uma hora, e se renova a cada mensagem sua.
Enquanto você estiver atendendo, a IA continua calada; quando você para, a hora
corre e ela volta a atender aquela conversa sozinha. Você não precisa lembrar de
religar nada.Se quiser a IA de volta antes da hora, é o botão "devolver ao automático" na
conversa. E se quiser que ela fique parada por tempo indeterminado, é o mesmo de
sempre: assumir a conversa pela tela — aí ela só volta quando você devolver.
Nenhuma dessas coisas apaga a origem do lead.Quem não ligar o modo "só atende quem eu autorizei" mantém o comportamento de
antes para todo o resto. -
Importar leads de uma planilha A lista de clientes que já está no Excel agora entra no funil sem digitação. Em
Funis, o botão "Importar planilha" pede um arquivo CSV e cria um negócio por
linha, na primeira etapa do funil escolhido.O importador reconhece os cabeçalhos usuais — nome, telefone, e-mail, valor,
origem, tags, observação — em português, com ou sem acento, e aceita o
ponto-e-vírgula que o Excel brasileiro usa. Valor escrito como "R$ 1.200,00"
entra certo.Quando a planilha traz telefone, o contato é criado junto e ligado ao negócio —
e o mesmo número repetido em várias linhas vira um contato só, não vários.Nada é aceito no escuro: ao terminar, a tela mostra quantos negócios entraram,
quantos contatos foram criados, quais colunas o importador não reconheceu e
quais linhas foram recusadas, com o motivo e o número da linha como você a vê na
planilha. Uma linha com erro não derruba as outras.Há uma planilha modelo para baixar, para quem prefere começar do formato certo.
Isto veio da contribuição de James, da Clínica Centro do Sorriso
(@clinicacentrodosorrisosc-code).
Corrigido
-
A chave da OpenRouter passa a ser conferida de verdade antes de a tela dizer que está validada Ao cadastrar uma chave da OpenRouter em Agente de IA › Credenciais, o sistema conferia
a chave contra o catálogo de modelos do provedor — um endereço que responde a
qualquer um, com chave errada ou sem chave nenhuma. Na prática, qualquer texto
colado ali era gravado como credencial validada, e o cartão passava a mostrar
"Validada" com o final da chave ao lado.O erro só aparecia depois, na primeira mensagem que o agente tentava responder,
e aparecia como "User not found." — um texto que não fala em chave nem em
credencial. Quem procurava a causa olhava o modelo, o provedor, o próprio
atendimento; a tela, enquanto isso, afirmava que a peça quebrada estava boa.Agora a prova é feita contra o endereço que exige a credencial. O catálogo
continua sendo lido em seguida, porque é dele que sai a lista de modelos que a
tela mostra — ali ele é dado, não prova. E catálogo fora do ar não recusa mais
uma chave que já provou ser válida: seria trocar um erro de credencial por um de
indisponibilidade, e mandar quem opera caçar defeito na chave certa.Uma ressalva sobre em que versão isto entrou: a correção já está no ar desde a
1.13.0. O que chega atrasado é esta nota — a mudança foi publicada sem ela,
e por isso não apareceu na lista daquela versão.Chave boa continua sendo aceita do mesmo jeito, e não há passo de atualização.
A única coisa que vale conferir é o que foi cadastrado antes: se a sua chave da
OpenRouter é anterior à 1.13.0 e o atendimento falha sem motivo aparente, abra
Agente de IA › Credenciais e use o botão de revalidar — as setas em círculo, no
cartão da credencial. A resposta que ele dá agora é real.Isto veio da contribuição de @Elevstudio-Dev.
-
O aviso de erro da importação de planilha volta ao raio de borda do produto A caixa de aviso da tela de importar leads estava com o canto arredondado pela
metade — 4px em vez dos 8px que o resto do produto usa. É pequeno e é visível:
ela fica ao lado de outros blocos com o raio certo.A causa é da migração para o Tailwind 4, que mudou o significado de
rounded
puro. Quem escreveu a tela usou o nome que valia antes. -
A troca de senha pela linha de comando volta a encontrar o usuário Quem perde o acesso a uma instalação sem SMTP — o estado normal de um self-host
recém-instalado — só tem um caminho de volta: oreset-password.shdo kit. Ele
não funcionava para ninguém. Não era intermitente nem dependia do e-mail:
qualquer endereço, existente ou não, recebia a mesma resposta seca de "usuário
não encontrado", e a pessoa ficava trancada do lado de fora do próprio sistema.A causa era uma consulta escrita na sintaxe errada. O script pedia ao servidor de
autenticação um filtro no formato do banco (email.eq.<endereço>), e esse
servidor não fala esse formato — ele usa a expressão inteira como texto de busca.
Como nenhum e-mail contém o pedaçoemail.eq., a busca não achava nada, sempre.Agora a consulta vai no formato que o servidor entende. E, como a busca dele é por
trecho do endereço, o script passou a exigir o e-mail inteiro antes de aceitar
o resultado: pedirana@empresa.comtambém trazmariana@empresa.com, e entregar
a pessoa errada a um comando que TROCA SENHA seria pior que não achar ninguém. Na
dúvida ele não devolve nada — quem chama vê "não encontrado", que é ruim mas se
resolve; a senha de outra pessoa trocada, não.Quem opera uma VPS não precisa fazer nada além de atualizar. Nenhuma configuração
muda, nenhum arquivo precisa ser editado à mão. -
Anonimizar um contato retoma de onde parou, em vez de dizer que já foi A anonimização de um contato remove os dados pessoais em três lugares: o
cadastro do contato, os títulos dos negócios dele e o histórico de atividades.
Se a operação era interrompida no meio — o navegador desistindo, o servidor
reiniciando —, o primeiro lugar ficava pronto e os outros dois não.E não havia como terminar: clicar em "Anonimizar" de novo respondia "já anonimizado"
e não fazia mais nada. O contato ficava para sempre com nome de
cliente visível dentro dos negócios e do histórico — que é exatamente o dado que
a anonimização existe para remover, e que a lei dá prazo para remover.Pior: nesse estado a tela não mostra botão nenhum — assim que o contato
consta como anonimizado, o botão dá lugar a um aviso. Não havia como pedir a
retomada nem sabendo que ela era necessária.Agora a verificação diária do sistema encontra sozinha as anonimizações que
ficaram pela metade e termina o serviço, sem ninguém precisar procurar contato
por contato. Como a lei dá prazo, esse conserto não podia depender de alguém
lembrar de clicar. Rodar de novo num contato já inteiro não escreve nada, e o
registro de auditoria mostra o que foi realmente feito, em qual contato e em que
dia — separado da execução original, para a data em que o titular exerceu o
direito não ser sobrescrita. -
A proteção de envio volta a aceitar a data de hoje Em Conexões › Proteção de envio, informar hoje em "este número é usado
desde" era recusado durante a manhã inteira: até as 9h no relógio de quem
opera no Brasil, salvar devolvia "Campos inválidos." e não gravava nada — nem
a janela de horário, nem o intervalo entre envios, nem o teto diário que você
tinha acabado de mudar na mesma tela.O motivo: o campo pergunta um DIA, mas a verificação o comparava com a hora
exata em Londres. Um dia não tem hora — ele começa em horários diferentes em
cada parte do mundo —, e por isso "hoje" só era aceito depois do meio-dia
londrino. Agora a verificação compara dias com dias, e só recusa a data que
ainda não chegou em canto nenhum do planeta.O calendário do campo também parou de oferecer o dia errado: depois das 21h ele
mostrava amanhã como escolha possível.Data futura continua recusada, e data antiga continua sendo o caso normal — é
informando a data antiga que um número usado há meses deixa de ser tratado como
recém-criado e sai do teto de 20 envios por dia. -
O painel de IA para de avisar que um modelo não enxerga imagens quando ele enxerga Duas informações erradas no painel de provedores, e as duas faziam quem opera
tomar decisão contra o que o sistema realmente faz.A primeira: o painel avisava que um modelo "não enxerga imagens" e que fotos
e comprovantes do cliente seriam ignorados — sobre modelos que enxergam, e num
sistema onde a leitura estava funcionando. Na mesma instalação em que o aviso
aparecia, o print que o cliente enviou virou descrição correta para o atendente.O painel lia uma tabela de catálogo; o atendimento lia outra coisa. Agora os
dois respondem pela mesma fonte, e o painel não pode mais discordar do que
acontece de verdade. Onde o sistema não conhece o modelo — o seu, ou um de um
serviço próprio —, o catálogo continua sendo a resposta, e a falta d...
v1.13.0 — o Inbox volta a mostrar a mensagem chegando
⚠️ Requer atenção
- Nada a fazer à mão. O conserto do tempo real é uma mudança de política no
banco, e oupdate.shreaplica obaseline.sql— ela entra sozinha. Se você
aplica o schema por fora, garanta que este release passou pelo banco antes de
concluir que a atualização terminou.
Corrigido
-
O Inbox voltou a mostrar a mensagem do cliente chegando. Este é o motivo
desta versão. A entrega em tempo real estava morta e mentindo: o canal
respondia "conectado", não havia erro na tela nem no navegador, e a mensagem
só aparecia depois de atualizar a página. Quem atende via a conversa parada
enquanto o cliente esperava resposta.A causa estava no banco. O Realtime decide quem recebe cada mudança avaliando
a regra de acesso da tabela com o papel de cada assinante conectado. As
regras valiam também para o papel anônimo — e as funções de acesso são
negadas a ele de propósito. Para esse assinante a função não devolvia "não":
ela levantava erro. E um erro ali derruba a entrega do lote inteiro,
inclusive para quem estava autenticado e tinha todo o direito de receber.Um assinante anônimo existe em toda instalação, porque o navegador se conecta
antes de o login chegar ao socket. Um só bastava para calar todo mundo.
Medido: 75 erros no registro do Realtime e uma jornada de teste falhando 5 de
6 vezes; depois do conserto, 3 de 3 e nenhum erro novo. -
Chave de IA recusada agora diz o que houve e o que fazer. A tela mostrava
o código cru —auth_failed_401— e nada mais. Agora diz se o problema é a
chave, o limite de uso, o provedor fora do ar ou a rede do servidor, com o
link para gerar outra chave naquele provedor. O motivo técnico continua na
tela, ao lado, para quem for investigar. -
Publicar um fluxo de follow-up não perde mais o clique. O aviso de
"rascunho salvo" aparecia por cima do botão e engolia o toque seguinte, sem
nada explicando por que o botão "não funcionou". Publicar salva calado agora;
o botão Salvar continua avisando. -
Treze avisos falavam português com a interface em espanhol. Quatro deles
já tinham tradução escrita e nunca ligada.
Adicionado
- O cabeçalho da conversa mostra rosto, telefone e há quanto tempo o cliente
espera. O contador só aparece quando a bola está do nosso lado: some quando
alguém já respondeu, quando o cliente nunca escreveu, e quando a conversa foi
encerrada. - O limite de primeira resposta é por organização, em
organizations.settings.sla.primeira_resposta_minutos. Sem configuração, 15
minutos. - Assumir a conversa passa a dar dono ao negócio, quando há um só negócio
aberto — antes ficava "sem responsável" mesmo depois de assumir. - Criar negócio à mão avisa quando aquele contato já tem um aberto, em vez
de deixar dois cards duplicados no funil. - A instalação nasce com a marca configurada. Quem instala e aperta Enter
na pergunta do nome recebe a marca do produto, não a do projeto de origem.