FleetWorks’ track-and-trace system automates check calls to carriers, collecting location data, arrival times, and delivery information to improve operational efficiency and provide real-time visibility across your supply chain.

How It Works

Track-and-trace calls follow a simple lifecycle:
  1. Call Initiation: Based on a load’s next check times, the system schedules internal check calls. API calls are executed immediately upon request.
  2. Outbound Call: An AI-powered call is made to the carrier or driver at the scheduled time (for internal scheduling) or immediately (for API requests).
  3. Information Collection: The system collects key data points like current location, ETA, and check-in/out times.
  4. Data Delivery: Information is stored and can be sent to your TMS.
  5. Smart Escalation: Calls are automatically transferred to your staff when needed (late drivers, temperature issues, etc.).

Pickup vs. Delivery Calls

The system supports both pickup and delivery tracking:

Pickup Tracking Calls

  • Focus on confirming driver is on route to pickup location
  • Ask about current location and ETA to the pickup
  • After pickup, verify loaded and unloaded times
  • For reefer loads, confirm temperature settings

Delivery Tracking Calls

  • Focus on delivery status and completion
  • Ask about current location and ETA to delivery
  • After delivery, verify unload time
  • Check for clean BOL or issues
  • For reefer loads, verify temperatures maintained

Multilingual Support

The system provides seamless support for both English and Spanish-speaking drivers:
  1. The system picks up the driver’s language
  2. The conversation continues in the driver’s preferred language
  3. All data collection and escalation logic works identically regardless of language
  4. Logged data is always in English

Smart Escalation

Calls are automatically transferred to your team when human assistance is needed:
  • Driver is running late to an appointment
  • Temperature discrepancies on reefer loads
  • Bill of Lading (BOL) issues or exceptions
  • Any situation requiring human judgment

Data Collected

Track-and-trace calls can collect a variety of information:
  • Current location of the driver
  • Estimated arrival time at next stop
  • Check-in and check-out times
  • BOL status (clean or with exceptions)
  • Reefer temperature for temperature-controlled loads
All collected data is accessible via end of call webhooks and also viewable in the FleetWorks dashboard. Example shape of data collected:
{
    "eta": string | null,
    "summary": string,
    "bol_clean": boolean | null,
    "lumper_fees": number | null,
    "reefer_temp": number | null,
    "check_in_time": string | null,
    "check_out_time": string | null,
    "current_location": string | null,
    "escalated_reason": string | null,
    "on_time_for_next_stop": boolean | null
}
This depends on what kind of questions were asked during the call- fields will be null if the question was not asked.

Example Conversation

ASSISTANT: Hi, this is FleetWorks Logistics, calling about your load going to Lodi, California.

DRIVER: Hey.

ASSISTANT: Hey, are you still on your way to Mendota, California?

DRIVER: I'm I'm, uh, just passed Cromir. Don't you guys have me macro point?

ASSISTANT: Just manually verifying while I have you here. Cromir, California?

DRIVER: Yes sir.

ASSISTANT: Gotcha, Cromir, California. Let me log that. Cool, so your about 9 minutes away from Mendota?

DRIVER: No I did check-in already. At 11 PM.

ASSISTANT: You said 11 PM Pacific, right?

DRIVER: Yea. What was my appointment window starting?

ASSISTANT: Appointment window starts at 10 pm. Let me put in 11 pm for you, one sec. And have you loaded yet at Mendota?

DRIVER: Hang on.

ASSISTANT: Sure thing, take your time.

DRIVER: Yeah. I loaded I'm already on my way to Lodi.

ASSISTANT: Awesome, and what time did ya finish loading?

DRIVER: About 5 minutes ago.

ASSISTANT: That would be around 11:25 PM, right?

DRIVER: Something like that, sure.

ASSISTANT: Alright, uh. Let me put that in. Everything looks good. Are ya on track to make it to the next dropoff?

DRIVER: Yep.

ASSISTANT: And what's your reefer temp set at right now?

DRIVER: Set a 34 I think, but let me double check.

ASSISTANT: Alright.

DRIVER: Yeah. 34.

ASSISTANT: Great, let me put that in. Sorry, did you say 34 degrees?

DRIVER: No. No, sorry. 24.

ASSISTANT: Gotcha, let me update that real quick. Perfect, thanks for confirming that. Everything's all set on my end. Thanks for the update! Drive safe!

DRIVER: Okay.

Triggering Track & Trace Calls

Track & trace calls can be initiated by either campaigns or using the API.

API-Based Triggers

You can trigger a track & trace call using the API endpoint. The request body must match the following schema:
{
  "toPhone": "+19876543210",  // Required: E.164 format
  "callType": "pickup",             // Required: "pickup" or "dropoff"
  "loadNumber": "L12345",          // Required: Your load reference
  "nextStopCity": "Chicago",      // Required
  "nextStopState": "IL",          // Required
  "nextStopApptStart": "2025-01-01T01:00:00Z",  // Required: ISO 8601 format
  "nextStopApptEnd": "2025-01-01T06:00:00Z",    // Required: ISO 8601 format
  "loadStops": [                   // Required: Minimum 2 stops
    {
      "type": "pickup",             // "pickup" or "dropoff"
      "address": {
        "city": "Chicago",
        "state": "IL",
        "country": "US",            // Optional
        "zip": "60601",             // Optional
        "timezone": "America/Chicago" // Optional
      },
      "windowStart": "2025-01-01T01:00:00Z",
      "windowEnd": "2025-01-01T06:00:00Z"     // Can be null
    },
    {
      "type": "dropoff",
      "address": {
        "city": "Los Angeles",
        "state": "CA"
      },
      "windowStart": "2025-01-02T08:00:00Z",
      "windowEnd": null
    }
  ],
  "reeferTemp": "34",              // Optional: Can be string or number
  "waitingAtFacility": false,     // Optional
  "trackingOperatorPhone": "+15559876543",  // Optional
  "metadata": {                    // Optional: Custom metadata for webhook mapping
    "internal_load_id": "ABC123",
    "customer_id": "12345",
    "priority": 1
  }
}
Read more on how to trigger a track & trace call using the API.

Campaign-Based

Create a campaigns using the Track and Trace Check Call agent. Upload a CSV file with your load data to run multiple calls at once. The system automatically runs the track and trace calls and emails you a summary of the results when complete.

CSV Format

A sample CSV file can be downloaded from the Campaigns page of the Fleetworks dashboard. Your CSV should include the following columns: Required Columns:
ColumnDescriptionExample
toPhoneDriver/carrier phone number in E.164 format+19876543210
callTypeEither “pickup” or “dropoff”pickup
loadNumberYour load reference numberL12345
nextStopCityCity of the next stopChicago
nextStopStateState of the next stopIL
nextStopApptStartAppointment window start time (ISO 8601)2025-01-01T01:00:00Z
nextStopApptEndAppointment window end time (ISO 8601)2025-01-01T06:00:00Z
loadStopsJSON array of load stops (minimum 2 stops)See example below
Optional Columns:
ColumnDescriptionExample
reeferTempTarget trailer temperature34
waitingAtFacilityWhether driver is already at facilitytrue
trackingOperatorPhonePhone number for escalations+15559876543

Load Stops Format

The load_stops column should contain a JSON array with the following structure for each stop:
[
  {
    "type": "pickup",
    "address": {
      "city": "Chicago",
      "state": "IL",
      "country": "US",     // Optional
      "zip": "60601",      // Optional
      "timezone": "America/Chicago"  // Optional
    },
    "windowStart": "2025-01-01T01:00:00Z",
    "windowEnd": "2025-01-01T06:00:00Z"  // Can be null
  },
  {
    "type": "dropoff",
    "address": {
      "city": "Los Angeles",
      "state": "CA"
    },
    "windowStart": "2025-01-02T08:00:00Z",
    "windowEnd": null
  }
]

Example CSV Row

to_phone,call_type,reefer_temp,waiting_at_facility,next_stop_appt_start,next_stop_appt_end,next_stop_city,next_stop_state,tracking_operator_phone,load_number,load_stops
+19876543210,pickup,,,2025-06-17T08:00:00Z,2025-06-17T12:00:00Z,Los Angeles,CA,,LOAD123456,"[{""type"":""pickup"",""address"":{""city"":""Los Angeles"",""state"":""CA""},""windowStart"":""2025-06-17T08:00:00Z"",""windowEnd"":""2025-06-17T12:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Phoenix"",""state"":""AZ""},""windowStart"":""2025-06-18T10:00:00Z"",""windowEnd"":""2025-06-18T14:00:00Z""}]"
+19876543210,pickup,28,true,2025-06-16T09:00:00Z,2025-06-16T13:00:00Z,Chicago,IL,+19876543210,12345678,"[{""type"":""pickup"",""address"":{""city"":""San Francisco"",""state"":""CA""},""windowStart"":""2025-06-15T07:00:00Z"",""windowEnd"":""2025-06-15T11:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Denver"",""state"":""CO""},""windowStart"":""2025-06-16T12:00:00Z"",""windowEnd"":""2025-06-16T16:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Houston"",""state"":""TX""},""windowStart"":""2025-06-17T09:00:00Z"",""windowEnd"":""2025-06-17T13:00:00Z""}]"
Note: In CSV format, JSON strings must have their quotes escaped by doubling them (e.g., "" instead of ").