DocumentaçãoSDK no GitHub

Documentação Guias

Renderizar JSON salvo em HTML

Gere HTML e texto simples personalizados no backend, sem montar um editor.

Nesta página

1. Carregue o documento salvo

Carregue o EmailDocument completo salvo por onDocumentChange. O renderizador aceita versões de esquema 1 e 2. Envie o próprio JSON; um ID de modelo ou rascunho não o substitui.

2. Solicite HTML

Faça POST para https://api.weavour.com/editors/:editorKey/render com document e, opcionalmente, mergeValues e conditionValues. Solicitações do servidor não precisam de sessão do painel, IDs de usuário nem cabeçalho Origin. Chamadas do navegador exigem uma origem permitida.

typescript
// Run on your backend. email.json is the complete saved EmailDocument.
import { readFile } from 'node:fs/promises';
import type { EmailDocument } from '@weavour/editor';

async function renderSavedEmail(
  document: EmailDocument,
  mergeValues: Record<string, string> = {},
  conditionValues: Record<string, boolean> = {},
) {
  const editorKey = 'YOUR_PUBLIC_EDITOR_KEY';
  const response = await fetch(
    `https://api.weavour.com/editors/${editorKey}/render`,
    {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ document, mergeValues, conditionValues }),
    },
  );
  const result = await response.json();
  if (!response.ok) {
    throw Object.assign(new Error(result.error ?? 'Email rendering failed'), {
      status: response.status,
      issues: result.issues,
      retryAfter: response.headers.get('Retry-After'),
    });
  }
  return result as {
    html: string;
    text: string;
    subject: string;
    preheader: string;
    rendererVersion: string;
  };
}

const savedEmail: EmailDocument = JSON.parse(await readFile('./email.json', 'utf8'));
const { html, text, subject, preheader } = await renderSavedEmail(
  savedEmail,
  { first_name: 'Alex' }, // Use the stable IDs of tags in your document.
);
// Submit these fields through your own email delivery provider.
console.log(html);

3. Informe valores do destinatário

mergeValues associa IDs a strings: { first_name: "Alex" }. Use o ID, não {{first_name}}. Informe valores para todas as variáveis usadas no conteúdo visível, assunto e pré-cabeçalho. Valores de exemplo não são substituídos.

Valores de texto têm escape HTML. Valores de URL devem preencher um campo de link completo e usar HTTP, HTTPS, mailto ou tel. Valores ausentes retornam 422 com ID e localização da variável.

4. Informe resultados das condições

Em documentos condicionais, avalie suas regras no backend. Passe booleanos em conditionValues, usando IDs das condições como chaves. Uma condição superior falsa remove todo o layout; valores usados só dentro dele não são necessários. Resultados ausentes de regras visíveis retornam 422.

typescript
// Evaluate your application's rules before calling the renderer.
const output = await renderSavedEmail(
  savedEmail,
  { first_name: 'Alex' },
  { free_account: true }, // Condition ID -> boolean, never an expression.
);
// output.html and output.text contain only matching layouts.

5. Envie o resultado

A resposta contém html, text, subject, preheader e rendererVersion. Envie esses campos pelo seu provedor. Renderizar não salva nem envia. Imagens e temporizadores já devem ter URLs públicas.

Limites e erros

Imagens de fundo de layout e CSS global personalizado não são suportados. Para fundos de layout, abra o e-mail no editor e use exportHTML(). Conteúdo não suportado retorna erro.

Solicitação máxima: 1.000.000 bytes UTF-8. Documentos: 2.000 nós renderizados, profundidade 30. Valores de variáveis: 1.000 strings, até 8.192 caracteres cada.

Status HTTPAção
400 / 415Corrija o JSON, os tipos de valores ou o Content-Type.
401 / 403Confira a chave do editor e, no navegador, a origem permitida.
413Reduza o tamanho da solicitação ou a complexidade do documento.
422Leia error e issues; corrija valores ausentes, documentos inválidos ou conteúdo não suportado.
429 / 503Tente novamente com espera progressiva e aleatoriedade, respeitando Retry-After quando informado.
Precisa de ajuda? Fale com a gente