Meet embutível — integração

Reuniões cifradas de ponta a ponta dentro do seu produto. Três passos: o seu backend cria a sala, o seu frontend insere o componente, e as chaves nascem no browser de cada participante.

Onde vivem as chaves

A sua API key nunca vai ao browser. É usada só do seu backend para o nosso, no passo 1. Se aparecer no frontend, qualquer visitante pode criar salas na sua conta.

As chaves de cifra nascem no browser de cada participante, dentro do iframe, e são acordadas entre eles. Não passam pelo nosso servidor nem pelo seu — nem o site que embute a sala as vê.

Consequência prática, e é a que costuma surpreender: nós não conseguimos recuperar o conteúdo de uma reunião, nem a pedido do titular. Não é política, é o desenho.

1. O seu backend cria a sala

Autenticação por API key PQSL, com direito de utilização do Meet activo (provisionado pelo seu revendedor).

curl -X POST https://posquantum.com/api/v1/meet/rooms \
  -H "Authorization: Bearer $PQSL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Reunião com o cliente",
    "accessMode": "approval",
    "embedDomains": ["app.oseuproduto.com"]
  }'

Resposta (201):

{
  "ok": true,
  "room": {
    "slug": "…",
    "name": "Reunião com o cliente",
    "accessMode": "approval",
    "expiresAt": "…",
    "embedDomains": ["app.oseuproduto.com"],
    "url": "https://posquantum.com/pt/meet/…",
    "embedUrl": "https://posquantum.com/pt/meet/…?embed=1&…"
  }
}

accessModeopen (qualquer pessoa com o link), approval (o anfitrião admite cada entrada) ou members. O valor por omissão é open.

embedDomains — a lista de domínios onde a sala pode ser embutida. O embedUrl passa a trazer essa lista assinada, e o servidor recusa a sala em qualquer outro domínio. Sem este campo a sala pode ser embutida em qualquer lado — é o comportamento de compatibilidade, e é o primeiro parâmetro a definir em produção.

expiresAt — as salas criadas por API expiram 24 h depois de criadas.

2. O seu frontend insere o componente

<script src="https://posquantum.com/sdk/meet-embed.js" async></script>

<posquantum-meet
  embed-url="EMBED_URL_DEVOLVIDO_PELA_API"
  width="100%"
  height="640px"
></posquantum-meet>

Atributos opcionais: width (por omissão 100%) e height (por omissão 640px). O componente pede permissões de câmara, microfone, partilha de ecrã e ecrã completo ao iframe.

3. Código de verificação (opcional)

O componente emite pqsl-safety-number para poder mostrar o código de verificação na sua própria interface, fora do iframe.

document.querySelector('posquantum-meet')
  .addEventListener('pqsl-safety-number', (e) => {
    // e.detail = { fingerprint, epoch }
    mostrarCodigoDeVerificacao(e.detail.fingerprint)
  })

O fingerprint é informação pública — deriva da chave, não a revela. Serve para os participantes o compararem em voz alta: se bater, estão todos na mesma sala com a mesma chave. Nenhum material de chave sai do iframe.

Quotas e erros

401 — API key ausente ou inválida.

403 — a conta não tem direito de utilização do Meet activo.

402 / 429 — quota esgotada ou ritmo excedido. Cada sala criada conta para a quota da sua conta.

Trate o 429 com recuo progressivo. Não crie uma sala por cada carregamento de página: crie-a quando a reunião é agendada ou quando alguém carrega em «entrar».

O que ainda não está fechado

O módulo embutível está em programa inicial, através de revendedor. O que está descrito acima funciona hoje.

Ainda não há SLA contratual publicado para o embed. Se o seu caso depende de um compromisso de disponibilidade por escrito, fale connosco antes de integrar — preferimos dizê-lo aqui do que numa renovação.

A ligação a sistemas de gestão de chaves empresariais (KMS/HSM externos) para as gravações está em curso e não faz parte desta API.