Botframework 在发送给用户之前,如何更新来自bot的应答?

Botframework 在发送给用户之前,如何更新来自bot的应答?,botframework,qnamaker,Botframework,Qnamaker,我正在开发一个bot,它使用qnamaker服务,使用Node.js版本的框架 我想通过包含动态内容来增强bot提供的答案。我希望能够用动态生成的内容替换答案中的[shortcode thing]。我有代码,可以识别和替换短代码。我迷路的地方是把它加入到对话的流程中 我使用QnAMakerDialog类作为bot和qnamaker服务之间交互的核心。以便及时提供多圈体验 这是否可能使用中间件?如果是,我如何识别答案并更新答案的内容,以便将更新后的答案发送给用户 或者,是否有一种方法可以扩展QnA

我正在开发一个bot,它使用qnamaker服务,使用Node.js版本的框架

我想通过包含动态内容来增强bot提供的答案。我希望能够用动态生成的内容替换答案中的
[shortcode thing]
。我有代码,可以识别和替换短代码。我迷路的地方是把它加入到对话的流程中

我使用
QnAMakerDialog
类作为bot和qnamaker服务之间交互的核心。以便及时提供多圈体验

这是否可能使用中间件?如果是,我如何识别答案并更新答案的内容,以便将更新后的答案发送给用户


或者,是否有一种方法可以扩展QnAMakerDialog来拦截发送答案的操作?

我找到了一种实现所需结果的方法

首先,我实现了一个类作为我的中间件。例如:

类过滤器应答器{
/*
*每次bot接收到新请求时调用。
*/
异步onTurn(上下文,下一个){
/*
*每次发送一组活动时调用。
*/
onSendActivities(异步函数(_context,activities,next){
//循环遍历堆栈中的所有活动。
activities.forEach(activity=>{
//仅检查消息,忽略其他类型。
如果(activity.type==“消息”){
//如果没有任何文本,则忽略消息。
如果(activity.text!==未定义){
设fixedText=activity.text;
//对课文做些修改。
//将文本返回活动。
activity.text=fixedText;
}
}
} );
//通过其他中间件继续处理活动。
等待下一个();
} );
//继续处理请求。
等待下一个();
}
}
}
然后,我可以将我的自定义中间件添加到中间件列表中,如下所示:

const adapter=新的BotFrameworkAdapter({
//机器人配置值
} ); 
//添加自定义中间件
适配器。使用(新的过滤器答案());
这是基于查看的示例,如和。以及文件和文档


正如其他人在评论中提到的,我可以在我的
QnAMakerDialog
中实现这一点。我遵循的是,我认为这将我从基本的QnA-Maker交互中抽象出来。特别是我想利用SDK类喜欢的所有酷东西来提供多圈体验。

我找到了一种实现我想要的结果的方法

首先,我实现了一个类作为我的中间件。例如:

类过滤器应答器{
/*
*每次bot接收到新请求时调用。
*/
异步onTurn(上下文,下一个){
/*
*每次发送一组活动时调用。
*/
onSendActivities(异步函数(_context,activities,next){
//循环遍历堆栈中的所有活动。
activities.forEach(activity=>{
//仅检查消息,忽略其他类型。
如果(activity.type==“消息”){
//如果没有任何文本,则忽略消息。
如果(activity.text!==未定义){
设fixedText=activity.text;
//对课文做些修改。
//将文本返回活动。
activity.text=fixedText;
}
}
} );
//通过其他中间件继续处理活动。
等待下一个();
} );
//继续处理请求。
等待下一个();
}
}
}
然后,我可以将我的自定义中间件添加到中间件列表中,如下所示:

const adapter=新的BotFrameworkAdapter({
//机器人配置值
} ); 
//添加自定义中间件
适配器。使用(新的过滤器答案());
这是基于查看的示例,如和。以及文件和文档


正如其他人在评论中提到的,我可以在我的
QnAMakerDialog
中实现这一点。我遵循的是,我认为这将我从基本的QnA-Maker交互中抽象出来。特别是我想利用SDK类提供多圈体验的所有酷炫功能。

如果您展示接收qnamaker服务响应并向用户发送响应的代码,可能会有人解释如何添加动态内容。您应该能够在qnaDialog中做到这一点。我的设置可能与您的不同,但我只是得到一个答案,然后在返回输出活动之前,我会进行一些调整,例如,如果置信度较低,我会调用第二个qnaMaker端点,如果置信度仍然较低,我会显示一条自定义消息。如果我愿意,我也可以修改内容。但正如Hessel提到的,我们需要查看您的代码以了解您是如何设置的,
QnAMakerDialog
以及您首先调用它的位置周围的代码。如果您显示接收qnamaker服务响应并向用户发送应答的代码,有人可能会解释如何添加动态内容。你应该可以在qnaDialog中这样做。我的设置可能与您的不同,但我只是得到一个答案,然后在返回输出活动之前,我会进行一些调整,例如,如果置信度较低,我会调用第二个qnaMaker端点,如果置信度仍然较低,我会显示一条自定义消息。如果我愿意,我也可以修改内容。但正如Hessel提到的,我们需要看你的c