{
  "name": "Package tracker (Agent Routines)",
  "nodes": [
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "simple": false,
        "filters": {
          "q": "subject:(shipped OR \"on its way\" OR tracking)"
        },
        "options": {
          "downloadAttachments": true
        }
      },
      "id": "63fca7df-6e2f-5359-a852-015e3cf98d81",
      "name": "Shipping emails",
      "type": "n8n-nodes-base.gmailTrigger",
      "typeVersion": 1.2,
      "position": [
        250,
        300
      ],
      "credentials": {
        "gmailOAuth2": {
          "id": "REPLACE_ME",
          "name": "Gmail account"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "Return JSON only. Keys: carrier, tracking_number, item, expected_date."
            },
            {
              "content": "=Subject: {{ $json.subject }}\nBody: {{ $json.text }}\n\nWorkflow: Gmail trigger for shipping confirmation emails -> AI node extracts carrier, tracking number, item, expected date -> store in a sheet -> schedule every 3 hours: query the tracking page/API for each active item -> notify on status change (out for delivery, delayed, delivered)."
            }
          ]
        },
        "jsonOutput": true,
        "options": {}
      },
      "id": "9065855c-1b07-5af6-b712-1b4507af93b9",
      "name": "Extract tracking",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        490,
        300
      ],
      "credentials": {
        "openAiApi": {
          "id": "REPLACE_ME",
          "name": "OpenAI account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "return $input.all().map(i=>({json:{...i.json.message.content,status:'active'}}));"
      },
      "id": "19f66d30-8bd6-5239-9677-86d84687f9e8",
      "name": "Flatten fields",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        730,
        300
      ]
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Packages"
        },
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": [],
          "schema": []
        },
        "options": {}
      },
      "id": "d770869e-63be-5163-8802-780843903ebf",
      "name": "Store in Packages",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        970,
        300
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "REPLACE_ME",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 */3 * * *"
            }
          ]
        }
      },
      "id": "d406569a-1f68-544e-8642-82679b6f4a5c",
      "name": "Every 3 hours",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        250,
        460
      ]
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_SHEET_ID"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Packages"
        },
        "options": {}
      },
      "id": "c6d7e227-9015-510e-bea4-369791b3d5b6",
      "name": "Read active packages",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        490,
        620
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "REPLACE_ME",
          "name": "Google Sheets account"
        }
      }
    },
    {
      "parameters": {
        "method": "GET",
        "url": "=https://YOUR_TRACKING_API/track/{{ $json.tracking_number }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          },
          "timeout": 10000
        }
      },
      "id": "d98592c7-7d37-5860-be4b-d3b748e4de2b",
      "name": "Query tracking API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        730,
        620
      ]
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#alerts"
        },
        "text": "=Package {{ $json.body.item }}: {{ $json.body.status }}",
        "otherOptions": {}
      },
      "id": "8710bc71-43bb-584a-9d40-8c6906ac454d",
      "name": "Status update",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.2,
      "position": [
        970,
        620
      ],
      "credentials": {
        "slackApi": {
          "id": "REPLACE_ME",
          "name": "Slack account"
        }
      }
    }
  ],
  "connections": {
    "Shipping emails": {
      "main": [
        [
          {
            "node": "Extract tracking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract tracking": {
      "main": [
        [
          {
            "node": "Flatten fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Flatten fields": {
      "main": [
        [
          {
            "node": "Store in Packages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every 3 hours": {
      "main": [
        [
          {
            "node": "Read active packages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read active packages": {
      "main": [
        [
          {
            "node": "Query tracking API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query tracking API": {
      "main": [
        [
          {
            "node": "Status update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": false,
    "source": "https://agentroutines.si/r/package-tracker/"
  },
  "tags": []
}