Script para desbloquear funcionalidades enterprise do Chatwoot, removendo limitações da versão community.
⚠️ PROJETO EDUCACIONAL - Este projeto é destinado exclusivamente para fins de estudo. O uso deste software infringe os termos de uso do Chatwoot e é por sua conta e risco. Leia a seção Aviso Legal antes de prosseguir.
curl -sL https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/docker-unlock.sh | bash📖 Guia Completo Docker/Portainer - Inclui troubleshooting, métodos alternativos e instruções via Portainer Web UI
Execute diretamente no container/servidor do Chatwoot:
wget -qO- https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/unlock_permanent.rb | bundle exec rails runner -Vantagens:
- ✅ Configurações permanentes que não resetam
- ✅ Trigger PostgreSQL protege contra alterações
- ✅ Configurações marcadas como
locked - ✅ Proteção automática contra reversão
Proteção com Trigger PostgreSQL:
- Cria função
force_enterprise_installation_configs()no banco - Cria trigger
trg_force_enterprise_configsque intercepta INSERT/UPDATE - Força valores enterprise automaticamente em qualquer tentativa de alteração
- Marca configurações como
locked = true
Configurações do Banco de Dados:
- Define o plano como
enterprise - Configura limite de usuários para 9.999.999
- Remove alertas de limitação do Redis
Atualização de Fallbacks:
- Modifica
lib/chatwoot_hub.rb - Cria backup automático do arquivo original
- Atualiza valores padrão para enterprise
Após executar o script, seu Chatwoot terá:
- 🔓 Usuários ilimitados (9.999.999)
- 🏢 Funcionalidades enterprise ativadas
- 🚫 Sem alertas de limitação
- 💾 Configurações persistentes
installation_configs(tabela PostgreSQL)- Trigger
trg_force_enterprise_configs(PostgreSQL) - Função
force_enterprise_installation_configs()(PostgreSQL) lib/chatwoot_hub.rb(fallbacks)- Cache Redis (limpeza de alertas)
INSTALLATION_PRICING_PLAN = 'enterprise'
INSTALLATION_PRICING_PLAN_QUANTITY = 9999999O trigger garante que qualquer tentativa de alterar as configurações será automaticamente revertida:
CREATE TRIGGER trg_force_enterprise_configs
BEFORE INSERT OR UPDATE ON installation_configs
FOR EACH ROW
EXECUTE FUNCTION force_enterprise_installation_configs();O script cria backups automáticos antes de modificar arquivos:
lib/chatwoot_hub.rb.backup.YYYYMMDD_HHMMSS
No host onde o Docker está instalado:
curl -sL https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/docker-unlock.sh | bashO script detecta automaticamente o container do Chatwoot e executa o desbloqueio.
# 1. Encontre o nome do container
docker ps | grep chatwoot
# 2. Execute o script no container
docker exec -it <NOME_DO_CONTAINER> bash -c "wget -qO- https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/unlock_permanent.rb | bundle exec rails runner -"
# 3. Reinicie o container
docker restart <NOME_DO_CONTAINER>- Acesse o Portainer
- Vá em Containers → Selecione o container do Chatwoot
- Clique em >_ Console
- Selecione Command: /bin/bash e clique em Connect
- Execute no terminal:
wget -qO- https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/unlock_permanent.rb | bundle exec rails runner -
- Volte aos containers e clique em Restart no container do Chatwoot
Se preferir executar SQL diretamente no banco de dados:
# 1. Conecte ao container do PostgreSQL
docker exec -it <CONTAINER_POSTGRES> psql -U postgres -d chatwoot_production
# 2. Execute o script SQL
\i unlock_permanent.sqlOu baixe e execute:
wget https://raw.githubusercontent.com/LuizBranco-ClickHype/Dchat/main/unlock_permanent.sql
docker exec -i <CONTAINER_POSTGRES> psql -U postgres -d chatwoot_production < unlock_permanent.sqlchatwoot_hub.rb manualmente no container do Chatwoot.
- ✅ Container Docker do Chatwoot
- ✅ Docker Compose
- ✅ Portainer / Portainer CE
- ✅ Instalações Rails padrão
- ✅ Versões recentes do Chatwoot
- Este projeto é fornecido "COMO ESTÁ", sem garantias de qualquer tipo
- O uso deste software é inteiramente por sua conta e risco
- Os desenvolvedores NÃO se responsabilizam por qualquer dano, perda de dados, problemas legais ou consequências decorrentes do uso
- Este projeto foi desenvolvido exclusivamente para fins educacionais e de estudo
- Destinado ao aprendizado de Ruby, PostgreSQL, triggers e administração de sistemas
- NÃO é recomendado para uso em ambientes de produção
- Esta ferramenta modifica e contorna limitações comerciais do Chatwoot
- O uso deste script INFRINGE os Termos de Serviço do Chatwoot
- Pode violar direitos de propriedade intelectual e licenças de software
- Use apenas em ambientes de testes/desenvolvimento isolados
O usuário é o único responsável por:
- Verificar a legalidade do uso em sua jurisdição
- Respeitar os termos de licença do Chatwoot
- Arcar com quaisquer consequências legais
- Problemas técnicos causados pela modificação
Para uso comercial legítimo:
- Adquira uma licença Enterprise oficial do Chatwoot
- Visite: https://www.chatwoot.com/pricing
- Suporte o desenvolvimento de software open-source
Ao usar este software, você concorda que leu, entendeu e aceita todos os termos acima.
- Reinicie o container do Chatwoot
- Acesse a interface web
- Verifique se as limitações foram removidas
A versão permanente usa triggers do PostgreSQL que interceptam qualquer operação de INSERT ou UPDATE na tabela installation_configs:
- Trigger ativo 24/7: Monitora modificações na tabela
- Reescrita automática: Qualquer valor diferente de
enterpriseé automaticamente sobrescrito - Lock de configuração: Marca registros como
locked = true - Persistência garantida: Mesmo reinícios ou atualizações do Chatwoot não removem o trigger
Exemplo prático:
-- Alguém tenta alterar para 'community'
UPDATE installation_configs SET value = 'community' WHERE name = 'INSTALLATION_PRICING_PLAN';
-- O trigger intercepta e força de volta para 'enterprise'
-- Resultado final: value = 'enterprise' ✅Se precisar reverter as mudanças permanentes:
-- Remover trigger
DROP TRIGGER IF EXISTS trg_force_enterprise_configs ON installation_configs;
-- Remover função
DROP FUNCTION IF EXISTS force_enterprise_installation_configs();
-- Restaurar valores originais
UPDATE installation_configs
SET serialized_value = to_jsonb('--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: community\n'),
locked = false
WHERE name = 'INSTALLATION_PRICING_PLAN';
UPDATE installation_configs
SET serialized_value = to_jsonb('--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nvalue: 0\n'),
locked = false
WHERE name = 'INSTALLATION_PRICING_PLAN_QUANTITY';Dchat - Projeto educacional open-source