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

# Comandos y salida

> Encuentra comandos, construye cuerpos de solicitud, sube archivos y elige entre JSON, tablas y JSON Lines

## Encontrar comandos

La CLI tiene un comando para cada operación de la API, agrupados en áreas como asistentes, llamadas, campañas y números de teléfono.

```bash theme={null}
famulor --help                 # areas and the most useful commands
famulor calls                  # every command in the calls area
famulor commands recording     # search commands by keyword
famulor get-call-recording --help
```

La ayuda de cada comando muestra qué hace, la solicitud a la API que envía, sus argumentos y opciones con sus tipos y valores permitidos, qué campos son obligatorios y un ejemplo. Las opciones que reciben ID indican qué comando los lista, por ejemplo `famulor list-voices` para una voz.

También puedes escribir primero el área y después el verbo: `famulor assistants create` ejecuta `create-assistant` y `famulor calls list` ejecuta `list-calls`. Cuando un verbo encaja con más de un comando, la CLI muestra los comandos posibles en lugar de adivinar.

## Argumentos y opciones

Los parámetros de ruta son argumentos, en el orden en que aparecen en la ruta de la API. Todo lo demás es una opción.

```bash theme={null}
famulor get-assistant 3f0c6a8e-1d2b-4c5d-9e8f-0a1b2c3d4e5f
famulor update-assistant 3f0c6a8e-1d2b-4c5d-9e8f-0a1b2c3d4e5f --name "Front desk" --llm-temperature 0.4
famulor list-calls --status completed --limit 20
```

* Una opción de sí/no acepta `true`/`false` (también `yes`/`no`, `on`/`off`, `1`/`0`), o se puede desactivar anteponiendo `--no-`, por ejemplo `--no-recording-enabled`.
* Las opciones que aceptan una lista admiten valores separados por comas o se pueden repetir: `--tags vip,new` o `--tags vip --tags new`. Para valores que contienen comas, pasa un array JSON: `--tags '["a,b"]'`.
* Las opciones de texto leen un archivo cuando el valor empieza por `@`: `--system-prompt @prompt.md`. Escribe `@@` para obtener una `@` literal.
* El valor `null` vacía un campo que lo permita.

## Cuerpos de solicitud

Los campos de primer nivel del cuerpo son opciones. Los objetos y las listas aceptan JSON, o `@file.json` para leerlo desde un archivo. Para todo lo demás hay dos formas más, y las tres se pueden combinar: primero el archivo JSON, después las opciones y después los campos.

<Tabs>
  <Tab title="Archivo JSON o stdin">
    ```bash theme={null}
    famulor create-assistant --input assistant.json
    cat assistant.json | famulor create-assistant --input -
    ```
  </Tab>

  <Tab title="Campos individuales">
    ```bash theme={null}
    famulor create-assistant --name Mia -F tts_speed=1.1 -F 'tags[]=vip' -F metadata.source=cli -F system_prompt=@prompt.md
    ```

    `-F key=value` reconoce números, `true`/`false`, `null` y JSON. Un campo que el comando conoce mantiene su tipo declarado, así que `-F to_number=4930123456` sigue siendo texto. Las rutas con puntos definen campos anidados, `[]` añade un elemento a una lista y `@file` lee un archivo. Usa `-f key=value` para enviar siempre el valor como texto. Un campo que el comando no conoce se envía con una advertencia. En las actualizaciones, un objeto o una lista que envíes reemplaza el valor guardado.
  </Tab>

  <Tab title="Subida de archivos">
    ```bash theme={null}
    famulor set-assistant-avatar <id> --file avatar.png
    famulor set-assistant-greeting-audio <id> --file greeting.mp3
    ```
  </Tab>
</Tabs>

Antes de enviar la solicitud, la CLI comprueba que el JSON sea válido y que todos los campos obligatorios estén definidos. Un `--input` vacío es un error, así que un paso anterior que haya fallado en una tubería nunca envía una solicitud con valores predeterminados.

## Formatos de salida

Por defecto, la CLI imprime la respuesta de la API como JSON: resaltado en un terminal y sin formato cuando se redirige por una tubería. El progreso y los mensajes van a stderr, así que la salida queda limpia para otras herramientas.

| Opción | Salida |
| - | - |
| `--output json` | La respuesta completa de la API (predeterminado) |
| `--output table` | Una tabla para las listas y una vista de etiqueta y valor para los registros individuales |
| `--output jsonl` | Un objeto JSON por línea para cada elemento de una lista |

```bash theme={null}
famulor list-assistants --output table
famulor list-calls --columns id,status,to_number,created_at
```

`--columns` implica la salida en tabla. Las tablas nunca acortan los ID, así que puedes copiarlos en el siguiente comando. En un terminal, las horas se muestran en tu zona horaria; en la salida redirigida se mantienen en el formato UTC de la API.

Define `FAMULOR_OUTPUT=table` para que las tablas sean el formato predeterminado en tu shell.

## Paginación

Las listas devuelven una página cada vez. `--all` recorre las páginas por ti y devuelve todos los elementos. Con `--output jsonl`, los elementos se imprimen en cuanto llega cada página.

```bash theme={null}
famulor list-leads <campaign-id> --all --output jsonl > leads.jsonl
```

## Audio y descargas

Los comandos que devuelven audio o una grabación lo guardan con `--output-file`:

```bash theme={null}
famulor get-voice-preview <voice-id> --realtime-variant full_duplex --output-file preview.wav
famulor get-call-recording <call-id> --output-file call.ogg
```

## Cualquier solicitud

`famulor api` envía cualquier solicitud con tu inicio de sesión guardado, tus opciones de salida y los reintentos. Las rutas son relativas a `/api/v1`:

```bash theme={null}
famulor api GET /assistants --query limit=5
famulor api PATCH /assistants/<id> -F name="Front desk"
```
