package-tracker

TotalClaw 作者 totalclaw

通过 17track API 跟踪包裹和发货。当用户要求跟踪包裹、检查递送状态、添加跟踪号码、列出跟踪的货件或获取递送更新时使用。通过自动运营商检测和跟踪 URL 支持全球 2000 多家运营商。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~joaoleitegmr-package-tracker
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~joaoleitegmr-package-tracker/file -o joaoleitegmr-package-tracker.md
## 概述(中文)

通过 17track API 跟踪包裹和发货。当用户要求跟踪包裹、检查递送状态、添加跟踪号码、列出跟踪的货件或获取递送更新时使用。通过自动运营商检测和跟踪 URL 支持全球 2000 多家运营商。

## 原文

# Package Tracker

Track packages via the 17track universal API. Supports FedEx, UPS, DHL, CTT, China Post, Royal Mail, USPS, and 2000+ other carriers with automatic carrier detection.

## Setup

Run once from the skill directory:

```bash
cd /root/.openclaw/workspace/skills/package-tracker
bash scripts/setup.sh
```

Then edit `scripts/.env` to add your API key:

```
SEVENTEEN_TRACK_API_KEY=your_key_here
```

Get a free key at https://admin.17track.net (100 registrations/month, unlimited status checks).

## Usage

All commands run from the skill directory. Activate the venv first:

```bash
cd /root/.openclaw/workspace/skills/package-tracker
source scripts/venv/bin/activate
```

### Add a Package

```bash
python scripts/cli.py add "TRACKING_NUMBER" -d "Description of contents"
```

- Carrier is auto-detected from the tracking number format
- Override with `-c "FedEx"` if needed
- Uses 1 registration from monthly quota (100/month free)
- Returns a tracking URL for the detected carrier

### Check for Updates

```bash
python scripts/cli.py check
```

- Queries 17track for all active packages
- Prints status changes and new tracking events
- Outputs notifications to stdout for OpenClaw to relay via native messaging
- gettrackinfo calls are free and unlimited

### List Packages

```bash
python scripts/cli.py list          # Active only
python scripts/cli.py list --all    # Include delivered/inactive
```

### Package Details

```bash
python scripts/cli.py details "TRACKING_NUMBER"
```

Shows full tracking history with all events, locations, and timestamps.

### Remove a Package

```bash
python scripts/cli.py remove "TRACKING_NUMBER"
```

Deactivates tracking (does not delete history).

### Check API Quota

```bash
python scripts/cli.py quota
```

Shows registrations used this month vs. the 100/month free limit.

## Cron Integration

Set up periodic checks with cron or OpenClaw heartbeats.

### Using cron (every 3 hours)

```bash
# Add to crontab:
0 */3 * * * cd /root/.openclaw/workspace/skills/package-tracker && scripts/venv/bin/python scripts/check_updates.py --quiet
```

### Using OpenClaw heartbeat

In your heartbeat logic, include:

```bash
cd /root/.openclaw/workspace/skills/package-tracker
source scripts/venv/bin/activate
python scripts/check_updates.py
```

The check_updates.py script:
- Checks all active packages for updates
- Prints notifications to stdout for OpenClaw to relay
- Exits 0 on success, 1 on error
- Use `--quiet` to suppress output when there are no updates

## Notifications

When updates are detected, the tracker outputs formatted notifications to stdout. OpenClaw reads this output and relays it via its native message tool — which works on Telegram, Signal, Discord, WhatsApp, or whatever channel the user has configured.

## Tracking URLs

Every package gets a carrier-specific tracking URL:

| Carrier | URL Pattern |
|---------|------------|
| FedEx | `fedex.com/fedextrack/?trknbr={tn}` |
| UPS | `ups.com/track?tracknum={tn}` |
| DHL | `dhl.com/en/express/tracking.html?AWB={tn}` |
| CTT | `ctt.pt/.../objectSearch.jspx?objects={tn}` |
| USPS | `tools.usps.com/go/TrackConfirmAction?tLabels={tn}` |
| Fallback | `t.17track.net/en#nums={tn}` |

The `get_tracking_url(tracking_number, carrier)` function in tracker.py generates these.

## Status Codes

| Status | Emoji | Meaning |
|--------|-------|---------|
| pending | ⏳ | Just added, not yet checked |
| Not Found | ❓ | 17track has no data yet |
| In Transit | 🚚 | Package is moving |
| Pick Up | 📬 | Ready for pickup |
| Delivered | ✅ | Delivered (auto-deactivated) |
| Undelivered | ⚠️ | Delivery attempt failed |
| Expired | ⌛ | Tracking data expired |
| Alert | 🚨 | Exception or issue |

Delivered packages are automatically deactivated.

## Data Storage

- **Database:** `scripts/data/tracker.db` (SQLite)
- **Tables:** `packages`, `tracking_events`, `api_usage`
- All data is local. Nothing is sent externally except 17track API calls.

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `SEVENTEEN_TRACK_API_KEY` | Yes | 17track API key from admin.17track.net |

## Troubleshooting

- **"API key not set"** — Edit `scripts/.env` and add your 17track key
- **"Monthly limit reached"** — Free tier is 100 registrations/month. Wait or upgrade.
- **No carrier detected** — Pass `-c "CarrierName"` when adding, or let 17track auto-detect (carrier code 0)

## References

- `references/carriers.md` — Full list of supported carriers with patterns and URLs
- `references/17track-api.md` — API endpoint reference, status codes, rate limits