Repository navigation
Releases: Techify-one/whatsbot-pro
Release list
v0.10.0 — IA religada automaticamente, atribuição automática nos times e GOWA 9.6.0
A IA pode ser religada automaticamente nas conversas esquecidas, a atribuição automática dos times ganha interruptor e rodízio por time, e o WhatsApp embutido sobe para o GOWA 9.6.0 — com atualizador de binário no próprio painel.
Destaques
- Religar a IA automaticamente. A IA para de responder por vários caminhos (transferir para um humano, atribuir a uma pessoa, pausar no painel) e só voltava por ação manual — uma conversa transferida e esquecida ficava sem IA para sempre. Em Configurações de IA → Automações você define quando ela volta: depois de X minutos/horas/dias de silêncio, ou em dias e horário fixos, podendo filtrar por quem falou por último. Vem desligado, nunca religa grupo, conversa arquivada, canal com a IA desligada nem o número de provisionamento, e tem permissão própria, porque religar tira o responsável humano da conversa.
- Atribuição automática do time, mais clara e com rodízio por time. O seletor "Distribuição" do cadastro do time virou um interruptor "Atribuir conversas automaticamente": desligado, a conversa fica no time sem responsável; ligado, você escolhe a estratégia — Round-robin (padrão ao ligar), Atendente fixo ou Agente de IA. No round-robin, a rodada agora percorre o time inteiro: antes havia um cursor por time e caixa, o que repartia a rodada; agora a caixa da conversa só filtra quem pode receber, e quem não pertence a ela é pulado. Além disso, a tela Usuários ganhou sub-abas (Usuários, Grupos de permissão, Times), cada uma com a sua permissão — quem só gerencia times vê só a aba Times.
- GOWA 9.6.0 embutido (era 8.11.0) e atualizador de binário no plugin (
gowa1.5.0). Em Plugins → Configurar dá para ver a versão em uso, verificar no GitHub, atualizar e reverter. Só instala com o SHA-256 publicado conferido, prova que o binário executa antes de trocar e volta sozinho ao anterior se o novo falhar; em troca de versão maior, copia antes a sessão do WhatsApp.
Corrigido
- Link "Reconectar agora" do alerta de desconexão (Telegram) apontava para uma tela que o painel não tem e caía na caixa de conversas. Agora há um link por caixa caída, que abre direto o QR daquele canal.
- Nome do contato sobrescrito por um nome velho. Ao chegar uma mensagem, o nome de exibição do WhatsApp (
~Fulano) podia substituir um nome real já corrigido no painel ou trazido por outro canal ou plugin, porque a decisão era tomada sobre um cache desatualizado. Agora lê o nome atual do banco.
Também nesta versão
- Catálogo de agentes do time envia "habilitado" de forma explícita; o editor deixava de oferecer a opção quando o campo faltava.
- O alerta de desconexão fica mudo durante a troca do binário do GOWA e por cerca de 90 s depois.
- A versão do GOWA passa a vir de um único arquivo (
GOWA_VERSION) para o Dockerfile e os launchers; os launchers baixam de novo quando o binário local não bate com ela.
Ações de atualização
- Suba a versão; as três migrações novas rodam sozinhas no boot:
- 0072 reduz o cursor do rodízio a uma linha por time (fica a mais recente);
- 0073 acrescenta
atendimentos.ai_disabled_at(conversas já desligadas ficam sem data e a regra usa a última mensagem); - 0074 cria a permissão
agent.reactivation.managee a copia para quem já temsettings.manage, inclusive grupos e usuários com permissões personalizadas. Depois você concede ou retira por usuário ou grupo.
- Nova dependência:
tzdata. No Docker, o rebuild resolve. Em instalação nativa, rodepip install -r requirements.txt— sem ela o horário da regra por agenda cairia no fuso do servidor (UTC), em silêncio. ⚠️ Salto de major no GOWA (8.11.0 → 9.6.0). Subir a imagem ou rodar os launchers passa a usar o binário novo, e esse caminho não copia a sessão do WhatsApp (a cópia existe só no atualizador do painel). Faça backup da pastastorages/antes e confira depois se os números continuam conectados.- O plugin
gowaembutido sobe para a 1.5.0 e substitui a cópia instalada: edições manuais emstorages/plugins/gowa/são perdidas. - O religamento automático da IA vem desligado — nada muda até você ativar. Antes de ligar, lembre que ele tira o responsável de conversas atribuídas a uma pessoa.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Telegram, WhatsApp Cloud API, Messenger, Instagram, widget de site, protocolos de atendimento e follow-up automático entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.9.0...v0.10.0
v0.9.0 — Times privados, cofre de credenciais para a IA e tempo real consertado
Times ganham acesso privado e roteamento, as tools de IA ganham um cofre de credenciais, o tempo real do painel foi consertado e o painel ficou mais leve sob carga.
Destaques
- Times de atendimento, segunda parte. Um time agora tem três modos de acesso: aberto, lista oculta (a conversa some da listagem para quem não é do time, mas abre por link) e privado (a conversa some de tudo — link, detalhe, busca, tempo real e mídia respondem como se não existisse). Cada canal pode definir um time padrão para conversas novas e reabertas, a conversa mostra o time na barra lateral, e a IA ganha uma tool com trava para transferir a conversa a um time. Quem precisa enxergar tudo ganha uma permissão própria (
conversation.team.read_any); o administrador a recebe automaticamente. - Cofre de credenciais para as tools de IA. Uma tool de código que chama uma API externa não precisa mais ter a chave colada no próprio código (que fica no histórico de versões). Cadastre a credencial na aba Tools — vários campos por credencial — e libere para as tools que podem usá-la. O valor entra pela API, chega à tool de forma isolada e é trocado por
***em tudo que a tool devolve. A listagem nunca mostra o valor; um "olho", auditado e re-ocultado em 30 s, revela um campo por vez. - Contador da janela do cliente. Nos canais com janela de resposta (Meta), um chip ao lado do seletor Responder/Mensagem Privada mostra quanto tempo falta, e fica âmbar abaixo de 1 hora.
- Grupos: popup Ver membros (clicar num membro leva ao "Novo contato" já preenchido), filtro de conversas por tipo (grupo/individual) e avisos de "entrou/saiu do grupo" com link. A lista de participantes passou a ser pedida ao número certo quando a instalação tem mais de um canal GOWA.
- Menos peso em picos. Mensagens de grupos que não são permitidos no canal agora são descartadas logo na entrada — antes um disparo em massa em grupos esgotou os descritores de arquivo do servidor em produção. As permissões do usuário passam a ser calculadas uma vez por requisição, e a checagem de quem recebe cada evento do tempo real é feita em lote.
Corrigido
- A barra lateral só atualizava com F5. Uma mudança de segurança no tempo real descartava em silêncio o evento que reordena a lista de conversas. Corrigido, e o contrato de roteamento do WebSocket foi documentado.
- "Mídia indisponível" até recarregar a página. Mídia enviada pelo atendente e mídia recebida do cliente ao vivo chegavam sem identificador na bolha e não carregavam; só o F5 resolvia.
- A IA respondia com letras de outro alfabeto (armênio, japonês…) por engano. Agora a resposta é conferida e, se vier suja, é regerada uma vez sem tools.
- Transferência entre agentes especialistas não acontecia. Um especialista que pedia outro especialista recebia um erro e o turno terminava sem passar a conversa. O pedido agora é redirecionado ao roteador.
- Card de tool assinado pelo agente errado, e turnos de IA fora do webhook (nota privada, plugins) que não deixavam nenhuma execução registrada para investigar.
- Transcrição de áudio chegando ao painel com horário e identificador errados.
- Áudios
.opus,.mp3,.aace.amrbaixavam em vez de abrir em instalações em container (o tipo de mídia não era reconhecido). - Chave
checkout_api_keymascarada na trilha de auditoria.
Também nesta versão
- "Selecionar todos" nos filtros de lista (um botão por grupo nos filtros agrupados).
- Cards de sistema passam a exibir a mensagem citada.
- Lista de modelos de IA usa o endpoint do proxy que já exclui os modelos bloqueados, com fallback para o anterior.
- Monitor de atraso do servidor: registra um aviso no log quando o processamento trava por mais de 1 s.
- Botão Resolver/Reabrir mostra um indicador enquanto a requisição está em andamento.
- Para quem desenvolve plugin: a API de plugins avançou de 1.9.0 para 1.10.0 (aditiva — o método
Channel.should_drop_inboundtem valor padrão, nenhum plugin existente precisa mudar). Changelog emdocs/PLUGIN_API_CHANGELOG.md.
Ações de atualização
- Suba a versão; as duas migrações novas (times e cofre de credenciais) rodam sozinhas no boot.
- Times continuam como estavam. Quem já usava um time restrito permanece no modo lista oculta; o modo privado só vale se você ligar.
⚠️ Credenciais do cofre ficam em texto puro no banco (sem cifra em repouso). Um dump ou backup do Postgres as carrega em claro — proteja o acesso ao banco e aos backups como protegeria uma senha.- Se o executor agêntico usa os papéis
whatsbot_ro/whatsbot_rw, a migração já revoga o acesso deles às tabelas do cofre. Nada a fazer. - Quem tem a permissão de gerenciar tools passa a receber a de gerenciar credenciais automaticamente.
- Se você mantém plugin próprio, confira o
docs/PLUGIN_API_CHANGELOG.md.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Telegram, WhatsApp Cloud API, Messenger, Instagram, widget de site, protocolos de atendimento e follow-up automático entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.8.0...v0.9.0
v0.8.0 — Times de atendimento, e a instalação ganha uma API
Atendimento ganha times, a instalação ganha uma API pra integrar por fora, e dois bugs que perdiam mensagem de cliente sem deixar rastro foram fechados.
Destaques
- Times de atendimento. Agrupe atendentes em times e filtre/atribua conversas por time — independente de quem está atribuído individualmente (os dois campos convivem, um não limpa o outro). Um time pode ficar restrito: a conversa some da listagem pra quem está na caixa mas não é do time (abrir por link continua funcionando sempre), com uma exceção pontual pra quem foi atribuído àquela conversa específica.
- API pública
/api/v1, com chave por usuário. Integre sistemas externos sem senha compartilhada: cada integração ganha sua própria chave (X-Api-Key), com o mesmo RBAC e a mesma auditoria de uma sessão normal. Vem junto uma tela própria (API e Webhooks), webhooks de saída com fila e re-tentativa, e agora também envio de mídia (imagem, áudio, vídeo, documento) por upload ou por URL. - Atendente padrão do canal aceita um agente de IA. Antes só uma pessoa podia nascer dona de uma conversa nova; dá pra apontar um agente de IA específico também.
- Janela própria da IA nos canais Meta. Com a tag de atendimento ligada, o humano podia responder por até 7 dias enquanto a IA já tinha parado às 24h — mas o painel seguia oferecendo os toggles de nota privada da IA nesse intervalo, e a instrução do atendente era descartada sem aviso nenhum. Corrigido. Canal sem template aprovado passa a bloquear o envio no compositor em vez de deixar a mensagem falhar depois.
- Descrição de imagem por direção. Dá pra escolher se a IA descreve foto recebida, enviada pelo atendente e/ou em nota privada, separadamente — o mesmo controle que já existia pra áudio.
Corrigido — mensagens que sumiam sem aviso
- Mensagem do cliente que desaparecia sem deixar rastro. O horário da mensagem chega do GOWA como texto, não como número; um valor no formato errado quebrava a gravação depois que a mensagem já tinha saído da fila — ela sumia sem bolha, sem erro, sem retentativa. Ficou 6 dias em produção antes de ser notado. A conversa parecia só um cliente que abriu o chat e não digitou nada.
- Citação órfã quando o cliente manda várias mensagens seguidas. Só a última do grupo guardava um id; responder (clique direito) a qualquer uma anterior gravava uma citação pra um id que não existe, e a bolha mostrava "Mensagem original indisponível". Media 33 casos em ~2.100 citações, cerca de 1 por dia. Cada mensagem passa a gravar o próprio id.
- A IA parava de se despedir ao transferir pra um atendente. Uma correção anterior fez a IA calar a resposta assim que a transferência era decidida — inclusive a própria frase de despedida daquele turno. 226 transferências mudas em produção; a IA volta a se despedir antes de sair de cena.
- Mensagem manual que falhava ao enviar passava a assinar como "IA" na conversa; volta a assinar como o atendente que tentou.
- Foto sem legenda mandada em grupo perdia o nome de quem mandou — a bolha assinava com o nome do grupo.
Segurança
- Senha do banco ficava em claro na tela de auditoria. Um provedor específico (identificado internamente como
nexus_dsn) não estava na lista de campos mascarados e apareceu sem proteção em/auditpor semanas. Corrigido, e a lista de nomes sensíveis ficou mais abrangente. - Token do Telegram podia vazar no log ou na resposta de erro quando uma chamada à API do Telegram falhava; agora é mascarado.
Também nesta versão
- Descrição de imagem deixava de respeitar nota privada e virava resposta pública pro cliente.
- Cabeçalho de mídia de um template aprovado passa a aparecer como bolha no histórico da conversa.
- Etiquetas da lista de conversas passam a ser da conversa, não do contato — duas conversas do mesmo contato não compartilham mais etiqueta.
- F5 nas telas API e Webhooks e Sons parava de achar a página.
- Arrastar a barra do áudio pra trás (retroceder) voltou a funcionar.
- Cursor do texto no compositor caindo fora do lugar depois de certas edições.
- Contador das abas da lista piscava entre o total e o tamanho da página carregada.
- Mensagem que chega atrasada volta a cair no lugar certo do histórico, não jogada no fim.
.jfif,.ogg,.ogae.m4aregistrados como tipos de mídia válidos — arquivos nesses formatos paravam de abrir.- Para quem desenvolve plugin: a tela de configuração pode declarar largura
wide/full(antes toda configuração ficava espremida numa coluna de ~672px, não importa quanto conteúdo tivesse); a versão da API de plugins avançou de 1.1.0 para 1.9.0 — changelog completo emdocs/PLUGIN_API_CHANGELOG.md.
Atualizando
- Suba a versão; as migrações novas (times, chaves de API, webhooks de saída) rodam sozinhas no boot.
- Times, API pública e webhooks de saída são recursos opcionais — nada muda pra quem não usa.
- Se você mantém plugin próprio, confira o
docs/PLUGIN_API_CHANGELOG.md: a versão da API pulou bastante desde a última release.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Telegram, WhatsApp Cloud API, Messenger, Instagram, widget de site, protocolos de atendimento e follow-up automático entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.7.0...v0.8.0
v0.7.0 — Conversa sob controle
Quando um atendente assume, a IA cala — na hora. E o histórico deixou de ser uma janela presa no fim.
Destaques
- Humano no comando cala a IA. Atribuir a conversa, desligar a IA ou simplesmente responder você mesmo interrompem uma resposta já em andamento: a permissão passou a ser reavaliada no instante antes de cada mensagem sair. O que já foi entregue fica; o resto é abortado.
- Atendente digitando segura a IA — segura, não cancela, porque você pode desistir do texto.
- Buscar dentro da conversa. A lupa no cabeçalho lista as ocorrências e pula para cada uma; um calendário leva direto a uma data.
- Pular para uma mensagem antiga funciona mesmo fora do trecho carregado. Antes esse salto falhava em silêncio: nada acontecia e nenhum erro aparecia.
- Cabeçalho da conversa desafogado. A barra ficou com a ação principal (Resolver / Reabrir) e o resto foi para um menu ⋮ — o nome do contato não trunca mais.
- Alertas da conta Meta. Template pausado, qualidade do número caindo, limite de mensagens cortado, conta restrita: o painel não via nada disso. Agora chega num grupo do Telegram, com agregação e intervalo mínimo.
Segurança
- Campo secreto de canal não aceita mais a senha do painel. O gerenciador de senhas do navegador a injetava, por heurística, em campos como token do bot ou proxy de saída, e o número parava de funcionar. O campo agora bloqueia o preenchimento automático, tem botão de mostrar/ocultar e recusa formato inválido — citando o campo, nunca o valor.
- Canal WhatsApp novo nasce sem "Grupo / Comunidade" marcado. Um número de atendimento individual materializava todo grupo de que participava; num caso real, 118 contatos indesejados de uma vez. A opção continua a um clique, e canais existentes não mudam de comportamento.
Também nesta versão
- Com o histórico ancorado no passado, mensagens novas viram um contador "N novas" no botão Voltar ao fim, em vez de serem coladas no fim e criarem um buraco invisível. E abrir janeiro não zera as não lidas de hoje.
- A engrenagem saiu de cima da conversa e foi para a barra da lista.
- Ctrl+clique e clique do meio abrem em nova guia em toda a navegação do painel.
- Menu da mensagem: copiar ou abrir link, e-mail e telefone direto do texto.
- Para quem desenvolve plugin: um barramento de tempo real autenticado substitui o WebSocket aberto na mão, que era desconectado em silêncio. Os testes do núcleo e os dos plugins deixaram de ser um bloco só.
Atualizando
- Suba a versão; as migrações rodam sozinhas.
- Se você usa a tela de Atendimentos, instale o plugin de protocolos pela loja — ela saiu do núcleo, e
/atendimentospassa a redirecionar para a lista de conversas. - Se você usa a API oficial do WhatsApp (Cloud) e quer os alertas de conta, edite o canal preenchendo WABA ID e App Secret e assine os eventos no painel da Meta. Sem isso os alertas ficam mudos por segurança; as mensagens normais continuam funcionando.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Telegram, WhatsApp Cloud API, Messenger, Instagram, widget de site, protocolos de atendimento e follow-up automático entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.6.0...v0.7.0
v0.6.0 — Escala, mídia e canais novos
Versão retroativa — corresponde ao estado do projeto em 28/07/2026.
Busca sub-segundo em bases grandes, anexo validado antes do envio e dois canais novos da Meta.
⚠️ Base grande: aplique as migrações antes de subir a versão nova. Elas criam os índices de busca, e a versão nova consulta assumindo que eles existem.
Destaques
- Busca de conversas em menos de um segundo, contra até 20 segundos em bases grandes. A causa não era o volume: era uma consulta que remontava o histórico inteiro para descobrir a última mensagem de cada conversa. Vieram junto índices novos e paginação que não relê o que já foi lido.
- Arrastar e soltar arquivos no chat ou na própria lista de conversas, com prévia de vários de uma vez, fila de envio e vídeo direto na conversa.
- Anexo incompatível é barrado na hora, com o motivo, em vez de virar uma bolha "falhou" depois que o provedor recusa. Cada canal declara seus limites de tamanho e formato.
- Instagram Direct e Facebook Messenger entraram como canais completos, e a base compartilhada da API da Meta foi arrumada de uma vez para os dois.
- Rascunho por conversa, e por usuário. O texto não enviado fica guardado e sobrevive à troca de conversa; dois atendentes no mesmo navegador não veem o rascunho um do outro.
- "Fulano está digitando". Você vê quando outro atendente está escrevendo naquela conversa — na lista e dentro do chat.
Segurança
- Arquivos enviados pelo operador passaram a ser servidos com
Content-Disposition, fechando um XSS armazenado: um arquivo malicioso enviado por um cliente podia executar script no navegador do atendente.
Também nesta versão
- Áudio fora do padrão do canal é recodificado em vez de falhar; vídeo anexado como "documento" segue pelo caminho de vídeo.
- Atendente padrão por canal — a conversa já nasce atribuída a quem cuida daquele canal.
- Trilha de auditoria para plugins e canais: um filtro por canal devolve a história inteira dele. Conversa nunca entra na trilha.
- Tema escuro recalibrado, com uma verificação automática que impede uma cor nova de entrar ilegível.
Atualizando
- Aplique as migrações antes de subir a versão nova, especialmente em base grande (índices de busca).
- Nada mais é necessário — os limites de mídia e os canais novos são opcionais.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Os demais canais e recursos — Instagram e Messenger inclusive — entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.5.0...v0.6.0
v0.5.0 — Login só por identidade, e um IP por número
Versão retroativa — corresponde ao estado do projeto em 16/07/2026.
⚠️ Mudança incompatível — leia antes de atualizarA "Senha do Painel" acabou. O acesso passa a ser exclusivamente por e-mail + senha de usuário.
A senha única global contornava as permissões: quem a tivesse entrava como se pudesse tudo. A partir desta versão, assim que existir um usuário cadastrado, a API e o WebSocket exigem sessão. Com zero usuários a instalação continua aberta — é o que impede alguém de se trancar do lado de fora antes de criar a primeira conta.
Antes de atualizar: confirme que existe pelo menos um administrador com e-mail e senha que você saiba usar. Se a sua instalação só era acessada pela Senha do Painel, crie esse administrador antes.
Destaques
- Um IP de saída por número. Cada canal WhatsApp pode rotear a conexão por um proxy próprio, útil para quem opera vários números.
⚠️ Ligar ou desligar exige ler o QR Code de novo, e o IP precisa ser fixo e dedicado — endpoint rotativo é padrão de banimento. - Aviso de disco não persistente. Em container, o WhatsBot detecta armazenamento efêmero no início e avisa no log. Antes, um redeploy apagava os plugins instalados e a sessão do WhatsApp sem causa óbvia.
- Agente padrão unificado. A marcação "Padrão para novas conversas" passou a valer também como fallback em tempo de execução; antes, uma conversa reaberta voltava para um agente antigo.
- Conversa que nasce com a IA desligada não recebe agente — fica de fato "Não atribuída", em vez de parecer atendida por um robô que não vai responder.
- Trocar a própria senha pelo painel, sem depender de um administrador.
Também nesta versão
- GOWA atualizado para a 8.11.0 (a ponte com o WhatsApp).
Atualizando
- Garanta um administrador com e-mail e senha antes de atualizar (veja o aviso acima).
- Suba a nova versão; a migração
0052limpa as chaves da senha antiga sozinha. - Em container, confirme o armazenamento persistente para
/app/storagese/app/statics— a nova checagem avisa no log se estiver faltando.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Os demais canais e recursos entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.4.0...v0.5.0
v0.4.0 — Cada canal no seu lugar
Versão retroativa — corresponde ao estado do projeto em 14/07/2026.
Para quem atende por mais de um canal: o WhatsBot passa a saber de onde cada pessoa veio e para de misturar conversas do mesmo cliente.
Destaques
- Tipo de contato por canal. Cada contato carrega a marca de origem — WhatsApp, Telegram, outro. Ela aparece na lista e no painel do contato, vira filtro e sai na exportação.
- O mesmo cliente em dois canais vira duas conversas. A identidade passa a considerar o canal de origem, e a leitura de uma conversa não vaza para a outra.
- Não lida é por conversa, não mais por contato.
- Filtro de histórico por expressão regular. Em Configurações → IA, liste padrões de mensagem que não devem entrar no contexto da IA — corta avisos automáticos que só poluem o raciocínio e gastam token.
- Tela de execuções reformulada. Cada resposta da IA fica rastreável do começo ao fim: quanto custou, quais ferramentas chamou e qual agente respondeu.
Também nesta versão
- Ordenação combinável da lista de conversas (por leitura e por recência).
- Filtros novos: IA ligada/desligada e início de conversa (quem começou).
- Menção a um colega em nota privada, com notificação e contador de não lidas.
- O recurso "Gerar melhoria" saiu do núcleo e virou plugin.
Atualizando
Nenhuma ação manual. As migrações rodam sozinhas no início, inclusive a que marca os contatos antigos como WhatsApp.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Os demais canais e recursos entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.3.0...v0.4.0
v0.3.0 — Só PostgreSQL, e a IA multiagente com freio
Versão retroativa — corresponde ao estado do projeto em 02/07/2026.
⚠️ Mudança incompatível — leia antes de atualizarO SQLite foi removido. O WhatsBot agora exige PostgreSQL.
Sem a variável de ambiente
DATABASE_URLo programa não sobe. O overridestorages/database.json, a tela Configurações → Banco e o botão de migrar SQLite→Postgres deixaram de existir.DATABASE_URL=postgresql+psycopg://usuario:senha@servidor:5432/whatsbotSe você ainda estava no SQLite: migre os dados antes de atualizar, usando a versão anterior — ela ainda tem o botão de migração. Depois de atualizar não existe caminho de volta.
Por quê: um banco em arquivo não aguenta duas pessoas atendendo ao mesmo tempo, não sobrevive a um redeploy de container e não tem os índices que a busca precisa.
A IA multiagente — vários agentes com personalidades diferentes e um roteador que decide quem atende — ganhou os freios que faltavam.
Destaques
- Um roteador só. O painel impede marcar dois; antes dava para criar um laço em que dois agentes se empurravam a conversa.
- Teto de repasses. Estourado o limite, a conversa vai para um humano, com o motivo registrado.
- Teto de ferramentas por resposta, para uma IA em laço não consumir crédito indefinidamente.
- O motivo do repasse viaja junto — o próximo agente recebe por que a conversa chegou nele.
- Só o roteador transfere para humano, e o painel avisa quando a configuração está ao contrário.
Também nesta versão
- Cargos e permissões gerenciáveis pelo painel (criar, duplicar, excluir).
- A URL do navegador passa a refletir a tela aberta — dá para salvar e compartilhar link direto.
- Atribuir atendente em várias conversas de uma vez.
- Notas de áudio privadas e transcrição de várias mensagens selecionadas.
- A lista de conversas atualiza sozinha, sem recarregar a página.
- Cada mensagem registra quem a enviou.
Atualizando
- Providencie um PostgreSQL e configure a
DATABASE_URL(obrigatório — veja o aviso acima). - Suba a nova versão; as migrações rodam sozinhas no início.
- Se você já importou dados manualmente, rode uma vez
POST /api/admin/repair-sequences.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Os demais canais e recursos entram por Gerenciar Plugins → Importar (.zip).
Changelog completo: v0.2.0...v0.3.0
v0.2.0 — A plataforma de atendimento
Versão retroativa — corresponde ao estado do projeto em 29/06/2026.
O WhatsBot deixa de ser "um bot que responde" e passa a ser uma plataforma de atendimento em equipe: conversas com dono, permissões por pessoa e plugins que estendem até a interface.
Destaques
- Atendimento em equipe. Conversas ganham dono, status e histórico próprios. Uma conversa fechada reabre sozinha quando o cliente volta a escrever.
- Permissões por pessoa. Cada endpoint do painel passa a checar permissão — você decide quem vê custos, edita canais ou exclui conversas.
- Plugins que estendem a interface. Um plugin pode acrescentar peças à tela, reagir a eventos e substituir uma rota inteira, sem que o núcleo saiba que ele existe.
- Atributos personalizados de contato, com importação e exportação por CSV.
- "Gerar melhoria". Selecione uma resposta da IA e peça uma análise do que poderia ter sido melhor.
Também nesta versão
- O núcleo foi reorganizado em serviços de responsabilidade única — mensagens, conversas, canais e agente. Sem efeito visível, mas é o que sustenta as versões seguintes.
Atualizando
Nenhuma ação necessária.
📦 O WhatsBot é distribuído enxuto: núcleo + canal WhatsApp (QR Code). Os demais canais e recursos entram por Gerenciar Plugins → Importar (.zip).
Commits desta versão: v0.2.0