WhatsApp: enviar templates pela API

Liste os números e os templates do workspace e envie templates aprovados de WhatsApp pela API da XBASE, com exemplos de requisição, resposta e erros.

Atualizado em

Com o escopo Enviar templates de WhatsApp (whatsapp:send), a API lista os números e os templates do workspace e envia templates aprovados para qualquer contato. Cada envio aparece no Chatcenter, na conversa do contato.

Quais números enviam pela API

Hoje a API envia pelos números de WhatsApp conectados por app da Gupshup: são os que aparecem em WhatsApp API → Números com o nome do app (por exemplo, MINHAEMPRESA). Números conectados direto pela Meta, inclusive o WhatsApp Business do celular, ainda não enviam por esta rota.

Listar os números

GET https://api.xbase.app/api/external/v1/whatsapp/numbers
curl https://api.xbase.app/api/external/v1/whatsapp/numbers \
  -H "Authorization: Bearer $XBASE_API_KEY"

Resposta 200:

[
  {
    "appName": "MINHAEMPRESA",
    "source": "5511999990000",
    "name": "Atendimento",
    "status": "ACTIVE"
  }
]
CampoTipoDescrição
appNametextoNome do app. Vai em appName no envio
sourcetextoNúmero que envia, só dígitos, com DDI
nametexto ou nullNome da conexão na XBASE
statustextoACTIVE, PENDING, INACTIVE, ERROR ou CONNECTING

Listar os templates

GET https://api.xbase.app/api/external/v1/whatsapp/templates?appName=MINHAEMPRESA

appName é opcional: sem ele, vêm os templates de todos os números do workspace.

Resposta 200:

[
  {
    "id": "2a57b53e-83f5-4122-a01f-1ed490bf6f9a",
    "name": "pedido_entregue",
    "appName": "MINHAEMPRESA",
    "category": "UTILITY",
    "language": "pt_BR",
    "status": "APPROVED",
    "body": "Olá {{1}}, o seu pedido {{2}} foi entregue em {{3}}.",
    "paramsCount": 3
  }
]
CampoTipoDescrição
idtextoId do template na Gupshup. Vai em template.id no envio
nametextoNome do template na XBASE
appNametexto ou nullApp do número dono do template
categorytexto ou nullMARKETING, UTILITY ou AUTHENTICATION
languagetexto ou nullIdioma, como pt_BR
statustextoSituação na Meta. Só APPROVED pode ser enviado
bodytexto ou nullTexto com as variáveis {{1}}, {{2}}…
paramsCountnúmeroQuantas variáveis o texto tem: o tamanho de template.params

A lista traz os templates de WhatsApp API → Templates que já têm id na Gupshup.

Enviar um template

POST https://api.xbase.app/api/external/v1/whatsapp/templates
CampoTipoObrigatórioRegra
appNametextosimApp do número que envia (listar os números)
destinationtextosimTelefone do contato com DDI, 8 a 15 dígitos. +, espaços, hífens e parênteses são removidos
template.idtextosimId do template (listar os templates)
template.paramslista de textosnãoValores de {{1}}, {{2}}…, na ordem. Até 30, cada um com até 1.024 caracteres
sourcetextonãoNúmero que envia. Se vier, tem de ser o número do app
messageobjetonãoImagem do cabeçalho, quando o template tem: { "type": "image", "image": { "link": "https://…" } }
metadataobjetonãoAté 8 KB de dados seus (ids do seu sistema). Fica gravado na mensagem, na XBASE
curl -X POST https://api.xbase.app/api/external/v1/whatsapp/templates \
  -H "Authorization: Bearer $XBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "appName": "MINHAEMPRESA",
    "destination": "5521999990000",
    "template": {
      "id": "2a57b53e-83f5-4122-a01f-1ed490bf6f9a",
      "params": ["Maria", "12345", "04/11 às 14:28"]
    },
    "metadata": { "pedido": "12345" }
  }'

Resposta 200:

{
  "status": "submitted",
  "messageId": "ee4a68a0-1203-4c85-8dc3-49d0b3226a35",
  "threadId": "c1d7f0b2-…",
  "dialogId": "5a0e4c31-…"
}
CampoDescrição
statussubmitted: a Gupshup aceitou o envio. A entrega ao celular vem depois
messageIdId da mensagem na Gupshup, o mesmo dos eventos de entrega e leitura
threadIdConversa do contato na XBASE
dialogIdMensagem na conversa

Em casos raros, a mensagem sai mas o registro na XBASE falha: a resposta continua 200, com threadId e dialogId null. Não reenvie nesse caso, porque o contato já recebeu.

Regras dos parâmetros

  • Quebras de linha, tabulações e espaços repetidos viram um espaço só, porque a Meta recusa parâmetros com eles.
  • Se o texto do template mais os parâmetros passar de 1.024 caracteres, a XBASE encurta o parâmetro mais longo e termina com "…".
  • Mande os parâmetros como texto, na ordem das variáveis.

O que acontece depois do envio

  • A XBASE cria o contato, se ele ainda não existir, abre ou reaproveita a conversa e grava o template enviado.
  • A mensagem aparece no Chatcenter, e os eventos de entrega e leitura chegam em WhatsApp API → Eventos.
  • A API não evita envio duplicado: repetir a mesma chamada manda o template de novo.

Erros do envio

StatuscodeQuando
400(sem code)Campo inválido. A message diz qual, como destination: telefone inválido
400SOURCE_MISMATCHsource não é o número do app
404CONNECTION_NOT_FOUNDO app não existe neste workspace
422CONNECTION_NOT_CONFIGUREDO número está sem número de origem ou sem a credencial da Gupshup. Fale com o suporte
422GUPSHUP_ERRORA Gupshup recusou o envio. A message traz o motivo e details.gupshupCode, o código dela

Veja o formato completo em Erros.

Integrações antigas

Integrações criadas antes desta API chamam POST https://api.xbase.app/api/actions/waba/send/template, com app_name, source, destination, template e metadata. Essa rota continua aceita, com o mesmo corpo e a mesma resposta ({ "status", "messageId" }), e faz o mesmo envio. Integrações novas devem usar POST /whatsapp/templates.

Perguntas frequentes

Veja também

Nesta página