Saltar al contenido

Crear plantilla

Crea una plantilla de mensaje de WhatsApp en el DID indicado.

Endpoint: POST /v1/templates/{did}

Parámetros

Path

ParámetroTipoRequeridoDescripción
didstringID del destino.

Query

ParámetroTipoRequeridoDescripción
client_idnumberNoCliente. Requiere BSP_CN si difiere del token.

Body

CampoTipoRequeridoDescripción
namestringNombre de la plantilla (único por WABA).
languagestringCódigo de idioma: es, en_US, pt_BR
categorystringMARKETING, UTILITY o AUTHENTICATION.
componentsarrayComponentes: HEADER, BODY, FOOTER, BUTTONS.
parameter_formatstringNoFormato de los placeholders del BODY: solo positional (default, {{1}}). El valor named ({{name}}) no está soportado en api-bsp-chattigo ni en creación ni en envío; los placeholders deben ser posicionales ({{1}}, {{2}}, …). Si se omite, se asume positional.
client_idnumberNoCliente (requiere BSP_CN para otro cliente).
channel_campaignsobjectNoAsignación automática de canal/campaña.
optimization_specobjectNoLímite de oferta (max price): bid_amount, bid_strategy, bid_country_multiplier_overrides.
allow_button_url_changebooleanNoMigra botones URL al formato dinámico (url-mapper redirect).
allow_category_changebooleanNoPermite que Meta recategorice la plantilla automáticamente.
add_security_recommendationbooleanNoAUTHENTICATION: agrega la línea “For your security…”.
code_expiration_minutesnumberNoAUTHENTICATION: validez del código OTP (default 10 min, 30s–15min).
message_send_ttl_secondsnumberNoValidez de entrega (TTL) en segundos. Se pasa directamente a Meta. Rangos: AUTHENTICATION 30–900, UTILITY 30–43200, MARKETING 43200–2592000. -1 = 30 días (solo auth/utility).
countrystringNoCódigo de país para el max-price (dinámico); si se omite se resuelve del did.

Request

curl --request POST \
  --url 'https://api.chattigo.com/v1/templates/{did}' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "test_promo",
    "language": "es",
    "category": "MARKETING",
    "components": [
      {
        "type": "BODY",
        "text": "¡Oferta exclusiva {{1}}! Tienes {{2}}% de descuento.",
        "example": { "body_text": [["Cliente", "30"]] }
      }
    ]
  }'

Response

Éxito (200)

El response es el passthrough del body de Meta (deserializado en dto.CreateResponse). Contiene solo los campos que Meta devuelve en el create:

{
  "id": "114002218302594",
  "status": "PENDING",
  "category": "MARKETING"
}

Errores

CódigoCaso
400did is required, validación de componentes/examples fallida, media inválida
400header_source y header_handle mutuamente excluyentes
400URL de media no HTTPS o IP privada (bloqueada por seguridad)
403DID fuera de la jerarquía WABA, o acceso a otro cliente sin BSP_CN
413Multipart excede el tamaño máximo
502Servicio externo inalcanzable

Notas

  • Tras el create exitoso, la plantilla se registra y se dispara el evento de creación.
  • El modo file requiere multipart/form-data con parts template y file.
  • Los templates AUTHENTICATION (OTP) usan botones OTP con otp_type: COPY_CODE, ONE_TAP o ZERO_TAP.
  • parameter_format solo admite positional ({{1}}): no se soporta la creación ni el envío con named ni parameter_name en api-bsp-chattigo. Los placeholders deben ser posicionales ({{1}}, {{2}}, …).