Skip to main content
El CLI cubre la superficie saliente de WhatsApp: plantillas (mensajes HSM reutilizables que Meta debe aprobar para enviar fuera de la ventana de 24 horas) y campañas (envíos masivos a listas de destinatarios usando una plantilla aprobada).
El --bot-id que piden estos comandos es el referenceId que aparece en jelou channels list --type Whatsapp.

jelou channels testers

Antes de conectar un número real de WhatsApp Business, puedes usar el sandbox compartido de Jelou para probar el envío y la recepción de mensajes con tu propio teléfono.
<channel-id> es el id del canal, no el --bot-id/referenceId que usan template y campaign. Solo tiene efecto en canales sandbox: una vez que conectas un número real de WhatsApp Business, la whitelist de testers deja de ser necesaria. El teléfono debe estar en formato E.164 (+14155550100).

jelou template

Categorías: UTILITY, MARKETING, AUTHENTICATION. Estados: APPROVED, PENDING, REJECTED. Tipos de contenido (--type): text (por defecto), IMAGE, VIDEO, DOCUMENT, CAROUSEL. Usa --header para agregar un encabezado de texto y {{1}}, {{2}}, … como marcadores en el cuerpo. Igual que en campaign create, --from-file acepta la ruta a un JSON con el payload completo de la plantilla en lugar de pasar cada flag por separado.
Solo se pueden editar plantillas APPROVED o REJECTED; las PENDING están bloqueadas. Las plantillas sin --draft van a Meta de inmediato y la cuota de aprobación es finita por empresa (los rechazos cuentan). Meta antepone un prefijo aleatorio de 4 caracteres al elementName — usa el elementName devuelto (con prefijo) en las campañas.

Actualizar una plantilla

jelou template update solo acepta flags discretos: --display-name, --template, --header, --footer, --media-url y --draft. El CLI toma el estado actual de la plantilla, aplica únicamente los overrides indicados y hace un PATCH del payload completo — no necesitas repetir los campos que no cambian.

Header con media

jelou campaign

--type filtra por tipo de campaña (text, carousel, …), --name por el nombre visible de la plantilla y --element-name por su elementName. Estados: SCHEDULEDIN_PROGRESSCOMPLETED; CANCELLED es terminal salvo que uses --revive.
--start-at y --end-at filtran por la fecha de creación de la campaña (createdAt), no por la fecha programada de envío (scheduledAt). Si buscas “campañas agendadas para la próxima semana” estos filtros no sirven para eso: te devolverán las campañas creadas en ese rango, sin importar cuándo estén programadas para enviarse.

Estructura del archivo de campaña

campaign.json
destinatarios.csv
El CSV incluye una columna de teléfonos en formato E.164. El mapeo de parámetros es explícito: { "param": <n>, "column": "<columna>" }. Usa el campo date para agendar (omítelo para envío inmediato).
Una campaña consume créditos reales al despacharse. Revisa el conteo de destinatarios y el costo antes de crearla. Un mapeo de parámetros equivocado envía el texto literal del marcador (Hola {{1}}) a miles de personas — verifica antes. Cancelar una campaña IN_PROGRESS produce un envío parcial.