askill
agentic-n8n

agentic-n8nSafety 90Repository

Build automated fleet monitoring workflows using n8n. Use this skill when asked to create agents, automations, or monitoring systems that connect Geotab to external services like Slack, Discord, email, or other APIs.

5 stars
1.2k downloads
Updated 2/7/2026

Package Files

Loading files...
SKILL.md

Agentic Fleet Monitoring with n8n

When to Use This Skill

  • Building automated monitoring that runs on a schedule
  • Sending Geotab alerts to Slack, Discord, Teams, or email
  • Creating multi-step workflows (detect → decide → act)
  • Integrating Geotab with external systems without writing code
  • Any "if this happens in Geotab, do that" automation

n8n Basics

n8n is a visual workflow builder. Workflows consist of nodes connected together:

[Trigger] → [Action] → [Action] → [Action]

Common Nodes

NodePurpose
Schedule TriggerRun workflow on interval (every 5 min, hourly, etc.)
HTTP RequestCall any API (including Geotab)
IFBranch based on condition
FilterOnly pass items matching criteria
SlackSend Slack messages
DiscordSend Discord messages
Send EmailSend email alerts
CodeCustom JavaScript logic

Geotab API Pattern in n8n

Step 1: Authenticate

HTTP Request node: {% raw %}

Method: POST
URL: https://my.geotab.com/apiv1
Body (JSON):
{
  "method": "Authenticate",
  "params": {
    "database": "{{ $vars.GEOTAB_DATABASE }}",
    "userName": "{{ $vars.GEOTAB_USERNAME }}",
    "password": "{{ $vars.GEOTAB_PASSWORD }}"
  }
}

{% endraw %}

Step 2: Fetch Data

HTTP Request node (after Authenticate): {% raw %}

Method: POST
URL: https://my.geotab.com/apiv1
Body (JSON):
{
  "method": "Get",
  "params": {
    "typeName": "Trip",
    "credentials": {{ JSON.stringify($json.result.credentials) }},
    "search": {
      "fromDate": "{{ $now.minus({hours: 1}).toISO() }}",
      "toDate": "{{ $now.toISO() }}"
    }
  }
}

{% endraw %}

Common TypeNames

TypeNameData
DeviceVehicles
TripCompleted trips
UserUsers and drivers
DeviceStatusInfoCurrent location/status
ExceptionEventRule violations (speeding, etc.)
FaultDataEngine fault codes
ZoneGeofences
LogRecordGPS breadcrumbs

Workflow Patterns

Pattern: Speeding Alerts to Slack

Schedule (15 min)
  → HTTP Request (Authenticate)
  → HTTP Request (Get Trips)
  → Filter (speedingDuration > 30)
  → Slack (Send message)

Filter node condition: {% raw %}

{{ $json.result.speedingDuration > 30 }}

{% endraw %}

Slack message: {% raw %}

🚨 *Speeding Alert*
*Vehicle:* {{ $json.result.device.name }}
*Duration:* {{ $json.result.speedingDuration }} seconds

{% endraw %}

Pattern: Fault Code Alert

Schedule (5 min)
  → HTTP Request (Authenticate)
  → HTTP Request (Get FaultData, last hour)
  → Filter (severity == "Critical")
  → Slack + Email (parallel)

Pattern: Geofence Entry Notification

Schedule (5 min)
  → HTTP Request (Authenticate)
  → HTTP Request (Get ExceptionEvent for zone rules)
  → Filter (new events only)
  → Discord (Send notification)

Pattern: Daily Fleet Summary

Schedule (daily at 8am)
  → HTTP Request (Authenticate)
  → HTTP Request (Get Trips, last 24h)
  → Code (calculate totals)
  → Email (send summary)

Code node for summary:

const trips = $input.all();
const totalDistance = trips.reduce((sum, t) => sum + (t.json.result?.distance || 0), 0);
const totalTrips = trips.length;

return [{
  json: {
    totalTrips,
    totalDistanceKm: (totalDistance / 1000).toFixed(1),
    date: new Date().toISOString().split('T')[0]
  }
}];

Credential Security

Never hardcode credentials. Use n8n Variables:

  1. Go to SettingsVariables
  2. Add:
    • GEOTAB_DATABASE
    • GEOTAB_USERNAME
    • GEOTAB_PASSWORD

Reference in nodes: {% raw %}{{ $vars.GEOTAB_DATABASE }}{% endraw %}

Alert Destinations

Slack Webhook

  1. Create app at api.slack.com/apps
  2. Enable Incoming Webhooks
  3. Copy webhook URL
  4. Use in Slack node with "Webhook" authentication

Discord Webhook

  1. Server Settings → Integrations → Webhooks
  2. Create webhook, copy URL
  3. Use in Discord node

Email

n8n Cloud includes email sending. Self-hosted needs SMTP config.

Avoiding Common Mistakes

Rate Limiting

Don't poll every second. Use 5-15 minute intervals for most cases.

Duplicate Alerts

Track what you've already alerted on. Use a Code node to filter:

// Store last run timestamp in static data
const lastRun = $getWorkflowStaticData('global').lastRun || 0;
$getWorkflowStaticData('global').lastRun = Date.now();

// Filter to only new items
return $input.all().filter(item => {
  const itemTime = new Date(item.json.result?.start).getTime();
  return itemTime > lastRun;
});

Credential Expiry

Geotab sessions expire. Always authenticate at the start of each workflow run.

Testing

  1. Build workflow
  2. Click "Test Workflow" (or Cmd/Ctrl + Enter)
  3. Check each node for errors (red = error)
  4. Fix issues, re-test
  5. When working, click "Active" to enable

n8n Resources

Related Skills

  • geotab-api-quickstart - Geotab API basics for Python
  • geotab-addins - Building MyGeotab Add-Ins

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

95/100Analyzed 2/12/2026

An excellent, highly actionable skill for building n8n workflows with Geotab. It provides concrete code snippets, security best practices, and common patterns.

90
95
85
95
98

Metadata

Licenseunknown
Version-
Updated2/7/2026
Publisherfhoffa

Tags

apici-cddatabasegithub-actionsobservabilitysecuritytesting