2
votes

I cannot access the speech-to-text API on IBM Bluemix with curl! I tried the example from the documentation for a sessionless request with curl and it didn't work; I got an invalid userID/password message.

Here is the error I got:

"{ "code" : 401 , "error" : "Not Authorized" , "description" : "2016-10-08T15:22:37-04:00, Error ERCDPLTFRM-DNLKUPERR occurred when accessing https://158.85.132.94:443/speech-to-text/api/v1/recognize?timestamps=true&word_alternatives_threshold=0.9&continuous=true, Invalid UserId and/or Password. Please confirm that your credentials match the end-point you are trying to access. A common error is trying to use credentials from an experimental or beta release against a GA release or vice versa" } "

Can anyone show me a working example of how to get an api sessionless request to speech-to-text api with curl?

3
here examle how i try to request api: [link]pastebin.com/qnpygYwvLem

3 Answers

3
votes

The documentation for sessionless calls is available here.

Make sure you create an instance of the Watson Speech-to-Text services and use the credentials from that service (not your Bluemix user id and password).

You can create the service in the Bluemix UI and get the credentials, or you can create it via command line:

$ cf create-service speech_to_text standard my_service

And then you can create service credentials and get it:

$ cf create-service-key my_service credentials-1

$ cf service-key my_service credentials-1
Getting key credentials-1 for service instance my_service as [email protected]...

{
 "password": "FJXUG6????",
 "url": "https://stream.watsonplatform.net/speech-to-text/api",
 "username": "147e438e-f633-4e40-8351-aaaaaaaaaa"
}

You can then use the username and password from above in your curl script. See curl command and results below (I masked username, password and other fields for security):

$ curl -X POST -v -u '80062070-1f88-4943-9a2a-aaaaaaa':'hwtTg???????' \
> --header 'Content-Type: audio/flac' \
> --data-binary @audio-file1.flac \
> 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true&continuous=true'
*   Trying 158.85.132.94...
* Connected to stream.watsonplatform.net (158.85.132.94) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: *.watsonplatform.net
* Server certificate: GeoTrust SSL CA - G3
* Server certificate: GeoTrust Global CA
* Server auth using Basic with user '80062070-1f88-4943-9a2a-aaaaaaa'
> POST /speech-to-text/api/v1/recognize?timestamps=true&continuous=true HTTP/1.1
> Host: stream.watsonplatform.net
> Authorization: Basic ODAwNjIwNzAtMWY4OC00OTQzLTlhMmEtYzE0OWVmOTJkM2IyOmh3dXXXXXX==
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Type: audio/flac
> Content-Length: 48363
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
< X-Note: Gateway Ack
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< X-Backside-Transport: OK OK
< Connection: Keep-Alive
< Transfer-Encoding: chunked
< Session-Name: LBBROMXYTJZKKEGE-en-US_BroadbandModel
< X-Content-Type-Options: nosniff
< Content-Disposition: inline; filename="result.json"
< X-XSS-Protection: 1
< Date: Sat, 08 Oct 2016 22:45:02 GMT
< Via: 1.1 c6a59f5, 1.1 022614b, HTTP/1.1 d941b9b
< Content-Type: application/json
< Server: -
< Set-Cookie: Watson-REMOVED; path=/speech-to-text/api; secure; HttpOnly
< X-Client-IP: 71.70.244.18
< X-Global-Transaction-ID: 775715492
< X-DP-Watson-Tran-ID: stream-dp02-775715492
< 
{
   "results": [
      {
         "alternatives": [
            {
               "timestamps": [
                  [
                     "the", 
                     0.03, 
                     0.09
                  ], 
                  [
                     "latest", 
                     0.09, 
                     0.6
                  ], 
                  [
                     "weather", 
                     0.6, 
                     0.85
                  ], 
                  [
                     "report", 
                     0.85, 
                     1.52
                  ]
               ], 
               "confidence": 0.98, 
               "transcript": "the latest weather report "
            }
         ], 
         "final": true
      }
   ], 
   "result_index": 0
* Connection #0 to host stream.watsonplatform.net left intact
3
votes

I got the same problem. After many tries, I found that the URL is wrong. Remember the Service Credential info:

{
"url": "https://stream-fra.watsonplatform.net/text-to-speech/api",
"username": "xxxxx-xxxxx-xxxxx-xxxxx",
"password": "yyyyyyy"
}

Then, you must use the URL provided in that info. Following is good request for me:

E:/Curl/curl.exe -X GET -u "xxxxx-xxxxx-xxxxx-xxxxx":"yyyyyyy" --output hello_world.wav "https://stream-fra.watsonplatform.net/text-to-speech/api/v1/synthesize?accept=audio/wav&text=Hello%20world&voice=en-US_AllisonVoice"
2
votes

My problem was that I had curly brackets around my credentials. The tutorial says:

curl -X POST -u {username}:{password}

so I put in my username and password but I left the curly brackets. Works much better without the curly brackets!