From 4adafa88902403a5bb2e1341d87893a3803d7f9a Mon Sep 17 00:00:00 2001 From: hsohinna Date: Fri, 20 Feb 2026 13:27:08 +0800 Subject: [PATCH] fix(channels): channels session key routing (#489) * fix(onebot): add metadata for direct and group message handling * fix(qq): add metadata for direct and group message handling * fix(dingtalk): add metadata for direct and group message handling * fix(feishu): add metadata for direct and group message handling * fix(whatsapp): add metadata for direct and group message handlinga * fix(line): add metadata for direct and group message handling * fix(maixcam): add metadata for person detection handling * fix(config): add default session configuration with DMScope --- pkg/channels/dingtalk.go | 8 ++++++++ pkg/channels/feishu_64.go | 9 +++++++++ pkg/channels/line.go | 8 ++++++++ pkg/channels/maixcam.go | 2 ++ pkg/channels/onebot.go | 4 ++++ pkg/channels/qq.go | 4 ++++ pkg/channels/whatsapp.go | 8 ++++++++ pkg/config/config.go | 3 +++ 8 files changed, 46 insertions(+) diff --git a/pkg/channels/dingtalk.go b/pkg/channels/dingtalk.go index 263785c0c..79cc85219 100644 --- a/pkg/channels/dingtalk.go +++ b/pkg/channels/dingtalk.go @@ -155,6 +155,14 @@ func (c *DingTalkChannel) onChatBotMessageReceived(ctx context.Context, data *ch "session_webhook": data.SessionWebhook, } + if data.ConversationType == "1" { + metadata["peer_kind"] = "direct" + metadata["peer_id"] = senderID + } else { + metadata["peer_kind"] = "group" + metadata["peer_id"] = data.ConversationId + } + logger.DebugCF("dingtalk", "Received message", map[string]interface{}{ "sender_nick": senderNick, "sender_id": senderID, diff --git a/pkg/channels/feishu_64.go b/pkg/channels/feishu_64.go index 39dc40ac1..9e15fa3a7 100644 --- a/pkg/channels/feishu_64.go +++ b/pkg/channels/feishu_64.go @@ -165,6 +165,15 @@ func (c *FeishuChannel) handleMessageReceive(_ context.Context, event *larkim.P2 metadata["tenant_key"] = *sender.TenantKey } + chatType := stringValue(message.ChatType) + if chatType == "p2p" { + metadata["peer_kind"] = "direct" + metadata["peer_id"] = senderID + } else { + metadata["peer_kind"] = "group" + metadata["peer_id"] = chatID + } + logger.InfoCF("feishu", "Feishu message received", map[string]interface{}{ "sender_id": senderID, "chat_id": chatID, diff --git a/pkg/channels/line.go b/pkg/channels/line.go index ffb5533e8..9f7d2bde0 100644 --- a/pkg/channels/line.go +++ b/pkg/channels/line.go @@ -366,6 +366,14 @@ func (c *LINEChannel) processEvent(event lineEvent) { "message_id": msg.ID, } + if isGroup { + metadata["peer_kind"] = "group" + metadata["peer_id"] = chatID + } else { + metadata["peer_kind"] = "direct" + metadata["peer_id"] = senderID + } + logger.DebugCF("line", "Received message", map[string]interface{}{ "sender_id": senderID, "chat_id": chatID, diff --git a/pkg/channels/maixcam.go b/pkg/channels/maixcam.go index 01e570b25..95da0547c 100644 --- a/pkg/channels/maixcam.go +++ b/pkg/channels/maixcam.go @@ -170,6 +170,8 @@ func (c *MaixCamChannel) handlePersonDetection(msg MaixCamMessage) { "y": fmt.Sprintf("%.0f", y), "w": fmt.Sprintf("%.0f", w), "h": fmt.Sprintf("%.0f", h), + "peer_kind": "channel", + "peer_id": "default", } c.HandleMessage(senderID, chatID, content, []string{}, metadata) diff --git a/pkg/channels/onebot.go b/pkg/channels/onebot.go index 53e82b44d..06186f783 100644 --- a/pkg/channels/onebot.go +++ b/pkg/channels/onebot.go @@ -866,10 +866,14 @@ func (c *OneBotChannel) handleMessage(raw *oneBotRawEvent) { switch raw.MessageType { case "private": chatID = "private:" + senderID + metadata["peer_kind"] = "direct" + metadata["peer_id"] = senderID case "group": groupIDStr := strconv.FormatInt(groupID, 10) chatID = "group:" + groupIDStr + metadata["peer_kind"] = "group" + metadata["peer_id"] = groupIDStr metadata["group_id"] = groupIDStr senderUserID, _ := parseJSONInt64(sender.UserID) diff --git a/pkg/channels/qq.go b/pkg/channels/qq.go index 18b4ca0e0..79907df83 100644 --- a/pkg/channels/qq.go +++ b/pkg/channels/qq.go @@ -165,6 +165,8 @@ func (c *QQChannel) handleC2CMessage() event.C2CMessageEventHandler { // 转发到消息总线 metadata := map[string]string{ "message_id": data.ID, + "peer_kind": "direct", + "peer_id": senderID, } c.HandleMessage(senderID, senderID, content, []string{}, metadata) @@ -207,6 +209,8 @@ func (c *QQChannel) handleGroupATMessage() event.GroupATMessageEventHandler { metadata := map[string]string{ "message_id": data.ID, "group_id": data.GroupID, + "peer_kind": "group", + "peer_id": data.GroupID, } c.HandleMessage(senderID, data.GroupID, content, []string{}, metadata) diff --git a/pkg/channels/whatsapp.go b/pkg/channels/whatsapp.go index c95e59578..065424e0c 100644 --- a/pkg/channels/whatsapp.go +++ b/pkg/channels/whatsapp.go @@ -178,6 +178,14 @@ func (c *WhatsAppChannel) handleIncomingMessage(msg map[string]interface{}) { metadata["user_name"] = userName } + if chatID == senderID { + metadata["peer_kind"] = "direct" + metadata["peer_id"] = senderID + } else { + metadata["peer_kind"] = "group" + metadata["peer_id"] = chatID + } + log.Printf("WhatsApp message from %s: %s...", senderID, utils.Truncate(content, 50)) c.HandleMessage(senderID, chatID, content, mediaPaths, metadata) diff --git a/pkg/config/config.go b/pkg/config/config.go index 3bdb6f030..b9bbd841f 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -333,6 +333,9 @@ func DefaultConfig() *Config { MaxToolIterations: 20, }, }, + Session: SessionConfig{ + DMScope: "main", + }, Channels: ChannelsConfig{ WhatsApp: WhatsAppConfig{ Enabled: false,