# 🤖 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. ### 4. Sesli Mesaj (Voice Note) Gönderme Telegram'dan sesli mesaj attığınızda n8n akışındaki **OpenAI Whisper Node** sesi deşifre eder ve otomatik olarak `audio` formatında kaset çalar görünümüyle deftere ekler. --- ## 🎙️ Sesli Mesaj (Voice Note) Mimarisi Telegram'dan bir sesli mesaj gönderdiğinizde izlenen adımlar: 1. **Telegram Get File Node:** Gelen `msg.voice.file_id` ses dosyasını Telegram sunucusundan indirir. 2. **OpenAI Whisper Node (STT):** Ses dosyasını metne dönüştürür (*Speech-to-Text*). 3. **Audio Format Özellikleri:** - `type`: `"audio"` - `content`: Whisper tarafından deşifre edilen konuşma metni. - `audioTitle`: `"Telegram_Ses_Kaydi.m4a"` - `audioDuration`: Telegram'dan alınan süre bilgisi (Örn: `01:45`). - `marginNotes`: `["* Whisper AI ile otomatik deşifre edildi 🎙️"]` --- ## 🧠 AI (Yapay Zeka) ile Akıllı Mood, Kenar Notu ve Etiket Tespiti ### **Kesinlikle AI Eklemenizi Öneririm! Neden mi?** İnsan ruh hali ve yazılan düşünceler karmaşıktır. Statik kod kuralları (`if text.includes(...)`) yerine n8n içerisine **OpenAI (GPT-4o-mini)** veya **Claude 3.5 Haiku** düğümü eklediğinizde AI sizin **Kişisel Editörünüz & Mood Küratörünüz** gibi davranır. ### AI Eklemenin Kazandırdığı 4 Harika Özellik: 1. **Akıllı Mood Tespiti:** Yazdığınız samimi cümlenin ruh halini doğrudan 5 ana kategoriden birine eşler (`spark`, `focus`, `night`, `calm`, `visual`). 2. **Esprili Kenar Notları (Marginalia):** AI, yazdığınız mesaja uygun samimi el yazısı kenar notları uydurur (Örn: *"← tam olarak bu!"*, *"çayı tazelemeyi unutma ☕"*, *"derleyici yine haklı çıktı"*). 3. **Damga Seçimi:** AI mesaja en çok uyan damgayı belirler (`ONAYLANDI`, `COMPILED`, `SUÇLU`, `DOĞRU TESPİT`). 4. **Bağlamsal Etiketler:** Metnin özünden en doğru etiketleri üretir (Örn: `["yazılım", "felsefe", "kadıköy"]`). ### AI Node Prompt Örneği (n8n OpenAI / LLM Node): > **Sistem Rolü:** Sen Mustafa Yıldız'ın (mstfyldz) kişisel dijital günlüğünün yapay zeka yayın editörüsün. Görevin, Telegram'dan gelen döküntü metinleri veya ses transkriptlerini inceleyerek JSON formatında mood ve meta veri çıkarmaktır. > > **Taramak İstediğimiz Mood Türleri:** > 1. `spark`: Fikir Patlaması (Ani aydınlanmalar, harika fikirler, heyecanlı projeler) > 2. `focus`: Aşırı Odak & Kaos (Kod yazma, teknik problemler, 15 katmanlı soyutlamalar) > 3. `night`: Gece Melankolisi (Saat 03:00 varoluşsal düşünceleri, derin felsefe) > 4. `calm`: Sakin & Karalama (Çay/kahve anları, yürüyüş gözlemleri, dinginlik) > 5. `visual`: Polaroid & Kırıntılar (Fotoğraf açıklamaları, doğa) > > **Beklenen Çıktı (Sadece JSON):** > ```json > { > "mood": "spark", > "moodLabel": "Fikir Patlaması", > "stampedText": "ONAYLANDI", > "tags": ["felsefe", "yazılım"], > "marginNotes": ["← tam olarak bu!", "çayı tazelemeyi unutma ☕"], > "title": "İsteğe bağlı kısa başlık" > } > ``` ### AI Entegrasyonu Sonrası Tam Akış Şeması: ``` [ Telegram Sesli/Metin Mesajı ] │ ▼ [ OpenAI Whisper (Sesli Mesajsa Metne Çevir) ] │ ▼ [ OpenAI GPT-4o-mini (Mood, Kenar Notu, Etiket & Damga Belirle) ] │ ▼ [ POST https://mstfyldz.com/api/posts ] ───► [ PostgreSQL DB ] ``` --- ## 📦 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 }]] } } } ```