Configuration
Analisi della posizione del canale
OpenClaw normalizza le posizioni condivise dai canali di chat in:
- testo conciso con le coordinate aggiunto al corpo in entrata e
- campi strutturati nel payload di contesto della risposta automatica. Le etichette, gli indirizzi e le didascalie/i commenti forniti dal canale vengono inseriti nel prompt tramite il blocco JSON condiviso dei metadati non attendibili, non direttamente nel corpo dell'utente.
Attualmente supportati:
- LINE (messaggi di posizione con titolo/indirizzo)
- Matrix (
m.locationcongeo_uri) - Telegram (segnaposto di posizione + luoghi + posizioni in tempo reale)
- WhatsApp (
locationMessage+liveLocationMessage)
Formattazione del testo
Le posizioni vengono visualizzate come righe leggibili senza parentesi. Le coordinate usano sei cifre decimali; la precisione viene arrotondata al metro intero:
- Segnaposto:
📍 48.858844, 2.294351 ±12m
- Luogo denominato (sulla stessa riga; il nome/indirizzo viene inserito solo nel blocco dei metadati):
📍 48.858844, 2.294351 ±12m
- Condivisione in tempo reale:
🛰 Live location: 48.858844, 2.294351 ±12m
Se il canale include un'etichetta, un indirizzo o una didascalia/un commento, questi vengono conservati nel payload di contesto e appaiono nel prompt come JSON non attendibile delimitato (i campi vengono omessi quando assenti):
Posizione (metadati non attendibili):```json{ "latitude": 48.858844, "longitude": 2.294351, "accuracy_m": 12, "source": "place", "name": "Torre Eiffel", "address": "Campo di Marte, Parigi", "caption": "Incontriamoci qui"}```Campi del contesto
Quando è presente una posizione, questi campi vengono aggiunti a ctx:
LocationLat(numero)LocationLon(numero)LocationAccuracy(numero, metri; facoltativo)LocationName(stringa; facoltativo)LocationAddress(stringa; facoltativo)LocationSource(pin | place | live)LocationIsLive(booleano)LocationCaption(stringa; facoltativo)
Quando il canale non imposta una sorgente esplicita, OpenClaw la deduce: le condivisioni in tempo reale diventano live, le posizioni con un nome o un indirizzo diventano place, tutte le altre sono pin.
Il renderer del prompt tratta LocationName, LocationAddress e LocationCaption come metadati non attendibili e li serializza tramite lo stesso percorso JSON con limiti usato per gli altri dati di contesto del canale.
Payload in uscita
Lo strumento per i messaggi e l'SDK del Plugin usano la stessa struttura NormalizedLocation per le posizioni portabili in uscita. Un payload contenente solo le coordinate rappresenta un segnaposto. I canali con supporto nativo per i luoghi possono associare name più address a una scheda del luogo.
Attualmente Telegram espone questa funzionalità tramite message(action="send"). La sua prima implementazione è volutamente autonoma: i payload di posizione non possono essere combinati con testo o contenuti multimediali e le coppie di dati del luogo incomplete generano un errore anziché eliminare silenziosamente un nome o un indirizzo. I canali non supportati non dichiarano il parametro di posizione.
Note sui canali
- LINE: i campi
title/addressdel messaggio di posizione vengono associati aLocationName/LocationAddress; le posizioni in tempo reale non sono supportate. - Matrix:
geo_uriviene analizzato come posizione di un segnaposto; il parametrou(incertezza) viene associato aLocationAccuracy, il corpo dell'evento popolaLocationCaption, l'altitudine viene ignorata eLocationIsLiveè sempre falso. - Telegram: i luoghi vengono associati a
LocationName/LocationAddress; le posizioni in tempo reale vengono rilevate tramitelive_period. - WhatsApp:
locationMessage.commenteliveLocationMessage.captionpopolanoLocationCaption.