{ "title": "Channel location parsing", "content": "OpenClaw normalizes shared locations from chat channels into:\n\n* human-readable text appended to the inbound body, and\n* structured fields in the auto-reply context payload.\n\n* **Telegram** (location pins + venues + live locations)\n* **WhatsApp** (locationMessage + liveLocationMessage)\n* **Matrix** (`m.location` with `geo_uri`)\n\nLocations are rendered as friendly lines without brackets:\n\n* Pin:\n * `📍 48.858844, 2.294351 ±12m`\n* Named place:\n * `📍 Eiffel Tower — Champ de Mars, Paris (48.858844, 2.294351 ±12m)`\n* Live share:\n * `🛰 Live location: 48.858844, 2.294351 ±12m`\n\nIf the channel includes a caption/comment, it is appended on the next line:\n\nWhen a location is present, these fields are added to `ctx`:\n\n* `LocationLat` (number)\n* `LocationLon` (number)\n* `LocationAccuracy` (number, meters; optional)\n* `LocationName` (string; optional)\n* `LocationAddress` (string; optional)\n* `LocationSource` (`pin | place | live`)\n* `LocationIsLive` (boolean)\n\n* **Telegram**: venues map to `LocationName/LocationAddress`; live locations use `live_period`.\n* **WhatsApp**: `locationMessage.comment` and `liveLocationMessage.caption` are appended as the caption line.\n* **Matrix**: `geo_uri` is parsed as a pin location; altitude is ignored and `LocationIsLive` is always false.", "code_samples": [ { "code": "📍 48.858844, 2.294351 ±12m\nMeet here", "language": "unknown" } ], "headings": [ { "level": "h2", "text": "Text formatting", "id": "text-formatting" }, { "level": "h2", "text": "Context fields", "id": "context-fields" }, { "level": "h2", "text": "Channel notes", "id": "channel-notes" } ], "url": "llms-txt#channel-location-parsing", "links": [] }