Javascript 中的 Watson Text to Speech 的授权问题

Posted

技术标签:

【中文标题】Javascript 中的 Watson Text to Speech 的授权问题【英文标题】:Authorization issue for Watson Text to Speech from Java script 【发布时间】:2018-03-06 02:51:08 【问题描述】:

我正在尝试在 javascript 代码中使用 Watson 文本到语音服务。 但是,我一直在努力让它发挥作用。

如果我使用以下代码:

 $.ajax(
                url: 'https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize',
                type: 'POST',
                headers: "Content-Type": "application/json", "Accept": "audio/*", "Authorization": "Basic SomethingSomethingSomething==",
                text: msgData.message[0].cInfo.text,
                output: 'output.wav',
                success: function()  
                    console.log("text to voice complete"); 
                    var audio = new Audio('output.wav');
                    audio.play();
                
            );

我明白了:

加载失败 https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize: 请求头域 Authorization is not allowed by 预检响应中的 Access-Control-Allow-Headers。

请注意,我可以很容易地从 Restlet 收到这样的请求。

但是,如果我使用:

$.ajax(
                        url: 'https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize',
                        type: 'POST',
                        user: "something": "something",
                        headers: "Content-Type": "application/json", "Accept": "audio/*",
                        data: "text": msgData.message[0].cInfo.body,
                        output: 'output.wav',
                        success: function() 
                                console.log("text to voice complete");
                                var audio = new Audio('output.wav');
                                audio.play();
                        
                );

我明白了:

stream.watsonplatform.net/text-to-speech/api/v1/synthesize:1 POST https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize 401 (Processed)
index.html:1 Failed to load https://stream.watsonplatform.net/text-to-speech/api/v1/synthesize: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://52.207.232.200' is therefore not allowed access. The response had HTTP status code 401.

【问题讨论】:

见***.com/questions/43105146/… 【参考方案1】:

看起来 IBM Watson Text To Speech 确实支持部分 CORS(在您的情况下需要)。请检查该答案: Can't access IBM Watson API locally due to CORS on a Rails/AJAX App

此外,您会在此处找到一个明智的建议,通知您不要在 JavaScript 代码中添加您的 Watson 凭据,而是使用令牌: https://console.bluemix.net/docs/services/watson/getting-started-tokens.html#tokens-for-authentication

当您在客户端工作时,也许尝试 Watson 的 NPM 模块或库(带有示例)将是一个不错的选择:

https://www.npmjs.com/package/watson-speech

https://watson-speech.mybluemix.net/text-to-speech.html

希望这会有所帮助!

【讨论】:

以上是关于Javascript 中的 Watson Text to Speech 的授权问题的主要内容,如果未能解决你的问题,请参考以下文章

实时电话中的 Watson 对话

在IBM Watson Conversation中标识没有任何实体的输入文本

将 WAV 录制到 IBM Watson Speech-To-Text

如何从 javascript 调用 IBM Watson 服务

Watson Speech to Text 无法对数据流音频/wav 进行转码

Watson Speech to Text API 中不返回说话者标签/分类