Metz Connect
Documentation des scripts d'actions
Retour carte

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