helix
helix发消息的请求
Helix 发送的请求 body 中路由信息是放在 aid_context 嵌套对象里的(body.aid_context[“User-Id”]),而不是 HTTP headers 或 body 顶层字段。
1 | { |
目前 MetisV3 monitor.ts 的 extractRoutingFromBody() 新增了对 aid_context 的解析,优先级:
- body.aid_context 对象(Helix 实际格式)
- body 顶层字段(兜底)
- HTTP headers(兜底)
Helix 简化格式(V3 主要格式)
由 isHelixSimplifiedFormat() (第109-118行) 和 extractRoutingFromBody() (第129-160行) 判断和解析:
请求
1 | POST /metis/events HTTP/1.1 |
Body(三种写法,按优先级排列)
写法 1:aid_context 对象(推荐,优先级最高)
1 | { |
写法 2:平铺字段(snake_case / camelCase / PascalCase 均可)
1 | { |
写法 3:最简形式(路由信息全靠 HTTP Headers)
1 | { |
路由解析优先级
根据第166-208行 convertHelixToMetisEvent() 的逻辑:
1 | Body aid_context > Body 平铺字段 > HTTP Headers > 默认值 |
默认值:userId → "unknown_user",envId → "default_env",taskId → "task_{timestamp}"
判断依据
代码通过以下条件判断为 Helix 简化格式(第109-118行):
1 | typeof obj.content === "string" // 有 content 字段 |
即:body 里有 content 字符串,但没有 event_id/sender/message 这些完整 Metis 格式的字段,就走 Helix 简化路径。
响应
无论哪种写法,Helix 收到的响应都是(第342-343行):
1 | HTTP 200 |
消息在后台异步处理,处理完后 OpenClaw 通过 send.ts POST 到 callbackUrl 回复。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.