Skip to main content

Introdução

Esta seção fornece a documentação oficial para uso da API da Lovi com WhatsApp via Postman. Inclui instruções detalhadas sobre como configurar e testar requisições de API para integração com WhatsApp, garantindo comunicação fluida através da plataforma. A autenticação é realizada usando tokens que habilitam autenticação básica para os serviços da API. Para mais detalhes sobre como se autenticar, consulte a página de Autenticação. A API da Lovi suporta notificações WhatsApp com conteúdo multimídia, placeholders dinâmicos, entrega agendada e integração com fluxos de conversa.

Recursos Principais:

  • Notificações WhatsApp com suporte a multimídia
  • Personalização de conteúdo dinâmico com placeholders
  • Entrega de mensagens agendadas com suporte a fuso horário
  • Integração com fluxos de conversa
  • Dois formatos de estrutura de dados (aninhado e plano)

📣 Enviar Notificação WhatsApp

Para enviar uma notificação via API da Lovi, faça uma requisição POST ao endpoint com os parâmetros necessários e autenticação.
Método: POST Formato: JSON

Endpoint

Parâmetros de Query

URLs de Exemplo:

Headers

Nota: A autenticação é feita via parâmetro access_key na URL, não através de headers.

📋 Parâmetros da Requisição

A API suporta dois formatos de estrutura de dados controlados pelo parâmetro unflatten.

Parâmetros Obrigatórios

Importante: Você deve usar contact (para destinatário único) OU contacts (para múltiplos destinatários), mas NÃO ambos.

Parâmetros Opcionais


👥 Destinatário Único vs Múltiplos

Usando contact - Enviar para Uma Pessoa

Use contact quando quiser enviar uma notificação para um destinatário. Estrutura:
  • contact é um objeto (não uma lista)
  • Campo obrigatório: number
  • Campos opcionais: name, email e quaisquer campos personalizados

Usando contacts - Enviar para Múltiplas Pessoas (Envio em Massa)

Use contacts quando quiser enviar a mesma notificação para múltiplos destinatários de uma vez. Estrutura:
  • contacts é uma lista/array (não um objeto único)
  • Máximo: 100 contatos por requisição
  • Cada contato na lista deve ter um number
  • Campos opcionais: name, email e quaisquer campos personalizados
Restrições Importantes:
  • ⚠️ Não é possível usar unflatten=true com contacts - Envio em massa só funciona com estrutura aninhada
  • ⚠️ Não é possível usar contact e contacts na mesma requisição - escolha um
  • ⚠️ A lista contacts não pode estar vazia - deve ter pelo menos 1 contato

🔄 Formatos de Estrutura de Dados

A API suporta dois formatos baseados no parâmetro unflatten:

Estrutura Aninhada (unflatten=false ou omitido)

Quando unflatten=false ou não especificado, use objetos aninhados:

Estrutura Plana (unflatten=true)

Quando unflatten=true, todos os objetos aninhados devem ser achatados usando notação de ponto:

Quando Usar Cada Formato

  • Estrutura Aninhada (unflatten=false): Recomendada para melhor legibilidade e quando seu sistema suporta objetos aninhados
  • Estrutura Plana (unflatten=true): Use quando seu sistema não suporta objetos aninhados ou requer estrutura de dados plana

🎨 Componentes e Multimídia

IMPORTANTE: Componentes que você pode enviar dinamicamente são APENAS aqueles retornados pelo endpoint de componentes do template. A estrutura varia dependendo se o template tem variáveis ou mídia.

Regras de Nomenclatura de Componentes

  • Header de mídia: header_image, header_video, header_document (SEM número de sufixo)
  • Variáveis do body: body_text_0, body_text_1, body_text_2, etc. (com número de índice para cada placeholder {"{1}"}, {"{2}"}, {"{3}"})
  • Footer e Botões: São ESTÁTICOS na definição do template e NÃO PODEM ser enviados dinamicamente

Como Saber Quais Componentes Enviar

  1. Primeiro, chame o endpoint de componentes do template:
  2. A API retorna apenas os componentes que você precisa fornecer:
  3. Envie APENAS esses componentes na sua requisição de notificação

Tipos de Componentes por Posição

Componentes de Header (Apenas Mídia)

IMPORTANTE: Apenas UM componente de header por template. O texto do header é ESTÁTICO no template. Nota: header_text NÃO é um componente dinâmico. O texto do header é definido no template e não pode ser alterado.

Componentes do Body (Apenas Variáveis)

Texto do body com placeholders requer variáveis em ordem: {"{1}"}, {"{2}"}, {"{3}"}, etc. Template de Exemplo: “Olá {"{1}"}, seu curso {"{2}"} está pronto”
  • body_text_0: Valor para {"{1}"} (ex.: “Maria”)
  • body_text_1: Valor para {"{2}"} (ex.: “JavaScript”)
⚠️ Footer é ESTÁTICO - definido no template e não pode ser modificado por mensagem.

Componentes de Botões

IMPORTANTE: A maioria dos botões são ESTÁTICOS no template. No entanto, botões de URL com variáveis PODEM ser dinâmicos. Nota: Botões de resposta rápida são sempre estáticos e não podem ser modificados por mensagem.

🧩 Variáveis do Template (Body Text)

CRÍTICO: Variáveis em templates do WhatsApp usam placeholders posicionais como {"{1}"}, {"{2}"}, {"{3}"}, NÃO variáveis nomeadas como {"{name}"}.

Como as Variáveis do Template Funcionam

Templates do WhatsApp definem variáveis como placeholders numerados no texto do body do template:
  • Texto do template: “Olá {"{1}"}, seu curso {"{2}"} está pronto”
  • {"{1}"} mapeia para body_text_0
  • {"{2}"} mapeia para body_text_1

Atribuição de Variáveis

Você fornece os valores para esses placeholders numerados no objeto components_push:
Resultado: “Olá María, seu curso JavaScript Advanced Course está pronto”

Regras Importantes

  1. A ordem posicional importa: body_text_0 = {"{1}"}, body_text_1 = {"{2}"}, etc.
  2. Valores diretos: Forneça o valor real, não a sintaxe {"{variable}"}
  3. Todas as variáveis obrigatórias: Deve fornecer valores para todos os placeholders {"{N}"} no template
  4. Sem mistura: Não é possível combinar variáveis com texto estático em components_push

Resolução de Variáveis

O sistema resolve referências {"{variable}"} em components_push buscando:
  1. Primeiro no objeto contact
  2. Depois nos parâmetros de nível raiz

⏰ Agendamento e Fluxos de Conversa

Entrega Imediata (Padrão)

Se datetime_sending não for especificado, a mensagem é enviada imediatamente.

Entrega Agendada

Use datetime_sending e timezone para agendar mensagens.

Integração com Fluxo de Conversa

Use name_event para disparar fluxos de conversa específicos.

📊 Códigos de Resposta

Resposta de Sucesso (200 OK)

Envio imediato:
Envio agendado:

Respostas de Erro

400 Bad Request - Parâmetros Inválidos

401 Unauthorized - Chave de Acesso Inválida

404 Not Found - Template Não Encontrado

422 Unprocessable Entity - Erro de Lógica de Negócio

429 Too Many Requests - Limite de Taxa


🔧 Boas Práticas

Estrutura de Dados

  • Prefira estrutura aninhada (unflatten=false) para melhor legibilidade
  • Use estrutura plana (unflatten=true) apenas quando seu sistema exigir
  • Valide a estrutura antes de enviar requisições

Diretrizes de Mídia

  • Use URLs HTTPS para todos os arquivos de mídia
  • Otimize tamanhos de arquivo para entrega mais rápida
  • Use URLs públicas sem requisitos de autenticação
  • Teste URLs de mídia antes de enviar para garantir acessibilidade

Agendamento

  • Especifique fuso horário ao usar datetime_sending
  • Valide datas futuras antes de agendar
  • Considere horário comercial para melhor engajamento
  • Teste agendamento em ambiente de desenvolvimento

Desempenho

  • Agrupe múltiplas notificações quando possível
  • Cache informações de templates para reduzir chamadas de API
  • Monitore limites de taxa e implemente estratégias de backoff
  • Use connection pooling para melhor desempenho

📚 Documentação Relacionada