first commit
This commit is contained in:
239
README.md
Normal file
239
README.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user