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