【发布时间】:2018-02-08 15:47:25
【问题描述】:
我正在使用 Azure Web App Bot (Node v 6.9.1),当初始化 Web 聊天中的测试界面时,text 和 textLocale 为空。但是,当从用户接收到第一个输入时, event.textLocale 被分配了一个默认的“en”值,所以我无法在进行语言检测后从 bot.use(receive) 重置一次(因为它不是在这个阶段为空)。
是否有另一种方法可以将 event.textLocale 重置一次,因为我也无法通过任何全局 node.js 变量将语言环境值从 bot.use(receive) 传播到 bot.use(send) 事件?请帮忙,谢谢
app.js 代码段
bot.use({
receive: function (event, next) {
var text = '';
async.waterfall([
function(callback) {
text= event.text;
textLocale = event.textLocale;
request.get(
'http://<<<hostname>>>/translateIntent?intent='+text.toString()+'&textLocale='+(textLocale).toString(),
function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonStr = JSON.parse(body);
event.text=jsonStr.outputText;
// Storing the user's text locale if not already set
// - does not execute as event.textLocale is set by default and global variables are not propagating from receive to send
if(!event.textLocale && (jsonStr.inputLanguageContext != "(Unknown)")) {
event.textLocale = jsonStr.inputLanguageContext;
console.log("Rewriting event text locale to :" + jsonStr.inputLanguageContext);
}
callback(null, event);
}
}
);
},
function(event, callback) {
console.log("Rec after modification:");
console.log("event.textLocale: " + event.textLocale);
next();
callback(null, 'done');
}
]);
},
send: function (event, next) {
// translate response using event.textLocale as languageTo {event.text, languageFrom='en', event.textLocale}
}
});
翻译api:
app.get("/translateIntent", function(request, response) {
var inputText = request.param('intent');
if(inputText) {
var textLocale = ''; var outputText = '';
// If locale is already set, languageDetectHelper does not need to be called
if(request.param('textLocale')) {
textLocale = request.param('textLocale');
if(textLocale == 'en') {
// No translation required, just send back the inputText
response.end({outputText:inputText, inputLanguageContext:languageCodeDetected});
} else {
// Call translate, with languageFrom as textLocale, and languageTo = 'en'
translateHelper.GetTranslation(inputText, textLocale, languageTo).then(jsonStr => {
response.end(jsonStr);
}).catch(error => {
console.log("Error: " + error);
})
}
} else {
// Locale not yet set, call detectLanguage
languageDetectHelper.GetTextLanguage(inputText).then(languageCodeDetected => {
var languageTo = 'en';
if(languageCodeDetected == 'en' || languageCodeDetected == '(Unknown)') {
// Send back without translation
response.end({outputText:inputText, inputLanguageContext:languageCodeDetected});
} else {
// Translate to English
translateHelper.GetTranslation(inputText, languageCodeDetected, languageTo).then(jsonStr => {
console.log("JSON stringify output in server: " + JSON.stringify(jsonStr));
response.end(jsonStr);
}).catch(error => {
console.log("Error: " + error);
})
}
}).catch(error=> {
console.log("Error: " + error);
});
}
} else {
console.log("No translation required, waiting for the next event");
}
});
【问题讨论】:
标签: node.js azure locale botframework