github melgarafael/DeskcommCRM v1.106.0

3 hours ago

Adicionado

  • A automação pode não repetir para o mesmo contato por um número de horas Nas automações com gatilho de novo contato, ao lado de "rodar no máximo uma vez por contato", há agora o campo "Não repetir para o mesmo contato por (horas)", de 1 a 720 (até 30 dias). Com um número, a automação não repete para o mesmo contato antes de esse tempo passar; a contagem é por contato e por automação e sobrevive a reinício. A entrada barrada fica registrada na aba Atividade com o motivo. Vazio, nada muda: a automação roda como sempre rodou. As duas opções não se combinam pela tela.

    Crédito: @webtecnica.

  • A camada de datas dos negócios na Agenda mostra também os dias do meio do intervalo Quando a camada "Datas dos negócios" usa dois campos de data (início e fim), um negócio de 10 a 14 aparecia só em 10 e em 14. Agora ele aparece também em 11, 12 e 13, com o rótulo "Em andamento", para a grade responder quem está no meio do período em cada dia. Só entram os dias visíveis na grade, com limite de 366 dias por negócio. Com um campo só, ou com fim antes do início, nada muda.

    Crédito: @webtecnica.

  • O agente de IA passa a conversa para outro agente do roteador do mesmo número Num número com roteador, o agente que está atendendo ganha a ferramenta
    transfer_to_agent: quando o assunto é de outro agente da lista, ele passa a
    conversa, e a partir da próxima mensagem do cliente quem responde é o agente
    escolhido. O destino só pode ser um dos membros desse roteador. A mesma passagem
    existe como ação para quem opera (POST /api/v1/conversations/{id}/transferir-agente,
    papel agent ou acima).

    A passagem só é aceita onde o turno seguinte a respeita: roteador ativo com
    "manter o agente da conversa" ligado, fora do modo de regras por remetente, e
    conversa que não nasceu de campanha com agente próprio. Fora disso ela é recusada
    com o motivo, e nada muda. Destino pausado também é recusado, porque com ele o
    cliente ficaria sem resposta. Com o roteador mantendo o agente, o classificador
    ainda pode trocar de agente se vier outra intenção com confiança.

    Cada passagem fica registrada na trilha do roteador como transferred, com quem
    pediu (o agente ou a pessoa), de qual agente para qual e por quê. A trilha das
    decisões passa a ser escrita só pelo servidor; os membros da organização seguem
    lendo. Não é preciso mexer em nada na VPS. Contribuição de @webtecnica.

  • Painel do dia mostra reservas, pessoas esperadas e confirmadas por turma Quem usa a agenda com turmas passa a ver, na visão de dia, um resumo só de leitura com reservas, pessoas esperadas e percentual de confirmadas por turma, no fuso da organização. Confirmar e remarcar continuam no card da reserva. Quem não tem turma cadastrada não vê nada novo. Nada a fazer na VPS.

    Crédito: @webtecnica.

  • Um clique a mais na imagem ampliada aproxima para ler texto pequeno Na conversa, a imagem aberta em tela cheia ganha um segundo estágio de zoom (2x) ao clicar nela, para ler texto pequeno de print e comprovante. Clicar de novo volta ao tamanho original. Fechar continua no X, no ESC ou no clique fora. Nada a fazer na VPS.

    Crédito: @webtecnica.

  • O agente pode mandar uma foto por endereço junto com a resposta O agente ganha a capacidade de mandar uma foto no WhatsApp, com o texto da resposta como legenda, quando a foto tem um endereço na internet. Só vale endereço que uma consulta ao banco externo trouxe na mesma resposta do agente, num campo só dele. O próprio sistema baixa a foto, confere que é uma imagem jpg, png ou webp de até 5 MB, guarda na conversa e só então envia; o endereço nunca passa para fora. Se o download ou a conferência falhar, a resposta sai só com texto e o sistema registra o motivo. A foto depende de a consulta trazer o endereço: numa tabela com coluna de foto, lida pelo agente ou mapeada numa receita, ele já pode usar esse endereço. As receitas prontas de WordPress e WooCommerce ainda não trazem foto. Crédito: @paulolimajr77.

  • A tabela de campanhas do Meta Ads mostra a data de início de cada campanha Na aba Anúncios › Meta Ads, a tabela de campanhas ganhou a coluna «Início», logo depois de «Veiculação», com a data em que cada campanha começou a rodar, no idioma de quem está usando. Antes, para saber desde quando uma campanha estava no ar era preciso abrir o Gerenciador da Meta. Campanha sem data de início mostra «—», como as outras colunas sem valor. A data já vinha na leitura da plataforma: nenhuma chamada nova, nada a fazer na VPS. Crédito: @shu-chen-dot-ca.

  • Novo módulo opcional Link de pagamento na conversa, desligado de fábrica, em que o aviso de "pago" da InfinitePay fecha o negócio Antes, o vendedor mandava na conversa o link de pagamento da InfinitePay e depois precisava conferir no extrato se o cliente pagou, para então mover o negócio à mão.

    Com o módulo Link de pagamento na conversa ligado em Administração › Sistema, a atendente registra numa conversa o valor a cobrar (por enquanto pela API, em POST /api/v1/conversations/{id}/pagamentos) e recebe um endereço de aviso próprio daquele recebimento. Ela cola esse endereço como "URL do Webhook" ao criar o link na InfinitePay e manda o link ao cliente como sempre. Quando o cliente paga, o aviso marca o recebimento como pago e leva o negócio para ganho pelo mesmo caminho do botão "Marcar como ganho": se o funil exige algum campo ou o motivo do ganho, o pagamento fica registrado, o negócio não anda, e a linha do tempo diz o que falta.

    O aviso só vale se trouxer o segredo daquele recebimento e o mesmo valor registrado; aviso repetido não marca nada duas vezes. Não há segredo compartilhado da instalação: cada recebimento tem o seu, e a empresa não precisa configurar chave nenhuma. O endereço só é entregue quando a instalação tem um endereço público https. Registrar e confirmar entram na auditoria.

    Desligado (o padrão), ninguém registra recebimento e os avisos são recusados. Quem não liga não vê diferença.

    Trabalho original de @webtecnica (#3590), com as medições contra a InfinitePay de @franceschini-lucas e @webtecnica.

  • Ouvidoria, segunda parte: o relato pelo WhatsApp, com protocolo só depois de gravar, ainda sem instalação O módulo de Ouvidoria ganha a conversa pelo WhatsApp: quem escreve pedindo a ouvidoria tem o relato juntado em quantas mensagens precisar, recebe um resumo para confirmar e só recebe o número de protocolo depois que a manifestação está gravada — se a gravação falha, a pessoa é avisada de que nada foi registrado e pode confirmar de novo. A conversa da ouvidoria não abre cartão no funil, não entra em campanha nem em follow-up e não acorda o agente de IA. O módulo ainda não aparece em Módulos e não pode ser instalado: volta para a lista junto com a tela de gestão, numa parte seguinte. Nada muda para quem opera a VPS, e nada a fazer.

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

  • Reações em mensagens do WhatsApp pelo inbox No menu de cada mensagem elegível, o atendente pode reagir pelo WhatsApp oficial
    ou WAHA. Cinco emojis frequentes ficam disponíveis antes de abrir o seletor
    completo; a frequência é guardada neste navegador após envio confirmado.
    A reação aparece sobre a mensagem original, não como um novo balão, e falhas
    de envio não atualizam a lista de emojis frequentes. Crédito: @routeti.

  • Status do WhatsApp por integração, módulo opcional para publicar imagem pelo servidor MCP O Status do WhatsApp por integração é um módulo opcional e vem desligado de fábrica. Quem administra o servidor liga em /admin/sistema, em "Status do WhatsApp por integração"; desligado, a ferramenta não é oferecida e nada muda na instalação. Ligado, um sistema conectado ao servidor MCP com token de escrita e papel de gerente publica uma imagem no Status de um número conectado por QR Code. A imagem sai de verdade e some em 24 horas. Quem publica escolhe uma lista de contatos ou todos, e nunca sai para todos por omissão. Na lista, quem pediu para não ser incomodado, quem foi anonimizado e os contatos marcados como pessoais ficam de fora, e a resposta diz quantos saíram. Para todos os contatos, a conexão precisa ter "Guardar histórico" ligado, e quem vê é decidido pelo WhatsApp, inclusive quem pediu para não ser incomodado. A publicação usa o mesmo ritmo do número que o envio de mensagens, e a auditoria guarda só o modo e a contagem do público, sem telefone nem legenda. Criado por @webtecnica, a partir da ideia de @lucasprestes1 no #2668.

Alterado

  • O aviso de passagem no celular vai só para quem responde pela conversa Quando a IA passava uma conversa para uma pessoa, o aviso no celular ia para todo mundo com papel de atendente ou acima, mesmo com a conversa já em nome de alguém. Numa empresa com vários nichos e responsáveis diferentes, cada um recebia a passagem das conversas dos outros, e não havia como desligar.

    Agora, se a conversa está atribuída, o aviso no celular vai só para essa pessoa. Se está na fila e o cliente tem negócio aberto com responsável, vai para o responsável do negócio. Sem responsável, ou se ele não tem celular inscrito, o aviso continua indo para o time. O item na Central e o som com o CRM aberto seguem iguais para todos, e nada precisa ser feito na instalação. Crédito: @mbiero.

Corrigido

  • A fila de eventos deixa de ser varrida duas vezes por minuto Em instalações com o agendador do contêiner e o cron do servidor ligados ao mesmo tempo, os dois varriam a fila de eventos no mesmo minuto. Agora só um trabalha por vez e o outro sai sem tocar em nada, o que reduz o tráfego com o banco. Nada a configurar.

    Crédito: @webtecnica.

  • O "esqueci a senha" deixa de recusar a recuperação na instalação que envia pela Resend Numa instalação de servidor único com e-mail só pela Resend, o kit já levava a Resend ao serviço de login, mas o CRM olhava só o SMTP: a tela de "esqueci a senha" recusava uma recuperação que sairia, e a tarja de "sem SMTP" seguia acesa no painel de Atualização e no /admin. Agora "sem e-mail no login" é não ter SMTP nem Resend, e os três lugares respondem igual. A frase da tela perdeu o absoluto "não sai e-mail nenhum" e diz só o que o CRM sabe: não há SMTP nem Resend configurados nele. Sem SMTP e sem Resend, a recuperação continua sendo recusada do mesmo jeito.

    O que segue valendo: SMTP ou Resend salvos pela tela só chegam ao serviço de login no próximo update.sh, e até lá a tela deixa de recusar e o envio pode falhar com o erro genérico. O SMTP posto à mão no .env do Supabase o CRM não enxerga, e a tela segue recusando nesse caso; o remédio é configurá-lo em /admin/email. Nada precisa ser feito na instalação. Contribuição de @webtecnica (#3188), cuja medição apontou este caminho.

  • "Sincronizar agenda" diz o motivo certo quando a opção "Guardar o histórico" está desligada O "Sincronizar agenda do celular" dava o mesmo aviso para QUALQUER falha da
    leitura da agenda: que o WhatsApp do número não teria respondido e que era
    para conferir se ele estava conectado. Só que o caso mais comum não era queda
    nenhuma — era a opção "Guardar o histórico anterior à vinculação" desligada,
    com o número conectado o tempo todo. A pessoa ia conferir a conexão, não achava
    defeito e ficava travada sem saber o que fazer. Crédito: @webtecnica.

    Agora cada motivo tem a sua frase, e a da opção desligada diz o caminho: ligar
    "Guardar o histórico anterior à vinculação" em Conexões e conectar o número
    de novo. Sem essa opção o aparelho não entrega a agenda — insistir no botão não
    resolve. Um timeout de verdade continua dizendo que o WhatsApp não respondeu;
    sessão recusada pede reconectar; falha do servidor do canal pede tentar de novo
    em instantes. O aviso fica na tela do diálogo, não só no toast, e a causa
    técnica segue no log do servidor para o diagnóstico.

  • A Prospecção diz qual capacidade falta ao agente e abre o agente para corrigir Quando uma campanha de Prospecção não inicia por causa do agente, o aviso deixa de
    ser uma frase só para dois problemas. Ele passa a dizer qual falta: a ferramenta
    "Mover oportunidade de etapa", o acesso ao funil da campanha (com o nome do funil),
    ou as duas. O aviso lembra que vale a versão publicada do agente e traz o botão
    "Abrir o agente", que leva direto à tela onde se corrige.

    No formulário do agente, ligar o pacote "Vender e mover o funil" sem marcar nenhum
    funil mostra um aviso. Ele não impede salvar nem publicar. Não é preciso mexer em
    nada na VPS. Contribuição de @webtecnica.

  • A ficha de telefones mostra a mensagem do servidor e avisa antes de descartar o rótulo Ao recusar um telefone, a ficha trocava a explicação do servidor por um texto fixo que falava em DDD, mesmo em organização de outro país. Agora a mensagem do servidor aparece como veio, com o formato esperado para o país da organização. E "Tornar principal" num telefone extra que tem rótulo passa a avisar, antes da troca, que o rótulo será descartado (o telefone principal da ficha não guarda rótulo), com Continuar e Cancelar.

    Crédito: @webtecnica.

  • Quadro do funil deixa de cortar em mil negócios sem avisar O quadro do funil lia os negócios numa consulta só, e o banco corta toda resposta em mil linhas sem erro: um funil maior chegava incompleto e a tela o apresentava como inteiro. A leitura agora é paginada, filtra pela organização (o que também faz o banco usar o índice certo) e pede só as colunas que o quadro mostra. Nada muda para funis pequenos.

    Crédito: @webtecnica.

  • A conversa encerrada volta a reabrir quando a mensagem do cliente chega atrasada Quando a mensagem do cliente chega ao número de atendimento depois de a conversa
    ter sido encerrada, mas com o horário de envio anterior ao encerramento — o
    comum em entrega atrasada do canal, em lote do provedor ou com o relógio do
    aparelho do cliente atrás —, a conversa continuava encerrada com a mensagem
    dentro dela. A aba Fila não a mostrava, e o atendente perdia o cliente sem que
    nada aparecesse como erro em lugar nenhum. Agora a conversa reabre e volta para
    a Fila, independentemente da ordem em que a mensagem chegou. O horário original
    continua ordenando a conversa, e o novo atendimento nunca começa antes do fim
    do anterior, para a resposta antiga não contar como resposta à mensagem nova.
    Reenvio da mesma mensagem pelo canal não abre atendimento novo, nem
    uma segunda mensagem atrasada da mesma conversa reabre duas vezes. Na
    atualização não há nada a fazer. Crédito: @webtecnica.

  • Os e-mails de confirmação de conta, redefinição de senha e convite de time seguem o idioma da instalação e da empresa Com a tela em espanhol, os e-mails do sistema continuavam chegando em português: o texto de cada
    molde era fixo dentro do arquivo dele, fora do dicionário da interface.

    Agora o corpo do e-mail de confirmação de conta e o de redefinição de senha saem no idioma da
    instalação (APP_LOCALE), e o convite de time sai no idioma da empresa que convidou. Em português
    nada muda. O assunto dos e-mails de confirmação e de redefinição continua sendo o que a instalação
    configurou no serviço de autenticação. Você não precisa fazer nada.

    Crédito: @webtecnica.

  • Excluir uma empresa derruba na hora o acesso de quem era membro dela Quando a plataforma excluía uma empresa, quem era membro dela seguia com o vínculo guardado no
    cache curto da autorização (lib/auth/cache-curto.ts) por até 30 segundos, e o login que a
    exclusão apagava seguia autenticado pelo mesmo tempo. A exclusão era o único caminho de
    revogação que não chamava a invalidação. Crédito: @FabioMundoDigital.

    Agora a empresa é invalidada no cache logo depois que o banco confirma a exclusão, e a sessão de
    cada login removido, logo depois de removê-lo. Quem manteve o login (por ter vínculo com outra
    empresa) segue com a sessão dele. Você não precisa fazer nada.

  • O filtro de etiqueta do Inbox não some mais com o filtro aplicado nem fecha sozinho No Inbox, quem chegava por um link já filtrado por etiqueta (por exemplo, vindo do relatório Por etiqueta) podia ficar com a lista filtrada e sem o seletor na tela para desfazer o filtro, e o menu de etiquetas às vezes fechava sozinho logo depois de aberto. Agora o seletor aparece desde o primeiro instante, avisa enquanto as etiquetas carregam, e a etiqueta aplicada sempre pode ser desmarcada. Nada a fazer na VPS.

    Crédito: @webtecnica.

  • A tela de nova senha avisa quando a senha passa do limite de tamanho Ao definir uma nova senha, uma senha acima de 72 bytes era aceita pelo formulário e recusada depois pelo serviço de autenticação, e a tela mostrava só um erro genérico. Agora o formulário recusa na hora e explica o limite. O limite é contado em bytes, então acento e emoji pesam mais que uma letra simples. Criado por @webtecnica, a partir do #4313.

  • O teste do agente e o rascunho do modo assistido passam a usar as consultas dos servidores MCP do próprio agente No Testar e no rascunho do modo assistido, as ferramentas dos servidores MCP cadastrados no próprio agente eram todas recusadas, mesmo as de consulta. Agora a consulta roda quando quem administra a marcou como Leitura e o servidor a declara somente leitura. Ferramenta de escrita, ou sem essa declaração do servidor, continua recusada na prévia. Criado por @webtecnica, a partir do #4317.

  • Uma recusa registrada pela API da ficha do contato passa a bloquear os envios Quando o consentimento de marketing de um contato era retirado pela API da ficha dele
    (PATCH /api/v1/contacts/{id}, no formato { "granted": false }), essa recusa não era lida na
    hora de enviar: as automações (WhatsApp, mensagem escrita pela IA, e-mail), as campanhas e a
    prospecção continuavam escrevendo para ele. Só a recusa recebida por um formulário era levada em
    conta. Crédito: @FabioMundoDigital.

    Agora a recusa é lida nos dois formatos, o dos formulários e o da ficha, e bloqueia esses envios.
    Você não precisa fazer nada.

  • O tique das mensagens do canal oficial do WhatsApp passa a mostrar Entregue e Lida No canal oficial do WhatsApp (Cloud API), o tique da mensagem enviada ficava parado em "Enviada"
    mesmo depois de a Meta confirmar a entrega e a leitura. Além disso, a confirmação de leitura
    trocava a hora da entrega pela hora da leitura.

    Agora o tique mostra "Entregue" e "Lida" conforme a Meta confirma, e a hora da entrega é gravada
    uma vez só. Mensagem que falhou continua aparecendo como "Falhou". Você não precisa fazer nada.

    Crédito: @webtecnica.

Don't miss a new DeskcommCRM release

NewReleases is sending notifications on new releases.