Format recommandé
Le script accepte du JavaScript (variables, fonctions, conditions, boucles) et expose des helpers d'actions.
const depart = { lat: 49.1193, lon: 6.1757 };
const arrivee = { lat: 49.1160, lon: 6.1800 };
setMode("walking");
setStart(depart.lat, depart.lon);
setEnd(arrivee.lat, arrivee.lon);
computeRoute();
Exemple 1 — Variables + fonction
const depart = { lat: 49.1193, lon: 6.1757 };
const cinema = { lat: 49.1139, lon: 6.1730 };
const cafe = { lat: 49.1160, lon: 6.1800 };
function planifierSoiree() {
setMode("walking");
computeMultiRoute({
mode: "walking",
waypoints: [
{ label: "Départ", ...depart },
{ label: "Cinéma", ...cinema },
{ label: "Café", ...cafe }
]
});
}
planifierSoiree();
Exemple 2 — Conditions et invitation
const heure = "2026-02-22T20:00";
const lieu = { lat: 49.1160, lon: 6.1800 };
if (new Date(heure).getHours() >= 19) {
inviteAllContacts({
title: "Sortie du soir",
description: "RDV au café",
eventTime: heure,
lat: lieu.lat,
lon: lieu.lon
});
}
Exemple 3 — Layers + marker
setLayers({ route: true, bus: true, media: false, invitation: true });
showLayer("friends");
hideLayer("note");
addMarker("Point de rendez-vous", 49.1160, 6.1800, "Devant le café");
Exemple 4 — Classes Trajectory + Planning
const t = new Trajectory({ mode: "walking" })
.addPoint(49.1193, 6.1757, "Départ")
.addPoint(49.1139, 6.1730, "Cinéma")
.addPoint(49.1160, 6.1800, "Café")
.setSchedule("2026-02-22T18:00", "2026-02-22T20:00");
const p = new Planning({
title: "Sortie cinéma",
description: "On se retrouve au café ensuite",
eventTime: "2026-02-22T20:00",
lat: 49.1160,
lon: 6.1800
});
p.addTrajectory(t);
p.toActions().forEach(addAction);
Exemple 5 — Lecture de données
const contacts = await getContactsData({ refresh: true });
const places = getPlacesData({ includeFavorites: true });
const planned = getPlannedElementsData();
return {
contacts: contacts.length,
places: places.length,
invitations: planned.invitations.length,
trajectories: planned.trajectories.length
};
Exemple 6 — Liste de points geo (recherche + filtre)
const cafes = geoPointsFromSearch("cafe", { limit: 20 });
const barsZone = geoPointsFromFilter({
type: "bar",
source: "place",
bbox: { minLat: 49.10, maxLat: 49.13, minLon: 6.15, maxLon: 6.20 },
limit: 50
});
console.log("cafes", cafes.length, "barsZone", barsZone.length);
return { cafes, barsZone };
Exemple 7 — Produits / stocks
const fromages = searchProducts("fromage", { minQty: 1, onlyAvailable: true });
// Product est une classe
const meilleur = fromages
.filter((p) => p instanceof Product && p.isAvailable())
.sort((a, b) => a.price - b.price)[0];
if (meilleur) {
addMarker(`Meilleur prix: ${meilleur.product}`, meilleur.lat, meilleur.lon, `${meilleur.price}€`);
}
return meilleur ? meilleur.toJSON() : { message: "Aucun produit" };
Exemple 8 — Appel agent / agent code
const rep1 = await callAgent("Planifie une sortie bar et cinéma", { applyActions: true });
console.log(rep1.reply, rep1.actions.length);
const rep2 = await agentCode("Génère une stratégie de trajet multi-points", { applyActions: false });
console.log(rep2.reply);
Exemple 10 — Variables observées (visibles par l'agent)
const produits = searchProducts("fromage", { onlyAvailable: true });
watchVar("nbProduits", produits.length);
watchVar("topProduit", produits[0] ? produits[0].toJSON() : null);
// L'agent reçoit ces valeurs dans mapState.scriptContext.watchedVariables
const rep = await callAgent("Analyse les variables de stock observées", { applyActions: false });
console.log(rep.reply);
Exemple 9 — Pathfinding multi-points (distance minimale)
// 1) Génère les points candidats
const points = geoPointsFromSearch("bar", { limit: 8 });
// 2) Algorithme: optimise l'ordre de passage
// - <= 8 points: permutation exhaustive (meilleur chemin)
// - > 8 points: heuristique nearest-neighbor
const ordered = optimizePath(points, { startFixed: false, endFixed: false });
// 3) Crée un trajet multi-points avec l'ordre optimisé
const t = new Trajectory({ mode: "walking" });
ordered.forEach((p, idx) => t.addPoint(p.lat, p.lon, p.label || `Point ${idx + 1}`));
addAction(t.toComputeAction());
Compatibilité JSON
Le format JSON historique reste supporté.
{
"actions": [
{ "type": "set_mode", "mode": "walking" },
{ "type": "compute_route" }
]
}
Helpers disponibles
- focus(lat, lon, zoom?)
- setMode(mode)
- setStart(lat, lon)
- setEnd(lat, lon)
- computeRoute()
- computeMultiRoute(options)
- scheduleRoute(options)
- inviteAllContacts(options)
- createMarker(options)
- addMarker(title, lat, lon, description?)
- sendFriendRequest(email)
- createInviteLink(email)
- showLayer(name) / hideLayer(name) / setLayer(name, bool) / setLayers(config)
- getLayers()
- getContactsData(options?)
- getPlacesData(options?)
- getTrajectoriesData() / getTrajectories()
- getPlannedElementsData() / getPlanningsData()
- geoPointsFromSearch(query, options?)
- geoPointsFromFilter(filter)
- Product (classe), getProducts(options?), searchProducts(query, options?)
- optimizePath(points, options?)
- callAgent(message, options?) / agentCode(message, options?)
- watchVar(name, value), getWatchedVars(), clearWatchedVars()
- Trajectory (classe)
- Planning (classe)
- addAction(action)