> ## Documentation Index
> Fetch the complete documentation index at: https://docs.so-me.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Plantillas de WhatsApp Business desde la CLI

> Crea, lista y elimina plantillas de mensajes de WhatsApp Business y envía mensajes de plantilla desde la CLI de Social media studio.

Estos comandos envuelven la API `/v1/whatsapp/*`. El alcance es deliberadamente limitado: ciclo de vida de las plantillas más envío saliente de plantillas. La conexión de la WABA solo se hace desde el navegador (OAuth) y sigue estando en el panel.

> [!NOTE]
>
> Todos los comandos aceptan en la posición `<account-id>` tanto el **UUID interno de la cuenta social** (de [`accounts:list`](/es/cli/accounts)) como el **ID de proveedor de la WABA de Meta**. El controlador v1 resuelve los UUID a ID de proveedor en el servidor.

## whatsapp:templates

Lista todas las plantillas registradas en una cuenta de WhatsApp Business, incluidos el estado (`APPROVED`, `PENDING`, `REJECTED`), la categoría, el idioma y la estructura de componentes.

```bash theme={null}
so-me whatsapp:templates <account-id>
```

| Argumento | Descripción |
| - | - |
| `<account-id>` | UUID de la cuenta social de WhatsApp (de [`accounts:list`](/es/cli/accounts)) o ID de proveedor de la WABA de Meta **(obligatorio)** |

```bash Ejemplos theme={null}
# Full list
so-me whatsapp:templates e6be46a2-430a-41df-b180-b51527e954e3

# Only approved templates
so-me whatsapp:templates e6be46a2-... | jq '.data[] | select(.status == "APPROVED")'

# Just names + status as a table-ish view
so-me whatsapp:templates e6be46a2-... | jq -r '.data[] | "\(.status)\t\(.name)\t\(.language)"'

# Pass provider ID instead of UUID
so-me whatsapp:templates 1050417321480811
```

## whatsapp:create-template

Envía una plantilla nueva a Meta para su aprobación. La aprobación de una plantilla puede tardar de minutos a horas; consulta periódicamente `whatsapp:templates` para ver la transición del estado de `PENDING` a `APPROVED`.

```bash theme={null}
so-me whatsapp:create-template --account <id> (--file <path> | --data <json>)
```

| Opción | Descripción |
| - | - |
| `--account <id>` | UUID de la cuenta de WhatsApp o ID de proveedor **(obligatorio)** |
| `-f, --file <path>` | Archivo JSON con la definición completa de la plantilla |
| `-d, --data <json>` | Cadena JSON con la definición completa de la plantilla |

Proporciona la definición de la plantilla con **`--file` o `--data`** (si se pasan ambas, gana `--file`; si no se pasa ninguna, el comando da un error). La carga coincide con el esquema de la API en la nube de WhatsApp de Meta. Campos mínimos:

* `name`: en minúsculas y con guiones bajos
* `language`: p. ej. `en_US`
* `category`: `MARKETING`, `UTILITY` o `AUTHENTICATION`
* `components[]`: `HEADER`, `BODY`, `FOOTER`, `BUTTONS`

La CLI incorpora `accountId` (de `--account`) a la carga antes de enviarla, así que no hace falta incluirlo en el JSON.

```json theme={null}
{
  "name": "order_shipped",
  "language": "en_US",
  "category": "UTILITY",
  "components": [
    { "type": "HEADER", "format": "TEXT", "text": "Order update" },
    { "type": "BODY", "text": "Hi {{1}}, your order #{{2}} has shipped." },
    { "type": "FOOTER", "text": "Thanks for shopping with us!" }
  ]
}
```

```bash Ejemplos theme={null}
# From a file
so-me whatsapp:create-template --account e6be46a2-... --file ./order_shipped.json

# Inline
so-me whatsapp:create-template --account e6be46a2-... --data '{
  "name": "welcome_v1",
  "language": "en_US",
  "category": "MARKETING",
  "components": [{ "type": "BODY", "text": "Welcome, {{1}}!" }]
}'
```

> [!WARNING]
>
> Los nombres de plantilla deben ser alfanuméricos en minúsculas con guiones bajos (`^[a-z0-9_]+$`). Meta lo valida: los nombres que no cumplan se rechazan de inmediato con un 400.

## whatsapp:delete-template

Elimina una plantilla de forma permanente. Una vez eliminada, no se puede restaurar; debes volver a enviarla con un nombre nuevo.

```bash theme={null}
so-me whatsapp:delete-template <account-id> <template-name> [-y]
```

| Argumento | Descripción |
| - | - |
| `<account-id>` | UUID de la cuenta social de WhatsApp o ID de proveedor **(obligatorio)** |
| `<template-name>` | Nombre de la plantilla (`lowercase_underscored`) **(obligatorio)** |

| Opción | Descripción |
| - | - |
| `-y, --yes` | Omite la confirmación |

Sin `-y`, el comando pregunta `Delete template "<name>" on account <id>? (y/N)` y se cancela a menos que respondas `y`.

```bash Ejemplos theme={null}
# With confirmation
so-me whatsapp:delete-template e6be46a2-... old_template

# Skip prompt
so-me whatsapp:delete-template e6be46a2-... old_template -y

# Delete every REJECTED template (careful)
so-me whatsapp:templates e6be46a2-... \
  | jq -r '.data[] | select(.status == "REJECTED") | .name' \
  | xargs -I {} so-me whatsapp:delete-template e6be46a2-... {} -y
```

## whatsapp:send

Envía un mensaje de plantilla aprobada a un destinatario. Es la forma principal de **iniciar** una conversación de WhatsApp fuera de la ventana de atención al cliente de 24 horas.

```bash theme={null}
so-me whatsapp:send <account-id> --to <phone> --template <name> --language <code> [--components <json>]
```

| Argumento | Descripción |
| - | - |
| `<account-id>` | UUID de la cuenta social de WhatsApp o ID de proveedor **(obligatorio)** |

| Opción | Descripción |
| - | - |
| `--to <phone>` | Destinatario en formato E.164 (p. ej. `+15551234567`) **(obligatorio)** |
| `--template <name>` | Nombre de una plantilla APPROVED **(obligatorio)** |
| `--language <code>` | Código de idioma (p. ej. `en_US`, `es`, `pt_BR`) **(obligatorio)** |
| `--components <json>` | Parámetros de la plantilla como cadena JSON en línea |
| `--file <path>` | Parámetros de la plantilla desde un archivo JSON |

`--components` y `--file` son opcionales (una plantilla sin variables no necesita ninguno). Si se indican ambos, `--file` tiene prioridad.

Los parámetros de los componentes rellenan las variables (`{{1}}`, `{{2}}`, etc.) de la plantilla aprobada. La estructura coincide con la API en la nube de Meta:

```json theme={null}
[
  {
    "type": "body",
    "parameters": [
      { "type": "text", "text": "Alice" },
      { "type": "text", "text": "1234" }
    ]
  }
]
```

```bash Ejemplos theme={null}
# Template with no variables
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template welcome_v1 --language en_US

# Template with body variables
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template order_shipped --language en_US \
  --components '[{"type":"body","parameters":[{"type":"text","text":"Alice"},{"type":"text","text":"ORD-1234"}]}]'

# Parameters from a file (easier for complex components)
so-me whatsapp:send e6be46a2-... \
  --to +15551234567 --template order_shipped --language en_US \
  --file ./order_components.json

# Broadcast loop (be mindful of Meta's messaging rate limits)
while read -r phone name; do
  so-me whatsapp:send e6be46a2-... \
    --to "$phone" --template welcome_v1 --language en_US \
    --components "[{\"type\":\"body\",\"parameters\":[{\"type\":\"text\",\"text\":\"$name\"}]}]"
done < recipients.tsv
```

> [!WARNING]
>
> El envío de plantillas se factura según la tarifa de WhatsApp Business de Meta. Prueba siempre primero con un solo destinatario. Las plantillas no aprobadas o rechazadas fallarán con un 400.

## whatsapp:upload-media

Sube multimedia de cabecera (imagen/vídeo/documento) para usarla dentro del componente `HEADER` de una plantilla. Devuelve un identificador de multimedia al que puedes hacer referencia al crear o enviar plantillas.

```bash theme={null}
so-me whatsapp:upload-media --account <id> --type <fileType> (--url <url> | --base64 <content>)
```

| Opción | Descripción |
| - | - |
| `--account <id>` | UUID de la cuenta de WhatsApp o ID de proveedor **(obligatorio)** |
| `--type <fileType>` | Tipo de archivo: `image`, `video` o `document` **(obligatorio)** |
| `--url <url>` | URL pública del archivo multimedia que se sube |
| `--base64 <content>` | Contenido del archivo codificado en Base64 (alternativa a `--url`) |

Indica exactamente una de las opciones `--url` o `--base64`: el comando da un error si no indicas ninguna o indicas ambas.

```bash Ejemplos theme={null}
# From a public URL
so-me whatsapp:upload-media \
  --account e6be46a2-... --type image \
  --url https://cdn.example.com/hero.jpg

# From a local file (base64-encoded)
so-me whatsapp:upload-media \
  --account e6be46a2-... --type image \
  --base64 "$(base64 -w0 ./hero.jpg)"
```

## Panorama general

* Los **mensajes de sesión** (respuestas dentro de las 24 horas siguientes a un mensaje entrante) pasan por [`inbox:reply`](/es/cli/inbox); no requieren plantilla.
* Los **mensajes de plantilla** (primer contacto o fuera de la ventana de 24 horas) usan `whatsapp:send` y requieren una plantilla aprobada por Meta.
* **Conectar una cuenta de WhatsApp Business** sigue haciéndose solo desde el navegador: completa OAuth en el [panel](https://so-me.studio/es) primero y después tus scripts de la CLI podrán referirse a la cuenta conectada.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.