Media Monitoring
Spesifikasi teknis modul Media Monitoring (/dashboard/berita), pemantauan berita siber makro Kemenko, trending harian, ringkasan naratif AI, analitik sebaran wilayah, serta pemetaan database PostgreSQL, Elasticsearch, dan Kafka.
Media Monitoring (/dashboard/berita)
Pemantauan berita, pers, & percakapan publik secara komprehensif.
Panduan Fungsional & Alur Sistem
Apa ini?
Modul pemantauan media siber yang mengindeks berita dan konten publik nasional secara real-time dari media massa terverifikasi (Dewan Pers, AMSI, SMSI), lengkap dengan pelabelan kategori makro, wilayah, entitas, dan hierarki taksonomi.
Untuk apa?
- Memantau isu hangat & sentimen publik: Mengidentifikasi dinamika opini dan intensitas sentimen (positif, netral, negatif, kontroversial) secara agregat maupun per topik.
- Menelusuri pemberitaan multi-dimensi: Melakukan filter dan penelusuran mendalam berdasarkan wilayah provinsi/kabupaten, entitas figur/lembaga, atau klaster topik.
- Menjadi sumber sinyal modul lain: Menyuplai data sinyal beranotasi untuk modul Peta Sebaran Spasial, relasi entitas Knowledge Graph, dan penalaran AI Agents.
Cara Kerja / Alur Sistem
- Pengumpulan Konten: Artikel dan konten publik dipanen dari sumber media yang terdaftar (dikelola melalui Master Data · Target Scraping).
- Pengindeksan & Pelabelan: Tiap artikel diekstraksi dan diberi label kategori makro Kemenko, geolokasi wilayah, entitas (Named Entity Recognition), serta jalur taksonomi (mengikuti Master Data · Kata Kunci Taksonomi).
- Pencarian & Filter: Operator mencari atau menyaring berdasarkan kata kunci maupun atribut (wilayah/entitas/topik) untuk fokus ke isu tertentu.
- Analisis Konten: Sistem menautkan artikel ke entitas dan isu terkait, membentuk konteks yang siap dianalisis lebih lanjut.
- Aksi Lanjutan: Artikel dapat dibuka detailnya, dikirim ke AI Agents untuk analisis mendalam, memicu titik pantau di Peta Sebaran, atau menjadi entri difusi di Knowledge Graph.
[!NOTE] Dasar Pemikiran: Media adalah indikator dini yang kaya. Mengindeksnya secara terstruktur mengubah aliran berita mentah menjadi sinyal intelijen yang dapat dicari, dipetakan, dan dihubungkan ke entitas — bukan sekadar bacaan lepas.
Tabel Pemetaan Komponen ke PostgreSQL & Elasticsearch
Urutan baris di bawah ini disusun berurutan dari komponen paling atas hingga paling bawah pada layar antarmuka Media Monitoring (MediaSummarySection.tsx / daily-digest-panel.tsx):
| No | Komponen / Bagian UI (Atas ke Bawah) | PostgreSQL (Tabel & Kondisi) | Elasticsearch (Indeks & Filter) | Kafka (Topik & Alur Event) |
|---|---|---|---|---|
| 1 | 7 Kartu Metrik Saluran Media (Channel Stat Cards) (Grid 7 kartu: TOTAL [4.066], BERITA [3.909], TWITTER/X [63], FACEBOOK [51], INSTAGRAM [2], TIKTOK [26], YOUTUBE [5]. Klik kartu memfilter saluran aktif; tombol [↗ Detail] navigasi ke Feed) | - (Tidak diakses langsung) | • Saluran berita & total: articles↳ Jendela processed_at• Saluran sosial (X, FB, IG, TikTok, YouTube): postings↳ Filter platform | • queue-normalize-data(Ingest berita) • queue-social-postings(Ingest media sosial) |
| 2 | Panel Top Sumber Media (Horizontal Bar Chart) (Visualisasi bar chart horizontal volume per domain/penerbit berita atau akun sosial teratas, reaktif mengikuti saluran yang dipilih) | sources↳ Metadata direktori portal media | • Saluran berita/semua: articles↳ terms: source.domain / publisher.keyword (maks. 8 sumber)• Saluran sosial: postings↳ terms: author.username | queue-raw-data-site(Inbound crawler berita) |
| 3 | Kotak Pencarian Terintegrasi (Media Search Bar) (Pencarian cepat berita, topik, atau sumber dengan navigasi langsung ke Feed Berita terfilter) | - (Komponen input interaktif) | Diteruskan ke query articles / postings saat berpindah ke Feed (/dashboard/berita/feed?q=...&channel=...) | - (Navigasi instan) |
| 4 | Pill Tanggal Harian & Date Picker (Pill pemilih tanggal 5-7 hari terakhir, mis. 22 Sep (24)) | - (Tidak diakses langsung) | articles↳ processed_at 5-7 hari terakhir | - (Pemindaian PIT) |
| 5 | Rekapitulasi 5 Pilar Harian (Pills total berita per pilar: Sosial, Ekonomi, Politik, Budaya, Geopolitik) | - (Tidak diakses langsung) | national_dashboard↳ taxonomy_summary.by_pillar (ID: national_{tanggal}) | - (Pra-agregasi batch worker) |
| 6 | Ringkasan Naratif Harian (Ringkasan naratif AI multi-topik: keamanan, ekonomi, zona stabil) | articles↳ Fallback: summary (ORDER BY duplicate_count DESC) | national_dashboard↳ _source.intelligence_analysis(high_risk, economic_dynamic, calm_zone) | queue-ai-inference(Sintesis AI harian) |
| 7 | Sub-Tema Isu Hari Ini (Bar Chart) (Progress bar 6 sub-tema dominan: Ekonomi, Hukum, Kamhan, dll.) | taxonomy_nodes↳ Master taksonomi tematik | articles↳ processed_at = [tanggal] & klasifikasi tema | - (Point-in-Time scan) |
| 8 | Grid Kolom Kategori Harian (Topik teratas dan 5 headline berita per kategori makro) | - (Tidak diakses langsung) | articles↳ Filter kategori, top topics, & headline artikel | queue-normalize-data |
| 9 | Grid Kolom Sub-Tema Berita (Topik teratas dan 6 headline berita per sub-tema) | - (Tidak diakses langsung) | articles↳ Filter sub-tema, top topics, & headline artikel | queue-normalize-data |
| 10 | Panel Trending Topics (Top 10) (Peringkat isu nyata dalam 7 hari terakhir & frekuensi artikel) | - (Tidak ada tabel di PG) | trending_topics↳ period: "24h", ORDER BY rank ASC LIMIT 10 | queue-trending-data(Komputasi worker D1) |
| 11 | Modal Daftar Lengkap Artikel (Popup daftar berita saat klik "Lihat semua berita" di kategori/tema) | articles↳ Master row data artikel | articles↳ filter: { category/tema, date } | queue-normalize-data |
| 12 | Analitik: Sebaran per Provinsi & Drilldown (Peringkat provinsi & daftar kab/kota, mendukung filter ?q=) | master_regions↳ Master hirarki provinsi & kab/kota | articles↳ terms: location_province, location_city | - (Agregasi wilayah) |
| 13 | Analitik: Amplifikasi Sumber Media (Peringkat media penerbit terbanyak, mendukung filter ?q=) | sources↳ Direktori portal media | articles↳ terms: source.domain (dengan filter q) | queue-raw-data-site |
| 14 | Analitik: Sub-Tema Isu Analitik (Peringkat frekuensi isu tematik lintas kategori, filter ?q=) | taxonomy_nodes↳ Hierarki klasifikasi taksonomi | articles↳ terms: taxonomy.lineages.keyword | - (Point-in-Time scan) |
Spesifikasi Endpoint & Alur Query
Komponen pada halaman Media Monitoring dilayani oleh arsitektur endpoint terpadu:
1. Ringkasan Media & 7 Kartu Saluran (GET /media/summary)
- Arsitektur Pemindaian Tunggal: Mengambil seluruh ringkasan statistik makro tanpa perlu parameter saluran (
channeltidak lagi diterima di endpoint ini). - Komposisi Respon JSON:
channels.total&total_articles: Total volume konten lintas seluruh saluran media.categories_total: Jumlah konstan 8 kategori makro Kemenko yang dipantau.last_scraped_at: Waktu terbit artikel terbaru (MAX(processed_at)global dari indeksarticles).engine.status: Kondisi operasional mesin scraper (idle,running,paused,stopped) dari kontrol service.channels.items[]: Menampilkan hitungan spesifik per saluran:- Saluran
berita: Diambil dari pemindaian dokumen indeks Elasticsearcharticlespada jendela waktu yang dipilih (range: 24h, 7d, 30d). - 5 Saluran Media Sosial (
twitter,facebook,instagram,tiktok,youtube): Dihitung dari indeks Elasticsearchpostings(indeks terverifikasi yang juga menyuplai relasi Knowledge Graph).
- Saluran
- Interaktivitas UI:
- Mengklik badan kartu memilih saluran aktif (ditandai dengan border teal persisten dan dot indicator, tersimpan di URL via hook
useMediaChannel), yang secara otomatis memicu query ulang panel Top Sumber dan Analisa Harian. - Mengklik tautan
[↗ Detail]di pojok kanan bawah membuka halaman Feed Berita dengan filter platform saluran aktif (/dashboard/berita/feed?channel={key}).
- Mengklik badan kartu memilih saluran aktif (ditandai dengan border teal persisten dan dot indicator, tersimpan di URL via hook
2. Panel Top Sumber Per Saluran (GET /media/summary/sources?channel={channel}&range={range})
- Endpoint Mandiri: Dipanggil secara self-fetch oleh komponen
MediaTopSourcesagar pemuatan atau status error-nya tidak memblokir render kartu overview utama. - Logika Pemrosesan Sesuai Saluran:
- Parameter
channelbersifat wajib (berita,twitter,facebook,instagram,tiktok,youtube). Jika pengguna memilih kartu Total ("semua"), frontend memetakannya kechannel=berita. - Untuk
channel=berita: Membaca jendela scan Elasticsearcharticlesyang sama dan mengekstrak agregasi domain portal berita (source.domain/publisher.keyword), dipotong maksimal 8 domain teratas (sepertinews.detik.com,tribunnews.com,antaranews.com). - Untuk saluran media sosial: Mengekstrak agregasi
termspadaauthor.usernamedari indeks Elasticsearchpostings.
- Parameter
- Visualisasi Horizontal Bar Chart: Batang progress bar merah digambar proporsional terhadap frekuensi sumber teratas dengan batas minimum 14% (
min-width) agar label angka tetap terbaca jelas.
3. Kotak Pencarian Cepat (Media Search Bar)
- Berada tepat di bawah panel Top Sumber, menyediakan input pencarian terpadu dengan placeholder: "Cari berita, topik, atau sumber di dalam Media Monitoring… (Enter untuk hasil lengkap di Feed)".
- Menekan tombol
Enteratau tombolCari di Feedakan langsung mengarahkan pengguna ke halaman Feed Berita (/dashboard/berita/feed?q={query}&channel={channel}) dengan membawa parameter pencarian teks dan filter saluran yang sedang aktif.
4. Tanggal Tersedia untuk Analisa Harian (GET /scrape/daily-dates)
Memindai field processed_at pada indeks articles untuk 5 hingga 7 hari terakhir guna menghasilkan daftar tanggal aktif beserta jumlah artikelnya (dates[]). Data ini digunakan untuk merender pill tombol tanggal cepat (mis. [22 Sep (24)], [21 Sep (16)]).
5. Analisa Trending Harian, 5 Pilar, & Naratif Utama (GET /scrape/daily?date=YYYY-MM-DD / GET /media/daily)
-
Total Masing-Masing Pilar (
[Sosial 6] [Ekonomi 6] [Politik 5]...): Diambil langsung dari dokumen Elasticsearchnational_dashboard(ID:national_{YYYY-MM-DD}) pada key:"taxonomy_summary": { "by_pillar": { "sosial": 52, "ekonomi": 11, "politik": 26, "budaya": 0, "geopolitik": 0 }, "SOSIAL": { "count": 52, "event": 52, "risk": 24.6, "label": "Sosial" } }Dengan membaca pra-agregasi
taxonomy_summary.by_pillardarinational_dashboard, frontend langsung mendapatkan jumlah artikel per 5 pilar kanonikal secara instan tanpa perlu memindai ulang ribuan record di indeksarticles. -
Ringkasan Narasi Harian (
narrative.paragraphs[]):-
Sumber Utama (
national_dashboard): Dibaca langsung dari dokumen Elasticsearchnational_{YYYY-MM-DD}pada objek_source.intelligence_analysis. Tiga wawasan makro yang dihasilkan worker inferensi AI dipetakan menjadi paragraf terpisah (sesuai indikator UI "jeda antar-paragraf menandai pergantian topik"):high_risk_insight↳ Paragraf isu titik panas & risiko keamanan/lingkungan.economic_dynamic_insight↳ Paragraf dinamika makro ekonomi & pasar.calm_zone_insight↳ Paragraf sebaran zona stabil & kamtibmas kondusif.
Karena berada di dokumen yang sama dengan
taxonomy_summary.by_pillar, backend cukup melakukan 1 kali fetch ke Elasticsearch untuk menyajikan data 5 pilar dan narasi harian secara bersamaan. -
Mekanisme Fallback (
articles): Apabila pada tanggal bersangkutan pipeline AI belum menerbitkanintelligence_analysis, backend secara otomatis mengambil kolomsummarydari artikel denganduplicate_counttertinggi (ORDER BY duplicate_count DESC NULLS LAST LIMIT 1) sebagai representasi peristiwa nasional terpopuler hari itu.
-
6. Sub-Tema Isu & Kolom Berita (GET /scrape/analytics?date=YYYY-MM-DD)
Mengkorelasikan kata kunci dan taksonomi artikel pada hari tersebut ke dalam 6 sub-tema spesifik (Ekonomi & Harga, Hukum & Korupsi, Keamanan & Pertahanan, Kesehatan, Pendidikan, Lingkungan & Bencana). Setiap kolom menyajikan topik-topik teratas dan tautan headline langsung ke portal media sumber.
7. Peringkat Topik Trending 7 Hari (GET /scrape/trending)
Menampilkan peringkat 10 topik terpanas nasional berdasarkan volume kemunculan berita nyata dalam 7 hari terakhir. Dihitung secara berkala oleh worker D1 (queue-trending-data) dan disimpan ke indeks Elasticsearch trending_topics.
8. Eksplorasi Analitik Multi-Dimensi (GET /scrape/analytics?q=)
Saat analis berpindah ke tab "Analitik (Daerah · Sumber · Tema)", backend melakukan agregasi multi-dimensi dengan dukungan filter teks:
- Sebaran Daerah: Menghitung volume berita per 38 provinsi dan mendukung drill-down hingga level kota/kabupaten (
children). - Amplifikasi Sumber: Mengukur intensitas pemberitaan dan framing media tertentu.
- Sub-Tema Isu: Mengukur sebaran tematik berita yang cocok dengan kueri pencarian.
9. Modal Daftar Berita Asli (GET /scrape/articles & /scrape/tema-articles)
Saat analis mengklik tombol "Lihat semua berita" pada kartu kategori atau sub-tema tertentu, modal ArticleListModal terbuka dan mengambil hingga 100 artikel lengkap langsung dari indeks Elasticsearch articles dengan filter kategori/tema dan tanggal yang bersangkutan.
National Overview
Spesifikasi teknis antarmuka National Overview (/dashboard), ringkasan situasi lintas sektor, serta pemetaan database PostgreSQL, Elasticsearch, dan antrean Kafka.
Audit Pengadaan
Spesifikasi teknis modul Audit Pengadaan LPSE/SIRUP (/dashboard/pengadaan), deteksi potensi pemborosan anggaran, serta pemetaan database PostgreSQL, Elasticsearch, dan Kafka.