Descrição
O snippet de instalação gerado pelo painel (Channels → Web Widget → Configuration) inclui apiBase no window.evoChatSettings. O SDK lê esse valor e injeta &api_base=... na URL do iframe, quebrando a inicialização do widget React.
Além disso, o nginx.conf do frontend define frame-ancestors 'self' no CSP global, bloqueando o embed do widget em sites de terceiros.
Passos pra reproduzir
- Pegar o snippet do painel (Settings → Inboxes → Web Widget → Configuration)
- Colocar em qualquer site externo
- Clicar no botão do chat → erro "A conexão com [domínio] foi recusada."
Causas
1. SDK injeta api_base na URL do iframe
No sdk.min.js:
if(settings && settings.apiBase){ params += '&api_base=' + encodeURIComponent(settings.apiBase) }
O snippet do painel define apiBase no window.evoChatSettings, e esse parâmetro na URL do iframe quebra a inicialização do widget React.
2. CSP frame-ancestors 'self' no nginx.conf
# linha 25 do nginx.conf do frontend
add_header Content-Security-Policy "... frame-ancestors 'self'; ..." always;
Apesar do comentário "Do not set X-Frame-Options globally because /widget must be embeddable", o CSP equivalente está ativo e bloqueia o embed. Confirmado: sem frame-ancestors * o widget nem carrega; com * carrega.
Workaround
Remover apiBase do snippet e trocar o CSP:
// ❌ snippet quebrado do painel
window.evoChatSettings = {"position":"right","type":"expanded_bubble","launcherTitle":"Chat","apiBase":"https://chat.exemplo.com"};
// ✅ funcional (sem apiBase)
window.evoChatSettings = {"position":"right","type":"expanded_bubble","launcherTitle":"Chat"};
# ❌ bloqueia embed
frame-ancestors 'self'
# ✅ permite embed
frame-ancestors *
Correção esperada
- SDK / Frontend: não gerar snippet com
apiBase, ou o widget React tratar o parâmetro sem quebrar
- nginx.conf: trocar
frame-ancestors 'self' por frame-ancestors *
Ambiente
- Evo CRM Community v4.2.0
- Docker Compose
- nginx proxy reverso + frontend
Descrição
O snippet de instalação gerado pelo painel (Channels → Web Widget → Configuration) inclui
apiBasenowindow.evoChatSettings. O SDK lê esse valor e injeta&api_base=...na URL do iframe, quebrando a inicialização do widget React.Além disso, o
nginx.confdo frontend defineframe-ancestors 'self'no CSP global, bloqueando o embed do widget em sites de terceiros.Passos pra reproduzir
Causas
1. SDK injeta
api_basena URL do iframeNo
sdk.min.js:O snippet do painel define
apiBasenowindow.evoChatSettings, e esse parâmetro na URL do iframe quebra a inicialização do widget React.2. CSP
frame-ancestors 'self'no nginx.confApesar do comentário "Do not set X-Frame-Options globally because /widget must be embeddable", o CSP equivalente está ativo e bloqueia o embed. Confirmado: sem
frame-ancestors *o widget nem carrega; com*carrega.Workaround
Remover
apiBasedo snippet e trocar o CSP:Correção esperada
apiBase, ou o widget React tratar o parâmetro sem quebrarframe-ancestors 'self'porframe-ancestors *Ambiente