240 lines
6.7 KiB
Markdown
240 lines
6.7 KiB
Markdown
# Telegram Location Tracker
|
||
|
||
Ein n8n-Workflow zur Verfolgung von Standorten über Telegram, ohne Datenbank-Anforderungen.
|
||
|
||
## Überblick
|
||
|
||
Dieser Workflow ermöglicht es Nutzern, ihre Standorte über einen Telegram-Bot zu teilen. Die Standortdaten werden in einer einfachen JSON-Datei gespeichert und können über eine API abgerufen werden, um sie auf einer Karte anzuzeigen.
|
||
|
||
## Funktionen
|
||
|
||
- **Standort-Erfassung**: Empfängt Standorte über Telegram und speichert sie automatisch
|
||
- **Historien-Verwaltung**: Behält die letzten 100 Standorte
|
||
- **API-Endpunkt**: Stellt Standortdaten per REST-API zur Verfügung
|
||
- **Web-Oberfläche**: Interaktive Karte mit Leaflet.js zur Visualisierung (index.html)
|
||
- **Bestätigungs-Nachrichten**: Sendet Bestätigungen mit Koordinaten und Kartenlink
|
||
- **Keine Datenbank**: Verwendet einfache dateibasierte Speicherung
|
||
|
||
## Voraussetzungen
|
||
|
||
- Eine laufende n8n-Instanz
|
||
- Ein Telegram-Bot mit gültigem API-Token
|
||
- Schreibrechte für `/tmp/n8n-locations.json` auf dem n8n-Server
|
||
|
||
## Installation
|
||
|
||
1. **Workflow importieren**:
|
||
- Öffne deine n8n-Instanz
|
||
- Navigiere zu "Workflows" → "Import from File"
|
||
- Wähle die `tracker.json` Datei aus
|
||
|
||
2. **Telegram-Bot konfigurieren**:
|
||
- Erstelle einen Bot über [@BotFather](https://t.me/botfather)
|
||
- Kopiere das API-Token
|
||
- In n8n: Gehe zu "Credentials" und füge die Telegram-API-Credentials hinzu
|
||
- Weise die Credentials dem "Telegram Trigger" und "Telegram Bestätigung" Node zu
|
||
|
||
3. **Workflow aktivieren**:
|
||
- Öffne den importierten Workflow
|
||
- Klicke auf "Active" um den Workflow zu aktivieren
|
||
|
||
4. **Testen**:
|
||
- Sende einen Standort an deinen Telegram-Bot
|
||
- Du solltest eine Bestätigungsnachricht mit den Koordinaten erhalten
|
||
|
||
## Verwendung
|
||
|
||
### Standort senden
|
||
|
||
1. Öffne den Chat mit deinem Telegram-Bot
|
||
2. Klicke auf das Büroklammer-Symbol (Anhang)
|
||
3. Wähle "Standort"
|
||
4. Sende deinen aktuellen Standort oder wähle einen auf der Karte
|
||
5. Der Bot bestätigt den empfangenen Standort mit Details
|
||
|
||
### Standorte abrufen
|
||
|
||
Der Workflow stellt einen API-Endpunkt zur Verfügung:
|
||
|
||
```
|
||
GET https://deine-n8n-instanz.de/webhook/location
|
||
```
|
||
|
||
**Beispiel-Antwort**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"current": {
|
||
"latitude": 48.1351,
|
||
"longitude": 11.5820,
|
||
"timestamp": "2025-11-14T10:30:00.000Z",
|
||
"user_id": 123456789,
|
||
"first_name": "Max",
|
||
"last_name": "Mustermann",
|
||
"username": "maxmuster",
|
||
"marker_label": "Max Mustermann",
|
||
"display_time": "14.11.2025, 11:30:00",
|
||
"chat_id": 123456789
|
||
},
|
||
"history": [...],
|
||
"total_points": 42,
|
||
"last_updated": "2025-11-14T10:30:00.000Z"
|
||
}
|
||
```
|
||
|
||
### Karten-Ansicht
|
||
|
||
Die Bestätigungsnachricht enthält einen Link zur Karten-Ansicht:
|
||
```
|
||
https://web.unixweb.home64.de/tracker/index.html
|
||
```
|
||
|
||
**Web-Oberfläche (index.html)**
|
||
|
||
Das Repository enthält eine vollständige Web-Oberfläche zur Visualisierung der Standortdaten:
|
||
|
||
**Features**:
|
||
- 📍 Interaktive Karte mit [Leaflet.js](https://leafletjs.com/)
|
||
- 🔄 Auto-Refresh alle 5 Sekunden (kann umgeschaltet werden)
|
||
- 📊 Aktuellster Standort als Marker mit Popup
|
||
- 📈 Standort-Historie als blaue Linie
|
||
- ℹ️ Status-Info mit Anzahl der Datenpunkte
|
||
- 🎯 Automatische Zentrierung auf aktuellen Standort
|
||
|
||
**Verwendung**:
|
||
1. Öffne die `index.html` in einem Browser
|
||
2. Die Karte lädt automatisch die neuesten Standorte
|
||
3. Klicke auf Marker für Details (Name, Zeitstempel)
|
||
4. Schalte Auto-Refresh nach Bedarf um
|
||
|
||
**Konfiguration**:
|
||
Passe die API-URL in `index.html` an deine n8n-Instanz an:
|
||
```javascript
|
||
// Zeile 85:
|
||
const API_URL = 'https://deine-n8n-instanz.de/webhook/location';
|
||
```
|
||
|
||
**Deployment**:
|
||
- Hoste die `index.html` auf einem Webserver (Apache, nginx, etc.)
|
||
- Oder öffne sie direkt als Datei im Browser (für lokale Tests)
|
||
- CORS muss in n8n aktiviert sein (ist standardmäßig der Fall)
|
||
|
||
## Workflow-Struktur
|
||
|
||
### Standort-Erfassung (Hauptfluss)
|
||
|
||
```
|
||
Telegram Trigger
|
||
↓
|
||
Hat Location? (Filter)
|
||
↓
|
||
Location verarbeiten (JS: Daten extrahieren)
|
||
↓
|
||
Lade existierende Daten (Shell: cat JSON-Datei)
|
||
↓
|
||
Merge mit History (JS: Neue Daten hinzufügen)
|
||
↓
|
||
Speichere in File (Shell: JSON schreiben)
|
||
↓
|
||
Telegram Bestätigung (Nachricht an User)
|
||
```
|
||
|
||
### API-Endpunkt
|
||
|
||
```
|
||
Webhook - Location API
|
||
↓
|
||
Lade Daten für API (Shell: cat JSON-Datei)
|
||
↓
|
||
Format API Response (JS: JSON formatieren)
|
||
↓
|
||
JSON Response (CORS-Header + JSON zurückgeben)
|
||
```
|
||
|
||
## Datenspeicherung
|
||
|
||
- **Speicherort**: `/tmp/n8n-locations.json`
|
||
- **Format**: JSON-Array mit Standort-Objekten
|
||
- **Maximale Einträge**: 100 (älteste werden automatisch entfernt)
|
||
- **Persistenz**: Die Datei überlebt n8n-Neustarts, kann aber bei System-Neustarts verloren gehen (da in `/tmp`)
|
||
|
||
### Empfehlung für Produktion
|
||
|
||
Für produktiven Einsatz sollte der Speicherort von `/tmp/n8n-locations.json` zu einem persistenten Pfad geändert werden:
|
||
|
||
```javascript
|
||
// In den Nodes "Lade existierende Daten" und "Lade Daten für API":
|
||
cat /var/lib/n8n/locations.json 2>/dev/null || echo '[]'
|
||
|
||
// In dem Node "Speichere in File":
|
||
echo '...' > /var/lib/n8n/locations.json
|
||
```
|
||
|
||
## Anpassungen
|
||
|
||
### Anzahl gespeicherter Standorte ändern
|
||
|
||
Im Node "Merge mit History" die Zeile ändern:
|
||
|
||
```javascript
|
||
// Von 100 zu z.B. 500 ändern:
|
||
if (locations.length > 500) {
|
||
locations = locations.slice(0, 500);
|
||
}
|
||
```
|
||
|
||
### Datumsformat ändern
|
||
|
||
Im Node "Location verarbeiten" das Locale ändern:
|
||
|
||
```javascript
|
||
// Von 'de-DE' zu z.B. 'en-US' ändern:
|
||
const displayTime = new Date(messageDate * 1000).toLocaleString('en-US');
|
||
```
|
||
|
||
### CORS-Beschränkung
|
||
|
||
Im Node "Webhook - Location API" unter Options → Response Headers:
|
||
|
||
```javascript
|
||
// Aktuell: Alle Origins erlaubt
|
||
"Access-Control-Allow-Origin": "*"
|
||
|
||
// Besser für Produktion:
|
||
"Access-Control-Allow-Origin": "https://deine-domain.de"
|
||
```
|
||
|
||
## Sicherheitshinweise
|
||
|
||
- Der API-Endpunkt ist öffentlich zugänglich - implementiere ggf. Authentifizierung
|
||
- CORS ist für alle Origins geöffnet - beschränke dies in Produktion
|
||
- Die Telegram-Bot-Credentials sollten sicher verwahrt werden
|
||
- Standortdaten sind sensibel - beachte DSGVO-Anforderungen
|
||
|
||
## Fehlerbehebung
|
||
|
||
### "Standort gespeichert" wird nicht angezeigt
|
||
|
||
- Prüfe, ob der Workflow aktiv ist
|
||
- Prüfe die Telegram-Bot-Credentials
|
||
- Schau in die Workflow-Execution-Historie für Fehler
|
||
|
||
### API gibt leere Daten zurück
|
||
|
||
- Prüfe, ob die Datei `/tmp/n8n-locations.json` existiert
|
||
- Teste den Shell-Befehl: `cat /tmp/n8n-locations.json`
|
||
- Prüfe Dateiberechtigungen (n8n muss lesen können)
|
||
|
||
### Standorte gehen nach Neustart verloren
|
||
|
||
- Ändere den Speicherort von `/tmp/` zu einem persistenten Pfad
|
||
- Siehe "Empfehlung für Produktion" oben
|
||
|
||
## Lizenz
|
||
|
||
Dieses Projekt steht zur freien Verfügung.
|
||
|
||
## Support
|
||
|
||
Bei Fragen oder Problemen, erstelle bitte ein Issue in diesem Repository.
|