Configuration
Análise da localização do canal
O OpenClaw normaliza locais compartilhados de canais de chat em:
- texto conciso de coordenadas anexado ao corpo da mensagem recebida; e
- campos estruturados na carga útil de contexto da resposta automática. Rótulos, endereços e legendas/comentários fornecidos pelo canal são renderizados no prompt pelo bloco JSON compartilhado de metadados não confiáveis, e não diretamente no corpo da mensagem do usuário.
Compatibilidade atual:
- LINE (mensagens de localização com título/endereço)
- Matrix (
m.locationcomgeo_uri) - Telegram (marcadores de localização + locais + localizações ao vivo)
- WhatsApp (
locationMessage+liveLocationMessage)
Formatação de texto
As localizações são exibidas como linhas de fácil leitura, sem colchetes. As coordenadas usam seis casas decimais; a precisão é arredondada para metros inteiros:
- Localização fixada:
📍 48.858844, 2.294351 ±12m
- Local nomeado (na mesma linha; o nome/endereço vão apenas para o bloco de metadados):
📍 48.858844, 2.294351 ±12m
- Compartilhamento ao vivo:
🛰 Live location: 48.858844, 2.294351 ±12m
Se o canal incluir um rótulo, endereço ou legenda/comentário, ele será preservado no payload de contexto e aparecerá no prompt como JSON não confiável delimitado por cercas (os campos serão omitidos quando estiverem ausentes):
Localização (metadados não confiáveis):```json{ "latitude": 48.858844, "longitude": 2.294351, "accuracy_m": 12, "source": "place", "name": "Eiffel Tower", "address": "Champ de Mars, Paris", "caption": "Meet here"}```Campos de contexto
Quando uma localização está presente, estes campos são adicionados a ctx:
LocationLat(número)LocationLon(número)LocationAccuracy(número, metros; opcional)LocationName(string; opcional)LocationAddress(string; opcional)LocationSource(pin | place | live)LocationIsLive(booleano)LocationCaption(string; opcional)
Quando o canal não define uma origem explícita, o OpenClaw a infere: compartilhamentos ao vivo se tornam live, localizações com nome ou endereço se tornam place e todo o restante é pin.
O renderizador de prompts trata LocationName, LocationAddress e LocationCaption como metadados não confiáveis e os serializa pelo mesmo caminho JSON com limites usado para outros contextos do canal.
Payloads de saída
A ferramenta de mensagens e o SDK de Plugin usam a mesma estrutura NormalizedLocation para localizações de saída portáveis. Um payload somente com coordenadas representa um marcador. Canais com suporte nativo a locais podem mapear name mais address para um cartão de local.
Atualmente, o Telegram disponibiliza isso por meio de message(action="send"). Sua primeira implementação é deliberadamente independente: payloads de localização não podem ser combinados com texto ou mídia, e pares de local incompletos geram falha em vez de descartar silenciosamente um nome ou endereço. Canais sem suporte não anunciam o parâmetro de localização.
Observações sobre os canais
- LINE:
title/addressda mensagem de localização são mapeados paraLocationName/LocationAddress; sem localizações ao vivo. - Matrix:
geo_urié analisado como uma localização de marcador; o parâmetrou(incerteza) é mapeado paraLocationAccuracy, o corpo do evento preencheLocationCaption, a altitude é ignorada eLocationIsLiveé sempre falso. - Telegram: locais são mapeados para
LocationName/LocationAddress; localizações ao vivo são detectadas por meio delive_period. - WhatsApp:
locationMessage.commenteliveLocationMessage.captionpreenchemLocationCaption.