A interface de HTTP assíncrona
A interface de HTTP assíncrona do serviço do IBM Watson® Speech to Text fornece métodos para transcrição de áudio por meio de chamadas sem bloqueio para o serviço. A interface emprega sequências secretas especificadas pelo usuário e assinaturas digitais para fornecer um nível de segurança para solicitações que são feitas por meio do protocolo HTTP. Para usar a interface assíncrona, é possível
- Registre uma URL de retorno de chamada para ser notificado pelo serviço do status da tarefa e os resultados automaticamente.
- Pesquise o serviço para obter o status da tarefa e os resultados manualmente.
As duas abordagens não são mutuamente exclusivas. É possível optar por receber notificações de retorno de chamada, mas ainda pesquisar o serviço para obter o status mais recente ou entrar em contato com o serviço para recuperar os resultados manualmente. As seções a seguir descrevem como usar a interface de HTTP assíncrona com qualquer abordagem.
Submeta um máximo de 1 GB e um mínimo de 100 bytes de dados de áudio com uma única solicitação. Para obter informações sobre formatos de áudio e uso de compactação para maximizar a quantidade de áudio que pode ser enviada com uma solicitação, consulte Formatos de áudio suportados. Para obter mais informações sobre os métodos individuais da interface, consulte a referência da API e do SDK.
A interface HTTP assíncrona não suporta reconhecimento de voz multipartes. A interface HTTP síncrona pode ser usada somente para solicitações de multipartes. Para obter mais informações, consulte Fazendo uma solicitação de reconhecimento de voz HTTP multipartes.
Modelos de uso
Quando você trabalhar com a interface assíncrona de HTTP do serviço, será possível optar por aprender sobre o status da tarefa e receber resultados das maneiras a seguir:
- Usando notificações de retorno de chamada:
- Chame o método
POST /v1/register_callbackpara registrar uma URL de retorno de chamada com o serviço. É possível fornecer uma sequência secreta especificada pelo usuário opcional para ativar a autenticação e a integridade de dados para retornos de chamada que são enviados para a URL. - Chame o método
POST /v1/recognitionscom uma URL de retorno de chamada já registrada para a qual o serviço envia notificações quando o status da tarefa muda. Você especifica uma lista de eventos dos quais deve ser notificado. Por padrão, o serviço envia notificações quando uma tarefa é iniciada, quando ela é concluída e se ocorre um erro. Também é possível solicitar os resultados da solicitação na notificação de conclusão. Caso contrário, será necessário usar o métodoGET /v1/recognitions/{id}para recuperar os resultados.
- Chame o método
- Ao pesquisar o serviço:
- Chame o método
POST /v1/recognitionssem uma URL de retorno de chamada, eventos ou um token do usuário. - Periodicamente, chame o método
GET /v1/recognitionspara verificar o status das tarefas mais recentes ou o métodoGET /v1/recognitions/{id}para verificar o status de uma tarefa específica. - Se você verificar o status da tarefa com o método
GET /v1/recognitions, chame o métodoGET /v1/recognitions/{id}para recuperar os resultados da tarefa depois que ela estiver concluída.
- Chame o método
As duas abordagens podem ser usadas juntas. Ainda é possível pesquisar o serviço para obter o status mais recente para uma tarefa que é criada com uma URL de retorno de chamada. Por exemplo, você poderá desejar obter o status de uma tarefa se as notificações estiverem levando um tempo para chegar. Você também poderá verificar o status se suspeitar que perdeu uma ou mais notificações devido a um erro de serviço ou de rede.
Registrando uma URL de retorno de chamada
Você registra uma URL de retorno de chamada ao chamar o método POST /v1/register_callback. Depois de registrar uma URL de retorno de chamada, é possível usá-la para receber notificações para um número indefinido de tarefas. O processo
de registro inclui quatro etapas:
-
Você chama o método
POST /v1/register_callbacke passa uma URL de retorno de chamada. Opcionalmente, é possível especificar também um segredo especificado pelo usuário. O serviço usa o segredo para calcular assinaturas de código de autenticação de mensagem de hash com chave (HMAC) Secure Hash Algorithm ( SHA-256 ) para autenticação e integridade de dados. O exemplo a seguir registra um retorno de chamada do usuário que responde na URLhttp://{user_callback_path}/results. A chamada inclui um segredo do usuário deThisIsMySecret.IBM Cloud
curl -X POST -u "apikey:{apikey}" \ "{url}/v1/register_callback?callback_url=http://{user_callback_path}/results&user_secret=ThisIsMySecret"IBM Cloud Pak for Data IBM Software Hub
curl -X POST \ --header "Authorization: Bearer {token}" \ "{url}/v1/register_callback?callback_url=http://{user_callback_path}/results&user_secret=ThisIsMySecret" -
O serviço tentará validar a URL de retorno de chamada ou incluí-la na lista de permissões, se ela ainda não estiver registrada, enviando uma solicitação
GETpara ela. O serviço passa uma sequência de desafio alfanumérica aleatória por meio do parâmetro de consultachallenge_stringda solicitação. A solicitação inclui um cabeçalhoAcceptque especificatext/plaincomo o tipo de resposta necessário.Se a chamada para o método
register_callbackincluiu um segredo de usuário, a solicitaçãoGETdo serviço também inclui um cabeçalhoX-Callback-Signatureque especifica a assinatura HMAC-SHA256 da string de desafio. O serviço calcula a assinatura usando o segredo do usuário como a chave.GET http://{user_callback_path}/results?challenge_string=n9ArPGMQ36Hiu7QC header: X-Callback-Signature {HMAC-SHA256_signature} -
Você responde à solicitação
GETpor meio do serviço com código de status 200. Inclua a sequência de desafio que foi enviada pelo serviço na resposta. Inclua a sequência em texto simples no corpo da resposta e configure o cabeçalho de respostaContent-Typeparatext/plain.Se a solicitação inicial
POSTincluir um segredo de usuário, você poderá calcular uma assinatura HMAC-SHA256 da string de desafio usando o segredo como chave. Se a solicitaçãoGETfoi enviada pelo serviço, a assinatura corresponderá ao valor especificado pelo cabeçalhoX-Callback-Signature.response code: 200 OK body: n9ArPGMQ36Hiu7QC -
O serviço verifica se a sequência de desafio é retornada no corpo da resposta para a sua solicitação
GET. Se for, o serviço incluirá a URL de retorno de chamada na lista de permissões e responderá à sua solicitação original dePOSTcom o código de status 201. O corpo da resposta inclui um objeto JSON com um campostatusque tem o valorcreatede um campourlque tem o valor de sua URL de retorno de chamada.response code: 201 Created body: { "status": "created", "url": "http://{user_callback_path}/results" }
O serviço envia apenas uma única solicitação GET para uma URL de retorno de chamada durante o processo de registro. O serviço deve receber uma resposta com o código de resposta 200 que inclui a sequência de desafio em seu corpo
dentro de cinco segundos. Caso contrário, ele não inclui a URL na lista de permissões. Em vez disso, ele envia o código de status 400 em resposta para a solicitação POST /v1/register_callback. Se a URL de retorno de chamada já
tiver sido incluída na lista de permissões com sucesso, o serviço enviará o código de status 200 em resposta à solicitação de POST inicial.
Considerações de segurança
Ao usar o método POST /v1/register_callback com sucesso para registrar uma URL de retorno de chamada, o serviço inclui a URL na lista de permissões para indicar que ela está verificada para uso com notificações de retorno de chamada.
Se você especificar um segredo do usuário com a chamada de registro, a inclusão na lista de permissões também significará que a URL foi validada para segurança agregada. Especificar um segredo do usuário fornece autenticação e integridade
de dados para solicitações que usam a URL de retorno de chamada com a interface de HTTP assíncrona.
O serviço usa o segredo do usuário para calcular uma assinatura HMAC-SHA256 sobre a carga útil de cada notificação de retorno de chamada que envia para URL. O serviço envia a assinatura por meio do cabeçalho X-Callback-Signature com cada notificação. O cliente pode usar o segredo para calcular sua própria assinatura de cada carga útil de notificação. Se a sua assinatura corresponder ao valor do cabeçalho X-Callback-Signature, o cliente saberá que a
notificação foi enviada pelo serviço e que seu conteúdo não foi alterado durante a transmissão. Esse conhecimento garante que o cliente não é a vítima de um ataque man-in-middle.
HTTPS é ideal para aplicativos de produção. Mas durante o desenvolvimento do aplicativo e a criação de protótipo, as notificações de retorno de chamada baseadas em HTTP que são suportadas pelo serviço podem simplificar e acelerar o processo de desenvolvimento, evitando a despesa de HTTPS.
Cancelando o registro de uma URL de retorno de chamada
É possível cancelar o registro de uma URL de retorno de chamada incluída na lista de permissões a qualquer momento, chamando o método POST /v1/unregister_callback. Cancelar o registro de uma URL de retorno de chamada pode ser
útil para testar seu aplicativo com o serviço. Depois de cancelar o registro de uma URL de retorno de chamada, não será mais possível utilizá-la com solicitações de reconhecimento assíncrono.
Exemplo de cancelar o registro de uma URL de retorno de chamada
O exemplo a seguir cancela o registro de uma URL de retorno de chamada anteriormente registrada:
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
"{url}/v1/unregister_callback?callback_url=http://{user_callback_path}/results"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
"{url}/v1/unregister_callback?callback_url=http://{user_callback_path}/results"
Criando uma tarefa
Crie uma tarefa de reconhecimento chamando o método POST /v1/recognitions. Como você aprende o status e os resultados da tarefa depende da abordagem que você usa e dos parâmetros que passa:
- Para usar as notificações de retorno de chamada, inclua o parâmetro de consulta
callback_urlpara especificar uma URL para a qual o serviço deve enviar notificações de retorno de chamada quando o status das mudanças da tarefa muda. Também é possível especificar os parâmetros de consulta opcionais a seguir:eventspara assinar uma lista de eventos de notificação. Por padrão, o serviço envia notificações de retorno de chamada quando a tarefa é iniciada (o eventorecognitions.started), quando a tarefa é concluída (o eventorecognitions.completed) e se ocorrer um erro (o eventorecognitions.failed). É possível especificar um subconjunto dos eventos ou usar o eventorecognitions.completed_with_resultsem vez do eventorecognitions.completedpara incluir os resultados com a notificação da tarefa concluída.user_tokenpara especificar uma sequência que deve ser incluída com cada notificação para a tarefa. Como é possível usar a mesma URL de retorno de chamada com um número indefinido de tarefas, é possível aproveitar os tokens do usuário para diferenciar notificações para diferentes tarefas.
- Para usar a pesquisa, omita os parâmetros de consulta
callback_url,eventseuser_token. Deve-se, então, usar os métodosGET /v1/recognitionsouGET /v1/recognitions/{id}para verificar o status da tarefa, usando este último para recuperar os resultados quando a tarefa for concluída.
Em ambos os casos, é possível incluir o parâmetro de consulta results_ttl para especificar o número de minutos para os quais os resultados devem permanecer disponíveis após a conclusão da tarefa. A nova tarefa é de propriedade da
instância do serviço cujas credenciais são usadas para criá-la.
Além dos parâmetros anteriores, que são específicos para a interface assíncrona, o método POST /v1/recognitions suporta a maioria dos mesmos parâmetros que as interfaces HTTP síncrona e do WebSocket. Para obter mais informações,
consulte o Resumo de parâmetro.
Notificações de retorno de chamada
Se a tarefa for criada com uma URL de retorno de chamada, o serviço enviará uma notificação de retorno de chamada HTTP POST para a URL registrada quando ocorrer um evento especificado. O corpo de uma notificação básica consiste
em um objeto JSON com a estrutura a seguir:
{
"id": "{job_id}",
"event": "{recognitions_status}",
"user_token": "{user_token}"
}
O campo id identifica o ID da tarefa que gerou o retorno de chamada e o campo event identifica o evento que acionou o retorno de chamada. O campo user_token incluirá o token do usuário para a tarefa,
se um foi especificado. Caso contrário, o campo será uma sequência vazia. Se o evento for recognitions.completed_with_results, o objeto incluirá um campo results que forneça os resultados da solicitação de reconhecimento.
O cliente pode responder à notificação de retorno de chamada com o código de status 200.
Se a URL de retorno de chamada foi registrada com um segredo do usuário, o serviço também enviará o cabeçalho X-Callback-Signature com a notificação de retorno de chamada. O cabeçalho especifica a assinatura HMAC-SHA256 do corpo
da solicitação. O serviço calcula a assinatura usando o segredo do usuário como uma chave. O cliente pode calcular a assinatura da carga útil para a notificação de retorno de chamada para ter certeza de que corresponde à assinatura no cabeçalho.
Por exemplo, o código Python simples a seguir calcula a assinatura na sequência notification_payload:
import hmac
import base64
from hashlib import sha256
# 'user_secret' and 'notification_payload' must be bytes
hashed = hmac.new(user_secret, notification_payload, sha256)
signature = base64.b64encode(hashed.digest()).decode().rstrip('\n')
Exemplo de criar uma tarefa com uma URL de retorno de chamada
O exemplo a seguir cria uma tarefa que está associada à URL de retorno de chamada incluída na lista de permissões anteriormente http://{user_callback_path}/results. O exemplo transmite o token do usuário job25 para
identificar a tarefa em notificações de retorno de chamada que são enviadas pelo serviço. A chamada usa os eventos padrão, portanto, o usuário deverá chamar o método GET /v1/recognitions/{id} para recuperar os resultados quando
o serviço enviar uma notificação de retorno de chamada para indicar que a tarefa está concluída. A chamada configura o parâmetro de consulta timestamps da solicitação de reconhecimento para true.
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/flac" \
--data-binary @{path}audio-file.flac \
"{url}/v1/recognitions?callback_url=http://{user_callback_path}/results&user_token=job25×tamps=true"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/flac" \
--data-binary @{path}audio-file.flac \
"{url}/v1/recognitions?callback_url=http://{user_callback_path}/results&user_token=job25×tamps=true"
O serviço retorna o status da solicitação, que é waiting para indicar que o serviço está preparando a tarefa para processamento. A resposta inclui o horário de criação, o ID da tarefa e a URL na qual obter mais informações sobre
a tarefa.
{
"created": "2016-08-17T19:15:17.926Z",
"id": "4bd734c0-e575-21f3-de03-f932aa0468a0",
"url": "{url}/v1/recognitions/4bd734c0-e575-21f3-de03-f932aa0468a0",
"status": "waiting"
}
Exemplo de criar uma tarefa com pesquisa
O exemplo a seguir cria uma tarefa que não está associada a uma URL de retorno de chamada. O usuário deve pesquisar o serviço para saber quando a tarefa está concluída e, em seguida, recuperar os resultados com o método GET /v1/recognitions/{id}.
Como o exemplo anterior, a chamada configura o parâmetro timestamps da solicitação de reconhecimento para true.
IBM Cloud
curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognitions?timestamps=true"
IBM Cloud Pak for Data IBM Software Hub
curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: audio/wav" \
--data-binary @{path}audio-file.wav \
"{url}/v1/recognitions?timestamps=true"
O serviço retorna um status de processing para indicar que ele já está processando a tarefa, juntamente com o horário de criação, o ID da tarefa e a URL para obter informações sobre a tarefa.
{
"created": "2016-08-17T19:13:23.622Z",
"id": "4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"url": "{url}/v1/recognitions/4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"status": "processing"
}
Verificando o status e recuperando os resultados de uma tarefa
Chame o método GET /v1/recognitions/{id} para verificar o status da tarefa que é especificado com o parâmetro de caminho id. A resposta sempre inclui o ID e o status da tarefa e seus horários de criação e atualização.
Se o status for completed, a resposta também incluirá os resultados da solicitação de reconhecimento.
O método GET /v1/recognitions/{id} é a única maneira de recuperar os resultados da tarefa se
- A tarefa foi enviada sem uma URL de retorno de chamada.
- A tarefa foi enviada com uma URL de retorno de chamada, mas sem especificar o evento
recognitions.completed_with_results. - A tarefa não é uma das 100 tarefas pendentes mais recentes. Quando você omitir o parâmetro de caminho
id, somente as 100 tarefas mais recentes serão retornadas.
No entanto, ainda é possível usar o método para recuperar os resultados para uma tarefa que especificou uma URL de retorno de chamada e o evento recognitions.completed_with_results. É possível recuperar os resultados para qualquer
tarefa quantas vezes você desejar enquanto elas permanecem disponíveis. Uma tarefa e seus resultados permanecem disponíveis até você excluí-los com o método DELETE /v1/recognitions/{id} ou até que o tempo de vida da tarefa expire,
o que ocorrer primeiro. Por padrão, os resultados expiram após uma semana, a menos que você especifique um tempo de vida diferente com o parâmetro results_ttl do método POST /v1/recognitions.
Exemplo de verificar o status da tarefa sem resultados
O exemplo a seguir verifica o status da tarefa com o ID especificado:
IBM Cloud
curl -X GET -u "apikey:{apikey}" \
"{url}/v1/recognitions/{job_id}"
IBM Cloud Pak for Data IBM Software Hub
curl -X GET \
--header "Authorization: Bearer {token}" \
"{url}/v1/recognitions/{job_id}"
A tarefa ainda não está concluída, portanto, a resposta não inclui os resultados.
{
"id": "4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"created": "2016-08-17T19:13:23.622Z",
"updated": "2016-08-17T19:13:24.434Z",
"status": "processing"
}
Exemplo de verificar o status da tarefa com resultados
O exemplo a seguir solicita o status da tarefa com o ID especificado:
IBM Cloud
curl -X GET -u "apikey:{apikey}" \
"{url}/v1/recognitions/{job_id}"
IBM Cloud Pak for Data IBM Software Hub
curl -X GET \
--header "Authorization: Bearer {token}" \
"{url}/v1/recognitions/{job_id}"
A tarefa está concluída, portanto, a resposta inclui os resultados da solicitação.
{
"id": "398fcd80-330a-22ba-93ce-1a73f454dd98",
"results": [
{
"result_index": 0,
"results": [
{
"final": true,
"alternatives": [
{
"transcript": "several tornadoes touch down as a line of severe thunderstorms swept through Colorado on Sunday ",
"timestamps": [
[
"several",
1,
1.52
],
[
"tornadoes",
1.52,
2.15
],
. . .
[
"Sunday",
5.74,
6.33
]
],
"confidence": 0.96
}
]
}
]
}
],
"created": "2016-08-17T19:11:04.298Z",
"updated": "2016-08-17T19:11:16.003Z",
"status": "completed"
}
Verificando o status das tarefas mais recentes
Você chama o método GET /v1/recognitions para verificar o status das tarefas mais recentes. O método retorna o status das 100 tarefas pendentes mais recentes que estão associadas às credenciais com as quais é chamado. O método retorna
o ID e o status de cada tarefa, juntamente com suas horas de criação e atualização. Se uma tarefa foi criada com uma URL de retorno de chamada e um token do usuário, o método também retornará o token do usuário para a tarefa.
A resposta inclui um dos estados a seguir:
waitingse o serviço estiver preparando a tarefa para processamento. Esse status é o estado inicial de todas as tarefas. A tarefa permanece nesse estado até que o serviço tenha a capacidade para começar a processá-la.processingse o serviço estiver processando ativamente a tarefa.completedse o serviço tiver concluído o processamento da tarefa. Se a tarefa especificou uma URL de retorno de chamada e o eventorecognitions.completed_with_results, o serviço enviou os resultados com a notificação de retorno de chamada. Caso contrário, use o métodoGET /v1/recognitions/{id}para obter os resultados.failedse a tarefa falhou por algum motivo.
Uma tarefa e seus resultados permanecem disponíveis até você excluí-los com o método DELETE /v1/recognitions/{id} ou até que o tempo de vida da tarefa expire, o que ocorrer primeiro.
Exemplo de verificar o status das tarefas mais recentes
O exemplo a seguir solicita o status das últimas tarefas mais recentes associadas às credenciais do responsável pela chamada:
IBM Cloud
curl -X GET -u "apikey:{apikey}" \
"{url}/v1/recognitions"
IBM Cloud Pak for Data IBM Software Hub
curl -X GET \
--header "Authorization: Bearer {token}" \
"{url}/v1/recognitions"
O usuário tem três tarefas pendentes em vários estados. A primeira tarefa foi criada com uma URL de retorno de chamada e um token do usuário.
{
"recognitions": [
{
"id": "4bd734c0-e575-21f3-de03-f932aa0468a0",
"created": "2016-08-17T19:15:17.926Z",
"updated": "2016-08-17T19:15:17.926Z",
"status": "waiting",
"user_token": "job25"
},
{
"id": "4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"created": "2016-08-17T19:13:23.622Z",
"updated": "2016-08-17T19:13:24.434Z",
"status": "processing"
},
{
"id": "398fcd80-330a-22ba-93ce-1a73f454dd98",
"created": "2016-08-17T19:11:04.298Z",
"updated": "2016-08-17T19:11:16.003Z",
"status": "completed"
}
]
}
Excluindo uma tarefa
É possível usar o método DELETE /v1/recognitions/{id} para excluir a tarefa que é especificada com o parâmetro de caminho id. Geralmente, você exclui uma tarefa depois de obter seus resultados do serviço. Depois de
excluir uma tarefa, seus resultados não estarão mais disponíveis. Não é possível excluir uma tarefa que o serviço está processando ativamente.
Por padrão, o serviço mantém os resultados de cada tarefa até que o tempo de vida da tarefa expire. O tempo de vida padrão é uma semana, mas é possível usar o parâmetro results_ttl do método POST /v1/recognitions para
especificar o número de minutos que o serviço deve manter os resultados.
Exemplo de excluir uma tarefa
O exemplo a seguir exclui a tarefa com o ID especificado:
IBM Cloud
curl -X DELETE -u "apikey:{apikey}" \
"{url}/v1/recognitions/{job_id}"
IBM Cloud Pak for Data IBM Software Hub
curl -X DELETE \
--header "Authorization: Bearer {token}" \
"{url}/v1/recognitions/{job_id}"