Skip to content

WeCom通道: InboundMessage.metadata 缺少 sender_id / sender_name,导致Agent无法识别对话者身份 #448

Description

@wocall88

问题描述

WeCom(企业微信)通道的 WeComChannel.parse_inbound() 已经正确解析了企微消息中的发送者信息(data["from"]["userid"]),但没有将 sender_idsender_name 写入 InboundMessage.metadata

当前代码(harness-gateway 0.9.3, wecom.py parse_inbound)

# sender_id 已提取:
sender_info = data.get("from", {})
sender_id = sender_info.get("userid", "") or sender_info.get("user_id", "unknown")

# 但在构建 InboundMessage 时,metadata 里缺少 sender_id / sender_name:
return InboundMessage(
    channel_subject=ChannelSubject(subject_id=sender_id, metadata={}),  # ✅ 这里有
    metadata={
        "to_handle": sender_id,        # ✅ 这里有
        "chat_id": chat_id,
        "chat_type": chat_type,
        # ❌ 缺少: "sender_id": sender_id
        # ❌ 缺少: "sender_name": sender_info.get("name", "")
        ...
    },
)

影响

  1. LLM Agent 无法知道是谁在说话harness_request.py_group_turn_text() 尝试读取 msg.metadata.get("sender_id"),但 WeCom 通道从未设置此字段
  2. 单聊场景完全无法识别用户 — 群聊还有 group context 机制,单聊直接没有任何发送者信息注入到提示词
  3. 多用户场景不可用 — 无法实现按用户区分会话、个性化回复、权限控制

建议修复

parse_inbound() 的 metadata 中补上:

metadata={
    "sender_id": sender_id,
    "sender_name": sender_info.get("name", ""),
    "to_handle": sender_id,
    ...
}

环境

  • harness-gateway: 0.9.3
  • 通道: 企业微信 AI Bot(WebSocket 长连接)
  • 部署: Octop 自托管

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions