Lewati ke konten utama

n8n: Panduan dengan Contoh Praktis

Pelajari cara menggunakan n8n untuk membangun agen AI yang mengotomatiskan pemrosesan email dan membuat agen retrieval-augmented generation (RAG) untuk tanya jawab dokumen.
Diperbarui 18 Mei 2026  · 12 mnt baca

n8n telah muncul sebagai kerangka kerja yang populer dan andal dalam AI bertindak (agentic). Ini memungkinkan kita membangun alur kerja otomatis tanpa perlu pengodean yang rumit.

Dalam artikel ini, saya akan menjelaskan langkah demi langkah cara memaksimalkan platform tangguh ini untuk mengotomatiskan dua proses berbeda:

  1. Pertama, saya akan memandu Anda menyiapkan agen AI untuk memproses email dari Gmail secara otomatis, menghemat waktu berharga dan mengurangi pekerjaan manual.
  2. Lalu, kita akan membuat agen cerdas yang dapat mengobrol tentang dokumen apa pun, memberi akses cepat ke informasi di ujung jari kita.

Kami terus memperbarui pembaca tentang perkembangan terbaru AI lewat The Median, buletin gratis setiap Jumat yang merangkum kisah-kisah kunci pekan ini. Berlangganan dan tetap tajam hanya dalam beberapa menit per minggu:

Apa itu n8n?

n8n adalah alat otomasi open-source yang membantu kita menghubungkan berbagai aplikasi dan layanan untuk membuat alur kerja, layaknya lini perakitan digital. Ini memungkinkan pengguna merancang alur kerja secara visual dengan node, masing-masing mewakili langkah berbeda dalam proses.

Dengan n8n, kita dapat mengotomatiskan tugas, mengelola aliran data, dan bahkan mengintegrasikan API, semuanya tanpa membutuhkan keterampilan pemrograman mendalam. Berikut contoh otomasi yang akan kita bangun di tutorial ini:

contoh alur kerja n8n

Tanpa masuk ke detail, berikut deskripsi apa yang dilakukan otomasi ini:

  1. Mengakses akun Gmail kita untuk memeriksa pesan email baru.
  2. Email baru dikirim ke ChatGPT untuk diproses oleh AI.
  3. AI mengidentifikasi informasi relevan, lalu menyimpannya dalam spreadsheet.

Bagaimana cara menggunakan n8n?

Ada dua opsi untuk menggunakan n8n:

  1. Gunakan antarmuka web mereka di sini. Ini memerlukan akun dan langganan berbayar, namun tersedia uji coba gratis 14 hari yang bisa Anda gunakan untuk mengikuti tutorial ini.
  2. Karena bersifat open source, kita juga bisa menjalankannya secara lokal atau meng-host sendiri. Ini gratis dan memberi akses ke hampir semua fiturnya (beberapa fitur eksklusif untuk paket cloud atau enterprise berbayar mereka).

Kedua opsi memungkinkan Anda mengikuti tutorial ini tanpa biaya. Kita akan menjalankannya secara lokal, tetapi jika Anda lebih suka menggunakan antarmuka web, langkah-langkahnya sama.

Apa yang baru di n8n 2.0

Catatan: n8n 2.0 dirilis pada akhir 2025 dan memperkenalkan sistem alur kerja Draft/Publish, penyimpanan otomatis (Januari 2026), panel fokus yang diperbarui untuk mengedit node tanpa kehilangan konteks kanvas, serta Task Runners yang mengisolasi eksekusi alur kerja demi keamanan lebih baik.

Alur kerja di bawah berjalan pada 2.x — jika Anda masih di 1.x, pertimbangkan untuk meningkatkan versi sebelum mengikuti.

Penyiapan n8n Lokal

Repositori resmi n8n menjelaskan cara menyiapkan n8n secara lokal. Cara paling sederhana adalah:

  1. Unduh dan instal Node.js dari situs resmi.

  2. Buka terminal dan jalankan perintah npx n8n.

Selesai! Setelah menjalankan perintah, Anda akan melihat ini di terminal:

Menjalankan n8n secara lokal

Untuk membuka antarmuka, tekan "o" pada keyboard atau buka URL localhost yang ditampilkan di terminal—dalam kasus saya, http://localhost:5678.

Memahami n8n

Sebelum kita membangun otomasi pertama, ada baiknya memahami cara kerja n8n. Sebuah alur kerja n8n terdiri dari rangkaian node. Ini dimulai dengan node pemicu (trigger) yang menentukan kondisi eksekusi alur kerja.

node pemicu n8n

Node saling terhubung untuk memindahkan dan memproses data. Dalam contoh ini, node pemicu Gmail terhubung ke node OpenAI. Ini berarti email diberikan ke ChatGPT untuk diproses. Terakhir, keluaran ChatGPT dikirim ke node Google Sheet, yang terhubung ke Google Sheet di Google Drive kita dan menulis baris baru ke spreadsheet.

Alur kerja khusus ini menggunakan ChatGPT untuk mengidentifikasi tagihan (invoice) yang perlu dibayar dan mengisikan baris di sheet dengan ID tagihan dan harganya.

alur data n8n

Alur kerja n8n bisa jauh lebih kompleks. n8n mendukung lebih dari 400 integrasi resmi (node inti), ditambah 600+ node buatan komunitas dan koneksi kustom melalui node HTTP Request — jadi kita tidak bisa membahas semuanya dalam satu tutorial.

Sebagai gantinya, saya akan fokus memberi gambaran umum cara kerjanya dan latar belakang yang perlu Anda ketahui untuk mengeksplorasinya sendiri. Jika ada alat yang sering Anda gunakan, besar kemungkinan n8n mendukungnya atau Anda bisa mengintegrasikannya secara manual.

Contoh 1: Mengotomatiskan Pemrosesan Tagihan dari Email

Di bagian ini, kita mempelajari cara membangun alur kerja di atas.

Ini adalah kasus penggunaan nyata yang saya pakai untuk mengelola tagihan sewa saya. Saya memiliki rumah dengan beberapa kamar yang saya sewakan. Tagihan dibagi rata di antara semua penyewa. Setiap kali saya menerima tagihan, saya perlu menambahkan totalnya ke spreadsheet yang dibagikan dengan para penyewa.

Saya memiliki alamat email khusus tempat tagihan terkait biaya rumah diteruskan. Dengan begitu, saya tahu semua email di kotak masuk tersebut adalah tagihan. Saya mengirim konten email ke ChatGPT untuk mengidentifikasi ID tagihan dan total yang harus dibayar. Lalu informasi ini ditambahkan ke baris baru di spreadsheet bersama.

Mengonfigurasi pemicu email

Untuk memulai alur kerja baru, kita perlu mengklik tombol "Add first step...".

Memulai alur kerja n8n

Karena ini adalah node pertama, maka harus berupa pemicu (trigger), sehingga kita disajikan panel untuk memilih node pemicu. Node pemicu mendefinisikan kondisi eksekusi alur kerja.

Node pemicu di n8n

Ada beragam node pemicu yang mungkin. Mari pilih node pemicu Gmail dengan mengetik "gmail" di kotak pencarian lalu klik node Gmail.

Memilih node pemicu Gmail di n8n

Lalu, pilih satu-satunya pemicu yang tersedia untuk Gmail: "On message received".

Node pemicu On message received di n8n

Ini akan membuka panel konfigurasi node, tempat kita perlu mengonfigurasi kredensial Gmail agar alur kerja n8n dapat mengakses akun Gmail kita. Untuk melakukannya, klik "New credential". Ini akan membuka jendela berikut:

Mengonfigurasi kredensial Google OAuth di n8n

Di sisi kanan (1), ada panduan penyiapan yang menjelaskan langkah-langkah yang diperlukan untuk mengonfigurasi kredensial di Google Cloud. Panduan dari n8n cukup komprehensif, jadi kita tidak akan mengulang langkahnya di sini. Pastikan juga mengaktifkan Gmail API di Google Cloud Console.

Setelah dikonfigurasi, kita perlu menyalin client ID (2) dan client secret (3) dari Google Cloud ke konfigurasi kredensial di n8n.

Untuk memastikan semuanya terkonfigurasi dengan benar, kita bisa menguji node dengan mengklik "Fetch Test Event."

Menguji alur kerja

Setelah uji, kita seharusnya melihat email terbaru yang kita terima di kotak masuk pada bagian output. Konten email ada pada kolom snippet.

Kolom snippet menyimpan konten email. Tertulis bahwa tagihan internet bulan April saya tersedia. Disediakan ID tagihan dan total yang harus dibayar. Inilah informasi yang ingin kita tambahkan ke spreadsheet. 

Untuk tujuan pengujian, saya sarankan menyematkan output dengan mengklik tombol pin di kanan atas:

Menyematkan hasil node di n8n

Ini akan mengunci hasil pada pemicu, artinya kapan pun kita menjalankan alur kerja ini, output yang sama digunakan, sehingga lebih mudah menguji alur kerja karena hasilnya tidak akan terpengaruh email baru yang mungkin kita terima. Kita akan melepas sematan setelah alur kerja tersetup dengan benar.

Pada tahap ini, alur kerja kita seharusnya memiliki satu node pemicu (kita bisa melihat itu node pemicu karena ada penanda petir kecil di sebelah kiri).

Mengidentifikasi node pemicu di n8n

Perhatikan bahwa, karena kemungkinan Anda tidak memiliki email tagihan di kotak masuk, nanti ChatGPT mungkin memberikan jawaban yang tidak masuk akal. Jika Anda ingin menguji alur kerja ini persis, Anda bisa mengirim email uji ke diri sendiri dengan konten berikut (atau yang serupa):

Dear customer,

Your internet invoice number FT 2025**/****** for April is now available in the attachment.

Amount

€**.**
This invoice must be paid by 19/05/2025.

Setelah Anda mengirim ini, Anda harus melepas sematan hasil, menjalankan ulang node Gmail, dan menyematkan hasil yang baru.

Mengonfigurasi node ChatGPT

Langkah berikutnya adalah mengonfigurasi node OpenAI. Mulailah dengan mengklik tombol "+" di sebelah kanan node pemicu Gmail:

Menghubungkan node di n8n

Ketik "OpenAI" dan pilih opsi yang sesuai dari daftar.

Menemukan node OpenAI di n8n

Lalu, di bawah "Text Actions", pilih node "Message a model". Node ini digunakan untuk mengirim pesan ke LLM.

Membuat node "Message a model" di n8n

Seperti sebelumnya, kita perlu membuat kredensial untuk mengakses OpenAI. Ingat bahwa setelah kredensial dibuat, ia bisa digunakan kembali di alur kerja mana pun. Kita tidak perlu menyetelnya setiap kali.

Untuk kredensial OpenAI, yang kita perlukan hanyalah API key. Jika Anda belum memilikinya, Anda dapat membuatnya di sini. Jika Anda mengalami kesulitan, n8n juga menyediakan panduannya.

Dari sisi konfigurasi, kita perlu memilih model AI yang ingin digunakan dan pesan yang kita kirim ke model.

Untuk modelnya, kita akan menggunakan GPT-4.1. OpenAI sejak itu merilis keluarga GPT-5 (5.4, 5.4-mini, 5.5) dan menghentikan 4.1 dari ChatGPT, tetapi masih tersedia melalui API dan sudah memadai untuk ekstraksi sederhana seperti ini. 

Memilih model AI di n8n

Di kolom pesan, kita perlu memberikan prompt. Untuk contoh ini, kita memberikan model konten email dan memintanya mengidentifikasi ID tagihan dan total yang harus dibayar. Berikut prompt yang saya gunakan:

Mengonfigurasi prompt agen di n8n

Konten email diberikan sebagai {{ $json.snippet }}. Di n8n, prompt dapat berisi variabel yang diisi dari output node sebelumnya, dalam kasus kita adalah email. Daftar kolom yang tersedia terlihat di sebelah kiri. Kita bisa mengetik kolomnya secara manual atau drag and drop ke prompt.

Untuk mengujinya, klik tombol "Test Step" di bagian atas panel konfigurasi. Hasilnya ditampilkan di sebelah kanan:

Hasilnya adalah string dengan jawaban dari model. Kita ingin memiliki dua kolom secara terpisah, sehingga kita tidak perlu memproses pesan lebih lanjut. Kita bisa mencapainya dengan mengubah output LLM menjadi JSON:

Mengonfigurasi format output di n8n

Setelah menguji langkah ini lagi, kita mendapatkan dua kolom sebagai data JSON:

Mengirim data ke Google Sheet

Langkah terakhir dalam alur kerja ini adalah mengirim ID tagihan dan harga ke baris baru di Google Sheet. Pada tahap ini, kita perlu menghubungkan output node OpenAI ke Google Sheets. Kita melakukannya seperti sebelumnya dengan mengklik tombol "+" di sebelah kiri node:

Menambahkan node terakhir di n8n

Di sini kita ingin mengetik Google Sheets dan memilih node "Append row in sheet":

Memilih node Google Sheets di n8n

Kita bisa menggunakan kredensial yang sama untuk akses Gmail. Namun kita perlu mengaktifkan API berikut di Google Cloud Console:

  • Google Sheets API
  • Google Drive API

Untuk mengonfigurasi node Google Sheets, kita perlu memilih sheet dan memilih nilai untuk mengisi kolom. Sheet harus dibuat secara manual dengan dua kolom, satu untuk ID tagihan dan satu lagi untuk total tagihan.

Keadaan awal spreadsheet

Nilai-nilai tersebut diambil dari output node OpenAI. Kita bisa drag and drop ke kolom-kolomnya.

Menjalankan alur kerja

Selesai! Kita memiliki alur kerja yang akan memproses tagihan ke Google Sheet secara otomatis. Kita bisa mengujinya dengan mengklik "Test workflow" di bagian bawah:

Menguji alur kerja di n8n

Setelah menjalankannya, jika kita membuka Google Sheet, kita akan melihat baris baru dengan datanya:

Secara bawaan, alur kerja akan berjalan setiap menit. Bergantung pada alur kerja, kita harus mengonfigurasi frekuensi yang sesuai. Dalam contoh ini, sekali per menit terlalu sering. Sekali per hari lebih tepat. 

Kita bisa mengonfigurasinya dengan klik ganda pada node pemicu dan mengatur nilai berbeda di kolom "Poll Times":

Mengubah frekuensi eksekusi di alur kerja n8n

Contoh 2: Membangun Agen RAG

Di bagian ini, kita membangun alur kerja agen RAG yang lebih kompleks. RAG adalah singkatan dari retrieval-augmented generation, teknik yang menggabungkan pengambilan informasi relevan dari basis data atau dokumen lalu menggunakan model bahasa untuk menghasilkan respons berdasarkan informasi yang diambil.

Ini sangat berguna ketika kita memiliki basis pengetahuan spesifik, seperti dokumen teks panjang, dan ingin membangun agen AI yang mampu menjawab pertanyaan tentangnya. 

Saya suka bermain board game, tetapi saya dan teman-teman sering berdebat tentang aturannya dan akhirnya menghabiskan waktu mencari aturan yang benar alih-alih bermain, yang bisa membuat frustrasi. Membangun agen RAG berdasarkan aturan permainan adalah solusi yang baik untuk mengatasi masalah ini karena lain kali kami punya pertanyaan, kami bisa langsung bertanya ke agen.

Untuk membangun agen ini, kita akan membuat dua alur kerja:

  1. Satu alur kerja yang akan kita jalankan sekali saja untuk mengunggah data ke basis data Pinecone.
  2. Satu lagi yang menjalankan agen RAG dan menggunakan basis data Pinecone untuk menjawab pertanyaan kita.

Memuat data ke Pinecone

Pinecone adalah jenis basis data yang mengelola data dalam bentuk vektor. Basis data vektor seperti Pinecone sangat cocok untuk agen RAG kita karena membantu agen dengan cepat mencari dan memahami informasi relevan, sehingga lebih efisien memberikan jawaban yang akurat.

Karena alur kerja ini hanya perlu dijalankan sekali, kita dapat menggunakan node pemicu manual. Ini adalah node pemicu yang digunakan untuk menjalankan alur kerja secara manual. 

Node pemicu manual di n8n

Hubungkan node pemicu manual ke node “Google Drive” untuk mengunduh data dari Google Drive. 

Node unduh Google Drive di n8n

Gunakan konfigurasi berikut:

Mengonfigurasi node unduhan Google Drive di n8n

Saya menggunakan file publik mtgrules.txt berisi aturan permainan kartu Magic: The Gathering. Anda dapat menggunakan file apa pun yang ingin Anda jadikan bahan tanya jawab; alur kerjanya sama.

Untuk mengonfigurasi Pinecone, masuk ke Pinecone, salin API key, dan buat index dengan mengklik tombol "Create index". Saya menamai index saya rules dan memilih model text-embedding-3-small.

Membuat index Pinecone

Kembali ke n8n, hubungkan output node Google Drive ke node Pinecone Vector Store dengan aksi "Add documents to vector store":

Membuat node Pinecone di n8n 

Untuk mengonfigurasi node, kita perlu membuat kredensial dengan menempelkan API key dan memilih Pinecone Index yang baru kita buat. Di bawah node Pinecone Vector Store, kita melihat dua hal yang perlu dikonfigurasi: model embedding dan data loader.

Mengonfigurasi Pinecone Vector Store di n8n

Untuk embedding, buat node OpenAI Embedding dengan model text-embedding-3-small:

Konfigurasi embedding Pinecone

Untuk data loader, kita membuat node Default Data Loader dengan tipe data biner:

Konfigurasi data loader Pinecone di n8n

Terakhir, data loader memerlukan Text Splitter node, yang menentukan bagaimana data dari file harus dipecah saat membuat vector store. Kita menggunakan node Recursive Character Text Splitter, yang direkomendasikan untuk sebagian besar aplikasi.

Menambahkan node text splitter

Kami mengonfigurasinya dengan ukuran potongan 1.000 dan tumpang tindih 200:

Konfigurasi text splitter di n8n

Saat memilih ukuran potongan dan tumpang tindih, pertimbangkan untuk menggunakan ukuran potongan lebih besar untuk dokumen panjang agar cukup banyak konten yang tertangkap, dan tumpang tindih lebih kecil untuk menjaga konteks antar segmen tanpa redundansi.

Beginilah tampilan akhir alur kerja:

Alur kerja pemuatan data final di n8n

Kita dapat menjalankannya dengan mengklik “Test workflow”, dan setelah selesai, kita dapat memverifikasi di Pinecone bahwa datanya telah dimuat.

Membuat agen RAG

Berikut skema akhir untuk agen RAG:

Alur kerja agen RAG final di n8n

Sebagai latihan, saya mendorong Anda untuk mencoba memahaminya dan bahkan membuat ulang sendiri secara lokal sebelum membaca lebih lanjut.

Kita mulai dengan node pemicu "On chat message". Ini digunakan untuk membuat alur kerja obrolan.

Node pemicu On chat message di n8n

Selanjutnya, kita hubungkan pemicu obrolan ke node "AI Agent" dengan opsi bawaan.

Node AI Agent di n8n

Di bawah AI Agent, kita dapat mengonfigurasi tiga hal:

  • Model AI yang digunakan oleh agen.
  • Memori yang menentukan bagaimana agen mengingat konteks percakapan
  • Alat yang dapat diakses agen. Dalam hal ini, kita akan menyediakan basis data Pinecone sebagai alat agar agen dapat menjawab pertanyaan tentang dokumen kita.

Untuk model AI, kita memilih node "OpenAI Chat Model" dan menggunakan GPT-4.1, seperti sebelumnya. Keluarga GPT-5 adalah keluarga model terbaru OpenAI, tetapi 4.1 memiliki jendela konteks 1M token dan cocok untuk RAG.

Mengonfigurasi model AI di n8n

Untuk memori, kita menggunakan node "Simple Memory" dengan panjang jendela konteks 5. Ini berarti agen akan mengingat dan mempertimbangkan lima interaksi sebelumnya saat menjawab.

Terakhir, pada alat, kita menambahkan node "Pinecone Vector Store" dengan konfigurasi berikut:

Konfigurasi alat Pinecone Vector store untuk AI agent di n8n

Pada kolom deskripsi, penting untuk menentukan kapan alat harus digunakan. Inilah yang akan digunakan agen untuk menentukan apakah ia harus memanggil alat tersebut.

Hal terakhir yang kita butuhkan adalah mengonfigurasi embedding yang digunakan oleh vector store. Seperti sebelumnya, kita menggunakan node OpenAI Embedding dengan model text-embedding-3-small:

Konfigurasi embedding di n8n

Alur kerja selesai, dan kita bisa mengobrol dengan agen. Berikut contohnya:

Mengobrol dengan AI agent di n8n

Di sebelah kanan, kita dapat melihat langkah-langkah yang diambil agen untuk menjawab pertanyaan kita. Secara khusus, ia mengakses basis data Pinecone untuk mengambil informasi aturan yang relevan.

Template n8n

n8n menawarkan fitur bermanfaat yang dapat mempercepat proses pembuatan alur kerja kita secara signifikan: perpustakaan template n8n.

Perpustakaan ini adalah kumpulan alur kerja siap pakai, dibuat oleh komunitas dan para ahli n8n. Baik kita mencoba mengotomatisasi tugas sederhana atau proses yang lebih kompleks, besar kemungkinan seseorang sudah membuat alur kerja yang sesuai kebutuhan kita.

Mengimpor alur kerja ke penyiapan n8n kita berarti kita tidak selalu harus mulai dari nol. Sebaliknya, kita bisa memanfaatkan solusi kreatif yang telah dikembangkan pengguna lain. Setelah mengimpor alur kerja, yang perlu kita lakukan hanyalah mengonfigurasinya dengan kredensial kita dan menyesuaikannya agar pas dengan kebutuhan.

Untuk tugas apa pun yang ingin kita otomatisasi, dari pemrosesan email hingga pengelolaan media sosial, sangat mungkin ada template yang tersedia di perpustakaan.

Kesimpulan

n8n menawarkan ekosistem integrasi yang luas, memungkinkan kita menghubungkan lebih dari seribu layanan dan alat untuk membuat agen AI. Kita baru menyentuh permukaan kemampuan n8n dalam tutorial ini. Dengan mengeksplorasi cara menggunakan n8n untuk membangun agen AI yang mengotomatiskan tugas sehari-hari, kita baru mulai memanfaatkan potensinya.


François Aubry's photo
Author
François Aubry
LinkedIn
Insinyur full-stack & pendiri di CheapGPT. Mengajar selalu menjadi passion saya. Sejak masa awal sebagai mahasiswa, saya aktif mencari peluang untuk membimbing dan membantu mahasiswa lain. Passion ini mendorong saya menempuh studi PhD, di mana saya juga menjadi asisten pengajar untuk mendukung kegiatan akademik saya. Selama tahun-tahun itu, saya menemukan kepuasan besar dalam suasana kelas tradisional, membangun koneksi dan memfasilitasi proses belajar. Namun, dengan hadirnya platform pembelajaran daring, saya melihat potensi transformatif pendidikan digital. Bahkan, saya terlibat aktif dalam pengembangan salah satu platform tersebut di universitas kami. Saya sangat berkomitmen untuk mengintegrasikan prinsip-prinsip pengajaran tradisional dengan metodologi digital yang inovatif. Tujuan saya adalah menciptakan kursus yang tidak hanya menarik dan informatif, tetapi juga mudah diakses oleh para pembelajar di era digital ini.
Topik

Belajar AI dengan kursus-kursus ini!

Program

Pengembangan Aplikasi Kecerdasan Buatan

21 Hr
Pelajari cara membuat aplikasi yang didukung oleh kecerdasan buatan (AI) menggunakan alat pengembangan AI terbaru, termasuk OpenAI API, Hugging Face, dan LangChain.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat Lebih BanyakLihat Lebih Banyak