Zones
Group FSAs (first 3 chars of postal codes) into named zones.
| Key | Label | FSAs (comma) | Books to (User ID) | Mode | Color |
|---|
Books to: GHL
On an in-person zone, tick allow virtual to let leads there choose a virtual appointment as an alternative (Edmonton); leave it off for in-person-only zones (Calgary). Tick eve→virtual to auto-route that zone's evening requests to the virtual target.
userId on the shared team calendar this zone's leads are assigned to (free-slots filter + assignedUserId). Leave blank for the calendar's combined availability.
Set one zone's Mode = virtual with a User ID (e.g. the _other catch-all, or a broad T* FSA zone listed after your specific zones) — it becomes the virtual target for unzoned leads, evening reroutes, and any lead the agent books as virtual. Virtual bookings default to a Google Meet link (override per-zone via meeting_location_type: gmeet/phone/custom).
On an in-person zone, tick allow virtual to let leads there choose a virtual appointment as an alternative (Edmonton); leave it off for in-person-only zones (Calgary). Tick eve→virtual to auto-route that zone's evening requests to the virtual target.
Saved
Reps & service area
Each rep's home base + how far they'll travel. Used for drive-time routing (and as the service-area gate that replaces postal-code zones).
| Name | User ID (GHL) | Base address | Radius (min) | Active | Geocode |
|---|
Base address is geocoded on save (we cache the coordinates).
Radius is the max drive time in minutes from that base — a lead farther than this from every active rep falls back to your FSA zones, then virtual.
Geocode shows ✓ once a base resolves; ⚠ means it's blank or couldn't be located (save again after fixing the address).
Saved
Scoring weights
Additive 0–100. Positive values reward; negative values penalize.
Saved
Route weights — Reps engine
Tune drive-time ranking.
travel_per_min = penalty per added drive minute · adjacency_bonus = reward for a short-DRIVE neighbor · time_proximity = reward for a small TIME gap to an adjacent job (packs the day tight) · first_of_day_bonus · cross_rep_overlap_penalty = discourage a 2nd rep entering an area another covers.
Saved
Hard constraints
Slots that fail any constraint are filtered before scoring.
Scope a constraint with an
applies_to key — by zones (specific zone keys), fsa_prefix, or mode ("virtual" / "in_person"). mode is best for "all virtual bookings get a 3-day minimum" — it doesn't break if you rename the virtual zone. Examples:
{ "key": "jason_3wk_lead", "type": "min_lead_time", "hours": 504,
"applies_to": { "zones": ["zone_8","zone_9","zone_10"] } }
{ "key": "virtual_3day", "type": "min_lead_time", "hours": 72,
"applies_to": { "mode": "virtual" } }
A long min_lead_time auto-extends the search window so those slots aren't filtered to empty. Omit applies_to for an org-wide rule. (Friday-only / business-hours are handled by the rep's GHL working hours — no constraint needed.)
Saved
Defaults
Reps ranks slots by drive time across the reps you configure in the Reps tab and gates the service area by each rep's radius. Zones uses postal-code FSAs. This drives the agent's
recommend_slots tool and the Test tab below. Route falls back to Zones automatically if it can't run.
Appended to the LLM's system prompt. Use it to scope the model to a region, define local abbreviations, or flag tricky boundaries.
Saved
Rep day plans
Each rep's upcoming days as an ordered route with drive time between booked stops. Needs geocoded rep bases + leads with coordinates.
Click Load to see each rep's planned route.
Test the engine
Recommend slots without picking a real lead — useful for tuning weights.