渠道位置解析
OpenClaw 将聊天渠道中的共享位置标准化为:
- 附加到入站消息正文的简洁坐标文本,以及
- 自动回复上下文载荷中的结构化字段。渠道提供的标签、地址和说明/注释通过共享的非受信元数据 JSON 块渲染到提示词中,而不是内嵌在用户正文中。
目前支持:
- Telegram(位置图钉 + 场所 + 实时位置)
- WhatsApp(locationMessage + liveLocationMessage)
- Matrix(
m.location带有geo_uri)
位置渲染为不带括号的友好行:
- 图钉:
📍 48.858844, 2.294351 ±12m
- 命名地点:
📍 48.858844, 2.294351 ±12m
- 实时共享:
🛰 Live location: 48.858844, 2.294351 ±12m
如果渠道包含标签、地址或说明/注释,它将保留在上下文载荷中,并作为受信的 JSON 代码块显示在提示词中:
Location (untrusted metadata):```{ "latitude": 48.858844, "longitude": 2.294351, "name": "Eiffel Tower", "address": "Champ de Mars, Paris", "caption": "Meet here"}```当存在位置时,以下字段会添加到 ctx:
LocationLat(数字)LocationLon(数字)LocationAccuracy(数字,米;可选)LocationName(字符串;可选)LocationAddress(字符串;可选)LocationSource(pin | place | live)LocationIsLive(布尔值)LocationCaption(字符串;可选)
提示词渲染器将 LocationName、LocationAddress 和 LocationCaption 视为非受信元数据,并通过用于其他渠道上下文的有界 JSON 路径对其进行序列化。
- Telegram:场所映射到
LocationName/LocationAddress;实时位置使用live_period。 - WhatsApp:
locationMessage.comment和liveLocationMessage.caption填充LocationCaption。 - Matrix:
geo_uri被解析为标记位置;海拔被忽略,且LocationIsLive始终为 false。