如何获取对话起始位置的GUID用于数据库写入及中间件咨询
如何获取对话起始位置对应的GUID以写入用户信息到数据库?
我需要将用户信息写入数据库,因此需获取对话起始位置对应的GUID,但目前仍不清楚如何找到对话的起始位置。我的中间件代码如下:
bot.use({ // 用户发送消息至机器人 receive: (event, next) => { if (event.type == 'message' || event.type == 'conversationupdate') { api.post.receive(event) } next() }, // 机器人发送消息至用户 send: (event, next) => { if (event.type == 'message') { api.post.send(event) } next() } })
看起来你已经在使用Bot Framework的中间件处理消息流转了,要获取对话起始的GUID来写入数据库,其实可以从对话正式创建的触发事件入手——也就是conversationUpdate事件,我给你梳理下具体的实现思路和代码修改方案:
1. 精准识别对话起始的触发时机
对话的起始通常对应两种场景:用户第一次主动发起私聊,或者用户被添加到包含机器人的群聊中。这两种场景都会触发conversationUpdate事件,并且事件里的membersAdded数组会记录新增的成员。我们需要过滤掉机器人自身,只关注用户加入的时刻——这就是对话的起始点。
2. 提取对话GUID并执行数据库写入
在这个触发点里,event.conversation.id就是你需要的对话唯一GUID,直接提取它并结合用户信息写入数据库即可。
修改后的中间件代码示例:
bot.use({ receive: (event, next) => { if (event.type === 'message' || event.type === 'conversationupdate') { api.post.receive(event); // 处理对话起始的核心逻辑 if (event.type === 'conversationupdate' && event.membersAdded) { // 过滤掉机器人自己,只保留新增的用户 const newlyAddedUsers = event.membersAdded.filter(member => member.id !== event.recipient.id); if (newlyAddedUsers.length > 0) { // 获取对话起始的GUID const conversationGuid = event.conversation.id; // 这里替换成你的数据库写入逻辑,比如保存用户ID和对话GUID的关联 // 示例:db.saveUserConversationMapping(newlyAddedUsers[0].id, conversationGuid); console.log(`新对话已启动,对话GUID: ${conversationGuid}`); } } } next(); }, send: (event, next) => { if (event.type === 'message') { api.post.send(event); } next(); } });
额外补充点
- 为什么用
event.conversation.id?这个字段是Bot Framework为每个对话分配的唯一标识符,无论是一对一私聊还是群聊,它都能精准代表对话的GUID,完全满足你的需求。 - 若用户是主动发消息开启对话:如果担心
conversationUpdate事件未被触发(比如部分渠道的特性差异),你也可以在首次message事件里判断——结合数据库记录,若该用户还没有关联的对话GUID,就用当前event.conversation.id作为起始GUID写入。不过conversationUpdate的方式更贴合“对话起始”的定义,因为它是对话正式创建的触发信号。
内容的提问来源于stack exchange,提问作者Odirlei Borgert
相关产品推荐
相关产品推荐

