Tema
Áudio
Cada atendimento pode ser ouvido. GET /v1/atendimentos/{id}/audio devolve exatamente o que o botão de play do painel reproduz: só o trecho da conversa, em um único arquivo WAV, com documento e nome completo já em silêncio.
A API não expõe arquivos de gravação, nomes de arquivo nem posições internas. O único identificador que você precisa é o id do atendimento.
Como chegar ao áudio
Todo atendimento traz um bloco audio:
json
{
"id": "2026-10-06:atend_27",
"horario": "13:16:41",
"resumo": "Visitante interessada no quadrimestral…",
"audio": {
"url": "/v1/atendimentos/2026-10-06:atend_27/audio",
"duracao_s": 324,
"partes": 1
}
}| Campo | O que é |
|---|---|
url | Caminho relativo à base da API. |
duracao_s | Duração do áudio entregue, em segundos. |
partes | Quantos recortes foram colados em sequência (a conversa pode atravessar a troca de arquivo da gravação). Você sempre recebe um único WAV. |
audio é null quando o atendimento não tem trecho de gravação.
Chamada
Use o mesmo Authorization, Id_unidade, de, ate (e turno, se usou) da chamada que devolveu o atendimento.
bash
curl -o atendimento.wav \
"https://api.ouvixpro.ai/v1/atendimentos/2026-10-06:atend_27/audio?Id_unidade=375&de=2026-10-06&ate=2026-10-06" \
-H "Authorization: Bearer $OUVIX_API_KEY"python
import os
import urllib.request
url = (
"https://api.ouvixpro.ai/v1/atendimentos/2026-10-06:atend_27/audio"
"?Id_unidade=375&de=2026-10-06&ate=2026-10-06"
)
req = urllib.request.Request(url, headers={"Authorization": f"Bearer {os.environ['OUVIX_API_KEY']}"})
with urllib.request.urlopen(req) as res, open("atendimento.wav", "wb") as f:
f.write(res.read())js
import { writeFile } from 'node:fs/promises'
const base = 'https://api.ouvixpro.ai'
const atendimento = { audio: { url: '/v1/atendimentos/2026-10-06:atend_27/audio' } } // vindo do /v1/painel
const res = await fetch(`${base}${atendimento.audio.url}?Id_unidade=375&de=2026-10-06&ate=2026-10-06`, {
headers: { Authorization: `Bearer ${process.env.OUVIX_API_KEY}` },
})
if (!res.ok) throw new Error(`HTTP ${res.status}`)
await writeFile('atendimento.wav', Buffer.from(await res.arrayBuffer()))Resposta
| Cabeçalho | Valor |
|---|---|
Content-Type | audio/wav — PCM 16 bits, pronto para tocar em qualquer player. |
Content-Disposition | inline; filename="atendimento-<id>.wav" |
X-Audio-Duracao-S | Duração em segundos. |
X-Audio-Partes | Número de recortes colados. |
Cache-Control | private, max-age=300 |
O formato é sempre o mesmo, independentemente de como a unidade grava. A API recorta e converte no servidor.
Dados pessoais
As janelas em que foram ditos documento ou nome completo chegam em silêncio, com a mesma regra do player do painel. Os textos (resumo, evidencia, fato…) já vêm mascarados. Não há nada a tratar do seu lado.
Desempenho
A primeira chamada para um atendimento busca a gravação no armazenamento e pode levar alguns segundos, proporcional ao tamanho do bloco de áudio. Chamadas seguintes para a mesma gravação são rápidas. Para catálogos grandes, baixe sob demanda (quando alguém clicar em ouvir) em vez de pré-carregar o dia inteiro.
Erros relacionados
| HTTP | code | Causa |
|---|---|---|
| 404 | atendimento_nao_encontrado | O id não está nessa unidade e nesse período (confira Id_unidade, de, ate e turno). |
| 404 | audio_indisponivel | O atendimento não tem trecho de gravação (audio é null). |
| 502 | audio_indisponivel | O armazenamento de áudio não respondeu ou o recorte falhou. Tente novamente em instantes. |
| 410 | endpoint_removido | Chamada ao antigo /v1/audio. Use /v1/atendimentos/{id}/audio. |
