Volver al blog
Desarrolladores

Crear una plantilla de WhatsApp con el MCP de Waspy (create_template)

No hay POST /api/v2/templates. Crear una plantilla y mandarla a revisión de Meta es la herramienta MCP create_template, con scope templates:write. La API REST solo las lista.

· 12 min
Crear una plantilla de WhatsApp con el MCP de Waspy (create_template)

Respuesta corta: no hay POST /api/v2/templates. Crear una plantilla de texto y mandarla a revisión de Meta es la herramienta MCP create_template, con scope templates:write. Ese scope existe en el conector y no en la API REST. REST tiene templates:read: GET /api/v2/templates, GET /api/v2/templates/:id y GET /api/v2/templates/by-name/:name.

El servidor es https://api.waspytech.com/mcp. Cómo conectar cada cliente está en la guía y en Claude, ChatGPT y Cursor. La key, si el cliente entra por header, está en crear y rotar API keys.

Waspy no le contesta solo a tus clientes. Claude, Cursor, Codex, Grok o ChatGPT llaman la herramienta cuando vos se lo pedís. El mensaje al cliente, si después sale, lo confirma una persona o lo manda tu sistema con una plantilla ya aprobada.

Qué pide create_template

Obligatorios: phoneNumberId, name, category, bodyText. El resto es opcional.

CampoQué es
phoneNumberIdId interno del número (phone_numbers.id), el UUID de GET /api/v2/channels. No es el id de Meta
nameMinúsculas, números y guión bajo. El servidor exige ^[a-z0-9_]+$, hasta 512 caracteres. Un guión del medio no pasa
categorymarketing, utility o authentication
languageDefault es_AR si lo omitís o va vacío
bodyTextCuerpo. Podés usar {{1}}, {{2}}
bodyExamplesUn ejemplo por variable, en orden. Obligatorio si el cuerpo tiene variables. Se manda como example.body_text
headerTextEncabezado de texto, opcional
footerTextPie, opcional. Sin variables
La herramienta arma una plantilla de texto: encabezado de texto, cuerpo y pie. No manda carrusel ni encabezado de imagen. Eso se carga en el panel.

Antes de llamar a Meta se validan estas reglas. Si falla alguna, la herramienta devuelve la lista y no crea nada:

  • El cuerpo no puede empezar ni terminar con una variable. Mal: {{1}}, tu pedido está listo. Bien: Hola {{1}}, tu pedido está listo.
  • Las variables son {{1}}, {{2}}, … en orden, sin saltear huecos.
  • No pueden ir juntas. Mal: Hola {{1}}{{2}}. Bien: Hola {{1}}, tu pedido {{2}} ya salió.
  • Hacen falta al menos 3 palabras por cada variable, más una. Con 1 variable, 4 palabras. Con 2, 7.
  • El cuerpo admite hasta 1024 caracteres.
  • El encabezado de texto admite hasta 60 caracteres y como máximo una variable.
  • El pie no puede tener variables.
  • Si el cuerpo tiene variables, bodyExamples es obligatorio: un ejemplo por variable, en orden.
  • authentication solo sirve para un código de un solo uso (OTP).
  • utility no puede tener lenguaje promocional: %, OFF, descuento, promo, oferta, gratis, cupón. En ese caso la categoría es marketing.

Un cuerpo de utilidad que pasa el conteo, con dos variables (hacen falta 7 palabras):

Hola {{1}}, tu pedido {{2}} ya salió de la tienda.

bodyExamples: ["Ana", "1847"]. Nombre: aviso_despacho. Categoría: utility. Idioma: es_AR.

Para autenticación, el texto tiene que ser un OTP. Tu código de verificación es {{1}}. entra. Hola {{1}}, mirá estas ofertas no: no es un código, y además “ofertas” es promo.

Quién puede llamarla

El scope del tool es templates:write. Además, la persona tiene que poder crear plantillas en el panel.

Cómo entrásQué hace falta
OAuth del conector (Claude, ChatGPT, Codex, y Cursor si elegís OAuth)Aceptar templates:write en la pantalla de Waspy. Owner y admin pueden. Un miembro agent necesita el permiso de plantillas en Configuración → Miembros. Un rol de solo lectura no escribe, aunque el token liste el scope
API key wspy_ sin scopesAcceso completo: create_template entra. La key sigue sin poder crear otras keys
API key con una lista de scopesNo podés agregar templates:write: no está en los scopes de REST y el alta responde permiso inválido. Esa key no crea plantillas por MCP
La URL del conector es https://api.waspytech.com/mcp. En Claude: Customize → Connectors → Add custom connector, y pegás esa URL. El paso a paso de cada cliente está en la nota de MCP y en el conector.

Mientras Meta revisa

get_template_status (scope templates:read) lee el estado en Meta y actualiza la copia local. Pasá name o id. El id puede ser el interno de Waspy o el de Meta. phoneNumberId es opcional, para cuando el mismo nombre existe en más de un número. Si no pasás nombre ni id, la herramienta pide uno de los dos.

La respuesta trae id, name, status, language, category y rejectionReason. El estado queda en pending, approved, rejected, paused o disabled. Un motivo NONE vuelve como null.

list_templates lista las de la cuenta. Sin filtro, solo las approved. El status puede ser approved, pending, rejected, paused o disabled.

En REST, el equivalente de lectura (no crea ni refresca contra Meta en el acto) es:

curl -sS "https://api.waspytech.com/api/v2/templates?status=pending" \
  -H "Authorization: Bearer $WASPY_API_KEY"

Scope templates:read. page arranca en 1 y pageSize en 20, con tope 100. Cómo paginar está en listar plantillas.

Cuando ya está approved

El envío no es create_template. Con la API:

curl -sS -X POST https://api.waspytech.com/api/v2/messages \
  -H "Authorization: Bearer $WASPY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: orden-1847-despacho" \
  -d '{
    "phoneNumberId": "UUID-DEL-CANAL",
    "to": "+5491126032641",
    "type": "template",
    "template": {
      "name": "aviso_despacho",
      "language": { "code": "es_AR" },
      "components": [
        {
          "type": "body",
          "parameters": [
            { "type": "text", "text": "Ana" },
            { "type": "text", "text": "1847" }
          ]
        }
      ]
    }
  }'

Scope messages:write. El armado del body está en enviar una plantilla y en la referencia de messages. phoneNumberId es el UUID del canal, el mismo criterio que en los canales.

Por MCP, send_template pide conversationId, templateName, y opcionalmente language y bodyParameters ({{1}}, {{2}}, …). Scope messages:write. La descripción le pide al asistente que confirme antes de escribirle a un cliente. No es un envío automático de Waspy.

Qué cobra Meta, y en qué plan está el conector

Crear la plantilla no manda un mensaje. Cuando después se entrega uno, Meta cobra según la categoría. En Argentina, desde el 1 de octubre de 2026: marketing ARS 89,56 (~US$0,0618) y utilidad o autenticación ARS 37,68 (~US$0,026), desde el primer envío. El servicio (texto libre dentro de las 24 horas) tiene 1.000 por número y por mes; desde el 1.001, la misma tarifa de utilidad. Fuentes: rate card y precios de la plataforma.

La API y el conector entran en Scale (US$150 por mes) y Enterprise. Waspy arranca en US$70 y no suma markup. Diez días sin tarjeta, en el registro. Los planes están en Planes y el producto, en la API.

Tu equipo atendiendo por WhatsApp en minutos

CRM facil pero potente. En 10 minutos tenes a tu equipo trabajando — no necesitas hablar con nadie.