跳转至

频道位置解析

OpenClaw 将来自聊天渠道的共享位置规范化为:

  • 附加到入站正文末尾的简短坐标文本,以及
  • 自动回复上下文负载中的结构化字段。渠道提供的标签、地址和说明/评论会通过共享的不可信元数据 JSON 块渲染到提示词中,而不是内联在用户正文中。

当前支持:

  • LINE(带有标题/地址的位置消息)
  • Matrix(带有 geo_uri 的 m.location)
  • Telegram(位置图钉 + 场所 + 实时位置)
  • WhatsApp(locationMessage + liveLocationMessage)

文本格式

位置被渲染为不带括号的友好行。坐标使用六位小数;精度四舍五入到整米:

  • 图钉:
  • 📍 48.858844, 2.294351 ±12m
  • 命名地点(同一行;名称/地址仅进入元数据块):
  • 📍 48.858844, 2.294351 ±12m
  • 实时共享:
  • 🛰 Live location: 48.858844, 2.294351 ±12m

如果渠道包含标签、地址或说明/评论,它会被保留在上下文负载中,并以带围栏的不可信 JSON 形式出现在提示词中(字段缺失时会被省略):

Location:
```json
{
  "latitude": 48.858844,
  "longitude": 2.294351,
  "accuracy_m": 12,
  "source": "place",
  "name": "Eiffel Tower",
  "address": "Champ de Mars, Paris",
  "caption": "Meet here"
}
```

上下文字段

当存在位置时,这些字段会被添加到 ctx:

  • LocationLat(数字)
  • LocationLon(数字)
  • LocationAccuracy(数字,米;可选)
  • LocationName(字符串;可选)
  • LocationAddress(字符串;可选)
  • LocationSource(pin | place | live)
  • LocationIsLive(布尔值)
  • LocationCaption(字符串;可选)

当渠道未设置显式来源时,OpenClaw 会推断它:实时共享变为 live,带有名称或地址的位置变为 place,其他均为 pin。

提示词渲染器将 LocationName、LocationAddress 和 LocationCaption 视为不可信元数据,并通过用于其他渠道上下文的同一有界 JSON 路径进行序列化。

出站负载

消息工具和 Plugin SDK 使用相同的 NormalizedLocation 形状来表示可移植的出站位置。仅包含坐标的负载表示一个图钉。具有原生场所支持的渠道可以将 name 加上 address 映射到场所卡片。

Telegram 目前通过 message(action="send") 暴露此功能。其首次实现被刻意设计为独立:位置负载不能与文本或媒体混合,且不完整的场所对会失败,而不是静默丢弃名称或地址。不支持的渠道不会声明位置参数。

渠道说明

  • LINE:位置消息的 title/address 映射到 LocationName/LocationAddress;无实时位置。
  • Matrix:geo_uri 被解析为图钉位置;u(不确定性)参数映射到 LocationAccuracy,事件正文填充 LocationCaption,海拔被忽略,且 LocationIsLive 始终为 false。
  • Telegram:场所映射到 LocationName/LocationAddress;实时位置通过 live_period 检测。
  • WhatsApp:locationMessage.comment 和 liveLocationMessage.caption 填充 LocationCaption。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw