diff --git a/TELEGRAM_N8N_AUTOMATION.md b/TELEGRAM_N8N_AUTOMATION.md new file mode 100644 index 0000000..351e81c --- /dev/null +++ b/TELEGRAM_N8N_AUTOMATION.md @@ -0,0 +1,220 @@ +# 🤖 Telegram & n8n ile Otomatik Not Ekleme Rehberi + +Bu rehber, Telegram üzerinden tek bir mesaj atarak `mstfyldz journal` defterinize doğrudan yeni notlar, fikirler, kod parçaları veya polaroid görseller eklemenizi sağlayan **n8n otomasyon mimarisini** açıklar. + +--- + +## 🎯 Mimari Genel Bakış + +``` +[ Telegram Mesajı ] + │ + ▼ (BotFather Webhook) +[ n8n Telegram Trigger ] + │ + ▼ (Güvenlik Kontrolü: Yalnızca Sizin Chat ID'niz) +[ n8n Code / AI Node ] ────► (Format, Mood ve Etiketleri Otomatik Algılar) + │ + ▼ (HTTP Request Node) +[ POST https://mstfyldz.com/api/posts ] ───► [ PostgreSQL DB ] + │ + ▼ (Onay Mesajı) +[ Telegram Bot Cevabı ] ────► "✅ Not Deftere Karalandı!" +``` + +--- + +## 📋 Ön Gereksinimler + +1. **Telegram Bot Token:** `@BotFather` üzerinden oluşturulmuş bot token'ı. +2. **n8n Sunucusu:** Çalışan bir n8n instance'ı. +3. **Journal API:** Sitenizin `https://mstfyldz.com/api/posts` adresi (veya doğrudan PostgreSQL bağlantısı). + +--- + +## 🛠️ Adım Adım Kurulum Rehberi + +### Adım 1: Telegram Bot Oluşturma +1. Telegram'da **@BotFather** kullanıcısını aratın ve başlatın. +2. `/newbot` komutunu gönderin. +3. Botunuza bir isim verin (Örn: `mstfyldz_journal_bot`). +4. BotFather'ın verdiği **HTTP API Token**'ı kopyalayın. +5. BotFather'a `/mybots` yazıp botunuzu seçin ve **Chat ID**'nizi öğrenmek için botunuza ilk mesajı atın. + +--- + +### Adım 2: n8n Workflow Düğümleri (Nodes) + +#### 1. Telegram Trigger Node +* **Resource:** `Message` +* **Event:** `Message Received` +* **Credentials:** BotFather'dan aldığınız API Token. + +#### 2. Security Switch / If Node (Sadece Sizin Mesajlarınızı Kabul Eder) +* **Condition:** `{{ $json.message.from.id }}` EQUALS `[SİZİN_TELEGRAM_CHAT_ID]` +* *Amacı:* Yabancı kişilerin botunuza mesaj atarak veritabanınıza not eklemesini engeller. + +#### 3. Code Node (Format & Payload Dönüştürücü) +Gelen mesaj metnini `mstfyldz journal` API formatına dönüştürür: + +```javascript +const msg = $input.item.json.message; +const text = msg.text || msg.caption || ""; + +// Tarih ve Saat Formatı (Örn: 16 AĞU 2026 • 17:30) +const now = new Date(); +const dateStr = now.toLocaleDateString("tr-TR", { day: "2-digit", month: "short", year: "numeric" }).toUpperCase(); +const timeStr = now.toLocaleTimeString("tr-TR", { hour: "2-digit", minute: "2-digit" }); + +// Etiketleri algıla (Örn: #felsefe #kod -> ["felsefe", "kod"]) +const tagMatches = text.match(/#[\wĞÜŞİÖÇğüşiöç]+/g) || []; +const tags = tagMatches.map(t => t.replace("#", "")); +if (tags.length === 0) tags.push("telegram"); + +// Etiketleri içerikten temizle +const cleanContent = text.replace(/#[\wĞÜŞİÖÇğüşiöç]+/g, "").trim(); + +// Format Tespiti (Kod bloğu, fotoğraf veya standart metin) +let type = "sticky"; +let title = undefined; +let codeSnippet = undefined; + +if (text.includes("```")) { + type = "code"; + const codeMatch = text.match(/```(?:\w+)?\n([\s\S]*?)```/); + codeSnippet = codeMatch ? codeMatch[1] : text; + title = "Telegram Kod Kırıntısı"; +} else if (msg.photo) { + type = "polaroid"; +} else if (cleanContent.length > 200) { + type = "notebook"; + title = cleanContent.split("\n")[0].substring(0, 50); +} + +// Mood Tespiti (Rastgele veya içerik bazlı) +const moods = ["spark", "focus", "night", "calm", "visual"]; +const moodMap = { + spark: "Fikir Patlaması", + focus: "Aşırı Odak & Kaos", + night: "Gece Melankolisi", + calm: "Sakin & Karalama", + visual: "Polaroid & Kırıntılar" +}; +const selectedMood = msg.photo ? "visual" : (type === "code" ? "night" : "spark"); + +return { + json: { + id: `post-tg-${Date.now()}`, + type, + date: dateStr, + timestamp: timeStr, + mood: selectedMood, + moodLabel: moodMap[selectedMood], + title, + content: cleanContent || "Telegram'dan gönderilen görsel", + marginNotes: ["← Telegram ile atıldı 📱"], + tags, + likes: 1, + stampedText: "TELEGRAM", + codeSnippet + } +}; +``` + +#### 4. HTTP Request Node (Veritabanına Kayıt) +* **Method:** `POST` +* **URL:** `https://mstfyldz.com/api/posts` (veya `http://65.109.236.58:3000/api/posts`) +* **Headers:** `Content-Type: application/json` +* **Body Parameters:** `JSON.stringify($json)` + +#### 5. Telegram Response Node (Onay Bildirimi) +* **Resource:** `Message` +* **Operation:** `Send Message` +* **Text:** `✅ *Not Deftere Karalandı!*\n\n📌 *Format:* {{ $json.type }}\n💡 *Mood:* {{ $json.moodLabel }}\n🏷️ *Etiketler:* #{{ $json.tags.join(' #') }}` + +--- + +## ⚡ Telegram Kullanım Örnekleri + +### 1. Hızlı Fikir / Post-it Notu +```text +Bugün sade mimarilerin karmaşık mimarilere göre 10 kat daha hızlı bakım sağladığını bir kez daha gördüm. #felsefe #yazılım +``` + +### 2. Kod Kırıntısı Gönderme +```text +n8n webhook ile gelen veriyi parse eden JS fonksiyonu #js #automation +```javascript +const clean = text.trim(); +``` +``` + +### 3. Polaroid Fotoğraf Gönderme +Telegram'dan bir fotoğraf yükleyip altına açıklama yazdığınızda otomatik olarak `polaroid` formatına dönüştürülür. + +--- + +## 📦 n8n Hazır Workflow JSON (Import Edilebilir) + +Aşağıdaki JSON verisini n8n'de **Import from JSON** alanına yapıştırarak tüm workflow'u saniyeler içinde oluşturabilirsiniz: + +```json +{ + "name": "mstfyldz Journal - Telegram Automation", + "nodes": [ + { + "parameters": { + "updates": ["message"] + }, + "name": "Telegram Trigger", + "type": "n8n-nodes-base.telegramTrigger", + "typeVersion": 1.1, + "position": [250, 300] + }, + { + "parameters": { + "conditions": { + "number": [ + { + "value1": "={{ $json.message.from.id }}", + "operation": "equal", + "value2": 123456789 + } + ] + } + }, + "name": "Auth Check (Chat ID)", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [450, 300] + }, + { + "parameters": { + "method": "POST", + "url": "https://mstfyldz.com/api/posts", + "sendHeaders": true, + "headerParameters": { + "parameters": [ + { + "name": "Content-Type", + "value": "application/json" + } + ] + }, + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={{ JSON.stringify($json) }}" + }, + "name": "HTTP POST to Journal API", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.1, + "position": [850, 300] + } + ], + "connections": { + "Telegram Trigger": { + "main": [[{ "node": "Auth Check (Chat ID)", "type": "main", "index": 0 }]] + } + } +} +```