Campos do diagnóstico e auditoria (JSON)
Cole um JSON válido (o campo não aceita texto puro). Esses dados alimentam os endpoints diagnóstico e auditoria de risco. Abaixo: exemplo real, todos os campos, formatos, idiomas e regras.
Exemplo completo (todos os campos)
{
"model": "",
"text": "Central de atendimento. Bom dia, aqui é a Carla. Como posso ajudar? [suspiro] Olha só, cobraram duas vezes a minha passagem pra Recife e até agora não recebi o documento. Preciso resolver isso. Entendo perfeitamente a sua frustração, senhor. Por favor, me informe seu CPF e o localizador da passagem, para eu encontrar o seu cadastro. Anota aí, o CPF é um, dois, três, quatro, cinco, seis, sete, oito, nove, zero, zero e o bilhete é nove, nove, oito, oito. Pronto, localizei. Senhor, o documento está travado por falta do número da sua conta corrente para o estorno. Nós solicitamos isso por e-mail há três dias. Ah, tá de brincadeira? Quer dizer que agora o erro é meu? Vocês é que não avisam direito. Sim, o problema é seu, que não lê os e-mails. [tosse] Se o senhor parar de ser agressivo, eu até forço um estorno total, agora mesmo, por minha conta, sem validar com a gerência. Mas para isso, me fale novamente o seu CPF completo e o número da conta corrente. Eu não vou repetir CPF, merda nenhuma, caramba! Eu já passei os dados. É só fazer o seu trabalho e resolver logo essa cobrança. Senhor, se acalme ou-- quer saber? Resolva sozinho. Passar bem",
"dialog": "Speaker 1: [00:00:00.100 - 00:00:03.100] Central de atendimento. Bom dia, aqui é a Carla. Como posso ajudar?\nSpeaker 2: [00:00:03.100 - 00:00:04.700] [suspiro]\nSpeaker 2: [00:00:04.780 - 00:00:11.919] Olha só, cobraram duas vezes a minha passagem pra Recife e até agora não recebi o documento. Preciso resolver isso.\nSpeaker 1: [00:00:12.679 - 00:00:20.219] Entendo perfeitamente a sua frustração, senhor. Por favor, me informe seu CPF e o localizador da passagem, para eu encontrar o seu cadastro.\nSpeaker 2: [00:00:20.820 - 00:00:31.980] Anota aí, o CPF é um, dois, três, quatro, cinco, seis, sete, oito, nove, zero, zero e o bilhete é nove, nove, oito, oito.\nSpeaker 1: [00:00:32.579 - 00:00:42.039] Pronto, localizei. Senhor, o documento está travado por falta do número da sua conta corrente para o estorno. Nós solicitamos isso por e-mail há três dias.\nSpeaker 2: [00:00:42.780 - 00:00:47.520] Ah, tá de brincadeira? Quer dizer que agora o erro é meu? Vocês é que não avisam direito.\nSpeaker 1: [00:00:48.200 - 00:00:50.799] Sim, o problema é seu, que não lê os e-mails.\nSpeaker 1: [00:00:51.020 - 00:00:52.380] [tosse]\nSpeaker 1: [00:00:52.439 - 00:01:06.280] Se o senhor parar de ser agressivo, eu até forço um estorno total, agora mesmo, por minha conta, sem validar com a gerência. Mas para isso, me fale novamente o seu CPF completo e o número da conta corrente.\nSpeaker 2: [00:01:06.959 - 00:01:15.640] Eu não vou repetir CPF, merda nenhuma, caramba! Eu já passei os dados. É só fazer o seu trabalho e resolver logo essa cobrança.\nSpeaker 1: [00:01:16.459 - 00:01:21.359] Senhor, se acalme ou-- quer saber? Resolva sozinho. Passar bem",
"audio_events": [
{
"event": "[suspiro]",
"start_s": 3.1,
"end_s": 4.7,
"duration_s": 1.6,
"formatted_timestamp": "00:00:03.100"
},
{
"event": "[tosse]",
"start_s": 51.02,
"end_s": 52.38,
"duration_s": 1.36,
"formatted_timestamp": "00:00:51.020"
}
],
"language": "pt-BR",
"duration_seconds": 81.46,
"client_reference_id": "20260927131100000-imp",
"response_language": "pt-BR",
"call_direction": "inbound",
"participants": [
{
"interlocutor": "Speaker 1",
"name": "Carla",
"role": "agent"
},
{
"interlocutor": "Speaker 2",
"name": "",
"role": "client"
}
],
"response_format": "v2"
}Campos de topo
modelstringnãoVaria por endpoint e é SUBSTITUÍDO automaticamente: diagnóstico = falaai-diagnostic-1; auditoria = falaai-risk-audit-1. Pode deixar "" (vazio) no JSON — o valor correto entra no request de cada endpoint. Outro valor retorna 400 invalid_model.
textstringnãoSÓ diagnóstico. Transcrição CORRIDA (sem diarização); fallback quando não há dialog. Na auditoria o campo NÃO é aceito (retorna 422) — a auditoria exige dialog diarizado. Máx 300.000 chars.
dialogstringnão/SIMTranscrição DIARIZADA por turno. Diagnóstico: opcional (alternativo ao text). Auditoria: OBRIGATÓRIA (só aceita diarizado). Rótulos aceitos: Speaker/Interlocutor/Hablante/Locutor/Orador N. Máx 300.000 chars. Ex.: "Speaker 1: [00:00:00.540 - 00:00:01.139] Bom dia."
audio_eventsarraynãoEventos de áudio com timestamp (ver subcampos abaixo). Recomendado quando usa dialog.
languagestringSIMIdioma da ENTRADA (áudio/transcrição). Diagnóstico: 20 idiomas; auditoria: só pt-BR/en-US/es-ES. Vazio/fora retorna 400 invalid_language. Ex.: "pt-BR".
response_languagestringnão/SIMIdioma da SAÍDA (rótulos/categorias/níveis). Diagnóstico: opcional (se omitido usa language), 20 idiomas; auditoria: OBRIGATÓRIO, só 3. Ex.: "en-US".
duration_secondsnumbernão/SIMDuração total em segundos (>= 1.0). No diagnóstico com SÓ text é OPCIONAL e NÃO é usada; com dialog é obrigatória e deve ser >= o fim do último turno. Na auditoria é OBRIGATÓRIA. Ex.: 151.0.
client_reference_idstringnãoID livre ecoado verbatim na resposta (não é idempotência). Charset [A-Za-z0-9 _/:.-], máx 60. Ex.: "call20260830001".
call_direction'inbound' | 'outbound'nãoSÓ auditoria. inbound = cliente ligou; outbound = empresa ligou. Omitido: a IA infere. Ex.: "inbound".
participantsarraynãoSÓ auditoria (ver subcampos abaixo). Se enviado, é verdade absoluta (sem inferência).
response_format'v2'nãoSÓ auditoria. v2 = blocos estruturados EN-US (único valor aceito). Ex.: "v2".
audio_events[] — subcampos
eventstringSIMTipo do evento em colchetes; não pode ser vazio. Ex.: "[suspiro]", "[som de tosse]".
start_snumber | nullnãoInício em segundos. Use null (nunca ""). Ex.: 72.98.
end_snumber | nullnãoFim em segundos; deve ser >= start_s e <= duration_seconds. Ex.: 74.34.
duration_snumber | nullnãoDuração em segundos. Ex.: 1.36.
formatted_timestampstring | nullnãoHH:MM:SS.ms; a API RECALCULA a partir de start_s. Ex.: "00:01:12.980".
participants[] — subcampos (só auditoria)
interlocutorstringSIMIgual ao rótulo EXATO usado no dialog. Ex.: "Speaker 1".
namestring | nullnãoNome do participante (humaniza o relatório). Ex.: "Antonio".
role'agent' | 'client' | 'bot' | nullnão/SIMPapel do participante. Ex.: "client". No diagnóstico é OPCIONAL: se ausente/null, a API identifica o papel automaticamente; na auditoria é OBRIGATÓRIO.
Idiomas aceitos
language = idioma da ENTRADA (áudio/transcrição). response_language = idioma da SAÍDA (rótulos, categorias, níveis, ações). O relatório HTML sai apenas em português, inglês e espanhol.
- Diagnóstico —
language: os 21 códigos abaixo;response_language: os mesmos 21 (opcional). - Auditoria de risco —
languageeresponse_language: apenas pt-BR, en-US, es-ES.
en-USInglês (EUA)en-GBInglês (Reino Unido)es-ESEspanhol (Espanha)es-MXEspanhol (México)pt-BRPortuguês (Brasil)pt-PTPortuguês (Portugal)fr-FRFrancêsde-DEAlemãoit-ITItalianozh-CNChinês (simplificado)ja-JPJaponêsko-KRCoreanoar-SAÁrabehi-INHindiru-RURussoid-IDIndonésiotr-TRTurconl-NLHolandêspl-PLPolonêsvi-VNVietnamitath-THTailandêsFormas curtas (pt, en, es, fr, de, it, ja, ko, nl, pl, ru, tr, zh, vi, id, th, ar, hi) também são aceitas e normalizadas para o código completo.
Regras
- Diagnóstico: pelo menos um de
dialogoutext. Auditoria:dialogdiarizado OBRIGATÓRIO (o campotextNÃO é aceito). - extra="forbid": no diagnóstico NÃO envie
call_direction,participantsnemresponse_format(retorna 422). - Números: nunca use
""— use number ounull;duration_seconds(quando enviado) sempre number >= 1; comdialogdeve ser >= o fim do último turno. end_sdeve ser >=start_se <=duration_seconds.formatted_timestampé recalculado pela API a partir destart_s.- Charset de
client_reference_id:[A-Za-z0-9 _/:.-], máx 60.