Configuracao Chatwoot + Pontifex IA
Guia completo para integrar o Chatwoot com o agente Pontifex IA.
Arquitetura
┌─────────────┐ webhook ┌──────────────┐ OpenAI API ┌───────────┐
│ Chatwoot │ ─────────────> │ Pontifex IA │ <──────────────> │ OpenAI │
│ (Rails) │ <───────────── │ (FastAPI) │ (GPT-4o) │ │
└─────────────┘ API response └──────────────┘ └───────────┘
:3000 :8000
Pre-requisitos
- Docker e Docker Compose instalados
- Chatwoot rodando (self-hosted)
- Chave de API da OpenAI
Passo 1: Subir os Servicos
cd /root/pontifex-ia
# Criar volumes externos (apenas primeira vez)
docker volume create chatwoot_postgres
docker volume create chatwoot_redis
docker volume create chatwoot_storage
# Subir servicos
docker compose -f docker-compose.production.yml up -d postgres redis
# Aguardar banco iniciar
sleep 10
# Inicializar banco do Chatwoot (apenas primeira vez)
docker compose -f docker-compose.production.yml run --rm rails bundle exec rails db:chatwoot_prepare
# Subir todos os servicos
docker compose -f docker-compose.production.yml up -d
Passo 2: Criar Conta Admin no Chatwoot
- Acesse no navegador:
http://SEU_IP:3000 - Na tela de boas-vindas, clique em Create New Account
- Preencha o formulario:
- Full Name: Seu nome (ex:
Administrador) - Email: Seu email de administracao
- Password: Senha forte
- Account Name: Nome da organizacao (ex:
Instituto FD) - Clique em Sign Up
- Voce sera redirecionado para o painel do Chatwoot
- Se SMTP estiver configurado, confirme o email antes de prosseguir
- Se nao, o acesso ja estara liberado
Passo 3: Criar API Channel Inbox
O API Channel e o canal que conecta o Pontifex IA ao Chatwoot. Atraves dele, o Chatwoot envia mensagens recebidas (via webhook) para o agente processar e responder.
3.1 Acessar configuracao de Inboxes
- No painel do Chatwoot, olhe a barra lateral esquerda
- Clique no icone de engrenagem (Settings) — fica na parte inferior da barra lateral
- No menu que abre, clique em Inboxes (na coluna da esquerda, sob "Settings")
- Clique no botao "+ Add Inbox" (canto superior direito)
3.2 Selecionar tipo de canal
- Na tela "Choose a channel", voce vera varios icones de canais (Website, Facebook, Twitter, etc.)
- Selecione API — e o icone com as chaves
{ }, geralmente na segunda linha de opcoes - Clique nele para prosseguir
3.3 Configurar o canal API
Na tela de configuracao, preencha:
| Campo | Valor | Descricao |
|---|---|---|
| Channel Name | Pontifex Bot |
Nome que aparecera no Chatwoot |
| Webhook URL | http://pontifex-api:8000/webhooks/chatwoot |
Endereco para onde o Chatwoot envia as mensagens |
IMPORTANTE: A Webhook URL usa o nome do container Docker (
pontifex-api), naolocalhost, pois ambos os servicos estao na mesma rede Docker interna.
- Clique em Create API Channel
3.4 Adicionar agentes ao Inbox
- Na proxima tela, voce pode adicionar agentes (usuarios humanos) que terao acesso a esse inbox
- Selecione o seu usuario admin e outros atendentes que precisarem
- Clique em Add Agents
3.5 Anotar o Inbox ID
- Apos a criacao, voce sera redirecionado para a tela de configuracao do inbox
- Olhe a URL do navegador — ela tera o formato:
http://SEU_IP:3000/app/accounts/1/settings/inboxes/X - O numero
Xno final e o Inbox ID — anote-o, sera usado nocredentials.toml
Passo 4: Obter API Access Token
O token de acesso permite que o Pontifex IA envie mensagens de volta ao Chatwoot.
- Na barra lateral esquerda do Chatwoot, olhe a parte inferior
- Clique no seu avatar (icone do usuario, canto inferior esquerdo)
- No menu que abre, clique em Profile Settings
- Na pagina de perfil, role a pagina para baixo
- Localize a secao "Access Token" — ela mostra um token longo (hash alfanumerico)
- Clique no token ou no botao de copiar ao lado para copiar
- Cole este token no campo
api_tokendocredentials.toml
IMPORTANTE: Guarde este token em local seguro. Ele da acesso total a conta via API.
Passo 5: Configurar Credenciais
Opcao A: Via GitHub Secrets (Producao)
Configure o secret CREDENTIALS_TOML no GitHub com:
[openai]
api_key = "sk-proj-SUA-CHAVE-OPENAI"
[chatwoot]
api_url = "http://chatwoot-rails:3000"
api_token = "SEU_ACCESS_TOKEN_AQUI"
account_id = 1
inbox_id = 1
Opcao B: Manualmente no VPS
mkdir -p /root/pontifex-ia/.secrets
cat > /root/pontifex-ia/.secrets/credentials.toml << 'EOF'
[openai]
api_key = "sk-proj-SUA-CHAVE-OPENAI"
[chatwoot]
api_url = "http://chatwoot-rails:3000"
api_token = "SEU_ACCESS_TOKEN_AQUI"
account_id = 1
inbox_id = 1
EOF
chmod 600 /root/pontifex-ia/.secrets/credentials.toml
Passo 6: Reiniciar Pontifex API
Verificar logs:
Passo 7: Configurar Webhook no Chatwoot
O webhook permite que o Chatwoot envie eventos (novas mensagens, etc.) para o Pontifex IA processar automaticamente.
7.1 Webhook do Inbox (API Channel)
Este webhook ja foi configurado no Passo 3 ao criar o API Channel Inbox. A URL deve apontar para o endpoint interno do Pontifex:
Nota: Use o nome do container (
pontifex-api) pois ambos estao na mesma rede Docker.
7.2 Webhook Global do Chatwoot (Alternativo)
Alem do webhook do inbox, voce pode configurar um webhook global:
- Acesse o Chatwoot em
http://SEU_IP:3000 - Va em Settings (engrenagem) > Integrations > Configure (ao lado de Webhooks)
- Clique em Add new webhook
- Configure:
| Campo | Valor |
|---|---|
| URL | http://pontifex-api:8000/webhooks/chatwoot |
| Events | Selecione message_created |
- Clique em Add Webhook
7.3 Verificar Webhook
Para confirmar que o webhook esta funcionando:
# Verificar logs do Pontifex em tempo real
docker logs pontifex-api -f
# Enviar uma mensagem no inbox e observar os logs
# Voce deve ver uma entrada como:
# INFO: Webhook recebido - event: message_created
7.4 Troubleshooting de Webhook
| Problema | Solucao |
|---|---|
| Webhook nao e recebido | Verificar se a URL usa o nome do container (pontifex-api) e nao localhost |
| Erro de conexao | Verificar se ambos containers estao na mesma rede: docker network inspect pontifex-ia_pontifex-network |
| Resposta nao aparece | Verificar se api_token, account_id e inbox_id estao corretos no credentials.toml |
| Mensagem duplicada | Certificar que nao ha webhook global E webhook de inbox apontando para a mesma URL |
Passo 8: Testar Integracao
Teste 1: Health Check
Teste 2: Criar Contato e Conversa via API
# Substituir TOKEN pelo seu API Access Token
# Criar contato
curl -X POST "http://localhost:3000/api/v1/accounts/1/contacts" \
-H "api_access_token: TOKEN" \
-H "Content-Type: application/json" \
-d '{"inbox_id": 1, "name": "Teste", "phone_number": "+5511999999999"}'
# Criar conversa (use o source_id retornado)
curl -X POST "http://localhost:3000/api/v1/accounts/1/conversations" \
-H "api_access_token: TOKEN" \
-H "Content-Type: application/json" \
-d '{"inbox_id": 1, "contact_id": 1, "source_id": "SOURCE_ID"}'
# Enviar mensagem (simula cliente)
curl -X POST "http://localhost:3000/api/v1/accounts/1/conversations/1/messages" \
-H "api_access_token: TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Ola, quero informacoes sobre o curso", "message_type": "incoming"}'
Teste 3: Verificar Webhook
Voce deve ver: - Webhook recebido - Processamento da mensagem - Resposta enviada
Variaveis de Configuracao
| Variavel | Descricao | Exemplo |
|---|---|---|
chatwoot_api_url |
URL interna do Chatwoot | http://chatwoot-rails:3000 |
chatwoot_api_token |
Access Token do usuario | abc123... |
chatwoot_account_id |
ID da conta | 1 |
chatwoot_inbox_id |
ID do inbox API | 1 |
chatwoot_webhook_secret |
Secret para validar webhooks (opcional) | meu-secret |
chatwoot_human_team_id |
ID do time para handoff (opcional) | 1 |
Handoff para Humano
O agente pode transferir a conversa para um atendente humano incluindo [HANDOFF] na resposta.
Quando isso acontece:
1. O texto [HANDOFF] e removido da mensagem
2. A conversa muda para status open
3. Se human_team_id estiver configurado, atribui ao time
Troubleshooting
Webhook nao e recebido
- Verificar se o callback URL esta correto no inbox
- Verificar se os containers estao na mesma rede:
Erro 401 ao enviar mensagem
- Verificar se o
api_tokenesta correto - Gerar novo token no Chatwoot
Resposta nao aparece
- Verificar logs do pontifex-api
- Verificar se
account_ideinbox_idestao corretos - Testar API manualmente:
Banco de dados vazio apos restart
Verificar se os volumes externos existem:
Se nao existirem, criar antes de subir os containers.
Backups
Backups automaticos sao criados em /root/backups/ a cada deploy.
Backup manual:
Restaurar:
Checklist de Configuracao
- [ ] Chatwoot rodando (
http://IP:3000) - [ ] Conta admin criada
- [ ] API Channel Inbox criado
- [ ] Webhook URL configurado:
http://pontifex-api:8000/webhooks/chatwoot - [ ] API Access Token obtido
- [ ] credentials.toml configurado com todas as chaves
- [ ] Pontifex API rodando e healthy
- [ ] Teste de mensagem funcionando