L'interfaccia HTTP asincrona
L'interfaccia HTTP asincrona del servizio IBM Watson® Speech to Text fornisce metodi per la trascrizione dell'audio tramite chiamate non bloccanti al servizio. L'interfaccia utilizza stringhe segrete e firme digitali specificate dall'utente per fornire un livello di sicurezza per le richieste effettuate tramite il protocollo HTTP. Per utilizzare l'interfaccia asincrona, puoi
- Registrare un URL di callback in modo che il servizio notifichi automaticamente lo stato del lavoro e i risultati.
- Eseguire il polling del servizio per ottenere manualmente lo stato del lavoro e i risultati.
I due approcci non si escludono a vicenda. Puoi scegliere di ricevere le notifiche di callback ma anche di eseguire il polling del servizio per lo stato più recente oppure contattare il servizio per richiamare i risultati manualmente. Le seguenti sezioni descrivono come utilizzare l'interfaccia HTTP asincrona con entrambi gli approcci.
Inoltra un massimo di 1 GB e un minimo di 100 byte di dati audio con una singola richiesta. Per informazioni sui formati audio e sull'uso della compressione per massimizzare la quantità di audio da inviare con una richiesta, vedere Formati audio supportati. Per ulteriori informazioni sui singoli metodi dell'interfaccia, consultare il riferimento API e SDK.
L'interfaccia asincrona dell' HTTP e non supporta il riconoscimento vocale in più parti. Per richieste multiple è possibile utilizzare solo l'interfaccia di sincronizzazione dell' HTTP. Per ulteriori informazioni, vedere Come effettuare una richiesta di riconoscimento vocale multiparte(HTTP ).
Modelli di utilizzo
Quando lavori con l'interfaccia HTTP asincrona del servizio, puoi scegliere di conoscere lo stato del lavoro e di ricevere i risultati nei seguenti modi:
- Utilizzando le notifiche di callback:
- Chiama il metodo
POST /v1/register_callbackper registrare un URL di callback con il servizio. Puoi fornire una stringa segreta facoltativa specificata dall'utente per abilitare l'autenticazione e l'integrità dei dati per i callback inviati all'URL. - Chiama il metodo
POST /v1/recognitionscon un URL di callback già registrato a cui il servizio invia le notifiche quando lo stato del lavoro cambia. Specifica un elenco di eventi per i quali ricevere una notifica. Per impostazione predefinita, il servizio invia le notifiche quando un lavoro viene avviato, quando viene completato e se si verifica un errore. Puoi anche richiedere i risultati della richiesta nella notifica di completamento. Altrimenti, devi utilizzare il metodoGET /v1/recognitions/{id}per richiamare i risultati.
- Chiama il metodo
- Eseguendo il polling del servizio:
- Chiama il metodo
POST /v1/recognitionssenza un URL di callback, eventi o token utente. - Chiama periodicamente il metodo
GET /v1/recognitionsper controllare lo stato dei lavori più recenti o il metodoGET /v1/recognitions/{id}per controllare lo stato di un lavoro specifico. - Se controlli lo stato del lavoro con il metodo
GET /v1/recognitions, chiama il metodoGET /v1/recognitions/{id}per richiamare i risultati del lavoro una volta completato.
- Chiama il metodo
I due approcci possono essere utilizzati insieme. Puoi ancora eseguire il polling del servizio per ottenere lo stato più recente per un lavoro creato con un URL di callback. Ad esempio, potresti voler ottenere lo stato di un lavoro se la ricezione delle notifiche richiede troppo tempo. Potresti anche controllare lo stato se sospetti di aver perso una o più notifiche a causa di un errore di servizio o di rete.
Registrazione di un URL di callback
Registra un URL di callback chiamando il metodo POST /v1/register_callback. Una volta registrato un URL di callback, puoi utilizzarlo per ricevere notifiche per un numero indefinito di lavori. Il processo di registrazione comprende
quattro passi:
-
Chiama il metodo
POST /v1/register_callbacke passa un URL di callback. Facoltativamente, puoi anche specificare un segreto specificato dall'utente. Il servizio utilizza il segreto per calcolare le firme HMAC (Keyed-Hash Message Authentication Code) e SHA-256 (Secure Hash Algorithm) per l'autenticazione e l'integrità dei dati. Il seguente esempio registra un callback dell'utente che risponde all'URLhttp://{user_callback_path}/results. La chiamata include il segreto utenteThisIsMySecret.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" -
Il servizio tenta di convalidare, o inserire nell'elenco di tipi consentiti, l'URL di callback se non è già registrato inviando una richiesta
GETall'URL di callback. Il servizio passa una stringa di verifica alfanumerica casuale tramite il parametro di querychallenge_stringdella richiesta. La richiesta include un'intestazioneAcceptche specificatext/plaincome il tipo di risposta richiesto.Se la chiamata al metodo
register_callbackinclude un segreto utente, la richiestaGETdel servizio include anche un'intestazioneX-Callback-Signatureche specifica la firma HMAC-SHA256 della stringa di sfida. Il servizio calcola la firma utilizzando il segreto utente come chiave.GET http://{user_callback_path}/results?challenge_string=n9ArPGMQ36Hiu7QC header: X-Callback-Signature {HMAC-SHA256_signature} -
Rispondi alla richiesta
GETdal servizio con il codice di stato 200. Includi la stringa di verifica inviata dal servizio nella risposta. Includi la stringa in testo semplice nel corpo della risposta e imposta l'intestazione di rispostaContent-Typesutext/plain.Se la richiesta iniziale
POSTincludeva un segreto utente, è possibile calcolare una firma HMAC-SHA256 della stringa di sfida utilizzando il segreto come chiave. Se la richiestaGETè stata inviata dal servizio, la firma corrisponde al valore specificato dall'intestazioneX-Callback-Signature.response code: 200 OK body: n9ArPGMQ36Hiu7QC -
Il servizio controlla se la stringa di verifica viene restituita nel corpo della risposta alla sua richiesta
GET. In tal caso, il servizio inserisce nell'elenco di tipi consentiti l'URL di callback e risponde alla tua richiestaPOSToriginale con il codice di stato 201. Il corpo della risposta include un oggetto JSON con un campostatusche ha il valorecreatede un campourlche ha il valore del tuo URL di callback.response code: 201 Created body: { "status": "created", "url": "http://{user_callback_path}/results" }
Il servizio invia solo una singola richiesta GET a un URL di callback durante il processo di registrazione. Il servizio deve ricevere una risposta con il codice di risposta 200 che include la stringa di verifica nel suo corpo entro
cinque secondi. In caso contrario, non inserisce l'URL nell'elenco di tipi consentiti. Invece, invia il codice di stato 400 in risposta alla richiesta POST /v1/register_callback. Se l'URL di callback è già stato inserito nell'elenco
di tipi consentiti, il servizio invia il codice di stato 200 in risposta alla richiesta POST iniziale.
Considerazioni sulla sicurezza
Quando utilizzi correttamente il metodo POST /v1/register_callback per registrare un URL di callback, il servizio inserisce l'URL nell'elenco di tipi consentiti per indicare che è stato verificato per l'utilizzo con le notifiche
di callback. Se specifichi un segreto utente con la chiamata di registrazione, l'inserimento nell'elenco di tipi consentiti indica anche che l'URL è stato convalidato per una maggiore sicurezza. La specifica di un segreto utente fornisce
l'autenticazione e l'integrità dei dati per le richieste che utilizzano l'URL di callback con l'interfaccia HTTP asincrona.
Il servizio utilizza il segreto dell'utente per calcolare una firma HMAC-SHA256 sul payload di ogni notifica di callback inviata a URL. Il servizio invia la firma tramite l'intestazione X-Callback-Signature con ogni notifica.
Il client può utilizzare il segreto per calcolare la sua propria firma di ogni payload di notifica. Se la sua firma corrisponde al valore dell'intestazione X-Callback-Signature, il client sa che la notifica è stata inviata dal
servizio e che il suo contenuto non è stato modificato durante la trasmissione. Questa conoscenza garantisce che il client non sia vittima di un attacco MITM (man-in-middle).
HTTPS è ideale per le applicazioni di produzione. Tuttavia, durante lo sviluppo e la prototipazione delle applicazioni, le notifiche di callback basate su HTTP supportate dal servizio possono semplificare e accelerare il processo di sviluppo evitando i costi di HTTPS.
Annullamento della registrazione di un URL di callback
Puoi annullare in qualsiasi momento la registrazione di un URL di callback inserito nell'elenco di tipi consentiti chiamando il metodo POST /v1/unregister_callback. L'annullamento della registrazione di un URL di callback può
essere utile per testare la tua applicazione con il servizio. Dopo aver annullato la registrazione di un URL di callback, non puoi più utilizzarlo con le richieste di riconoscimento asincrone.
Annullare la registrazione di una richiamata URL esempio
L'esempio seguente annulla la registrazione di una callback precedentemente registrata URL:
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"
Creazione di un lavoro
Crea un lavoro di riconoscimento chiamando il metodo POST /v1/recognitions. Il modo in cui apprendi lo stato e i risultati del lavoro dipende dall'approccio che utilizzi e dai parametri che passi:
- Per utilizzare le notifiche di callback, includi il parametro di query
callback_urlper specificare un URL a cui il servizio deve inviare le notifiche di callback quando lo stato del lavoro cambia. Puoi anche specificare i seguenti parametri di query facoltativi:eventsper sottoscrivere a un elenco di eventi di notifica. Per impostazione predefinita, il servizio invia notifiche di callback quando il lavoro viene avviato (l'eventorecognitions.started), quando il lavoro viene completato (l'eventorecognitions.completed) e se si verifica un errore (l'eventorecognitions.failed). Puoi specificare un sottoinsieme di eventi o utilizzare l'eventorecognitions.completed_with_resultsanziché l'eventorecognitions.completedper includere i risultati con la notifica di completamento del lavoro.user_tokenper specificare una stringa che deve essere inclusa in ciascuna notifica per il lavoro. Poiché puoi utilizzare lo stesso URL di callback con un numero indefinito di lavori, puoi utilizzare i token utente per differenziare le notifiche per i diversi lavori.
- Per utilizzare il polling, ometti i parametri di query
callback_url,eventseuser_token. Devi quindi utilizzare i metodiGET /v1/recognitionsoGET /v1/recognitions/{id}per controllare lo stato del lavoro, utilizzando l'ultimo metodo per richiamare i risultati al termine del lavoro.
In entrambi i casi, puoi includere il parametro di query results_ttl per specificare il numero di minuti per i quali i risultati devono rimanere disponibili al termine del lavoro. Il nuovo lavoro appartiene all'istanza del servizio
di cui vengono utilizzate le credenziali per crearlo.
Oltre ai parametri precedenti, che sono specifici per l'interfaccia asincrona, il metodo POST /v1/recognitions supporta la maggior parte degli stessi parametri delle interfacce WebSocket e HTTP sincrona. Per ulteriori informazioni,
vedi il Riepilogo dei parametri.
Notifiche di callback
Se il lavoro viene creato con un URL di callback, il servizio invia una notifica di callback HTTP POST all'URL registrato quando si verifica un evento specificato. Il corpo di una notifica di base è costituito da un oggetto JSON
con la seguente struttura:
{
"id": "{job_id}",
"event": "{recognitions_status}",
"user_token": "{user_token}"
}
Il campo id identifica l'ID del lavoro che ha generato il callback e il campo event identifica l'evento che ha attivato il callback. Il campo user_token include il token utente per il lavoro se ne è stato
specificato uno. In caso contrario, il campo è una stringa vuota. Se l'evento è recognitions.completed_with_results, l'oggetto include un campo results che fornisce i risultati della richiesta di riconoscimento.
Il client può rispondere alla notifica di callback con il codice di stato 200.
Se l'URL di callback è stato registrato con un segreto utente, il servizio invia anche l'intestazione X-Callback-Signature con la notifica di callback. L'intestazione specifica la firma HMAC-SHA256 del corpo della richiesta. Il
servizio calcola la firma utilizzando il segreto utente come chiave. Il client può calcolare la firma del payload per la notifica di callback per assicurarsi che corrisponda alla firma nell'intestazione. Ad esempio, il seguente codice Python
semplice calcola la firma sulla stringa 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')
Creare un lavoro con un callback Esempio di URL
Il seguente esempio crea un lavoro associato all'URL di callback precedentemente inserito nell'elenco di tipi consentiti http://{user_callback_path}/results. L'esempio passa il token utente job25 per identificare
il lavoro nelle notifiche di callback inviate dal servizio. La chiamata utilizza gli eventi predefiniti, pertanto l'utente deve chiamare il metodo GET /v1/recognitions/{id} per richiamare i risultati quando il servizio invia
una notifica di callback per indicare che il lavoro è stato completato. La chiamata imposta il parametro di query timestamps della richiesta di riconoscimento su 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"
Il servizio restituisce lo stato della richiesta, che è waiting per indicare che il servizio sta preparando il lavoro per l'elaborazione. La risposta include l'ora di creazione, l'ID lavoro e l'URL dove ottenere maggiori informazioni
sul lavoro.
{
"created": "2016-08-17T19:15:17.926Z",
"id": "4bd734c0-e575-21f3-de03-f932aa0468a0",
"url": "{url}/v1/recognitions/4bd734c0-e575-21f3-de03-f932aa0468a0",
"status": "waiting"
}
Creare un lavoro con esempio di polling
Il seguente esempio crea un lavoro che non è associato a un URL di callback. L'utente deve eseguire il polling del servizio per conoscere quando il lavoro viene completato e quindi richiamare i risultati con il metodo GET /v1/recognitions/{id}.
Come nell'esempio precedente, la chiamata imposta il parametro timestamps della richiesta di riconoscimento su 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"
Il servizio restituisce lo stato processing per indicare che sta già elaborando il lavoro, insieme all'ora di creazione, all'ID lavoro e all'URL per ottenere informazioni sul lavoro.
{
"created": "2016-08-17T19:13:23.622Z",
"id": "4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"url": "{url}/v1/recognitions/4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"status": "processing"
}
Controllo dello stato e richiamo dei risultati di un lavoro
Chiama il metodo GET /v1/recognitions/{id} per controllare lo stato del lavoro specificato con il parametro di percorso id. La risposta include sempre l'ID e lo stato del lavoro e le sue ore di creazione e aggiornamento.
Se lo stato è completed, la risposta include anche i risultati della richiesta di riconoscimento.
Il metodo GET /v1/recognitions/{id} è l'unico modo per richiamare i risultati del lavoro se
- Il lavoro è stato inoltrato senza un URL di callback.
- Il lavoro è stato inoltrato con un URL di callback ma senza specificare l'evento
recognitions.completed_with_results. - Il lavoro non è uno dei 100 ultimi lavori in sospeso. Quando ometti il parametro di percorso
idvengono restituiti solo gli ultimi 100 lavori.
Tuttavia, puoi ancora utilizzare il metodo per richiamare i risultati per un lavoro che ha specificato un URL di callback e l'evento recognitions.completed_with_results. Puoi richiamare i risultati per qualsiasi lavoro tutte le
volte che vuoi mentre rimangono disponibili. Un lavoro e i suoi risultati rimangono disponibili finché non li elimini con il metodo DELETE /v1/recognitions/{id} o finché non scade la durata (TTL) del lavoro, a seconda dell'evento
che si verifica per primo. Per impostazione predefinita, i risultati scadono dopo una settimana, a meno che non specifichi una durata (TTL) diversa con il parametro results_ttl del metodo POST /v1/recognitions.
Controllare lo stato del lavoro senza risultati esempio
L'esempio seguente controlla lo stato del lavoro con l'ID specificato:
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}"
Il lavoro non è stato ancora completato, quindi la risposta non include i risultati.
{
"id": "4bb1dca0-f6b1-11e5-80bc-71fb7b058b20",
"created": "2016-08-17T19:13:23.622Z",
"updated": "2016-08-17T19:13:24.434Z",
"status": "processing"
}
Controllare lo stato del lavoro con risultati esemplificativi
L'esempio seguente richiede lo stato del lavoro con l'ID specificato:
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}"
Il lavoro è stato completato, quindi la risposta include i risultati della richiesta.
{
"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"
}
Controllo dello stato dei lavori più recenti
Chiama il metodo GET /v1/recognitions per controllare lo stato dei lavori più recenti. Il metodo restituisce lo stato dei 100 lavori in sospeso più recenti associati alle credenziali con cui viene chiamato. Il metodo restituisce
l'ID e lo stato di ogni lavoro, insieme alle relative ore di creazione e aggiornamento. Se un lavoro è stato creato con un URL di callback e un token utente, il metodo restituisce anche il token utente per il lavoro.
La risposta include uno dei seguenti stati:
waitingse il servizio sta preparando il lavoro per l'elaborazione. Questo è lo stato iniziale di tutti i lavori. Il lavoro rimane in questo stato finché il servizio non ha la capacità di iniziare a elaborarlo.processingse il servizio sta elaborando attivamente il lavoro.completedse il servizio ha terminato l'elaborazione del lavoro. Se il lavoro ha specificato un URL di callback e l'eventorecognitions.completed_with_results, il servizio ha inviato i risultati con la notifica di callback. In caso contrario, utilizza il metodoGET /v1/recognitions/{id}per ottenere i risultati.failedse il lavoro non è riuscito per qualche motivo.
Un lavoro e i suoi risultati rimangono disponibili finché non li elimini con il metodo DELETE /v1/recognitions/{id} o finché non scade la durata (TTL) del lavoro, a seconda dell'evento che si verifica per primo.
Controllare lo stato degli ultimi lavori, ad esempio
L'esempio seguente richiede lo stato degli ultimi lavori correnti associati alle credenziali del chiamante:
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"
L'utente ha tre lavori in sospeso in vari stati. Il primo lavoro è stato creato con un URL di callback e un token utente.
{
"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"
}
]
}
Eliminazione di un lavoro
Puoi utilizzare il metodo DELETE /v1/recognitions/{id} per eliminare il lavoro specificato con il parametro di percorso id. In genere, elimini un lavoro dopo aver ottenuto i suoi risultati dal servizio. Una volta eliminato
un lavoro, i suoi risultati non sono più disponibili. Non puoi eliminare un lavoro che il servizio sta elaborando attivamente.
Per impostazione predefinita, il servizio mantiene i risultati di ciascun lavoro fino alla scadenza della durata (TTL) del lavoro. La durata predefinita è una settimana, ma puoi utilizzare il parametro results_ttl del metodo POST /v1/recognitions per specificare il numero di minuti in cui il servizio deve mantenere i risultati.
Eliminare un esempio di lavoro
Il seguente esempio elimina il lavoro con l'ID specificato:
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}"