# Actualizar un contacto

> plazbot contacts update: cambia la fase, el agente, las etiquetas o cualquier campo de un contacto

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

### Actualizar un contacto

Cambia campos de un contacto. Solo se modifican los campos que pasas; el resto queda igual. Sirve para moverlo de fase, asignarlo a un agente, marcarlo como resuelto, agregar o quitar etiquetas, o cambiar cualquier otro campo.

```bash
plazbot contacts update <contactId> [opciones]
```

### Parámetros

| Parámetro | Flag | Requerido | Descripción |
|-----------|------|-----------|-------------|
| ID del contacto | `<contactId>` | Sí | ID del contacto (`con_...`) |
| Nombre | `--name <name>` | No | Nombre |
| Apellido | `--lastname <lastname>` | No | Apellido |
| Email | `-e, --email <email>` | No | Email |
| Fase | `--stage <stageId>` | No | ID de la fase (IDs con [`plazbot workspace show stages`](https://developers.plazbot.com/cli/workspace)) |
| Agente | `--agent <userId>` | No | Asigna el contacto a ese usuario (IDs con [`plazbot team list`](https://developers.plazbot.com/cli/team/list)). `none` lo deja sin asignar |
| Resuelto | `--solved` / `--no-solved` | No | Marca la conversación como resuelta, o la reabre |
| Agregar etiqueta | `--add-tag <tagId>` | No | Agrega una etiqueta. Se puede repetir |
| Quitar etiqueta | `--remove-tag <tagId>` | No | Quita una etiqueta. Se puede repetir |
| Otro campo | `--set <field=value>` | No | Cualquier otro campo del contacto. Se puede repetir |
| JSON | `--json` | No | Imprime la respuesta de la API en JSON |
| Confirmar | `-y, --yes` | No | Omite la confirmación |
| Workspace | `-w, --workspace <id>` | No | Otro de tus workspaces |
| Zona | `-z, --zone <zone>` | No | `LA` o `EU` |

Pasa al menos una opción. Antes de enviar, el CLI pide confirmación con la lista de campos que va a cambiar; sin terminal interactiva necesitas `--yes`.

### Etiquetas

La API reemplaza la lista completa de etiquetas del contacto. Por eso, con `--add-tag` o `--remove-tag` el CLI lee primero las etiquetas actuales del contacto, aplica tus cambios y envía la lista completa: las etiquetas que no mencionas se conservan.

Cada `--add-tag` debe ser una etiqueta activa del workspace. Consulta los IDs con [`plazbot tags list`](https://developers.plazbot.com/cli/tags/list).

### Valores de `--set`

El valor se interpreta como JSON cuando es JSON válido (números, `true`/`false`, listas, objetos) y como texto en cualquier otro caso:

| Ejemplo | Valor enviado |
|---------|---------------|
| `--set company="ACME"` | Texto `"ACME"` |
| `--set documentNumber=12345678` | Número `12345678` |
| `--set isBotEnabled=false` | Booleano `false` |
| `--set documentNumber='"00123"'` | Texto `"00123"` (para conservar ceros a la izquierda) |

No se pueden cambiar el ID, el workspace, el número de WhatsApp ni el canal del contacto.

### Ejemplos

```bash
# Mover a otra fase y etiquetar
plazbot contacts update con_AbcDef123 --stage mos_AbcDef123 --add-tag mot_AbcDef123

# Asignar a un agente y reabrir la conversación
plazbot contacts update con_AbcDef123 --agent usr_AbcDef123 --no-solved

# Quitar la asignación y una etiqueta
plazbot contacts update con_AbcDef123 --agent none --remove-tag mot_AbcDef123

# Cambiar otros campos sin preguntar
plazbot contacts update con_AbcDef123 --set company="ACME" --set documentNumber=12345678 --yes
```

### Resultado

```text
? Update stageId, tags of contact con_AbcDef123? Yes

Contact con_AbcDef123 updated (stageId, tags)
```

### Salida JSON

Con `--json` se imprime la respuesta de la API:

```json
{
"success": true,
"code": 200,
"message": "Successfully updated.",
"data": { "id": "con_AbcDef123" }
}
```

### Errores comunes

| Mensaje | Causa | Solución |
|---------|-------|----------|
| `Nothing to update.` | No pasaste ninguna opción | Pasa al menos una, ej. `--stage` o `--add-tag` |
| `Unknown tag mot_....` | La etiqueta no existe o está inactiva | Consulta los IDs con `plazbot tags list` |
| `Invalid --set "..."` | Falta el `=` | Usa `--set campo=valor` |
| `Contact con_... not found in workspace wok_....` | El ID no existe en ese workspace | Revisa el ID o pasa `-w` |
| `This action needs confirmation and there is no interactive terminal.` | Sin terminal y sin `--yes` | Agrega `--yes` |
| `This session is read-only: it cannot change data.` | Sesión creada con `--read-only` | Inicia sesión sin `--read-only` |
