Skip to content

Releases: Elevstudio-Dev/ElevCRM

v1.16.0

Choose a tag to compare

@elevcrm-release elevcrm-release released this 12 Sep 17:59
8fb6355

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.

v1.14.0 — o projeto de origem inteiro chega ao cliente

Choose a tag to compare

@Elevstudio-Dev Elevstudio-Dev released this 04 Sep 14:29

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: o reset-password.sh do 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ço email.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: pedir ana@empresa.com também traz mariana@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...

Read more

v1.13.0 — o Inbox volta a mostrar a mensagem chegando

Choose a tag to compare

@Elevstudio-Dev Elevstudio-Dev released this 04 Sep 13:18

⚠️ Requer atenção

  • Nada a fazer à mão. O conserto do tempo real é uma mudança de política no
    banco, e o update.sh reaplica o baseline.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.