Waypoint Optimizer Route planning, GPS tracking and billable-time measurement for field technicians, fully integrated into GLPI. Overview What Waypoint Optimizer does Waypoint Optimizer is designed for organisations whose technicians travel to different locations to resolve tickets. The technician selects the tickets to visit in the mobile app, and the system calculates the most efficient order of stops. From that moment on, every journey and every intervention is measured and stored: how far the technician actually travelled, how long each trip took, how long the work at each site lasted, and how much of that is billable. The result is a field operation that can be planned, audited and invoiced with real data instead of estimates. Key benefits Optimised route planning: select the tickets and the system calculates the most efficient order of stops using the Google Routes API. Automatic time tracking: travel time and on-site working time are recorded separately, with no paperwork for the technician. Real distance vs. estimate: every stop stores both what Google predicted and what the technician actually drove, so deviations are visible. Live visibility for supervisors: follow the team's position and active routes from the GLPI web interface. Full audit trail: every route is versioned. Changes made on the road never overwrite the original plan. Data export: download all journey data as CSV, with per-technician and per-day totals, for invoicing or analysis. How it works: the model Understanding four concepts is enough to use the plugin correctly. 2.1 A route contains several tickets A route is a day's itinerary: one technician, several stops. Each stop corresponds to one GLPI ticket that has a location assigned. The plugin decides the best order in which to visit them. A route is not tied to a single ticket — it groups all the tickets the technician plans to visit in that journey. 2.2 Two different timers The plugin measures two things that must not be confused: Waypoint (travel): the trip from where the technician is to the ticket's location. Starts when the technician taps Start before setting off, and stops on arrival. ActualTime (work): the time spent actually resolving the ticket on site. It starts automatically the moment the technician stops the travel timer, and is recorded against the ticket through the ActualTime plugin. NoteThe two never run at the same time: stopping the travel timer is what starts the work timer. 2.3 Route versions A route can be modified while it is in progress — adding a stop, removing one, or reordering. Each modification creates a new version of the route instead of overwriting it. The web interface keeps the complete version history, so it is always possible to see what was originally planned and what actually happened. 2.4 Four distance and time metrics Each stop stores several measurements. They answer different questions and are not interchangeable — this is the part most worth understanding before reading any report. Metric What it measures Where it comes from Actual What the technician really travelled on that leg. Measured between the GPS position where the trip started and where it ended. Leg planned What Google predicted for that single leg, when the trip started. Google, calculated at the moment the technician sets off. Route planned What Google predicted for the whole optimised route. Identical for every stop of the same route. Google, calculated once when the route is created. Billing What is charged to the customer for the trip. Not a measurement of the journey. Distance from the base to the ticket (doubled if return-trip billing is enabled). Why Actual and Leg planned can differ a lot: the estimate assumes a vehicle following the road network from the previous point, while the real measurement reflects what actually happened — a short walk between two nearby sites, a detour, or traffic. A large gap is information, not necessarily an error. Why Billing is separate: it always measures base → ticket, regardless of the order in which stops were visited. This keeps invoicing predictable and independent of the route the technician happened to follow that day. Requirements Before installing, check every point in this list. The plugin will not work if any of them is missing. GLPI 10.0.0 – 10.1.0. Required plugins: gappextended (2.21.0 or later) and actualtime. Both must be installed and enabled. Google API key with the Routes API and Distance Matrix API enabled. Without a valid key no route can be calculated and distances will be empty. The mobile app, installed on the technicians' devices. Route creation and execution happen in the app; the GLPI web interface is used for configuration, supervision and reporting. Technician accounts must be central users (not self-service) for the Waypoint section to appear in the app. Location permissions granted to the app, including background location, so tracking continues while the phone is locked. ImportantWaypoint depends on gappextended. If gappextended is disabled, Waypoint is disabled with it — a cascading failure worth remembering when troubleshooting. Setup Installation From the GLPI Marketplace: search for Waypoint and install it in one click. Manually: download the plugin from the repository, extract it into the GLPI plugins folder, then install and enable it from Setup > Plugins. GLPI Setup > Plugins — Waypoint, Gapp eXtended and ActualTime all installed and enabled. Configuration 5.1 Plugin settings All options below are grouped under Setup > General > Gapp eXtended (not a dedicated "Waypoint" page — Waypoint's settings share that tab with a few unrelated Gapp eXtended options, further up on the same screen). Setting Description API Mandatory. Your Google API key. Route optimisation and all distance calculations depend on it. If it is missing, routes cannot be created and distance fields stay empty. Task categories with waypoints Which GLPI task categories generate a travel waypoint. Task categories with vehicle waypoints Same as above, for journeys made with a company vehicle. Max duration Safety limit for a running timer. A timer left open beyond this duration is stopped automatically, so a forgotten timer does not record an entire night as travel time. Enable user geolocation General user tracking, independent of routes. Leave this disabled if you use Waypoint routes — the two tracking modes are not compatible and will interfere with each other. Billing includes return trip (from 1.7.0) No (default): only the outbound trip, base → ticket, is billed. This also halves the number of Google API calls. Yes: outbound and return distances and durations are added together. Setup > General > Gapp eXtended — every Waypoint setting from the table above, on the lower half of the same tab (API key field masked). 5.2 Create locations with coordinates Define in GLPI the locations your technicians will visit, and give each one its latitude and longitude. This step is mandatory: a ticket whose location has no coordinates cannot be included in a route. A GLPI Location form with the Latitude and Longitude fields filled in. 5.3 Configure profile permissions Go to Administration > Profiles, choose a profile and open its Waypoint section. Assign rights according to each role's responsibilities. Right What it allows Typical role View routes Access the Routes administration area and its history. Supervisor, manager Link tickets to routes Mark a ticket as eligible to be included in a route. Dispatcher, technician Export route data Download the CSV export from the ticket list. Manager, billing View live routes See routes currently in progress in real time. Supervisor, dispatcher The Geolocation section has its own separate right, provided by the gappextended plugin. Grant it to the profiles that need to see technician positions; without it, the Geolocation tabs are not accessible. Administration > Profiles > Technician > Waypoint — the four rights matrix, all unchecked by default on a fresh profile. 5.4 Make tickets eligible for routes For a ticket to appear in the app when building a route, two conditions must both be met: The ticket has the "Linking to route" option set to Yes on its form, and a location with coordinates. The ticket is assigned to the technician who is building the route. If a ticket does not show up in the app's selection list, one of these two is almost always the reason. A ticket form with "Linking to route" set to Yes and a Location assigned (right-hand panel). Daily use Daily use — technician (mobile app) 6.1 Open the Waypoint section Once the plugin is installed and the technician's profile has the right permissions, a Waypoint entry appears in the app's main menu. The app's main menu — "Route optimizer" among the other modules. 6.2 Create the route If there is no route in progress, the screen shows an empty state. Tap the "+" button to start planning. A list of eligible tickets opens — those linked to a route and assigned to the technician. Select the ones to visit. When you confirm, the optimal order of stops is calculated automatically based on distance and traffic conditions. If a particular ticket must be visited first regardless of what the optimiser suggests, long-press it before confirming. A star marks it, and it will be placed as the first stop; the remaining stops are optimised around it. "There is no active Route" — the empty state, with the "+" button to start planning. "Choose your tickets" — two tickets selected, #39 additionally marked with the star that forces it as the first stop. 6.3 The route screen Once created, the route is shown as an ordered list of stops, each with its ticket and location. Each stop offers two buttons: Play: opens the travel panel for that stop, where the trip is started and stopped. Map: opens your usual maps application (Google Maps, Waze, etc.) with the destination already set, so you can start turn-by-turn navigation there. Tapping the body of a stop opens a summary of the ticket — title, location, status and assigned technician — with a shortcut to open the full ticket without leaving the route. The options menu (⋮) at the top offers two actions: Edit route: add stops, remove them or change the order. Each change creates a new version of the route and keeps the previous one in the history. Cancel route: ends and discards the current route if it will not be completed. The route screen: current ticket, current stop and the upcoming stops queued below. The options menu open, with "Edit route" and "Cancel route". Ticket summary panel — location and description, with a shortcut to view the full ticket. 6.4 Complete a stop This is the core cycle, repeated for every stop on the route. Set off. Tap Play on the stop and then Start. GPS tracking and the travel timer begin. Use the Map button whenever you want guided navigation. Arrive. Tap Stop. The trip is closed, the distance actually travelled is recorded, and the work timer starts on its own — you do not need to start it manually. Work on the ticket. The work timer keeps running, and a notification on the phone shows it is active even if you leave the app. Finish. Tap Stop on the work timer. The stop is marked as completed and the route moves on to the next one. When the last stop is completed, the route is closed automatically. There is no separate "finish route" button. Travel panel before departure — GO button, timer at 00h 00m:00s. "On the way" — the travel timer running, END button to mark arrival. "Working on site" — the work timer already running right after the trip was stopped, with no manual start needed. The phone's notification tray showing the active ActualTime timer while the app is in the background. Daily use — supervisor (GLPI web) Profiles with the corresponding rights get two new sections in the GLPI administration area. 7.1 Geolocation Focused on where technicians are. It has four tabs: Last Geolocation: the most recent recorded position of each technician on an interactive map — where the team is right now. All Geolocation: the full position history, using GLPI's standard search filters. Narrow the results by date range, technician, linked ticket or location, and export them for analysis. Waypoints: the same kind of search, but over the raw GPS trail (every point recorded during a trip) rather than the start/end positions — useful to inspect exactly how a route was walked or driven. Live Routes: only the routes currently in progress, for real-time follow-up of each technician. "Last Geolocation" — the most recent position of each technician. Only one technician has reported a position in this environment. "Waypoints" — searchable GPS trail, filterable by date, user and more. The cluster marker groups nearby points; click it to zoom in. "Live Routes" with a technician actively running a route — the marker shows the current position, numbered pins are the remaining stops. 7.2 Routes Focused on the detail and history of each journey. The list shows all routes, completed and in progress, with configurable columns: route, technician, creation date, status, number of stops, distance and accumulated time. As with any GLPI list, columns can be customised, sorted and filtered. Opening a route shows its itinerary on a map with every geolocated point, making it easy to see the order followed, the distance between points and the partial times. It is the quickest way to analyse efficiency or spot a deviation from the plan. Because a technician may add or skip stops on the road, each route keeps its version history. Reading a route means choosing which version you are looking at — the original plan, or the one that was actually executed. The Routes list — Status added as an extra column via the column picker (⚙), showing routes in different states. Route detail: distance, duration and date at the top, the itinerary on the map, and the per-ticket breakdown (order, status, location, billing distance/duration) below. The version selector (top bar) on a route with two versions — "v2 — Completed" and "v1 — Edited". 7.3 Waypoint tab on the ticket A ticket that has been visited within a route gains a Waypoint tab. It shows one card per trip made to that ticket, comparing the estimated, actual and billable figures described in section 2.4. The Waypoint tab on a ticket — Estimated / Real / Billing comparison for one visit. Exporting data (CSV) The export is launched from the ticket list, not from the Routes section: Filter and select the tickets you want to report on. Choose the Export routes CSV massive action. Optionally set a date range to restrict the export to journeys made between those dates, or export everything. Download the file. The CSV contains one row per visit, with the route and its version, the position of the stop in the itinerary and whether it was marked as priority, the ticket and its title, the technician, start and end times, the four distance/time metrics from section 2.4, and the time actually worked on the ticket. Two summary blocks are appended at the end of the file: totals per technician and totals per day, each with number of visits, distance, travel time, billable figures and time worked. This makes the file usable for invoicing without any further processing. Durations are exported in seconds and distances in metres, deliberately: raw units are easier to aggregate in a spreadsheet than pre-formatted text. Three tickets selected in the ticket list, with "Export routes CSV" chosen from the massive action dropdown. The optional date-range step — set a range and click "Generate CSV", or skip it with "Export everything". The resulting CSV: one row per visit (columns A–Q), followed by the "Summary by technician" and "Summary by day" blocks. Reference Interaction with other plugins ActualTime — records the working time at each stop. When the technician stops the travel timer on arrival, Waypoint starts an ActualTime task on that ticket automatically. The resulting time is linked to both the ticket and the route. gappextended — provides the mobile API and the geolocation storage that Waypoint relies on, including the permission that controls access to the Geolocation section. Waypoint cannot run without it. Impacted GLPI items Assistance Tickets — "Linking to route" option and Waypoint tab Administration Profiles — Waypoint rights Geolocation — technician positions and live routes Routes — route history and detail Setup Locations — coordinates are required Current scope and good to know To set expectations correctly, this is what the plugin does not do today: Navigation happens in your maps app. The route screen is an ordered list of stops, not a map with turn-by-turn guidance. The Map button hands the destination over to Google Maps, Waze or whichever app the technician prefers, which is also what gives access to live traffic and voice guidance. Arrival is confirmed by the technician, not detected automatically. There is no geofence: the work timer starts when the technician stops the travel timer on arrival. Timer notifications are local to the technician's phone. They show that a timer is running; they are not GLPI e-mail notifications to supervisors. Supervisors follow progress through the Live Routes tab. Reporting is done through GLPI lists and the CSV export, not through dedicated KPI dashboards. Every route calculation consumes Google API quota. Creating or editing a route triggers several calls. Disabling Billing includes return trip roughly halves that consumption. A ticket visited in more than one route appears once per visit in the CSV. That is intentional — each visit is a separate journey with its own times and distances. Troubleshooting Symptom Most likely cause The Waypoint entry does not appear in the app. The user is a self-service account, lacks Waypoint rights, or gappextended is disabled or below 2.21.0. A ticket is missing from the selection list. "Linking to route" is not set to Yes, the ticket is not assigned to that technician, or its location has no coordinates. The route cannot be created. Missing or invalid Google API key, or the required APIs are not enabled for it. Distances are recorded as zero. Location permissions were not granted, or the GPS had no fix when the trip was started or stopped. Tracking stops when the phone is locked. Background location permission is missing, or the operating system's battery optimisation is suspending the app. Positions are recorded that do not belong to any route. Enable user geolocation is switched on. It is not compatible with route tracking; disable it.