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
This commit is contained in:
hsohinna 2026-02-20 13:27:08 +08:00 committed by GitHub
parent 394d1d1197
commit 4adafa8890
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 46 additions and 0 deletions

View file

@ -155,6 +155,14 @@ func (c *DingTalkChannel) onChatBotMessageReceived(ctx context.Context, data *ch
"session_webhook": data.SessionWebhook, "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{}{ logger.DebugCF("dingtalk", "Received message", map[string]interface{}{
"sender_nick": senderNick, "sender_nick": senderNick,
"sender_id": senderID, "sender_id": senderID,

View file

@ -165,6 +165,15 @@ func (c *FeishuChannel) handleMessageReceive(_ context.Context, event *larkim.P2
metadata["tenant_key"] = *sender.TenantKey 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{}{ logger.InfoCF("feishu", "Feishu message received", map[string]interface{}{
"sender_id": senderID, "sender_id": senderID,
"chat_id": chatID, "chat_id": chatID,

View file

@ -366,6 +366,14 @@ func (c *LINEChannel) processEvent(event lineEvent) {
"message_id": msg.ID, "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{}{ logger.DebugCF("line", "Received message", map[string]interface{}{
"sender_id": senderID, "sender_id": senderID,
"chat_id": chatID, "chat_id": chatID,

View file

@ -170,6 +170,8 @@ func (c *MaixCamChannel) handlePersonDetection(msg MaixCamMessage) {
"y": fmt.Sprintf("%.0f", y), "y": fmt.Sprintf("%.0f", y),
"w": fmt.Sprintf("%.0f", w), "w": fmt.Sprintf("%.0f", w),
"h": fmt.Sprintf("%.0f", h), "h": fmt.Sprintf("%.0f", h),
"peer_kind": "channel",
"peer_id": "default",
} }
c.HandleMessage(senderID, chatID, content, []string{}, metadata) c.HandleMessage(senderID, chatID, content, []string{}, metadata)

View file

@ -866,10 +866,14 @@ func (c *OneBotChannel) handleMessage(raw *oneBotRawEvent) {
switch raw.MessageType { switch raw.MessageType {
case "private": case "private":
chatID = "private:" + senderID chatID = "private:" + senderID
metadata["peer_kind"] = "direct"
metadata["peer_id"] = senderID
case "group": case "group":
groupIDStr := strconv.FormatInt(groupID, 10) groupIDStr := strconv.FormatInt(groupID, 10)
chatID = "group:" + groupIDStr chatID = "group:" + groupIDStr
metadata["peer_kind"] = "group"
metadata["peer_id"] = groupIDStr
metadata["group_id"] = groupIDStr metadata["group_id"] = groupIDStr
senderUserID, _ := parseJSONInt64(sender.UserID) senderUserID, _ := parseJSONInt64(sender.UserID)

View file

@ -165,6 +165,8 @@ func (c *QQChannel) handleC2CMessage() event.C2CMessageEventHandler {
// 转发到消息总线 // 转发到消息总线
metadata := map[string]string{ metadata := map[string]string{
"message_id": data.ID, "message_id": data.ID,
"peer_kind": "direct",
"peer_id": senderID,
} }
c.HandleMessage(senderID, senderID, content, []string{}, metadata) c.HandleMessage(senderID, senderID, content, []string{}, metadata)
@ -207,6 +209,8 @@ func (c *QQChannel) handleGroupATMessage() event.GroupATMessageEventHandler {
metadata := map[string]string{ metadata := map[string]string{
"message_id": data.ID, "message_id": data.ID,
"group_id": data.GroupID, "group_id": data.GroupID,
"peer_kind": "group",
"peer_id": data.GroupID,
} }
c.HandleMessage(senderID, data.GroupID, content, []string{}, metadata) c.HandleMessage(senderID, data.GroupID, content, []string{}, metadata)

View file

@ -178,6 +178,14 @@ func (c *WhatsAppChannel) handleIncomingMessage(msg map[string]interface{}) {
metadata["user_name"] = userName 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)) log.Printf("WhatsApp message from %s: %s...", senderID, utils.Truncate(content, 50))
c.HandleMessage(senderID, chatID, content, mediaPaths, metadata) c.HandleMessage(senderID, chatID, content, mediaPaths, metadata)

View file

@ -333,6 +333,9 @@ func DefaultConfig() *Config {
MaxToolIterations: 20, MaxToolIterations: 20,
}, },
}, },
Session: SessionConfig{
DMScope: "main",
},
Channels: ChannelsConfig{ Channels: ChannelsConfig{
WhatsApp: WhatsAppConfig{ WhatsApp: WhatsAppConfig{
Enabled: false, Enabled: false,