我正在尝试使用Watson语音转文本服务,该服务需要根据documentation
为websocket接口使用以下命令var token = {authentication-token};
var wsURI = 'wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize'
+ '?watson-token=' + token
+ '&model=es-ES_BroadbandModel';
我已经尝试过使用终端上的curl命令来获取{authentication-token}
curl -X GET --user "apikey:{apikey}" "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/text-to-speech/api"
上面的命令产生
错误:{“代码”:401,“错误”:“未经授权”,“描述”:“ ERCD250-LDAP-DN-AUTHERR”}
找不到合适的文档,其中包括IBM Watson团队撰写的recent changes之后似乎超出范围的几篇文章。
问题:如何获得authentication-token
才能正确连接到Watson Web套接字?
答案 0 :(得分:1)
要获取authentication-token
,您需要运行以下 cURL命令。可以在连接之前将其包含在您的程序中(Websocket握手)。
curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded" --header "Accept: application/json" --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" --data-urlencode "apikey={your apikey}" "https://iam.bluemix.net/identity/token"
点击此链接以获取更多详细信息-https://console.bluemix.net/docs/services/watson/getting-started-iam.html
对于C ++用户-您可以按以下内容添加
#include <curl/curl.h>
main(){
//step 1- Initialise curl library
//step 2- Set header
curl_slist_append(headers,"Accept: application/json");
//step 3- Set Post request data
curl_slist_append(postdata,"grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={my apikey}");
//step 4- setup cURL request
curl_easy_setopt(curl, CURLOPT_URL,"https://iam.bluemix.net/identity/token");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
/*Write callbacks to use the response in your authentication*/
res = curl_easy_perform(curl);
curl_slist_free_all(headers);
// always cleanup
curl_easy_cleanup(curl);
在callback内部,使用变量token
来保存已解析的响应
token = "Bearer<space><ParsedResponse>";
此字符串应用作 websoket握手
的请求标头答案 1 :(得分:0)
如语音转文本 API文档中所述,
您不能使用JavaScript从以下位置调用WebSocket接口: 浏览器。 watson-token参数可用于 / v1 / recognize方法不接受IAM令牌或API密钥。对于 有关解决此限制的信息,请参见Release notes。
这是已知的限制,
语音转文字服务具有以下已知限制。
使用IAM身份验证的服务实例当前无法使用 使用JavaScript调用语音转文本WebSocket接口。这个 限制适用于以下任何应用程序(例如服务演示) 使用JavaScript从浏览器进行WebSocket调用。 WebSocket 使用其他语言进行的调用可以使用IAM令牌或API 键。要变通解决此限制,您可以执行以下操作:
从浏览器外部调用WebSocket接口。你可以打电话 支持WebSockets的任何语言的接口。参考 WebSocket界面中的信息,以在使用时提供指导 另一种语言。
Watson SDK提供了最简单的调用WebSocket的方法 其他语言的界面。 SDK接受API密钥并进行管理 令牌的生命周期。有关使用WebSocket的信息 与Node.js,Java,Python和Ruby SDK的接口,请参见API reference。
使用同步或异步HTTP接口执行语音 识别。
如果您有使用Cloud Foundry凭据(用户名和密码)的旧版语音转换为文本服务,则可以向watson-token
发出Curl请求
curl -u {USERNAME}:{PASSWORD}"https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api"
即使在API文档中Curl下的 watson-token 参数下也对此进行了记录
提供服务的身份验证令牌。使用的令牌是 基于Cloud Foundry服务凭据。不通过IAM访问 带有此参数的令牌或API密钥。
更新:不能从curl调用WebSocket接口。使用客户端脚本语言调用该接口。您可以从Python SDK-https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/microphone-speech-to-text.py
中找到本示例中的每种编程语言SDK中用于流音频的代码示例。更新2019-02-09
根据发布文档,现在再次可以从浏览器向websocket API进行身份验证。请参阅:https://cloud.ibm.com/docs/services/speech-to-text/release-notes.html#release-notes,以了解2019年1月28日的发布。 但是,无法从浏览器中使用API密钥获取身份验证令牌(出于安全原因,CORG对此进行了阻止)。 因此,使这项工作: -获取达拉斯的api令牌(未使其在其他地区正常工作,好像lib被硬编码设置为达拉斯服务器) -使用后端应用程序通过您的api密钥获取身份验证令牌 -通过语音-javascript-sdk直接在浏览器中使用身份验证令牌