OpenClaw 可以规范化聊天频道中共享的位置信息,将其转换为易读的文本和结构化的上下文字段。
概述
OpenClaw 将位置信息处理为两种形式:
- 附加到入站消息正文的人类可读文本
- 自动回复上下文负载中的结构化字段
当前支持的频道
- Telegram - 位置图钉、场所和实时位置
- WhatsApp - locationMessage 和 liveLocationMessage
- Matrix - 带有 geo_uri 的 m.location
文本格式
位置会以友好的格式显示,不带方括号:
图钉位置
📍 48.858844, 2.294351 ±12m
命名地点
📍 Eiffel Tower — Champ de Mars, Paris (48.858844, 2.294351 ±12m)
实时位置共享
🛰 Live location: 48.858844, 2.294351 ±12m
带说明的位置
如果频道包含说明/评论,会在下一行附加显示:
📍 48.858844, 2.294351 ±12m
Meet here
上下文字段
当存在位置信息时,以下字段会被添加到 ctx 上下文中:
| 字段名 | 类型 | 说明 |
|---|---|---|
LocationLat |
number | 纬度 |
LocationLon |
number | 经度 |
LocationAccuracy |
number | 精度(米),可选 |
LocationName |
string | 地点名称,可选 |
LocationAddress |
string | 地址,可选 |
LocationSource |
string | 来源类型: pin | place | live |
LocationIsLive |
boolean | 是否为实时位置 |
频道特性说明
Telegram
- 场所(venues)映射到
LocationName和LocationAddress - 实时位置使用
live_period参数
locationMessage.comment和liveLocationMessage.caption会作为说明行附加显示
Matrix
geo_uri被解析为图钉位置- 海拔高度被忽略
LocationIsLive始终为false
使用示例
在您的配置或模板中,可以通过以下方式访问位置信息:
// 检查是否存在位置信息
if (ctx.LocationLat && ctx.LocationLon) {
console.log(`位置: ${ctx.LocationLat}, ${ctx.LocationLon}`);
// 检查是否为实时位置
if (ctx.LocationIsLive) {
console.log('这是一个实时位置共享');
}
// 检查是否有地点名称
if (ctx.LocationName) {
console.log(`地点: ${ctx.LocationName}`);
}
}
提示
更多详情请参考 官方文档 - Channel Location Parsing