name: chatwoot-inbox-creation-rails-console
description: Criar inboxes no Chatwoot via Rails console quando a API/ui falha (bug conhecido no Chatwoot 4.12.1)
category: devops
Chatwoot — Criar Inboxes via Rails Console (quando API falha)
Contexto
O Chatwoot 4.12.1 tem um bug conhecido: ao criar inboxes via API (POST /api/v1/accounts/:id/inboxes) ou pela interface web (que usa a mesma API por baixo), ocorre:
`
NoMethodError (undefined method '[]' for nil)
app/controllers/api/v1/accounts/inboxes_controller.rb:86:in `create_channel'
`
Solução: criar as inboxes diretamente via Rails console, bypassando o endpoint com bug.
Passo a Passo
1. SSH no VPS
`bash
ssh root@31.97.243.106
senha: Marcia19671951@
`
2. Identificar o container Rails
`bash
docker ps --format "{{.Names}}" | grep rails
deve retornar algo como: root-rails-1
`
3. Criar as inboxes via Rails console
`ruby
Exemplo: criar uma inbox de canal API (Uazapi)
docker exec root-rails-1 bundle exec rails runner "
account = Account.find(1)
# Dados da instância Uazapi
phone = '5511940746066'
token = 'TOKEN-GERADO-PELO-UAZAPI'
webhook = 'https://rochasales.uazapi.com/chatwoot/webhook/' + token
# Criar canal e inbox
channel = Channel::Api.create!(account_id: account.id, webhook_url: webhook)
inbox = Inbox.create!(name: phone, channel: channel, account: account)
puts \"Inbox criada! ID: #{inbox.id}, Nome: #{inbox.name}\"
"
`
4. Configurar o Uazapi (em cada instância)
`bash
PUT https://rochasales.uazapi.com/chatwoot/config
Header: token:
curl -s -X PUT "https://rochasales.uazapi.com/chatwoot/config" \
-H "token: TOKEN-DA-INSTÂNCIA" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"url": "https://chat.rochasalesseguros.com.br",
"access_token": "REDACTED",
"account_id": 1,
"inbox_id": ID_DA_INBOX_CRIADA
}'
`
5. Verificar configuração no Uazapi
`bash
curl -s -X GET "https://rochasales.uazapi.com/chatwoot/config" \
-H "token: TOKEN-DA-INSTÂNCIA" | python3 -c "
import sys, json
d = json.load(sys.stdin)
s = d.get('integration_status', {})
print(f\" webhook: {s.get('webhook_url','N/A')}\")
print(f\" inbox: {s.get('inbox_name','N/A')}\")
print(f\" inbox_exists: {s.get('inbox_exists','N/A')}\")
print(f\" webhook_configured: {s.get('webhook_configured','N/A')}\")
print(f\" status: {s.get('status','N/A')}\")
"
`
Esperado: status: ok, inbox_exists: True, webhook_configured: True
Encontrar o account_id correto
`bash
docker exec root-rails-1 bundle exec rails runner "
Account.all.pluck(:id, :name).each { |id, name| puts \"\#{id}: \#{name}\" }
"
`
Encontrar o access_token do Chatwoot
`bash
docker exec root-rails-1 bundle exec rails runner "
User.first&.access_token || 'não encontrado'
"
`
Encontrar o inbox_id (para verificar)
`bash
docker exec root-rails-1 bundle exec rails runner "
Inbox.all.pluck(:id, :name).each { |id, name| puts \"\#{id}: \#{name}\" }
"
`
Armadilhas Conhecidas
- - CW_EDITION=ee no Docker: A variável
CW_EDITION=eeque aparece como "Enterprise" na interface não está nodocker-compose.yml,.envouDockerfile— está bakeada na imagem Docker (chatwoot/chatwoot:latest). Isso é normal e não precisa ser alterado. - - INSTALLATION_PRICING_PLAN=community no banco: Mesmo com Enterprise aparecendo na UI, o banco pode mostrar
community. Isso é um estado transitório/normal. - - Bug da API de inboxes: Afeta Chatwoot 4.12.1 (e possivelmente outras versões). A solução é sempre o Rails console.