12.5 位置命令

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)映射到 LocationNameLocationAddress
  • 实时位置使用 live_period 参数

WhatsApp

  • locationMessage.commentliveLocationMessage.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}`);
  }
}
提示