gpt4 book ai didi

node.js - 如何使用 bot builder sdk v4 中的中间件区分 Bot 到用户和用户到 Bot 消息?

转载 作者:搜寻专家 更新时间:2023-11-01 00:35:15 29 4
gpt4 key购买 nike

我在 sdk V4 Bot 中实现了一个中间件来拦截 bot 和用户之间的每条消息并记录该自定义 mongo Db。我正在尝试为使用 SDK v4 构建的 Bot 实现类似的概念。看起来我可以使用以下代码来添加中间件,但是不确定如何区分机器人到用户和用户到机器人之间的消息。

V3 机器人代码

bot.use({
botbuilder: function (session, next) {
logUserConversation(session)
next()
},
send: function (event, next) {
logBotsConversation(event)
next()
}
})

中间件的 V4 机器人代码

botAdapter.use(async (turnContext, next) => {
// How to find which messages/activity object is from user to bot

await next();
// How to find which messages/activity object is from bot to user.
});

最佳答案

所以你传递给 .use 的函数表示可以对传入 事件进行预处理和后处理的中间件。您可以通过 turnContext.Activity 从回合上下文访问“当前”事件属性(property)。这些事件可以从用户发送,也可以从通过 DirectLine API 将它们发送到机器人的其他系统发送(假设您使用的是 Bot Framework Service)。

传出事件,即机器人为响应传入事件而发送的事件,也可以被中间件拦截,但中间件需要更多地参与这些事件的发送明确地。它通过使用 onSendActivities 向转弯上下文注册一个处理程序来实现这一点。 API。

这一切看起来有点像这样:

botAdapter.use(async (turnContext, next) => {
// pre-processing of the current incoming activity
console.log(`Processing activity ${turnContext.activity.id} starting... `);

// hook up a handler to process any outgoing activities sent during this turn
turnContext.onSendActivities(async (sendContext, activities, nextSend) => {
// pre-processing of outgoing activities

await nextSend();

// post-processing outgoing activities
});

await next();

// post-processing of the current incoming activity
console.log(`Processing activity ${turnContext.activity.id} finishing. `);

});

需要注意的一件事是可以调用传出事件处理程序 0..*次,因为它们基本上是由下游逻辑调用触发的 turnContext.sendActivit[y|ies] .因此,如果在轮次期间发送了多个事件,则将为每个批处理调用您的处理程序。

关于node.js - 如何使用 bot builder sdk v4 中的中间件区分 Bot 到用户和用户到 Bot 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com