我的在线聊天Bot内部没有输出
await turnContext.sendActivity('No output in Bot? '+this.translateText(turnContext.activity.text));
没有错误消息,并且在日志中我从Microsoft Cognitive Text Translator API服务获得了正确的JSON。但是在Bot Framework仿真器中,我只能得到[object Promise]?
const request = require('request');
const uuidv4 = require('uuid/v4');
const rp = require('request-promise');
class EchoBot {
constructor(conversationState) {
this.conversationState = conversationState;
}
async onTurn(turnContext) {
if (turnContext.activity.type === ActivityTypes.Message) {
// OK
await turnContext.sendActivity(`${ count }: Alex you said "${ turnContext.activity.text }"`);
// not output in Bot?
await turnContext.sendActivity('No output in Bot? '+this.translateText(turnContext.activity.text));
} else {
await turnContext.sendActivity(`[${ turnContext.activity.type } event detected]`);
}
await this.conversationState.saveChanges(turnContext);
}
async translateText(inputText){
let options = {
method: 'POST',
baseUrl: 'https://api.cognitive.microsofttranslator.com/',
url: 'translate',
qs: {
'api-version': '3.0',
'to': 'de'
},
headers: {
'Ocp-Apim-Subscription-Key': subscriptionKey,
'Content-type': 'application/json',
'X-ClientTraceId': uuidv4().toString()
},
body: [{
'text': inputText
}],
json: true,
};
rp(options)
.then(function (repos) {
console.log(JSON.stringify(repos, null, 4));
return JSON.stringify(repos, null, 4);
})
.catch(function (err) {
console.log("error alex");
});
};
}
答案 0 :(得分:0)
由于您使用的是响应承诺包,因此建议您使用async / await而不是then / catch方法。异步/等待方法与BotFramework的流程更加内联,将使您可以将请求中的结果承诺返回给onTurn方法。 translateText
函数应如下所示:
async translateText(inputText){
let options = {
method: 'POST',
baseUrl: 'https://api.cognitive.microsofttranslator.com/',
url: 'translate',
qs: {
'api-version': '3.0',
'to': 'de'
},
headers: {
'Ocp-Apim-Subscription-Key': subscriptionKey,
'Content-type': 'application/json',
'X-ClientTraceId': uuidv4().toString()
},
body: [{
'text': inputText
}],
json: true,
};
const repos = await rp(options);
return repos[0].translations[0].text;
};
请注意,由于translateText
是异步方法,并且返回了一个Promise,因此您必须在函数调用之前添加await。
await turnContext.sendActivity('No output in Bot? ' + await this.translateText(turnContext.activity.text));
希望这会有所帮助!