簡體   English   中英

在Skype上將Bing語音識別API與node.js Bot框架結合使用

[英]Using Bing Speech Recognition API with node.js Bot Framework on Skype

將Skype中的音頻附件發送到我的node.js聊天機器人時,我想使用Bing語音識別API將語音轉換為文本。 我嘗試使用BotBuilder-Samples智能-SpeechToText中的代碼,但是語音識別僅在模擬器中有效。 在Skype中發送音頻/波形文件時,該漫游器完全不響應,而是“您說:天氣如何?”。

我懷疑該問題可能是由於需要JWT令牌才能訪問Skype中的附件。 因此,我嘗試使用BotBuilder-Samples core-ReceiveAttachment中的代碼訪問Skype中的音頻附件,該代碼使用request-promise而不是needle發出HTTP請求。 但是,來自請求承諾的結果不是流,不能由getTextFromAudioStream()函數處理。

我想問一下如何使語音識別與Skype中的音頻附件一起使用。

謝謝,最好的問候!

 // Add your requirements var restify = require("restify"); var builder = require("botbuilder"); var fs = require("fs"); var needle = require("needle"); var request = require("request"); var speechService = require("./speech-service.js"); var Promise = require('bluebird'); var request = require('request-promise').defaults({ encoding: null }); //========================================================= // Bot Setup //========================================================= // Setup Restify Server var server = restify.createServer(); server.listen(process.env.PORT || 3000, function() { console.log("%s listening to %s", server.name, server.url); }); // Create chat bot var connector = new builder.ChatConnector ({ appId: process.env.MICROSOFT_APP_ID, appPassword: process.env.MICROSOFT_APP_PASSWORD }); server.post("/api/messages", connector.listen()); var bot = new builder.UniversalBot(connector); //========================================================= // Bots Middleware //========================================================= // Anytime the major version is incremented any existing conversations will be restarted. bot.use(builder.Middleware.dialogVersion({ version: 1.0, resetCommand: /^reset/i })); //========================================================= // Bots Dialogs //========================================================= bot.dialog("/", [ function (session, results, next) { var msg = session.message; if (hasAudioAttachment(msg)) { // Message with attachment, proceed to download it. // Skype attachment URLs are secured by a JwtToken, so we need to pass the token from our bot. var attachment = msg.attachments[0]; var fileDownload = isSkypeMessage(msg) ? requestWithToken(attachment.contentUrl) : request(attachment.contentUrl); fileDownload.then( function (response) { // Send reply with attachment type & size var reply = new builder.Message(session) .text('Attachment from %s of %s type and size of %s bytes received.', msg.source, attachment.contentType, response.length); session.send(reply); }).catch(function (err) { console.log('Error downloading attachment:', { statusCode: err.statusCode, message: err.response.statusMessage }); }); var stream = isSkypeMessage(msg) ? getAudioStreamWithToken(attachment) : getAudioStream(attachment); speechService.getTextFromAudioStream(stream) .then(text => { session.send("You said: " + text); }) .catch(error => { session.send("Oops! Something went wrong. Try again later."); console.error(error); }); } else { session.send("Did you upload an audio file? I'm more of an audible person. Try sending me a wav file"); } } ]); function getAudioStream(attachment) { return needle.get(attachment.contentUrl, { headers: {'Content-Type': "audio/wav"} }); } function getAudioStreamWithToken(attachment) { var headers = {}; connector.getAccessToken((error, token) => { headers['Authorization'] = 'Bearer ' + token; }); headers['Content-Type'] = attachment.contentType; return needle.get(attachment.contentUrl, { headers: headers }); } // Request file with Authentication Header function requestWithToken(url) { return obtainToken().then(function (token) { return request({ url: url, headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/octet-stream' } }); }); }; // Promise for obtaining JWT Token (requested once) var obtainToken = Promise.promisify(connector.getAccessToken.bind(connector)); function isSkypeMessage(message) { return message.source === "skype"; }; 

訪問附件時,示例中的代碼已經在考慮使用Skype(請參閱此處 )。 我認為您遇到的問題是因為樣本中的密鑰超出了配額。 昨天,示例中添加了一個新的Bing語音密鑰,所以建議您重試。

另外,將很快添加該示例的更新版本。 該代碼目前正在代碼審查中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM