Nexa Intelligence Docs
Dashboard

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?

  1. Memantau isu hangat & sentimen publik: Mengidentifikasi dinamika opini dan intensitas sentimen (positif, netral, negatif, kontroversial) secara agregat maupun per topik.
  2. Menelusuri pemberitaan multi-dimensi: Melakukan filter dan penelusuran mendalam berdasarkan wilayah provinsi/kabupaten, entitas figur/lembaga, atau klaster topik.
  3. 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

  1. Pengumpulan Konten: Artikel dan konten publik dipanen dari sumber media yang terdaftar (dikelola melalui Master Data · Target Scraping).
  2. 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).
  3. Pencarian & Filter: Operator mencari atau menyaring berdasarkan kata kunci maupun atribut (wilayah/entitas/topik) untuk fokus ke isu tertentu.
  4. Analisis Konten: Sistem menautkan artikel ke entitas dan isu terkait, membentuk konteks yang siap dianalisis lebih lanjut.
  5. 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):

NoKomponen / Bagian UI (Atas ke Bawah)PostgreSQL (Tabel & Kondisi)Elasticsearch (Indeks & Filter)Kafka (Topik & Alur Event)
17 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)
2Panel 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)
3Kotak 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)
4Pill 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)
5Rekapitulasi 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)
6Ringkasan 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)
7Sub-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)
8Grid 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
9Grid 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
10Panel 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)
11Modal 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
12Analitik: 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)
13Analitik: 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
14Analitik: 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 (channel tidak 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 indeks articles).
    • 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 Elasticsearch articles pada jendela waktu yang dipilih (range: 24h, 7d, 30d).
      • 5 Saluran Media Sosial (twitter, facebook, instagram, tiktok, youtube): Dihitung dari indeks Elasticsearch postings (indeks terverifikasi yang juga menyuplai relasi Knowledge Graph).
  • 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}).

2. Panel Top Sumber Per Saluran (GET /media/summary/sources?channel={channel}&range={range})

  • Endpoint Mandiri: Dipanggil secara self-fetch oleh komponen MediaTopSources agar pemuatan atau status error-nya tidak memblokir render kartu overview utama.
  • Logika Pemrosesan Sesuai Saluran:
    • Parameter channel bersifat wajib (berita, twitter, facebook, instagram, tiktok, youtube). Jika pengguna memilih kartu Total ("semua"), frontend memetakannya ke channel=berita.
    • Untuk channel=berita: Membaca jendela scan Elasticsearch articles yang sama dan mengekstrak agregasi domain portal berita (source.domain / publisher.keyword), dipotong maksimal 8 domain teratas (seperti news.detik.com, tribunnews.com, antaranews.com).
    • Untuk saluran media sosial: Mengekstrak agregasi terms pada author.username dari indeks Elasticsearch postings.
  • 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.
  • 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 Enter atau tombol Cari di Feed akan 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)]).

  • Total Masing-Masing Pilar ([Sosial 6] [Ekonomi 6] [Politik 5]...): Diambil langsung dari dokumen Elasticsearch national_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_pillar dari national_dashboard, frontend langsung mendapatkan jumlah artikel per 5 pilar kanonikal secara instan tanpa perlu memindai ulang ribuan record di indeks articles.

  • Ringkasan Narasi Harian (narrative.paragraphs[]):

    • Sumber Utama (national_dashboard): Dibaca langsung dari dokumen Elasticsearch national_{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"):

      1. high_risk_insight ↳ Paragraf isu titik panas & risiko keamanan/lingkungan.
      2. economic_dynamic_insight ↳ Paragraf dinamika makro ekonomi & pasar.
      3. 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 menerbitkan intelligence_analysis, backend secara otomatis mengambil kolom summary dari artikel dengan duplicate_count tertinggi (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.

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.

On this page