github melgarafael/DeskcommCRM v1.107.0

one hour ago

Adicionado

  • O menu da conversa ganha 'Exportar conversa', que baixa o histórico em PDF No menu "⋯" do cabeçalho da conversa, no Inbox, o item "Exportar conversa" baixa
    o histórico daquela conversa em PDF, datado e em ordem. Notas internas não
    entram no arquivo. Não é preciso mexer em nada na VPS. Contribuição de @webtecnica.

  • A conversa em que você foi mencionado numa nota interna fica marcada na lista até ser aberta Quando alguém menciona você numa nota interna, a conversa passa a aparecer na
    lista do Inbox com o selo "Mencionado", que some quando a conversa é aberta. O
    aviso pelo sino e pelo celular segue como antes; o selo mostra em qual conversa
    está o recado. Não é preciso mexer em nada na VPS. Contribuição de @webtecnica.

  • A previsão do funil passa a mostrar a recorrência nova, ao lado do valor único A previsão do funil — painel Previsão em Métricas, GET /api/v1/pipelines/{id}/forecast e a tool crm_get_pipeline_forecast — projetava
    só value_cents. Quem vende setup + mensalidade via o contrato de R$ 3.000 +
    R$ 500/mês como R$ 3.000, seis vezes menor, e a mensalidade nova não
    aparecia em número nenhum do cronograma. Crédito: @webtecnica.

    Cada balde (mês × moeda, total, "sem data" e "sem probabilidade") passa a trazer
    duas parcelas, com o mesmo par bruto/ponderado e a mesma probabilidade:
    unico (o setup) e recorrente_mensal (a mensalidade). Elas nunca são somadas
    — entram em meses diferentes do caixa. Os campos antigos bruto_cents e
    ponderado_cents continuam iguais (só o valor único), então nada que já lia a
    resposta muda de número.

    Recorrência que não é mensal não vira parcela mensal: aparece à parte em
    recorrencia_nao_mensal, com o valor. A duração do contrato
    (recurring_months) não multiplica a projeção: a previsão é do mês de
    fechamento, não do contrato inteiro.

  • O follow-up do agente ganha a escolha do que fazer quando o contato tem horário marcado: adiar, enviar mesmo assim ou não enviar Na configuração de follow-up do agente aparece a pergunta "Quando o contato tiver
    horário marcado", com três opções: adiar (o padrão, que é o comportamento de
    antes), enviar mesmo assim ou não enviar. A escolha vale para todos os fluxos de
    follow-up daquele agente; cada passo de automação segue com a escolha própria.
    Quem não mexer continua adiando. Não é preciso mexer em nada na VPS.
    Contribuição de @webtecnica.

  • O card do funil mostra quando chegou a última mensagem do cliente, ao lado da prévia O card do Kanban já mostrava o que o cliente disse por último; agora mostra
    também quando foi. A mesma frase lida hoje e há três semanas pede decisões
    diferentes de quem olha o funil. Layout, arrasto e ordenação do quadro seguem
    iguais. Não é preciso mexer em nada na VPS. Contribuição de @webtecnica.

  • A automação consegue mover o card para uma etapa de perda informando o motivo, e a aba Atividade mostra a recusa real em vez de erro interno A ação de mover o card ganha o campo "Motivo da perda", pedido só quando a etapa
    de destino fecha o negócio como perdido; os motivos são os mesmos do arrasto no
    quadro. Uma automação nova que aponte para etapa de perda sem motivo é recusada
    ao salvar. Automações antigas nessa situação continuam sem mover o card, como
    já acontecia, e a aba Atividade agora diz o porquê em vez de "erro interno":
    abra a automação e escolha o motivo. Contribuição de @webtecnica.

  • O resumo da passagem para humano pode mostrar campos do card, escolhidos campo a campo no editor do funil (desligado por padrão) No editor de campos do funil, cada campo do negócio ganha a opção "Mostrar no
    resumo da passagem". Com ela ligada, o valor que o campo tem no card aparece no
    resumo que a pessoa lê ao assumir a conversa. A opção nasce desligada, então
    nenhum funil que já existe muda sozinho. Não é preciso mexer em nada na VPS.
    Contribuição de @webtecnica.

  • Duplicados reconhece a mesma conta de WhatsApp em duas fichas A tela de juntar duplicados passa a reconhecer duas fichas da mesma conta de WhatsApp — a que nasceu do atendimento e a que foi criada por telefone, por exemplo — como a mesma pessoa, mesmo com nomes e telefones diferentes. O critério é a identidade do WhatsApp que a ingestão já grava em cada ficha; a lista mostra o motivo "mesma conta de WhatsApp". Crédito: @webtecnica.

    O pareamento por mesmo telefone, mesmo e-mail e mesmo CPF continua como era, e um par ligado pela conta de WhatsApp também não pode ser dispensado como "não são a mesma pessoa". Nada muda no banco e não há nada a configurar. A conta em si não aparece na tela: a lista segue mostrando nome, telefone e e-mail.

  • Ouvidoria, terceira parte: a tela de gestão, e o módulo já pode ser instalado O módulo de Ouvidoria ganha a sua tela, em Configurações, na seção Dados e acesso: a lista das manifestações com protocolo, data, canal e status, filtro por status e paginação; o detalhe com o relato; e a mudança de status (recebida → em análise → concluída). Reabrir uma manifestação concluída exige um motivo, e toda mudança de status fica na trilha de auditoria, sem o texto do relato. Só administradores da empresa entram. Na mesma tela fica a chave Receber manifestações nesta empresa; desligá-la fecha só a entrada, e o que já chegou continua legível.

    Com a tela, o módulo volta para Módulos: quem administra a instalação pode instalá-lo. Ele segue desligado por padrão — sem instalar, a tela não existe e nada muda. Nada a fazer na atualização.

    Contribuição original de @webtecnica, PR #3636; adaptação ao molde dos módulos em commits separados.

  • A voz do agente mostra o catálogo do ElevenLabs com nome e idioma — e aceita um Voice ID colado A tela de voz em Agente de IA › Provedores passa a pedir ao ElevenLabs a lista de vozes da conta e a mostrar nome e idioma, não só o id congelado na última validação da credencial. Quem tem voz própria ou contratada na conta ElevenLabs e nunca a via na lista agora cola o id no campo e ele vale: a lista é atalho, não permissão — o voice_id salvo é usado como está no turno do agente, sem ser descartado nem "corrigido" por não constar do catálogo. Só o formato é conferido (letras, números, hífen e sublinhado, 8 a 64 caracteres), com a mensagem na tela antes de qualquer chamada paga. Se o provedor recusar a voz no uso — ou na prévia —, o motivo que ele devolveu aparece na tela, em vez de um "não foi possível" genérico. E se a listagem do ElevenLabs falhar, a tela não quebra: cai na lista da última validação da credencial, avisa que está nela, e o campo livre continua funcionando. Crédito: @webtecnica.

Alterado

  • Aprendizados da memória recolhem — um aberto por vez Cada aprendizado aparecia sempre aberto, com corpo, validade e ações na tela ao
    mesmo tempo: com dez ou mais, a Memória da IA virava uma parede em que nada se
    achava. Agora os aprendizados são um acordeão — todos fechados por padrão, abrir
    um fecha o outro, clicar de novo fecha. O corpo, o campo Vale até e o botão
    de arquivar/reativar continuam iguais; só passam a aparecer na linha aberta. Crédito: @webtecnica.

    O acordeão é um componente de lista (components/ui/accordion.tsx), sem
    biblioteca nova, com aria-expanded/aria-controls no cabeçalho e o painel
    rotulado pelo botão — nasce pronto para a mesma recolha nas etapas do funil
    (#4083). Nada muda para quem roda o sistema: não há migration nem ação a fazer.

  • Listas de negócios ficam mais leves, porque a permissão de leitura passa a ser resolvida uma vez por consulta Para decidir quem pode ver cada negócio, o banco refazia a mesma conta de permissão a cada linha lida, tanto nos negócios quanto no histórico, nos vínculos e nas cadências de e-mail. Agora a conta é feita uma vez por consulta e reaproveitada. Quem vê o quê não muda: as regras são as mesmas, conferidas linha a linha por teste. A atualização troca as regras de leitura sozinha, sem passo manual.

    Crédito: @webtecnica.

  • Os nomes da equipe passam a sair de uma consulta só, e as telas que mostram responsáveis carregam mais rápido Para mostrar o nome de quem atende, o sistema perguntava ao serviço de login uma pessoa por vez. Numa equipe grande, cada tela ou resposta que lista responsáveis fazia dezenas de idas e voltas. Agora os nomes da equipe vêm do banco numa consulta só, com a mesma regra de antes: só aparece quem tem vínculo com a organização, inclusive quem já saiu, para o histórico continuar legível. Nada muda para quem usa.

    Crédito: @webtecnica.

Corrigido

  • O aviso de nota interna apagada passa a dizer de qual conversa ela era A nota interna de uma conversa já chegava em tempo real para os outros
    atendentes desde a correção anterior. Apagar, não: o aviso de remoção chegava
    sem o identificador da conversa, então quem tinha a conversa aberta continuava
    vendo a nota que já não existia até apertar F5. Agora o aviso leva a conversa. Crédito: @webtecnica.

    Agora o aviso de remoção carrega a nota inteira, e a nota some da tela de todo
    mundo na hora — como já acontecia com a nota recém-escrita. Nada muda para quem
    usa: sem tela nova, sem configuração e sem migração de dados.

  • O custo das chamadas de IA volta a ser calculado quando o modelo vem com ponto na versão (ex.: claude-haiku-5.5 pelo OpenRouter) Chamadas feitas com um nome de modelo escrito com ponto na versão não achavam a
    linha de preço, que é escrita com hífen, e ficavam com o custo em branco nos dois
    caminhos que ainda não tratavam essa diferença. Agora o nome com ponto casa com o
    preço. Vale para as chamadas novas; as já registradas sem custo não são
    recalculadas. Contribuição de @webtecnica, a partir da medição de @mbiero.

  • O alarme de pedido de titular fora do Brasil só afirma o vencimento do prazo legal de um mês depois do fim do último dia, e não na hora do recebimento Nos países em que o prazo de resposta ao titular é contado em meses, o alarme
    tratava o prazo como vencido na mesma hora do dia em que o pedido tinha chegado.
    O último dia do prazo vale inteiro: agora o aviso de vencimento só aparece
    depois que esse dia termina. Instalações no Brasil não mudam.
    Contribuição de @webtecnica.

  • O editor do roteador mostra o funil e a etapa de destino já gravados assim que abre, em vez de parecer sem destino Ao abrir uma intenção do roteador que já tinha funil e etapa de destino, o campo
    aparecia vazio por um instante e o seletor de etapa não era mostrado, o que se
    lia como "sem destino". O destino sempre esteve gravado; o que mudou é que a
    tela passa a mostrá-lo desde a abertura. Contribuição de @webtecnica.

  • Webhook da Meta com payload fora do contrato responde 200, fica arquivado como erro e abre um aviso na Central, em vez de pedir reentrega Quando a Meta mandava um conteúdo num formato que o sistema não reconhece, a
    resposta era um erro, e a Meta reenviava o mesmo conteúdo por horas. Agora o
    sistema confirma o recebimento, guarda o conteúdo recusado como erro e abre um
    aviso na Central para alguém olhar. A mensagem recusada continua não entrando
    na conversa. Contribuição de @webtecnica.

  • Contato apagado a pedido não volta pela agenda do app, e a sincronização pergunta uma vez por lote Quem pediu para ser apagado (LGPD) e continua na agenda do WhatsApp Business não volta mais ao CRM quando a Meta entrega a sincronização de contatos da coexistência (smb_app_state_sync): a sincronização agora consulta a marca de apagamento antes de escrever qualquer coisa — a mesma pergunta que o importador de histórico já fazia — e um número marcado é pulado.

    A pergunta é feita uma vez por entrega, não uma por contato: um webhook pode trazer dezenas de contatos, e antes disso cada um custava uma consulta ao banco. Também deixou de haver escrita em ficha já anonimizada que ainda seja encontrada pelo número (anonimizações anteriores à marca, que não têm como ser reconhecidas de outro jeito), e o que foi pulado aparece no log com a contagem — sem telefone, sem nome.

    Contato normal continua sincronizando exatamente como antes, com o nome da agenda no campo que só a equipe vê; outra organização não é afetada; e se a consulta falhar a sincronização não cria o contato na dúvida nem para os demais. Contribuição de @webtecnica (#3432).

  • O Kanban atualiza na hora quando uma etapa é renomeada, reordenada ou desativada em Configurações, e o "Mover para…" do card segue a mesma ordem do quadro Depois de renomear, reordenar ou desativar uma etapa em Configurações, o quadro
    podia continuar mostrando a versão antiga até recarregar, e a lista "Mover para…"
    do card podia vir em ordem diferente da do quadro. Agora os dois seguem a mesma
    ordem e o quadro reflete a mudança na hora. Contribuição de @webtecnica.

  • Valor inválido em QUEUE_POLL_INTERVAL_MS ou QUEUE_IDLE_MAX_INTERVAL_MS não impede mais o worker de subir: cai no padrão com aviso no log Se uma dessas duas variáveis do .env tiver um valor que não é um número válido,
    o worker passa a usar o valor padrão e registra um aviso no log, em vez de não
    subir. Quem não define essas variáveis, ou define valores válidos, não vê
    diferença. Não é preciso mexer em nada na VPS. Contribuição de @webtecnica.

  • Toda resposta montada à mão sob /api leva o X-Request-Id da requisição Desde o #3991, ok()/fail() já devolvem o X-Request-Id; as respostas
    montadas à mão — arquivo (CSV, vCard, PDF, planilha), imagem, QR, página de
    callback de OAuth, 405 de método não permitido, redirecionamento de login e
    webhook de entrada — saíam sem ele, e o pedido ficava sem id correlacionável. Crédito: @webtecnica.

    Agora essas saídas passam por comIdDaRequisicao(res, req), em
    lib/api/wrappers.ts: o id é o mesmo da requisição (o que o proxy.ts pôs no
    cabeçalho e que a rota grava no audit/log), e um id que a própria rota já
    resolveu para a auditoria é preservado. Corpo, status, Location, cookies e
    Content-Disposition não mudam — só o cabeçalho é acrescentado.

    Uma catraca estática varre os route.ts sob app/api/ e reprova a próxima
    resposta montada à mão sem carimbo. Duas exceções declaradas, com motivo, no
    próprio teste: o pixel de abertura e a página de descadastro das cadências —
    rotas públicas consumidas pelo cliente de e-mail, sem registro com requestId,
    onde o cabeçalho publicaria um id que não existe em log nenhum.

  • No Inbox, o campo de mensagem continua em foco depois de enviar pelo botão: a segunda mensagem sai sem clicar na caixa Ao enviar clicando no botão Enviar, o cursor saía do campo de mensagem e era
    preciso clicar na caixa de novo para escrever a próxima. Agora o cursor volta ao
    campo logo depois do envio. Enviar com Enter já funcionava e segue igual.
    Contribuição de @webtecnica.

  • A busca dos filtros da Auditoria acha a empresa digitada sem acento No painel de Auditoria da plataforma, o filtro de empresas ignorava maiúsculas,
    mas não acento: digitar clinica não achava "Clínica Aurora". Agora a busca
    usa a mesma régua da busca do Inbox, e clinica acha "Clínica Aurora". Crédito: @jay23606.

    Issue #4168.

  • A campanha de Prospecção pausada pelo modo de teste explica o motivo em linguagem simples e diz onde liberar o atendimento ao público Quando a campanha pausava porque o número ainda estava em modo de teste, o
    cartão mostrava um código interno. Agora ele diz que a IA só fala com os números
    da lista de teste e indica o caminho para liberar: Conexões, "Configurar acesso
    da IA" no cartão do número. Vale para as pausas que acontecerem daqui em diante;
    os outros motivos de pausa aparecem como antes. Contribuição de @webtecnica.

  • Na Agenda, filtrar por um profissional passa a valer também para os horários oferecidos e para quem recebe o compromisso marcado Com a agenda filtrada em um profissional, clicar num horário livre abria o painel
    com outra pessoa (o dono do tipo de compromisso), oferecia os horários dela e
    gravava na agenda dela. Agora o painel, os horários livres e o compromisso
    marcado seguem o profissional que está filtrado. Contribuição de @webtecnica.

  • Importar skill aceita o .zip baixado do GitHub, que vem embrulhado numa pasta O "Download ZIP" do GitHub põe tudo dentro de uma pasta, e a importação recusava
    o pacote dizendo que faltava o SKILL.md na raiz, mesmo com o arquivo lá. Agora a
    pasta de topo é reconhecida como a raiz do pacote quando é a única com SKILL.md.
    Se houver mais de uma, a importação segue recusando e diz quais achou.
    Contribuição de @webtecnica.

  • Quem entra com Google e tem verificação em duas etapas volta a ver o pedido do código, em vez de cair de novo na tela de login Quem tinha a verificação em duas etapas ativada e entrava pelo Google num
    dispositivo ainda não confiável era devolvido à tela de login, sem chegar a ver
    o pedido do código. Agora a tela do código aparece. A proteção do cookie de
    sessão segue a mesma. Contribuição de @webtecnica.

  • Quando a pausa da IA por atendimento manual não é gravada, o sistema tenta mais uma vez e registra o motivo na auditoria, em vez de seguir em silêncio Quando uma pessoa responde pelo celular ou assume a conversa, a IA é pausada.
    Se essa pausa não chegasse a ser gravada, nada avisava e o agente podia responder
    por cima do atendente. Agora o sistema tenta gravar de novo uma vez e, se ainda
    assim não conseguir, deixa o motivo registrado na auditoria.
    Contribuição de @webtecnica.

  • A Agenda atualiza a última sincronização ao gravar a página do Google Se a sincronização precisar esperar outro processo terminar de atualizar um compromisso vinculado, a Agenda mostra o horário da última leitura gravada. A página continua disponível para a próxima tentativa. Crédito: @samirhvbr.

  • Quando o agente responde em várias mensagens, elas chegam na ordem em que ele escreveu O agente às vezes responde em mais de uma mensagem seguida. Até aqui, essas
    mensagens podiam chegar ao cliente fora de ordem: a que abria a resposta (por
    exemplo, "Boa pergunta! Pelo nome, acho que você quis dizer Enterprise") era
    justamente a que esperava a pausa que imita alguém digitando, e as outras
    passavam na frente.

    Agora cada mensagem espera a anterior terminar antes de ser conferida e
    enviada, e a conversa chega na ordem em que o agente escreveu. Vale também para
    modelos de mensagem, catálogo e o aviso de passagem para humano, e para o botão
    Testar. Quando a resposta tem várias mensagens, a segunda em diante pode sair
    um pouco depois do que saía antes. Nada a configurar. Crédito: @maclevison.

  • A lista de agentes mostra a cópia e o nome novo na hora, sem recarregar a página Em IA › Agentes, usar Duplicar ou Renomear no menu de um agente
    mostrava a mensagem de sucesso, mas a lista continuava igual: a cópia só
    aparecia, e o nome novo só valia na tela, depois de recarregar o navegador.
    Agora a lista se atualiza assim que a ação termina. O mesmo vale para Pausar,
    Despausar e Arquivar.

    O cartão de um agente duplicado também passa a mostrar o modelo de IA da cópia.
    Antes ele podia mostrar o modelo padrão (por exemplo, Anthropic · Claude Sonnet)
    para a cópia de um agente que usa a OpenAI, enquanto o editor mostrava o modelo
    certo. O que o agente responde não mudou: o problema era só no cartão. Cópias
    feitas antes desta versão voltam a mostrar o modelo certo quando forem
    publicadas.

    Crédito: @andradevander.

  • A empresa abordada pela Prospecção aparece uma vez só na caixa de entrada Numa organização com mais de um número conectado, cada empresa abordada pela
    Prospecção ganhava duas conversas na caixa de entrada: a da abordagem, no número
    escolhido na campanha, e outra vazia ("Sem mensagens") no número mais antigo da
    organização. A conversa vazia nascia do cadastro do contato, que abria uma
    conversa por conta própria antes de a Prospecção abrir a dela. Agora o cadastro
    feito pela Prospecção não abre conversa, e a única é a do número da campanha.
    Nenhuma mensagem saía pelo outro número; as conversas vazias que já existem podem
    ser fechadas pela caixa de entrada. Não é preciso mexer em nada na VPS.
    Contribuição de @mindflowai1.

Don't miss a new DeskcommCRM release

NewReleases is sending notifications on new releases.