API REST V3

O CPqD Transcrição de Diálogos possui uma API REST que permite realizar as operações cadastro e transferência de arquivos de áudio, bem como controlar o processo de transcrição dos arquivos. Esta seção tem como objetivo detalhar essas funções que compõem a API REST do servidor de transcrição.

Todo a API do transcritor é auto-documentada, e pode ser acessada a partir da seguinte URL http://TRD_HOST:8000/trd/v3/docs, onde TRD_HOST é o IP do servidor de funcionamento do transcritor.

Nota

Caso não tenha acesso a um servidor de transcrição a documentação também pode ser acessada a partir do link

API JOB síncrona

Aviso

API para desenvolvimento. Não utilize em produção.

Transcrição síncrona de 1 arquivo, limitada a duração do em até 120 segundos. A transcrição é iniciada imediatamente, e o arquivo é apagado ao final do processo. O sistema não armazena o resultado da transcrição. O sistema deve contabilizar a duração do áudio para cobrança, registrando o nome e tag.

Requisição

POST /trd/v3/transcribe
Query
  • Tag (opcional)
Header
  • X-License-ID
Request Body
  • Arquivo binário
  • Configuração
Response
  • 200 - Resultado da transcrição
  • 413 - Audio muito longo
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 422 - Erro de validação
  • 503 - Servidor ocupado
Resultado

O resultado é um objeto que denominamos de JOB que possue os seguintes atributos.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • started_at: timestamp do inicio do processo de transcrição
  • diarized_at: timestamp do final do processo de diarização
  • completed_at: timestamp do final do processo de transcrição
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento

Exemplos

Chamada REST:

curl -X POST "http://localhost:8000/trd/v3/transcribe?tag=novo"
-H  "accept: application/json"
-H  "Content-Type: multipart/form-data"
-F "config="
-F "callback_urls="
-F "upload_file=@<file_path>;type=audio/wav"

Resultado JSON:

{
   "job":{
      "id":"5fc8e4b8eee464d8c64c7fd9",
      "filename":"nas.wav",
      "status":"COMPLETED",
      "created_at":"2020-12-03T10:14:32.636000-03:00",
      "started_at":"2020-12-03T10:14:32.704000-03:00",
      "diarized_at":"2020-12-03T10:14:33.053000-03:00",
      "completed_at":"2020-12-03T10:14:33.697000-03:00",
      "tag":"novo",
      "callback_urls":[
         
      ],
      "media":{
         "md5":"18eef3c06a975dc8cd1adad4ae662824",
         "size":72544,
         "input":{
            "sample_rate":8000,
            "channels":1,
            "bit_rate":128000,
            "format":"Wave",
            "codec":""
         },
         "output":{
            "redundant_channel":false,
            "channels":[
               {
                  "channel":1,
                  "duration":4.531,
                  "speech":3.2590000000000003,
                  "bandwidth":4000
               }
            ]
         }
      },
      "config":{
         "diarization":{
            "vad":{
               "chunk_max_silence":1200.0,
               "chunk_max_length":3600.0
            },
            "clustering":{
               "threshold":-0.4,
               "enabled": true
            }
         },
         "recognition":{
            "params":{
               
            },
            "lm":"builtin:slm/callcenter-small"
         }
      }
   }
}

API JOB assíncrona

Transcrição assíncrona de 1 arquivo. É criado um processo de transcrição (job) e é iniciado, sendo inserido na fila de processamento.

Requisição

POST /trd/v3/job/create
Query
  • Tag (opcional)
Header
  • X-License-ID (opcional)
Request Body
  • Arquivo binário
  • Configuração (opcional)
  • callback_urls: (opcional: api webhook)
Response
  • 200 - Resultado da transcrição
  • 201 - JOB criado
  • 413 - Audio muito longo
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 422 - Erro de validação
  • 503 - Servidor ocupado
Regras
  • Recebe o arquivo binário, usa o header licence-id para selecionar database para gravar o arquivo.
  • Cria um job, armazena no database e envia para a fila de normalização.
Resultado

O resultado é um objeto que denominamos de JOB que possue os seguintes atributos.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento

Exemplos

Chamada REST:

curl -X POST "http://localhost:8000/trd/v3/job/create"
-H  "accept: application/json"
-H  "Content-Type: multipart/form-data"
-F "config="
-F "callback_urls="
-F "upload_file=@<file_path>;type=audio/wav"

Resultado JSON:

{
   "job":{
      "id":"5fc900c5eee464d8c64c7fe5",
      "filename":"nas.wav",
      "status":"QUEUED",
      "created_at":"2020-12-03T12:14:13.413663-03:00",
      "tag":"novo",
      "callback_urls":[
         
      ],
      "media":{
         "md5":"18eef3c06a975dc8cd1adad4ae662824",
         "size":72544
      },
      "config":{
         "diarization":{
            "vad":{
               "chunk_max_silence":1200.0,
               "chunk_max_length":3600.0
            },
            "clustering":{
               "threshold":-0.4,
               "enabled": true
            }
         },
         "recognition":{
            "params":{
               
            },
            "lm":"builtin:slm/callcenter-small"
         }
      }
   },
   "segments": []
}

API Lista JOB

Retorna a lista de todos jobs criados para determinado License-ID.

Requisição

GET /trd/v3/job
Query
  • Tag (opcional)
  • Page (opcional)
  • Limit (opcional, máximo 1000)
Header
  • X-License-ID
Response
  • 200 - Resultado da consulta
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 404 - Não encontrado
  • 422 - Erro de validação
Resultado

O resultado é um objeto que denominamos de JOB que possue os seguintes atributos.

  • page: numero da pagina que será retornada
  • limit: numero de item resultantes por pagina
  • total: numero total de jobs
  • result: lista com todos os jobs

Chamada REST:

curl -X GET "http://localhost:8000/trd/v3/job?page=1&limit=1"
-H  "accept: application/json"

Resultado JSON:

{
  "page": 1,
  "limit": 1,
  "total": 19,
  "results": [
    {
      "job": {
        "id": "5fc7baefeee464d8c64c7e1a",
        "filename": "nas.wav",
        "status": "COMPLETED"
      }
    }
  ]
}

API Status JOB

Retorna o status do processo de transcrição.

Requisição

GET /trd/v3/job/status/<id>
Header
  • X-License-ID
Path
  • id: id do processo
Response
  • 200 - Resultado da transcrição
  • 400 - Solicitação invalida
  • 403 - Acesso proibido
  • 404 - Não encontrado
  • 422 - Erro de validação
Resultado

O resultado é um objeto que denominamos de JOB que possue os seguintes atributos.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • started_at: timestamp do inicio do processo de transcrição
  • diarized_at: timestamp do final do processo de diarização
  • completed_at: timestamp do final do processo de transcrição
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento

Exemplos

Chamada REST:

curl -X GET "http://localhost:8000/trd/v3/job/status/<id>"
-H  "accept: application/json"

Resultado JSON:

{
  "job": {
    "id": "5fc7c1dceee464d8c64c7e9c",
    "filename": "big.wav",
    "status": "COMPLETED",
    "created_at": "2020-12-02T13:33:32.713000-03:00",
    "started_at": "2020-12-02T13:33:33.491000-03:00",
    "diarized_at": "2020-12-02T13:34:14.126000-03:00",
    "completed_at": "2020-12-02T13:35:43.139000-03:00",
    "callback_urls": [],
    "media": {
      "md5": "633644fdd31a0bbbbb5ffa6fd3fa1417",
      "size": 32958764,
      "input": {
        "sample_rate": 8000,
        "channels": 1,
        "bit_rate": 128000,
        "format": "Wave",
        "codec": ""
      },
      "output": {
        "redundant_channel": false,
        "channels": [
          {
            "channel": 1,
            "duration": 2059.92,
            "speech": 363.5129999999991,
            "bandwidth": 4000
          }
        ]
      }
    },
    "config": {
      "diarization": {
        "vad": {
          "chunk_max_silence": 1200,
          "chunk_max_length": 3600
        },
        "clustering":{
          "threshold":-0.4,
          "enabled": true
        }
      },
      "recognition": {
        "params": {},
        "lm": "builtin:slm/callcenter-small"
      }
    }
  }
}

API Resultado JOB

Obtém o resultado da transcrição de um arquivo finalizado.

Requisição

GET /trd/v3/job/result/<id>
Query
  • Format (csv opcional)
Header
  • X-License-ID
Path
  • id: id do processo
Response
  • 102 - Em processo
  • 200 - Resultado da transcrição
  • 400 - Solicitação invalida
  • 403 - Acesso proibido
  • 404 - Não encontrado
  • 422 - Erro de validação
Resultado

Retorna um JSON ou um CSV com a transcrição do arquivo.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • started_at: timestamp do inicio do processo de transcrição
  • diarized_at: timestamp do final do processo de diarização
  • completed_at: timestamp do final do processo de transcrição
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento
  • segments: lista com os trechos da transcriação

Chamada REST:

curl -X GET "http://localhost:8000/trd/v3/job/result/<id>"
-H  "accept: text/csv"
curl -X GET "http://localhost:8000/trd/v3/job/result/<id>?format=csv"
-H  "accept: text/csv"

Resultado JSON:

{
  "job": {
    "id": "5fc90f68eee464d8c64c7ff7",
    "filename": "nas.wav",
    "status": "COMPLETED",
    "created_at": "2020-12-03T13:16:40.468000-03:00",
    "started_at": "2020-12-03T13:16:40.576000-03:00",
    "diarized_at": "2020-12-03T13:16:40.926000-03:00",
    "completed_at": "2020-12-03T13:16:41.572000-03:00",
    "tag": "teste",
    "callback_urls": [],
    "media": {
      "md5": "18eef3c06a975dc8cd1adad4ae662824",
      "size": 72544,
      "input": {
        "sample_rate": 8000,
        "channels": 1,
        "bit_rate": 128000,
        "format": "Wave",
        "codec": ""
      },
      "output": {
        "redundant_channel": false,
        "channels": [
          {
            "channel": 1,
            "duration": 4.531,
            "speech": 3.2590000000000003,
            "bandwidth": 4000
          }
        ]
      }
    },
    "config": {
      "diarization": {
        "vad": {
          "chunk_max_silence": 1200,
          "chunk_max_length": 3600
        },
        "clustering":{
          "threshold":-0.4,
          "enabled": true
      },
      "recognition": {
        "params": {},
        "lm": "builtin:slm/callcenter-small"
      }
    }
  },
  "segments": [
    {
      "channel": 1,
      "speaker": "1",
      "start": 0.861,
      "end": 4.12,
      "status": "RECOGNIZED",
      "alternatives": [
        {
          "text": "a minha filha nasceu hoje ela tem dez anos",
          "words": [
            {
              "text": "a",
              "score": 98,
              "start_time": 0.000314649,
              "end_time": 0.0899809
            },
            {
              "text": "minha",
              "score": 100,
              "start_time": 0.0899809,
              "end_time": 0.45
            },
            {
              "text": "filha",
              "score": 100,
              "start_time": 0.45,
              "end_time": 0.87
            },
            {
              "text": "nasceu",
              "score": 100,
              "start_time": 0.87,
              "end_time": 1.3199999
            },
            {
              "text": "hoje",
              "score": 100,
              "start_time": 1.3199999,
              "end_time": 1.77
            },
            {
              "text": "ela",
              "score": 98,
              "start_time": 1.86,
              "end_time": 2.1299999
            },
            {
              "text": "tem",
              "score": 99,
              "start_time": 2.1299999,
              "end_time": 2.339976
            },
            {
              "text": "dez",
              "score": 100,
              "start_time": 2.34,
              "end_time": 2.6699998
            },
            {
              "text": "anos",
              "score": 100,
              "start_time": 2.6699998,
              "end_time": 3.12
            }
          ],
          "score": 99,
          "lm": "builtin:slm/callcenter-small"
        }
      ]
    }
  ]
}

API Parar JOB

Interrompe o processo de transcrição.

Requisição

POST /trd/v3/job/stop/<id>
Header
  • X-License-ID
Path
  • id: id do processo
Response
  • 200 - Resultado da transcrição
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 404 - Não encontrado
  • 422 - Erro de validação
Regras
  • Pelo job id, recupera o Job e “interrompe”, muda o status para STOPPED.
  • Interrompe apenas quando o status for QUEUED ou IN_PROGRESS.
Resultado

Retorna o objeto JOB com o formato JSON com o status do arquivo atualizado.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • started_at: timestamp do inicio do processo de transcrição
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento

Chamada REST:

curl -X POST "http://localhost:8000/trd/v3/job/stop/<id>"
-H  "accept: application/json"

Resultado JSON:

{
  "job": {
    "id": "5fc91173eee464d8c64c807b",
    "filename": "big.wav",
    "status": "STOPPED",
    "created_at": "2020-12-03T13:25:23.378000-03:00",
    "started_at": "2020-12-03T13:25:24.192000-03:00",
    "callback_urls": [],
    "media": {
      "md5": "633644fdd31a0bbbbb5ffa6fd3fa1417",
      "size": 32958764,
      "input": {
        "sample_rate": 8000,
        "channels": 1,
        "bit_rate": 128000,
        "format": "Wave",
        "codec": ""
      },
      "output": {
        "redundant_channel": false,
        "channels": [
          {
            "channel": 1,
            "duration": 2059.92,
            "bandwidth": 4000
          }
        ]
      }
    },
    "config": {
      "diarization": {
        "vad": {
          "chunk_max_silence": 1200,
          "chunk_max_length": 3600
        },
        "clustering":{
          "threshold":-0.4,
          "enabled": true
        }
      },
      "recognition": {
        "params": {},
        "lm": "builtin:slm/callcenter-small"
      }
    }
  }
}

API Retornar JOB

Inicia um novo processo de transcrição para um arquivo cujo processo foi interrompido ou falhou.

Requisição

POST /trd/v3/job/retry/<id>
Header
  • X-License-ID
Path
  • id: id do processo
Response
  • 200 - Resultado da transcrição
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 404 - Não encontrado
  • 422 - Erro de validação
Regras
  • Pelo job id, recupera o Job e cria um novo job com o mesmo arquivo de áudio.
  • Deleta o job id antigo
  • O status necessário para esse método são FAILED ou STOPPED
Resultado

Retorna o objeto JOB com um novo id.

  • id: identificador único do processo de transcrição
  • filename: nome do arquivo
  • status: estado do processo de transcrição
  • create_at: timestamp do momento de upload do arquivo
  • tag: identificador opcional do arquivo
  • callback_urls: endereços para o webhook
  • media: objeto que reuni informações de media do arquivo transcrito, como seu tamanho, numero de canais e formato
  • config: objeto que reuni informações de configuração, dos processo de diarização e reconhecimento

Chamada REST:

curl -X POST "http://localhost:8000/trd/v3/job/retry/<id>"
-H  "accept: application/json"

Resultado JSON:

{
  "job": {
    "id": "5fc91355eee464d8c64c807e",
    "filename": "big.wav",
    "status": "QUEUED",
    "created_at": "2020-12-03T13:33:25.522402-03:00",
    "callback_urls": [],
    "media": {
      "md5": "633644fdd31a0bbbbb5ffa6fd3fa1417",
      "size": 32958764
    },
    "config": {
      "diarization": {
        "vad": {
          "chunk_max_silence": 1200,
          "chunk_max_length": 3600
        },
        "clustering":{
          "threshold":-0.4,
          "enabled": true
        }
      },
      "recognition": {
        "params": {},
        "lm": "builtin:slm/callcenter-small"
      }
    }
  }
}

API Remover JOB

Apaga um processo que foi interrompido, falhou ou terminou.

Requisição

DELETE /trd/v3/job/<id>
Header
  • X-License-ID
Path
  • id: id do processo
Response
  • 200 - JOB removido
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 404 - Não encontrado
  • 422 - Erro de validação
Resultado
Não existem retorno no corpo da requisição HTTP alem do status 200.

Chamada REST:

curl -X DELETE "http://localhost:8000/trd/v3/job/<id>"
-H  "accept: application/json"

API Consulta

Permite recuperar os registros dos Jobs, utilizando campos do registro como filtros. É possível também definir quais campos devem ser recuperados, através do recurso de projeção.

Requisição

GET /trd/v3/query/job?result=<result>&tag=<tag>&filename=<filename>&status=<status>&start_date=<start>&end_date=<end>&page=<page>&limit=<limit>
Header
  • X-License-ID
Path
  • result (opcional)
  • tag (opcional)
  • filename (opcional)
  • status (opcional)
  • start_date (opcional)
  • end_date (opcional)
  • page (opcional)
  • limit (opcional)
Response
  • 200 - Resultado da consulta
  • 400 - Solicitação invalida
  • 401 - Não autorizado
  • 404 - Não encontrado
  • 422 - Erro de validação
Regras
  • Através da query recuperar os jobs.
Resultado

O resultado é um objeto que denominamos de JOB que possue os seguintes atributos.

  • page: numero da pagina que será retornada
  • limit: numero de item resultantes por pagina
  • total: numero total de jobs que se adequam a consulta
  • result: lista com todos os jobs

Chamada REST:

curl -X GET "http://localhost:8000/trd/v3/query/job?result=false&status=COMPLETED&start_date=2020-08-31T15%3A53%3A00-03%3A00&end_date=2021-08-31T15%3A53%3A00-03%3A00&page=1&limit=1"
-H  "accept: application/json"

Resultado JSON:

{
  "page": 1,
  "limit": 1,
  "total": 21,
  "results": [
    {
      "job": {
        "id": "5fc7baefeee464d8c64c7e1a",
        "filename": "nas.wav",
        "status": "COMPLETED",
        "created_at": "2020-12-02T13:03:59.801000-03:00",
        "started_at": "2020-12-02T13:04:04.082000-03:00",
        "diarized_at": "2020-12-02T13:04:05.041000-03:00",
        "completed_at": "2020-12-02T13:04:06.254000-03:00",
        "callback_urls": [],
        "media": {
          "md5": "18eef3c06a975dc8cd1adad4ae662824",
          "size": 72544,
          "input": {
            "sample_rate": 8000,
            "channels": 1,
            "bit_rate": 128000,
            "format": "Wave",
            "codec": ""
          },
          "output": {
            "redundant_channel": false,
            "channels": [
              {
                "channel": 1,
                "duration": 4.531,
                "speech": 3.2590000000000003,
                "bandwidth": 4000
              }
            ]
          }
        },
        "config": {
          "diarization": {
            "vad": {
              "chunk_max_silence": 1200,
              "chunk_max_length": 3600
            },
            "clustering":{
              "threshold":-0.4,
              "enabled": true
            }
          },
          "recognition": {
            "params": {},
            "lm": "builtin:slm/callcenter-small"
          }
        }
      }
    }
  ]
}