Field Service Settings
Workspace-level Field Service configuration for intake, numbering, service skills, and dispatch scoring.
Field Service settings live at /fsm/settings. Workspace members can read the current configuration, and workspace admins can save changes.
The settings are stored in the fsm_workspace_settings table. The dispatch scorer reads the scoring and service-skill settings every time it ranks technicians.
The settings page is operational, but it is not the full FSM administration suite yet. Dispatch scoring, service-type skill requirements, and unique custom intake aliases are wired into runtime. Deeper SLA, notification, webhook, and finance-automation settings are still separate work.
Current settings page
| Section | Setting | Runtime effect |
|---|---|---|
| Intake and numbering | Intake email alias | Saved as a workspace custom alias. Signed inbound email sent to that exact alias creates an FSM request before the support-ticket fallback runs. |
| Intake and numbering | Request prefix | Saved as the workspace default request prefix. |
| Intake and numbering | Estimate prefix | Saved as the workspace default estimate prefix. |
| Intake and numbering | Work order prefix | Saved as the workspace default work-order prefix. |
| Intake and numbering | Appointment prefix | Saved as the workspace default appointment prefix. |
| Dispatch scoring | Skill weight | Used by dispatchOptimalTech when scoring technician skill match. |
| Dispatch scoring | Proximity weight | Used by dispatchOptimalTech when scoring service-area or coordinate proximity. |
| Dispatch scoring | Workload weight | Used by dispatchOptimalTech when scoring current open appointment load. |
| Dispatch scoring | Truck weight | Used by dispatchOptimalTech when scoring truck inventory availability. |
| Dispatch scoring | Max travel km | Controls the coordinate-distance decay for proximity scoring. |
| Dispatch scoring | Unknown distance score | Baseline proximity score when either the appointment or technician has no coordinates and no same-service-area match. |
| Dispatch scoring | Workload capacity | Number of active jobs treated as a full workload for scoring and warnings. |
| Service type skill map | JSON map of service_type to skill IDs | Used by dispatchOptimalTech to decide which technician skills are required for each work order service type. |
Default dispatch policy
New workspaces start with these defaults:
| Factor | Default |
|---|---|
| Skill weight | 0.4 |
| Proximity weight | 0.3 |
| Workload weight | 0.2 |
| Truck weight | 0.1 |
| Max travel distance | 100 km |
| Unknown-distance score | 0.3 |
| Workload capacity | 10 active appointments |
The four weights are normalized by the scorer, so the score remains in the 0-1 range as long as at least one weight is above zero.
Service-type skill map
The skill map is a JSON object. Keys are the work order service_type values your team uses, and values are arrays of workspace skill IDs.
{
"hvac": ["skill-refrigerant", "skill-electrical"],
"plumbing": ["skill-water-heater"]
}When a work order has a service type with no configured skill map, dispatch gives the skill factor a neutral soft-pass score. That keeps recommendations available while you are still building the taxonomy, but the ranked suggestions will be less precise.
Access control
The settings table uses workspace-scoped row-level security:
| Actor | Access |
|---|---|
| Workspace member | Read settings |
| Workspace admin or owner | Create and update settings |
| Service role | Full access for server-side runtime |
In the UI, non-admin users can see the settings but cannot save changes.
Intake alias routing
Custom aliases are normalized to lowercase when saved. Workestra enforces uniqueness for custom aliases while allowing multiple workspaces to keep the default service@workestra.app value.
The signed inbound email webhook routes an email to FSM when the To address exactly matches a saved custom alias. The default service@workestra.app value is not claimed globally because it is shared by default and cannot identify one workspace by itself.
What is still separate
These areas are not controlled by /fsm/settings yet:
- Service contract SLA defaults. SLA fields still live on service contract rows.
- Webhook subscriptions and delivery policy.
- Notification templates for estimates, reports, SLA breaches, Slack, or Teams.
- Finance auto-invoicing on work-order completion.
- Dispatch calendar, map, GPS, route planning, and drag-and-drop reassignment.
- Full LLM constraint solving. The current dispatch engine is deterministic and greedy.
Related
- Dispatch - how settings affect technician ranking
- Email Intake - current
service@...intake behavior - Service Areas - how same-area matching affects proximity
- Technicians - technician skills, home base, and truck inventory