Chatwoot WhatsApp: Configuração de Múltiplos Atendentes

11 min de leitura Automação
Chatwoot WhatsApp: Configuração de Múltiplos Atendentes

Introdução à Escalabilidade no Atendimento via WhatsApp com Chatwoot

A gestão de canais de comunicação digital evoluiu drasticamente nos últimos anos. Para empresas que buscam autonomia tecnológica, a solução Chatwoot se destaca como uma plataforma de código aberto (open-source) para caixa de entrada omnicanal. Ela permite centralizar mensagens de WhatsApp, Facebook Messenger, Instagram e sites em uma única interface, oferecendo controle total sobre os dados dos clientes.

No entanto, ao escalar as operações, muitos administradores de sistemas deparam-se com um gargalo comum: a limitação de uma única instância do WhatsApp Web por número de telefone. Embora o Chatwoot suporte múltiplos números na mesma interface, cada número requer sua própria conexão WebSocket estável. Para cenários de alto volume ou para distribuir a carga entre diferentes atendentes, a configuração de múltiplas instâncias torna-se não apenas recomendada, mas essencial.

Este tutorial técnico detalha o processo de configurar e gerenciar múltiplos botões de WhatsApp (ou linhas telefônicas distintas) em um ambiente self-hosted. Abordaremos desde a arquitetura dos contêineres Docker até a integração com fluxos de automação via Typebot e chatbots IA, garantindo que seus disparos seguros e respostas automatizadas funcionem sem interrupções.

Arquitetura da Solução: Por que Múltiplas Instâncias?

A principal vantagem de separar as instâncias do WhatsApp reside na resiliência e na paralelização. O protocolo utilizado pelo Chatwoot para conectar ao WhatsApp Web (via biblioteca Baileys ou similar, dependendo da versão) é sensível a desconexões frequentes. Ao isolar cada número em seu próprio serviço Docker:

  • Isolamento de Falhas: Se um número for banido ou perder a conexão por inatividade, os outros números continuam operando normalmente.
  • Otimização de Recursos: Você pode alocar recursos específicos (CPU/RAM) para cada serviço de atendimento, evitando que um pico de mensagens em uma campanha afete a latência do suporte técnico principal.
  • Gestão de Sessões: Cada instância mantém seu próprio arquivo de sessão e cache. Isso facilita o backup individual e a recuperação de dados.

Para ambientes de produção robustos, recomenda-se o uso de orquestradores como Docker Compose ou Kubernetes. Neste guia, focaremos na estrutura docker-compose.yml, que é padrão para a maioria das instalações self-hosted no Brasil.

Passo 1: Preparação do Ambiente Docker

Antes de iniciar a configuração dos serviços, certifique-se de que seu servidor atenda aos requisitos mínimos. Para múltiplas instâncias, o consumo de memória RAM é linear ao número de conexões abertas. Recomenda-se um VPS com pelo menos 4GB de RAM e processador multi-core.

Crie uma estrutura de diretórios dedicada para gerenciar as sessões e configurações de cada instância. Isso evita conflitos de arquivos de estado.

mkdir -p /opt/chatwoot/instances/instance1/sessions
mkdir -p /opt/chatwoot/instances/instance2/sessions
docker --version

Verifique a versão do Docker e do Docker Compose para garantir compatibilidade com as imagens oficiais ou forks utilizados pela comunidade.

Passo 2: Configuração do Serviço de WhatsApp no Docker Compose

A chave para o sucesso nesta configuração é a definição correta dos volumes e variáveis de ambiente. Abaixo, apresentamos um exemplo prático de como estruturar dois serviços distintos de WhatsApp dentro do mesmo arquivo docker-compose.yml ou em arquivos separados.

Cada instância deve ter uma porta interna única se estiverem expostas diretamente, mas geralmente o Chatwoot atua como proxy. O importante é garantir que cada serviço tenha seu próprio diretório de dados montado.

version: '3.8'

services:
  # Primeira Instância de WhatsApp
  wa-instance-1:
    image: chatwoot/chatwoot:latest
    container_name: chatwoot-wa-1
    restart: unless-stopped
    environment:
      - REDIS_URL=redis://redis:6379
      - RAILS_ENV=production
      # Configurações específicas para o adapter de WhatsApp 1
      - WA_INSTANCE_ID=instance_1
    volumes:
      - /opt/chatwoot/instances/instance1/sessions:/app/public/qr
    depends_on:
      - redis
      - postgres

  # Segunda Instância de WhatsApp
  wa-instance-2:
    image: chatwoot/chatwoot:latest
    container_name: chatwoot-wa-2
    restart: unless-stopped
    environment:
      - REDIS_URL=redis://redis:6379
      - RAILS_ENV=production
      # Configurações específicas para o adapter de WhatsApp 2
      - WA_INSTANCE_ID=instance_2
    volumes:
      - /opt/chatwoot/instances/instance2/sessions:/app/public/qr
    depends_on:
      - redis
      - postgres

  redis:
    image: redis:alpine
    restart: always
    command: redis-server --appendonly yes

  postgres:
    image: postgres:13-alpine
    restart: always
    environment:
      POSTGRES_DB: chatwoot
      POSTGRES_USER: chatwoot
      POSTGRES_PASSWORD: senha_segura_aqui

Nota Técnica: Em algumas arquiteturas modernas, o serviço de WhatsApp é desacoplado do servidor web principal. Se você estiver usando uma instalação baseada em microserviços, certifique-se de que cada instância do bot se comunique corretamente com o canal configurado no painel do Chatwoot.

Passo 3: Integração com Webhooks e Disparos Seguros

Uma vez que as instâncias estão rodando, o próximo passo crítico é garantir a segurança dos dados transmitidos. O Chatwoot utiliza webhooks para enviar eventos (como mensagens recebidas ou atualizações de status) para servidores externos ou para integrar com sistemas de CRM.

Para configurar disparos seguros:

  1. Acesse o painel administrativo do Chatwoot.
  2. Navegue até Settings > Integrations.
  3. Selecione a instância de WhatsApp desejada.

Ative a opção de validação de assinatura. Isso garante que as requisições POST vindas do Chatwoot foram realmente enviadas por ele e não foram adulteradas em trânsito. Utilize o cabeçalho X-Chatwoot-Signature em seus servidores receptores para verificar a integridade.

Além disso, ao configurar os webhooks de saída, utilize sempre URLs com https://. Se você estiver usando um servidor local para testes, configure um túnel seguro (como ngrok ou Cloudflare Tunnel) para expor sua API local sem comprometer a segurança.

Passo 4: Automação com Typebot e Chatbots IA

A verdadeira potência do Chatwoot reside na sua capacidade de integrar-se com ferramentas de criação de fluxos conversacionais. O Typebot é uma das integrações mais populares para criar robôs de atendimento inteligentes que rodam em ambiente self-hosted.

Conectando Typebot ao Chatwoot

O fluxo geral envolve a criação de um bot no Typebot e a configuração do Chatwoot para enviar mensagens para esse bot quando certas condições forem atendidas, ou vice-versa.

  1. Crie o Fluxo no Typebot: Utilize a interface visual do Typebot para desenhar o diálogo. Certifique-se de ativar a opção "Webhook" ou "Chatwoot Integration" nas configurações do fluxo.
  2. Obtenha as Credenciais: No Typebot, gere uma API Key e anote o ID do seu bot.
  3. Configure no Chatwoot:

Nos ajustes do canal WhatsApp correspondente à instância configurada (por exemplo, w-instance-1), insira as credenciais obtidas. O Chatwoot enviará a mensagem do usuário para o Typebot via webhook e receberá a resposta processada para exibir ao cliente.

Dica de Pro: Para chatbots IA, você pode substituir ou complementar o Typebot com integrações via API de LLMs (como OpenAI ou modelos locais via Ollama). Utilize o recurso de "Canned Responses" do Chatwoot combinado com scripts Python que chamam a API da IA para gerar respostas personalizadas em tempo real, enviando-as através do webhook de resposta.

Passo 5: Gerenciamento e Monitoramento das Instâncias

Com múltiplas instâncias ativas, o monitoramento torna-se parte integrante da rotina de sysadmin. É crucial verificar a saúde de cada conexão WhatsApp periodicamente.

Verificando o Status dos Contêineres

Use os comandos padrão do Docker para inspecionar o status e os logs de cada instância.

# Verificar status geral
docker ps | grep chatwoot-wa

# Ver logs da primeira instância em tempo real
docker logs -f chatwoot-wa-1

# Ver logs da segunda instância
docker logs -f chatwoot-wa-2

No log do Chatwoot, procure por mensagens relacionadas ao adapter de WhatsApp. Erros comuns incluem ERR_CONNECTION_REFUSED ou falhas na leitura do QR Code. Se uma instância entrar em loop de reinicialização, verifique as permissões dos diretórios de sessão montados.

Rotação de Sessões e Backup

As sessões do WhatsApp são armazenadas em arquivos JSON dentro dos volumes montados (/app/public/qr). Para garantir a continuidade do serviço:

  • Realize backups diários desses diretórios.
  • Nunca exclua os arquivos de sessão manualmente sem antes desconectar o dispositivo no aplicativo WhatsApp original, pois isso pode corromper o token de acesso.

Você pode automatizar esse backup utilizando um script simples em Bash ou uma tarefa cron:

# Exemplo de script de backup simples
#!/bin/bash
DATE=$(date +%F)
tar -czf /backup/chatwoot-sessions-${DATE}.tar.gz /opt/chatwoot/instances/

Passo 6: Otimização de Performance e Escalabilidade Horizontal

Em cenários onde o volume de mensagens excede a capacidade de um único servidor, a estratégia de múltiplas instâncias deve evolir para uma arquitetura de balanceamento de carga.

Distribuição de Atendentes

O Chatwoot permite atribuir agentes específicos a canais específicos. Na prática:

  1. Crie grupos de atendentes (ex: "Suporte Técnico", "Vendas").
  2. Associe o canal w-instance-1 ao grupo "Vendas".
  3. Associe o canal w-instance-2 ao grupo "Suporte Técnico".

Isso garante que as mensagens cheguem aos responsáveis corretos sem sobrecarregar um único agente. Além disso, utilize a funcionalidade de "Sla" (Service Level Agreement) para monitorar o tempo de resposta médio por instância.

Uso de Redis Cluster

Para instalações com alto tráfego, o Redis padrão (single-node) pode se tornar um gargalo. Considere migrar para um Redis Cluster ou usar o Redis em modo Sentinel para garantir alta disponibilidade das filas de mensagens. Isso é particularmente importante quando se utilizam disparos em massa, onde a fila de processamento pode ficar congestionada.

Boas Práticas de Segurança e Conformidade (LGPD)

Ao operar múltiplos atendentes via WhatsApp, você lida com dados pessoais sensíveis. Adote as seguintes práticas:

  • Logs Ofuscados: Configure o Chatwoot para ofuscar números de telefone e nomes de usuários em logs internos, se possível.
  • Acesso Restrito: Restrinja o acesso ao painel administrativo do Chatwoot por IP ou via VPN. Ative a autenticação de dois fatores (2FA) obrigatória para todos os administradores.
  • Criptografia em Repouso: Certifique-se de que o banco de dados PostgreSQL esteja com criptografia de disco ativada no nível do sistema operacional ou do provedor de nuvem.

Lembre-se que a conformidade com a LGPD não é opcional. O uso de disparos seguros e o consentimento explícito dos usuários para interação via WhatsApp são requisitos fundamentais para evitar penalidades legais.

Conclusão

A configuração do Chatwoot com múltiplas instâncias de WhatsApp representa um salto qualitativo na maturidade operacional de qualquer equipe de suporte ou vendas. Ao separar as cargas, garantir a segurança via webhooks e integrar inteligência artificial através de ferramentas como o Typebot, você transforma um simples canal de mensagens em uma máquina de conversão e fidelização robusta.

Lembre-se: a tecnologia é apenas o facilitador. A manutenção contínua das sessões, o monitoramento proativo dos logs e o treinamento da equipe para utilizar as funcionalidades de automação são os pilares que sustentam o sucesso dessa implementação. Teste rigorosamente em ambiente de homologação antes de promover essas múltiplas instâncias para a produção.

Agora que sua infraestrutura está pronta, explore as possibilidades de customização via API REST do Chatwoot para integrar ainda mais profundamente seus sistemas internos com o fluxo conversacional do WhatsApp.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000