Embed é colocar um painel do ingestia.bi dentro de outro site (um portal do
cliente, um sistema interno) via <iframe>, com um token assinado e uma
allowlist de origem. Um SDK JS opcional deixa a página hospedeira ouvir
eventos e empurrar filtros para o painel.
Workspace do exemplo: Comércio Aurora Ltda (aurora); origem hospedeira fictícia
https://portal.example.com.
Maturidade
O protocolo do SDK (postMessage v1, fail-closed) é GA-candidato — os testes
são a especificação do embed-sdk.js. Mas a allowlist de origem é global por
ambiente (env), não por workspace e a renderização/latência em produção é NÃO MEDIDO. Por isso a página é Preview.
Como funciona (visão geral)#
- Seu backend pede um token de embed (HMAC-SHA256) para um painel específico.
- Você monta um
<iframe src="/d/embed/<token>">na página hospedeira. - O servidor valida Origin/Referer e a CSP
frame-ancestorsrestringe quem pode emoldurar o iframe (allowlist). - (Opcional) O
embed-sdk.jsconecta a página ao iframe porpostMessagepara eventos e filtros.
Pré-requisitos#
- Painel publicado.
- A origem hospedeira (
https://portal.example.com) na allowlist de embed do ambiente. - Backend capaz de gerar o token de embed (curto e efêmero).
Segurança do token e do canal#
- Token HMAC-SHA256, verificação timing-safe, TTL 15 min (teto 12h), escopo de um painel.
- O token pode levar um escopo de linha (por exemplo, só a loja do usuário): ele só estreita o que a política do painel já permite, nunca amplia. PII sempre mascarada. Painel despublicado é recusado.
- O canal
postMessageé fail-closed: mensagem fora do formato é recusada; a ponte fixa (pin) a primeira origem válida da allowlist e só aceita comandos dela; respostas usamtargetOriginexplícito, nunca*. - Nenhuma mensagem transporta linha de dado, token ou segredo — o SDK troca
apenas o estado de filtros (a mesma informação que já vai na URL
?f=).
Passo a passo#
Peça a liberação da origem
Em Compartilhar ▸ 2 · Embed na sua aplicação, veja a lista Sites autorizados a exibir o painel. Se
https://portal.example.comnão estiver nela, peça ao suporte informando o domínio.Ligue o embed
Escolha a Validade máxima do token (recomendado 15 minutos (recomendado)) e clique em Ligar o embed. Copie o segredo — "Copie o segredo agora — ele não será mostrado de novo."
Gere o token no backend
Use o código de Como emitir o token no seu servidor para assinar um token por carga de página (TTL curto), com o escopo de linha do usuário, se houver.
Monte o iframe
Na página hospedeira:
<iframe src="https://SEU-HOST/d/embed/TOKEN" style="width:100%;height:600px;border:0"></iframe>, ou use o SDK.(Opcional) Conecte o SDK
Inclua
embed-sdk.jse assine eventos (onPronto,onEstado,onErro) e envie filtros para o painel.Teste
Gerar link de teste mostra o painel antes de escrever código. Depois, abra o portal e confirme o carregamento, o recorte e os filtros.
O que o SDK oferece#
- Eventos para a página hospedeira (ex.:
onErro({codigo})com códigos comoorigem_nao_autorizada,timeout_carregamento). - Empurrar/ler o estado de filtros do painel (lista, período, faixa, hierarquia, parâmetros numéricos) — nunca dados brutos.
- Ajuste de altura e handshake versionado (
v: 1; outra versão é recusada). - Layout por aparelho: dentro de um iframe estreito (celular, tablet), o painel usa o layout que o dono arrumou para aquele aparelho.
- O modo TV (
?tv=1) não vale no embed; para telão, use o Link de TV.
Resultado esperado#
- O painel carrega dentro do portal só quando a origem está na allowlist.
- Cada visitante vê o recorte de RLS do token que o backend emitiu.
- Filtros empurrados pela página hospedeira refletem no painel; nenhum dado sensível
trafega pelo
postMessage.
Erros comuns#
| Sintoma | Causa | O que fazer |
|---|---|---|
Iframe em branco / origem_nao_autorizada | origem fora da allowlist | peça ao suporte a liberação de https://portal.example.com |
| Todo token parou de valer | alguém clicou em gerar segredo novo ou Desativar | atualize o segredo no servidor / Reativar |
| "Token expirado" | TTL de 15 min estourou | gere um token novo por sessão/carga |
| Filtros ignorados | origem não "pinada" corretamente | garanta que os comandos vêm da origem da allowlist |
Limites e ressalvas#
- Allowlist de origem é global da plataforma, não por workspace (evolução → por isso Preview).
- Renderização e latência em produção são
NÃO MEDIDO. - Para compartilhamento sem embutir, use o link público.
Relacionados#
Última revisão: 2026-10-03.