Skip to content

Chamadas

Gerenciamento de chamadas de vídeo. Inclui listagem, detalhes, atribuição, início, conclusão e upload de arquivos.

Endpoints

MétodoEndpointDescriçãoRole Mínimo
GET/api/v1/callsListar chamadasattendant
GET/api/v1/calls/:idDetalhes da chamadaattendant
POST/api/v1/calls/:id/assignAtribuir chamada a atendenteattendant
POST/api/v1/calls/:id/startIniciar chamadaattendant
POST/api/v1/calls/:id/completeFinalizar chamadaattendant
POST/api/v1/calls/:call_id/uploadUpload de arquivo na chamadaattendant
GET/api/v1/calls/:call_id/tagsTags da chamadaattendant
POST/api/v1/calls/:call_id/tagsAdicionar tagattendant
DELETE/api/v1/calls/:call_id/tags/:tag_idRemover tagattendant
GET/api/v1/calls/:call_id/transcriptTranscrição da chamadaattendant
GET/api/v1/calls/:call_id/summaryResumo IA da chamadaattendant
POST/api/v1/calls/:id/manager-notesAdicionar nota gerencialsupervisor

Listar Chamadas

Retorna a lista paginada de chamadas do tenant.

GET /api/v1/calls

Query Parameters

ParâmetroTipoPadrãoDescrição
pageinteger1Número da página
page_sizeinteger20Itens por página
sort_bystringinserted_atCampo para ordenação
sort_orderstringdescDireção da ordenação
statusstring-Filtro por status: queued, active, completed, missed, cancelled
department_iduuid-Filtro por departamento
user_iduuid-Filtro por atendente
date_fromstring-Data início (ISO 8601)
date_tostring-Data fim (ISO 8601)
searchstring-Busca por nome/email do cliente

Exemplo 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"

Resposta de Sucesso (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
  }
}

Detalhes da Chamada

GET /api/v1/calls/:id

Exemplo 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"

Resposta de Sucesso (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"
  }
}

Atribuir Chamada

Atribui uma chamada da fila a um atendente.

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

Request Body (opcional)

CampoTipoObrigatórioDescrição
user_iduuidNãoID do atendente (padrão: usuário autenticado)

Exemplo 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"

Resposta de Sucesso (200)

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

Iniciar Chamada

Marca o início efetivo da chamada de vídeo.

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

Exemplo 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"

Resposta de Sucesso (200)

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

Finalizar Chamada

Marca a chamada como concluída.

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

Request Body (opcional)

CampoTipoObrigatórioDescrição
notesstringNãoNotas do atendente sobre a chamada

Exemplo 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."
  }'

Resposta de Sucesso (200)

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

Upload de Arquivo

Faz upload de um arquivo associado a uma chamada (ex: documentos compartilhados).

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

Request

Envie como multipart/form-data.

CampoTipoObrigatórioDescrição
filefileSimArquivo a ser enviado

Exemplo 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"

Resposta de Sucesso (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 da Chamada

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"

Adicionar 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"
  }'

Remover 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"

Status da Chamada

StatusDescrição
queuedNa fila aguardando atendente
assignedAtribuída a um atendente
activeChamada de vídeo em andamento
completedFinalizada
missedNão atendida (timeout)
cancelledCancelada pelo cliente
abandonedAbandonada (expirou na fila)

Transcrição da Chamada

Retorna a transcrição gerada automaticamente durante a chamada (quando a feature de transcrição está habilitada no plano).

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

Exemplo 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"

Resposta de Sucesso (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "transcript": "Atendente: Bom dia, como posso ajudar?\nCliente: Preciso de suporte técnico...",
    "language": "pt-BR",
    "generated_at": "2026-02-18T14:46:00Z"
  }
}

Erros

StatusDescrição
403Feature transcription não disponível no plano
404Chamada não encontrada ou sem transcrição

Resumo IA da Chamada

Retorna o resumo gerado por IA após a conclusão da chamada (disponível em planos com feature ai_summaries).

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

Exemplo 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"

Resposta de Sucesso (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "summary": "O cliente entrou em contato para resolver um problema de configuração...",
    "provider": "openai",
    "model": "gpt-4o-mini",
    "generated_at": "2026-02-18T14:46:30Z"
  }
}

Erros

StatusDescrição
403Feature ai_summaries não disponível no plano
404Chamada não encontrada ou sem resumo

Notas Gerenciais

Adiciona notas gerenciais a uma chamada concluída. As notas são append-only (adicionadas com timestamp e autor), não substituídas.

Roles permitidos: owner, manager, supervisor

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

Request Body

CampoTipoObrigatórioDescrição
notesstringSimTexto da nota gerencial

Exemplo 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 atendimento. Solicitar feedback do cliente."
  }'

Resposta de Sucesso (200)

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

Erros

StatusDescrição
403Apenas owner, manager ou supervisor podem adicionar notas
404Chamada não encontrada
422Campo notes vazio

Reconexão de Chamadas

Quando um participante se desconecta durante uma chamada ativa, o sistema inicia um período de graça de 60 segundos para reconexão automática. O campo end_reason indica como a chamada foi encerrada.

Campos de Reconexão

CampoTipoDescrição
disconnected_atdatetimeMomento da desconexão (null se não houve)
reconnected_atdatetimeMomento da reconexão (null se não reconectou)
end_reasonstringRazão do encerramento: normal, timeout, disconnect, abandoned

Fluxo de Reconexão

  1. Participante se desconecta → evento peer_disconnected enviado via WebSocket
  2. Timer de 60 segundos inicia no frontend (UI de reconexão com countdown)
  3. Se reconectar dentro de 60s → evento peer_reconnected → renegociação WebRTC
  4. Se não reconectar → chamada encerrada com end_reason: "disconnect"

Documentação da API Voki v4.0