Skip to main content
A CLI cobre a superfície de saída do WhatsApp: modelos (mensagens HSM reutilizáveis que a Meta precisa aprovar para envio fora da janela de 24 horas) e campanhas (envios em massa para listas de destinatários usando um modelo aprovado).
O --bot-id que estes comandos pedem é o referenceId que aparece em jelou channels list --type Whatsapp.

jelou channels testers

Antes de conectar um número real do WhatsApp Business, você pode usar o sandbox compartilhado da Jelou para testar o envio e o recebimento de mensagens com o seu próprio telefone.
<channel-id> é o id do canal, não o --bot-id/referenceId usado por template e campaign. Só tem efeito em canais sandbox: depois que você conecta um número real do WhatsApp Business, a lista de testers deixa de ser necessária. O telefone deve estar no formato E.164 (+14155550100).

jelou template

Categorias: UTILITY, MARKETING, AUTHENTICATION. Estados: APPROVED, PENDING, REJECTED. Tipos de conteúdo (--type): text (padrão), IMAGE, VIDEO, DOCUMENT, CAROUSEL. Use --header para adicionar um cabeçalho de texto e {{1}}, {{2}}, … como marcadores no corpo. Assim como em campaign create, --from-file aceita o caminho de um JSON com o payload completo do modelo em vez de passar cada flag separadamente.
Só é possível editar modelos APPROVED ou REJECTED; os PENDING estão bloqueados. Os modelos sem --draft vão para a Meta imediatamente e a cota de aprovação é finita por empresa (as rejeições contam). A Meta antepõe um prefixo aleatório de 4 caracteres ao elementName — use o elementName retornado (com prefixo) nas campanhas.

Atualizar um modelo

jelou template update só aceita flags discretas: --display-name, --template, --header, --footer, --media-url e --draft. A CLI busca o estado atual do modelo, aplica somente os overrides indicados e faz um PATCH do payload completo — você não precisa repetir os campos que não mudam.

Header com media

jelou campaign

--type filtra por tipo de campanha (text, carousel, …), --name pelo nome de exibição do modelo, e --element-name pelo seu elementName. Estados: SCHEDULEDIN_PROGRESSCOMPLETED; CANCELLED é terminal exceto se você usar --revive.
--start-at e --end-at filtram pela data de criação da campanha (createdAt), não pela data programada de envio (scheduledAt). Se você está procurando “campanhas agendadas para a próxima semana”, esses filtros não servem para isso: eles retornam as campanhas criadas nesse intervalo, independentemente de quando estejam programadas para enviar.

Estrutura do arquivo de campanha

campaign.json
destinatarios.csv
O CSV inclui uma coluna de telefones no formato E.164. O mapeamento de parâmetros é explícito: { "param": <n>, "column": "<coluna>" }. Use o campo date para agendar (omita-o para envio imediato).
Uma campanha consome créditos reais ao ser despachada. Revise a contagem de destinatários e o custo antes de criá-la. Um mapeamento de parâmetros errado envia o texto literal do marcador (Hola {{1}}) para milhares de pessoas — verifique antes. Cancelar uma campanha IN_PROGRESS produz um envio parcial.