Plantillas
Plantillas versionadas con variables, referenciadas por `templateKey` (`publiq.templates`).
El recurso templates cubre el ciclo de vida de una plantilla versionada: crear (con html/subject/text y variables), consultar, listar, previsualizar una versión guardada y, para el AI builder, renderizar o guardar a partir de una SPEC de json-render.
Referencia de métodos
templates.create
templates.create(params) → Promise<Template>Crea una plantilla versionada a partir de HTML (con variables interpoladas). Genera automáticamente un key legible y la primera versión de la plantilla.
| Parámetro | Tipo | Descripción |
|---|---|---|
nameObligatorio | string | Nombre de la plantilla. Debe ser único dentro de la organización. |
htmlObligatorio | string | Cuerpo HTML de la plantilla. Puede contener {{ variables }} interpoladas en el envío o en el preview. |
subjectOpcional | string | Asunto por defecto de la plantilla. También puede contener variables. |
textOpcional | string | Alternativa en texto-plano al html (fallback y mejor entregabilidad). |
engineOpcional | string | Motor de renderizado de las variables (ej.: handlebars). Si se omite, usa el valor por defecto de la organización. |
Devuelve: La plantilla creada — incluye el key generado automáticamente y su primera versión.
const template = await publiq.templates.create({
name: 'welcome-email',
subject: 'Welcome, {{ first_name }}!',
html: '<h1>Hi {{ first_name }}</h1><p>Welcome to {{ company }}.</p>',
text: 'Hi {{ first_name }}, welcome to {{ company }}.',
});
console.log(template.id, template.key); // "tpl_...", "welcome-email"key (slug legible, ej.: welcome-email) puede usarse en Emails (emails.send({ templateKey })) y en Broadcasts (broadcasts.create({ templateId })). Las variables usan {{ snake_case }} — ver Variables.templates.get
templates.get(id) → Promise<Template>Obtiene los detalles de una plantilla por id, incluyendo versions[] y el key legible.
| Parámetro | Tipo | Descripción |
|---|---|---|
idObligatorio | string | ID de la plantilla (devuelto por templates.create). |
Devuelve: La plantilla con su historial de versiones (versions[]) y key. 404 si no existe en la organización.
const template = await publiq.templates.get('tpl_123');
console.log(template.key, template.versions.length);key devuelto aquí es el mismo aceptado por emails.send({ templateKey }) y broadcasts.create({ templateId }) — ver Emails y Broadcasts.templates.list
templates.list({ limit?, after? }) → Promise<TemplateList>Lista las plantillas de la organización, de la más reciente a la más antigua, paginado por cursor. Cada ítem es un resumen con version_count.
| Parámetro | Tipo | Descripción |
|---|---|---|
limitOpcional | number | Ítems por página (por defecto 20, máx. 100). |
afterOpcional | string | Cursor: id del último ítem de la página anterior. |
Devuelve: Envoltura de lista { object: "list", data: TemplateSummary[] }. Usa el id del último ítem como after en la próxima llamada.
const { data } = await publiq.templates.list({ limit: 50 });
// next page:
const next = await publiq.templates.list({ after: data[data.length - 1].id });id del último ítem en after hasta que data venga vacío. Ver Errores & paginación.templates.preview
templates.preview(id, { version? }) → Promise<TemplatePreview>Renderiza una versión guardada de la plantilla con sus variables resueltas, para revisión visual antes del envío.
| Parámetro | Tipo | Descripción |
|---|---|---|
idObligatorio | string | ID de la plantilla. |
versionOpcional | string | Versión a previsualizar. Si se omite, usa la versión más reciente. |
Devuelve: Un preview { object: "template_preview", subject, html } con el asunto y el HTML ya renderizados.
const preview = await publiq.templates.preview('tpl_123', { version: '2' });
console.log(preview.subject, preview.html);templates.render
templates.render(params) → Promise<TemplateRender>Renderiza una SPEC de json-render ({ root, elements, state }) al vuelo, sin persistir nada — es el preview en vivo usado por el AI builder.
| Parámetro | Tipo | Descripción |
|---|---|---|
specObligatorio | object | Una SPEC de json-render — { root, elements, state } — que describe el árbol de elementos del correo. |
Devuelve: { object: "template_render", html, text } — resultado renderizado, no guardado.
const spec = {
root: 'body',
elements: {
body: { type: 'container', children: ['heading'] },
heading: { type: 'text', content: 'Hi {{ first_name }}' },
},
state: {},
};
const rendered = await publiq.templates.render({ spec });
console.log(rendered.html);render y fromSpec alimentan el AI builder y requieren el feature de plan ai_builder. render es una vista previa que no persiste; usa templates.fromSpec para guardar el resultado como una nueva versión de la plantilla.templates.fromSpec
templates.fromSpec(params) → Promise<Template>Renderiza una SPEC de json-render y guarda el resultado como una nueva plantilla (o nueva versión), con un key generado automáticamente.
| Parámetro | Tipo | Descripción |
|---|---|---|
nameObligatorio | string | Nombre de la plantilla. Debe ser único dentro de la organización. |
specObligatorio | object | Una SPEC de json-render — { root, elements, state } — la misma estructura usada en templates.render. |
subjectOpcional | string | Asunto de la plantilla. |
Devuelve: La plantilla creada a partir de la SPEC renderizada, con key generado automáticamente.
const template = await publiq.templates.fromSpec({
name: 'newsletter-july',
subject: 'Your July newsletter',
spec,
});
console.log(template.key);fromSpec (Python: from_spec) requiere el feature de plan ai_builder, igual que render. A diferencia de render, aquí el resultado se guarda como plantilla.Los ejemplos muestran Node, Python y PHP. En Python los métodos son snake_case (ej.: cancel_run, from_spec) y reciben un dict; en PHP son camelCase y reciben un array asociativo. Las claves del cuerpo siempre son camelCase (templateKey, firstName, scheduledAt) — las respuestas de la API vienen en snake_case.