Skip to content

Llamadas

Gestión de llamadas de video. Incluye listado, detalles, asignación, inicio, finalización y carga de archivos.

Endpoints

MétodoEndpointDescripciónRol Mínimo
GET/api/v1/callsListar llamadasattendant
GET/api/v1/calls/:idDetalles de la llamadaattendant
POST/api/v1/calls/:id/assignAsignar llamada a un agenteattendant
POST/api/v1/calls/:id/startIniciar llamadaattendant
POST/api/v1/calls/:id/completeFinalizar llamadaattendant
POST/api/v1/calls/:call_id/uploadCarga de archivo en la llamadaattendant
GET/api/v1/calls/:call_id/tagsTags de la llamadaattendant
POST/api/v1/calls/:call_id/tagsAgregar tagattendant
DELETE/api/v1/calls/:call_id/tags/:tag_idEliminar tagattendant
GET/api/v1/calls/:call_id/transcriptTranscripción de la llamadaattendant
GET/api/v1/calls/:call_id/summaryResumen IA de la llamadaattendant
POST/api/v1/calls/:id/manager-notesAgregar nota gerencialsupervisor

Listar Llamadas

Devuelve la lista paginada de llamadas del tenant.

GET /api/v1/calls

Query Parameters

ParámetroTipoPredeterminadoDescripción
pageinteger1Número de página
page_sizeinteger20Elementos por página
sort_bystringinserted_atCampo para ordenamiento
sort_orderstringdescDirección del ordenamiento
statusstring-Filtro por estado: queued, active, completed, missed, cancelled
department_iduuid-Filtro por departamento
user_iduuid-Filtro por agente
date_fromstring-Fecha inicio (ISO 8601)
date_tostring-Fecha fin (ISO 8601)
searchstring-Búsqueda por nombre/email del cliente

Ejemplo de Request

bash
curl -X GET "https://voki.avanter.com.br/api/v1/calls?page=1&page_size=10&status=completed&date_from=2026-02-01" \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": [
    {
      "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
      "status": "completed",
      "department_id": "e5f6a7b8-c9d0-1234-efgh-567890123456",
      "department_name": "Suporte Técnico",
      "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "user_name": "João Silva",
      "customer_name": "Carlos Ferreira",
      "customer_email": "carlos@email.com",
      "customer_phone": "+5511999998888",
      "duration": 345,
      "wait_time": 12,
      "rating": 5,
      "notes": "Cliente precisava de ajuda com configuração",
      "has_recording": true,
      "started_at": "2026-02-15T14:30:00Z",
      "completed_at": "2026-02-15T14:35:45Z",
      "inserted_at": "2026-02-15T14:29:48Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "page_size": 10,
    "total_pages": 15,
    "total_count": 142
  }
}

Detalles de la Llamada

GET /api/v1/calls/:id

Ejemplo de Request

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "completed",
    "department_id": "e5f6a7b8-c9d0-1234-efgh-567890123456",
    "department_name": "Suporte Técnico",
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "user_name": "João Silva",
    "customer_name": "Carlos Ferreira",
    "customer_email": "carlos@email.com",
    "customer_phone": "+5511999998888",
    "duration": 345,
    "wait_time": 12,
    "rating": 5,
    "notes": "Cliente precisava de ajuda com configuração",
    "has_recording": true,
    "recording_url": "/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/recording",
    "tags": [
      {
        "id": "t1a2b3c4-d5e6-7890-abcd-ef1234567890",
        "name": "Suporte",
        "color": "#3b82f6"
      }
    ],
    "started_at": "2026-02-15T14:30:00Z",
    "completed_at": "2026-02-15T14:35:45Z",
    "inserted_at": "2026-02-15T14:29:48Z"
  }
}

Asignar Llamada

Asigna una llamada de la cola a un agente.

POST /api/v1/calls/:id/assign

Request Body (opcional)

CampoTipoObligatorioDescripción
user_iduuidNoID del agente (predeterminado: usuario autenticado)

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/assign \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json"

Respuesta Exitosa (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "assigned",
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "user_name": "João Silva"
  }
}

Iniciar Llamada

Marca el inicio efectivo de la videollamada.

POST /api/v1/calls/:id/start

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/start \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "active",
    "started_at": "2026-02-18T14:30:00Z"
  }
}

Finalizar Llamada

Marca la llamada como finalizada.

POST /api/v1/calls/:id/complete

Request Body (opcional)

CampoTipoObligatorioDescripción
notesstringNoNotas del agente sobre la llamada

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/complete \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "notes": "Problema resolvido. Cliente satisfeito."
  }'

Respuesta Exitosa (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "completed",
    "completed_at": "2026-02-18T14:45:00Z"
  }
}

Carga de Archivo

Sube un archivo asociado a una llamada (ej: documentos compartidos).

POST /api/v1/calls/:call_id/upload

Request

Envíe como multipart/form-data.

CampoTipoObligatorioDescripción
filefileArchivo a enviar

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/upload \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -F "file=@documento.pdf"

Respuesta Exitosa (201)

json
{
  "data": {
    "id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "filename": "documento.pdf",
    "content_type": "application/pdf",
    "size": 245678,
    "url": "/uploads/calls/1a2b3c4d/documento.pdf"
  }
}

Tags de la Llamada

Listar Tags

GET /api/v1/calls/:call_id/tags
bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Agregar Tag

POST /api/v1/calls/:call_id/tags
bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "tag_id": "t1a2b3c4-d5e6-7890-abcd-ef1234567890"
  }'

Eliminar Tag

DELETE /api/v1/calls/:call_id/tags/:tag_id
bash
curl -X DELETE https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags/t1a2b3c4-d5e6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Estado de la Llamada

EstadoDescripción
queuedEn cola esperando agente
assignedAsignada a un agente
activeVideollamada en curso
completedFinalizada
missedNo atendida (timeout)
cancelledCancelada por el cliente
abandonedAbandonada (expirada en la cola)

Transcripción de la Llamada

Devuelve la transcripción generada automáticamente durante la llamada (cuando la feature de transcripción está habilitada en el plan).

GET /api/v1/calls/:call_id/transcript

Ejemplo de Request

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/transcript \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "transcript": "Agente: Buenos días, cómo puedo ayudarle?\nCliente: Necesito soporte técnico...",
    "language": "pt-BR",
    "generated_at": "2026-02-18T14:46:00Z"
  }
}

Errores

EstadoDescripción
403Feature transcription no disponible en el plan
404Llamada no encontrada o sin transcripción

Resumen IA de la Llamada

Devuelve el resumen generado por IA después de la finalización de la llamada (disponible en planes con feature ai_summaries).

GET /api/v1/calls/:call_id/summary

Ejemplo de Request

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/summary \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "summary": "El cliente se comunicó para resolver un problema de configuración...",
    "provider": "openai",
    "model": "gpt-4o-mini",
    "generated_at": "2026-02-18T14:46:30Z"
  }
}

Errores

EstadoDescripción
403Feature ai_summaries no disponible en el plan
404Llamada no encontrada o sin resumen

Notas Gerenciales

Agrega notas gerenciales a una llamada finalizada. Las notas son append-only (se agregan con timestamp y autor), no se reemplazan.

Roles permitidos: owner, manager, supervisor

POST /api/v1/calls/:id/manager-notes

Request Body

CampoTipoObligatorioDescripcion
notesstringTexto de la nota gerencial

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/manager-notes \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "notes": "Excelente atención. Solicitar feedback del cliente."
  }'

Respuesta Exitosa (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "manager_notes": "[2026-02-18 14:50 - Ana Supervisora] Excelente atención. Solicitar feedback del cliente."
  }
}

Errores

EstadoDescripción
403Solo owner, manager o supervisor pueden agregar notas
404Llamada no encontrada
422Campo notes vacío

Reconexión de Llamadas

Cuando un participante se desconecta durante una llamada activa, el sistema inicia un período de gracia de 60 segundos para reconexión automática. El campo end_reason indica cómo fue finalizada la llamada.

Campos de Reconexión

CampoTipoDescripción
disconnected_atdatetimeMomento de la desconexión (null si no hubo)
reconnected_atdatetimeMomento de la reconexión (null si no se reconectó)
end_reasonstringRazón de finalización: normal, timeout, disconnect, abandoned

Flujo de Reconexión

  1. Participante se desconecta -> evento peer_disconnected enviado via WebSocket
  2. Timer de 60 segundos inicia en el frontend (UI de reconexión con cuenta regresiva)
  3. Si se reconecta dentro de 60s -> evento peer_reconnected -> renegociación WebRTC
  4. Si no se reconecta -> llamada finalizada con end_reason: "disconnect"

Documentação da API Voki v4.0