# Actualizar Portal

> Cambia la configuración de un portal; solo se modifican los campos que pasas

Fuente: https://developers.plazbot.com/cli/portal/update/

### Actualizar un portal

Cambia el nombre, los textos, los logos, el acceso, el estado o la marca de un portal. Solo se modifican los campos que pasas: el resto (incluidos acceso, estado y marca) conserva su valor actual. Debes pasar al menos una opción.

```bash
plazbot portal update <portalId> [opciones]
```

### Parámetros

| Parámetro | Flag | Requerido | Descripción |
|-----------|------|-----------|-------------|
| Portal ID | `<portalId>` | Sí | ID del portal (sale en [`plazbot portal list`](https://developers.plazbot.com/cli/portal/list)) |
| Nombre | `-n, --name <name>` | No | Nuevo nombre del portal |
| Título | `-t, --title <title>` | No | Nuevo título de bienvenida |
| Subtítulo | `-s, --subtitle <subtitle>` | No | Nuevo subtítulo |
| Logo | `-l, --logo <url>` | No | Nueva URL del logo (`.png` o `.jpg`) |
| Logo modo oscuro | `-d, --logo-dark <url>` | No | Nueva URL del logo para modo oscuro (`.png` o `.jpg`) |
| Acceso | `-a, --access <type>` | No | `direct` o `form` |
| Deshabilitado | `--disabled <true\|false>` | No | `true` deshabilita y `false` habilita el portal (también acepta `yes/no`, `on/off`) |
| Habilitar | `--enable` | No | Atajo de `--disabled false` |
| Deshabilitar | `--disable` | No | Atajo de `--disabled true` |
| Marca Plazbot | `--brand-off <true\|false>` | No | `true` oculta y `false` muestra la marca Plazbot |
| JSON | `--json` | No | Imprime el resultado en JSON |

`--enable`, `--disable` y `--disabled` son excluyentes entre sí.

### Ejemplos

```bash
# Cambiar el nombre
plazbot portal update por_AbcDef123 -n "Support Center"

# Pedir datos de contacto y cambiar el título
plazbot portal update por_AbcDef123 -a form -t "Identifícate para continuar"

# Deshabilitar el portal
plazbot portal update por_AbcDef123 --disable

# Ocultar la marca Plazbot y cambiar el logo
plazbot portal update por_AbcDef123 --brand-off true -l https://files.example.com/logo.png
```

### Resultado

El bloque **Changes** muestra cada campo que pasaste con su valor anterior y el nuevo (`antes → después`). Si el valor no cambió, se muestra solo una vez.

```text
✔ Portal "Support Center" updated

Changes
────────────────────────────────────────
Name: Help Center → Support Center
Status: Enabled → Disabled
```

### Salida JSON

`changes` contiene solo los campos enviados, con los nombres de la API (`logodark`, `brandOff`, `disabled`).

```json
{
"id": "por_AbcDef123",
"updated": true,
"changes": {
  "name": "Support Center",
  "disabled": true
}
}
```

### Errores comunes

| Mensaje | Causa | Solución |
|---------|-------|----------|
| `Nothing to update.` | No pasaste ninguna opción | Pasa al menos una, por ejemplo `-n "Nuevo nombre"` o `--disable` |
| `Subtitle cannot be empty.` | `-s ""` | La API ignora los valores vacíos: el subtítulo no se puede borrar desde el CLI |
| `Portal name cannot be empty.` / `Portal title cannot be empty.` | `-n` o `-t` vacíos | Pasa un valor no vacío |
| `Invalid value for --disabled: "..."` | Valor distinto de true/false | Usa `true` o `false` (o `--enable` / `--disable`) |
| `Invalid logo for --logo: "..."` | El logo no es `.png`/`.jpg` | Usa una URL `.png` o `.jpg` |
| `Invalid access type "..."` | `-a` distinto de `direct` o `form` | Usa `direct` o `form` |

> **Nota:** Todo se valida antes de llamar a la API: si una opción es inválida, no se cambia nada.
