【发布时间】:2018-10-29 22:21:24
【问题描述】:
我正在 Microsoft bot 框架上试验翻译服务。我编写了一个方法,我将一个回调函数传递给该方法,该函数接收我的翻译文本。
我有一个现有的机器人,它调用一个 HTTP 端点来创建我的英语输出。我想在将输出返回给用户之前将其翻译成不同的语言。我未更改的代码如下所示:
await request.post(ENDPOINT,
{
headers: HEADERS,
json: BODY
},
async function (error, response, body) {
if (response.statusCode == 202) {
var msg = body.mainResponse.text;
context.sendActivity(msg);
}
});
这运行得很好。在 HTTP 响应正文中传递的数据被解析后发送回用户。
现在我想插入我的翻译服务。我有一个函数,我调用它来执行此操作,称为Translator.translate(text, callback)。我已将此调用添加到我现有的函数中以获取:
await request.post(ENDPOINT,
{
headers: HEADERS,
json: BODY
},
async function (error, response, body) {
if (response.statusCode == 202) {
var msg = body.mainResponse.text;
await Translator.translate(msg, function (output) {
context.sendActivity(output);
});
}
}
);
我的翻译进程运行并且我在output 变量中获得了翻译,但没有任何东西被发送回给用户。查看终端,我在回调中看到与 context.sendActivity 行相关的错误“无法在已撤销的代理上执行 'get'”。
谁能建议我如何保持上下文对象处于活动状态?
提前致谢。
【问题讨论】:
-
您使用的是 BotBuilder V3 还是 V4?你所说的微软机器人框架上的翻译服务是指 Azure 中的文本翻译 API 吗?
-
V4,我相信。是的翻译文本 API。我的翻译模块基本上是本教程中代码的变体:docs.microsoft.com/en-us/azure/cognitive-services/translator/…
-
尝试等待
context.sendActivity。它的包含函数当然应该是异步的。 -
您还需要帮助吗?
-
谢谢 - 我试过了,我取得了一些进展,但仍然有一些奇怪的问题 - 请参阅下面的评论。
标签: node.js asynchronous botframework