# Grabaciones

# Envio Almacenamiento Externo

Adicionalmente al respaldo de grabaciones en el servidor en la nube, es posible enviarlas a un servidor de almacenamiento externo que el cliente puede ofrecer.

Las grabaciones podran ser enviadas en formato MP3 o WAV stereo con el audio de agente en el canal izquierdo y el audio del cliente en el canal derecho y con METADATA en el nombre del archivo para poder realizar un analisis mas detallado.

FORMATO

(instancia) &amp; (fecha) &amp; (hora) &amp; (origen) &amp; (destino) &amp; (campaña) &amp; (agente) &amp; (tipificacion) &amp; (calidad) &amp; (duracion) &amp; (guid)

clever&amp;20240131&amp;141929&amp;13612393100&amp;3252126294&amp;LOANS\_IN&lt;-&amp;Epineda&amp;Leads&amp;Voicemail&amp;&amp;0&amp;4&amp;d9f25bd0-ab4b-4e01-9ef2-8e4e8361414e.mp3

La definición y orden de los campos es el siguiente delimitado por un amperson (&amp;):

- Nombre de la instancia

- Fecha (YYYMMDD)
- Hora (HHMMSS)
- Origen
- Destino
- Campaña
- Usuario
- Disposición 1
- Disposición 2
- Disposición 3
- Quality (opcional)
- Duracion
- Guid

# Envio de Almacenamiento Externo (WhatsApp)

Adicionalmente al respaldo de conversaciones en el servidor en la nube, es posible enviarlas a un servidor de almacenamiento externo que el cliente puede ofrecer.

Las conversaciones de WhatsApp podrán ser enviadas en formato **JSON**, con un archivo por conversación y con toda la METADATA contenida dentro del archivo para poder realizar un análisis más detallado.

---

### FORMATO

| Aspecto | Definición |
|---|---|
| Formato del archivo | JSON (UTF-8) |
| Unidad de envío | Un archivo = una conversación completa |
| Ruta de depósito | `/whatsapp/YYYYMMDD/` (subcarpeta diaria) |
| Nombre del archivo | `(conversation_id).json` |
| Orden de los mensajes | Cronológico ascendente |
| Versión del esquema | `1.0` |

**Ejemplo de nombre de archivo:**

```
/whatsapp/20240416/0a1aec28-90c7-43af-afaf-91b58ded8baf.json
```

---

### ESTRUCTURA

```json
{
  "schema_version": "1.0",
  "source": "whatsapp_channel",
  "generated_at": "2024-04-16T14:00:00Z",
  "conversation": {
    "conversation_id": "0a1aec28-90c7-43af-afaf-91b58ded8baf",
    "client_id": "5215733215563",
    "agent_name": "Jmartinez",
    "agent_group": "Cobranza WhatsApp",
    "conversation_status": "closed",
    "disposition_1": "Contacto efectivo",
    "disposition_2": "Promesa de pago",
    "disposition_3": "",
    "disposition_4": "",
    "disposition_5": "",
    "messages": [
      {
        "timestamp": "2024-04-16T09:12:00-05:00",
        "content": "Buenos días, quiero saber el saldo de mi cuenta",
        "message_category": "client",
        "message_type": "client_message",
        "agent_name": "",
        "extras": {
          "channel": "whatsapp",
          "attachments_available": false
        }
      },
      {
        "timestamp": "2024-04-16T09:13:20-05:00",
        "content": "Buen día, con gusto le ayudo. Su saldo actual es de $1,250.00",
        "message_category": "agent",
        "message_type": "agent_message",
        "agent_name": "Jmartinez",
        "extras": {
          "channel": "whatsapp",
          "attachments_available": true
        }
      }
    ]
  }
}
```

---

### DEFINICIÓN DE CAMPOS

#### Nivel raíz

- **schema_version** — Versión del esquema de datos. Valor fijo: `1.0`
- **source** — Canal de origen de la conversación. Valor fijo: `whatsapp_channel`
- **generated_at** — Fecha y hora de generación del archivo en formato ISO 8601. Ejemplo: `2024-04-16T14:00:00Z`
- **conversation** — Objeto que contiene la conversación completa. No es un arreglo: cada archivo corresponde a una sola conversación

#### Objeto `conversation`

- **conversation_id** — Identificador único de la conversación de WhatsApp
- **client_id** — Número de teléfono del cliente
- **agent_name** — Nombre del agente que atendió la conversación (tomado del primer mensaje enviado por el agente)
- **agent_group** — Nombre de la cola o campaña a la que pertenece la conversación
- **conversation_status** — Estado o evento final registrado al cierre de la conversación
- **disposition_1** — Tipificación de primer nivel asignada al cierre de la conversación (puede estar vacío)
- **disposition_2** — Tipificación de segundo nivel (puede estar vacío)
- **disposition_3** — Tipificación de tercer nivel (puede estar vacío)
- **messages** — Arreglo con todos los mensajes de la conversación, ordenados cronológicamente de forma ascendente

#### Objeto `messages[]`

- **timestamp** — Fecha y hora del mensaje en formato ISO 8601 con zona horaria. Ejemplo: `2024-04-16T09:12:00-05:00`
- **content** — Cuerpo del mensaje de texto
- **message_category** — Categoría del emisor del mensaje: `client` si fue enviado por el cliente, `agent` si fue enviado por el agente
- **message_type** — Tipo de mensaje: `client_message` si fue enviado por el cliente, `agent_message` si fue enviado por el agente
- **agent_name** — Nombre del agente asociado al mensaje (puede estar vacío en mensajes del cliente)
- **extras** — Objeto con metadatos adicionales del mensaje

#### Objeto `messages[].extras`

- **channel** — Canal de la conversación. Valor fijo: `whatsapp`
- **attachments_available** — Indica si el mensaje incluye archivos adjuntos (imágenes, documentos, etc.). Valor: `true` o `false`

---

### CONSIDERACIONES

- **Adjuntos:** el contenido de los archivos adjuntos no se incluye en el JSON. Únicamente se indica su existencia mediante la bandera `attachments_available`
- **Tipificaciones:** la tipificación se asigna al cierre de la conversación. Se envían hasta 3 niveles y los niveles no utilizados se envían como cadena vacía (`""`)
- **Transferencias:** cuando una conversación es atendida por más de un agente, el campo `agent_name` del encabezado corresponde al primer agente que respondió; el `agent_name` de cada mensaje refleja al agente que lo envió
- **Conversaciones cerradas:** únicamente se envían conversaciones que ya cuentan con evento de cierre registrado