# Copiar entre workspaces

> Copia un agente de un workspace a otro, incluso entre zonas.

Fuente: https://developers.plazbot.com/cli/agent/cross-copy/

### Copiar un agente a otro workspace

Lee un agente del workspace de origen, limpia su configuración y lo crea en el workspace de destino (también entre zonas LA y EU). Por defecto no copia los canales ni la configuración de IA, y la copia queda con el widget desactivado. Pide confirmación antes de crear.

```bash
plazbot agent cross-copy <agentId> --from-workspace <id> --to-workspace <id> [options]
```

### Parámetros

| Parámetro | Flag | Requerido | Descripción |
|-----------|------|-----------|-------------|
| `agentId` | (posicional) | Sí | ID del agente a copiar. |
| Origen | `--from-workspace <id>` | Sí | Workspace de origen. |
| Destino | `--to-workspace <id>` | Sí | Workspace de destino. |
| Zona de origen | `--from-zone <zone>` | No | `LA` o `EU`. Por defecto: `LA`. |
| Zona de destino | `--to-zone <zone>` | No | `LA` o `EU`. Por defecto: `LA`. |
| Canales | `--channels` | No | También copia los canales (normalmente incorrecto: los canales pertenecen al workspace de origen). Por defecto: `false`. |
| IA | `--ai` | No | También copia la configuración de IA propia (`aiProviders`) y la clave del avatar (`avatarApiKey`). Contiene API keys de terceros. Por defecto: `false`. |
| JSON | `--json` | No | Imprime el resultado como JSON. Por defecto: `false`. |
| Confirmar | `-y, --yes` | No | Omite la confirmación (scripts y CI). Alias: `--confirm`. Por defecto: `false`. |

Tu sesión debe tener acceso a los dos workspaces.

### Qué se copia

- La configuración limpia del agente (la misma que produce [`export`](https://developers.plazbot.com/cli/agent/export)), con `zone` ajustada a la zona de destino.
- Sin `--channels`: `channels` queda vacío.
- Sin `--ai`: `customAIConfig` queda en `false` y no se copian `aiProviders` ni `avatarApiKey`; el agente copiado usa la IA por defecto de la plataforma.
- `enableWidget` siempre queda en `false`. Actívalo con [`plazbot agent enable-widget`](https://developers.plazbot.com/cli/agent/enable-widget).

### Ejemplos

```bash
# Copiar entre dos workspaces de LA (sin canales ni IA)
plazbot agent cross-copy age_AbcDef123 --from-workspace wok_Source123 --to-workspace wok_Target456

# Copiar entre zonas (LA a EU)
plazbot agent cross-copy age_AbcDef123 --from-workspace wok_Source123 --from-zone LA --to-workspace wok_Target456 --to-zone EU

# Copiar sin confirmación (scripts y CI)
plazbot agent cross-copy age_AbcDef123 --from-workspace wok_Source123 --to-workspace wok_Target456 --yes --json

# Copiar conservando canales y proveedores de IA
plazbot agent cross-copy age_AbcDef123 --from-workspace wok_Source123 --to-workspace wok_Target456 --channels --ai
```

### Resultado

```text
┌──────────────────────────────────────────────────────────┐
│  Copy agent between workspaces                           │
└──────────────────────────────────────────────────────────┘

Source: wok_Source123 (LA)
Target: wok_Target456 (LA)
Agent:  age_AbcDef123

✔ Agent fetched: Sales Plazbot

Configuration to copy:
Name:        Sales Plazbot
Target zone: LA
Channels:    0
Services:    2
Actions:     3
Custom AI:   No

? Create "Sales Plazbot" in workspace wok_Target456 (LA)? (y/N) y
✔ Agent created successfully

New ID: age_XyzUvw456
Widget disabled by default.
Channels were not copied: connect them in the target workspace.
```

Si respondes que no, se imprime `Aborted.` y el comando termina con código 1.

### Salida JSON

Con `--json`, stdout solo lleva el resultado; el resumen va a stderr.

```json
{
"id": "age_XyzUvw456",
"sourceId": "age_AbcDef123",
"name": "Sales Plazbot",
"fromWorkspace": "wok_Source123",
"toWorkspace": "wok_Target456",
"fromZone": "LA",
"toZone": "LA"
}
```

> **Nota:** Los canales son específicos de cada workspace. Después de la copia, conecta el número en el destino con [`plazbot whatsapp assign -p <número> -a <agentId>`](https://developers.plazbot.com/whatsapp/cli/assign) o desde la plataforma.

### Errores comunes

| Mensaje | Causa | Solución |
|---------|-------|----------|
| `error: required option '--from-workspace <id>' not specified` | Falta `--from-workspace` (o `--to-workspace`). | Pasa los dos workspaces. |
| `--from-zone must be LA or EU (got "<valor>").` | Zona inválida (igual para `--to-zone`). | Usa `LA` o `EU`. |
| `Agent age_AbcDef123 was not found in workspace wok_Source123 (LA).` | El agente no está en el origen o la zona no es la correcta. | Revisa `--from-workspace` y `--from-zone`. |
| `This action needs confirmation and there is no interactive terminal.` | Sin terminal (o con `--json`) y sin `--yes`. | Agrega `--yes`. |
| `The API rejected the agent configuration.` | La API de destino rechazó la configuración. | Exporta el agente y revísalo con `plazbot agent validate`. |
| `You are not signed in.` | No hay sesión activa. | Ejecuta [`plazbot login`](https://developers.plazbot.com/cli/login). |
