Os templates são enviados pelo nome: POST /v1/messages com type: "template" e template: { name, language, components }. O template precisa estar aprovado na Meta; components leva as suas variáveis. Se ele é seu e não está aprovado, devolvemos 422 TEMPLATE_NOT_APPROVED antes de chamar a Meta; se ainda não o sincronizamos, deixamos passar.
curl -X POST https://api.waiaconnect.com/v1/messages \
-H "Authorization: Bearer wc_live_YOUR_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"template","template":{"name":"hello_world","language":"es","components":[]}}'
# The template must already be APPROVED in Meta. `components` carries its variables.De onde sai o name: de GET /v1/templates (campos name + language de cada linha), ou da seção Templates do painel. É o nome na Meta, não o título que você deu na tela, e só serve se essa linha estiver em APPROVED.
Fora da janela de 24h de atendimento, a Meta exige um template aprovado. Se você mandar texto livre mesmo assim, o POST responde 202 e a recusa chega depois, no estado da mensagem: failed com lastErrorCode: WINDOW_24H_EXPIRED (o 131047 da Meta). Não é um erro HTTP.
A janela de 24 horas: você só pode escrever livremente dentro das 24h da última mensagem do cliente. Depois precisa de um template aprovado. É por isso que eles existem.