Skip to content

Panduan Konfigurasi Bot

Panduan ini menjelaskan 5 sistem pengaturan yang mengontrol perilaku chatbot HUPH. Dengan memahami sistem ini, kamu bisa mengatur akurasi, kepribadian, dan keputusan bot tanpa perlu coding.


Gambaran Umum: Bagaimana Bot Memproses Pesan

Setiap kali user WhatsApp mengirim pesan, bot memprosesnya melalui beberapa tahap. Setiap tahap dikontrol oleh sistem pengaturan yang berbeda.

Text Only
User kirim pesan WhatsApp
┌─────────────────────────────────┐
│ 1. KLASIFIKASI INTENT            │  ← diatur di halaman Intents
│    "Apa yang user inginkan?"     │
│    Hasil: mau_daftar,            │
│    tanya_beasiswa, umum...       │
└──────────────┬──────────────────┘
┌─────────────────────────────────┐
│ 2. CEK ATURAN ESKALASI          │  ← diatur di halaman Escalation Rules
│    "Perlu dialihkan ke manusia?" │
│    Cek: sentimen, skor lead,     │
│    jumlah pesan                  │
│    Hasil: eskalasi / notifikasi  │
│    / lanjut dengan bot           │
└──────────────┬──────────────────┘
┌─────────────────────────────────┐
│ 3. PENCOCOKAN FAQ                │  ← diatur di halaman FAQ
│    "Ada jawaban siap pakai?"     │
│    Pencarian kemiripan semantik  │
│    Cocok → jawab instan (~0.4s)  │
│    Tidak cocok → lanjut ke AI    │
└──────────────┬──────────────────┘
               │ (tidak ada FAQ cocok)
┌─────────────────────────────────┐
│ 4. AI BUAT JAWABAN               │
│    Cari di Knowledge Base        │  ← Dokumen + Web Sources
│    + AI generate jawaban         │
│    Dipandu oleh:                 │
│    - Guidance Rules              │  ← diatur di halaman Guidance Rules
│    - Persona chatbot             │  ← diatur di halaman Chatbot Config
│    (~5 detik)                    │
└──────────────┬──────────────────┘
         Bot kirim jawaban

Intinya:

  • Langkah 1-2 menentukan BAGAIMANA pesan diproses (routing)
  • Langkah 3 mencoba jawab CEPAT dari FAQ
  • Langkah 4 jawab menggunakan AI jika FAQ tidak cocok

1. Chatbot Config — Kepribadian & Kriteria Scoring

Halaman: Bot Config → Chatbot

Sistem ini mengatur siapa bot ini dan bagaimana menilai lead.

Pengaturan Persona

Persona menentukan identitas bot — ini mempengaruhi gaya bahasa di SEMUA jawaban.

Pengaturan Fungsi Contoh
Nama bot Cara bot memperkenalkan diri "HalloUPH"
Tone Gaya bahasa formal atau santai "Santai, ramah, pakai 'kamu'"
Bahasa Bahasa default jawaban "Bahasa Indonesia"

Kriteria Lead Scoring

Lead scoring menentukan seberapa "panas" seorang calon mahasiswa. Ini mempengaruhi prioritas follow-up dan notifikasi ke counselor.

Label Skor Ciri-ciri Yang Terjadi
HOT 80-100 Siap daftar, sudah tanya detail program, sudah kasih data pribadi Counselor langsung dihubungi, follow-up otomatis dilewati
WARM 40-79 Tertarik tapi masih eksplorasi, tanya beberapa program, bandingkan dengan universitas lain Dapat 3x follow-up, konten berisi nilai tambah
COLD 0-39 Hanya browsing, pertanyaan umum, belum sebut program tertentu Dapat max 2x follow-up, lalu berhenti

Teks kriteria ini bisa diedit di halaman Chatbot Config. AI membaca teks ini saat menilai setiap lead di pesan ke-3, 5, 7, lalu setiap 5 pesan.

Keyword Sentimen

Kata-kata yang membantu bot mendeteksi emosi user:

Sentimen Contoh Kata
Kecewa/frustasi "kecewa", "lambat", "susah", "ribet", "ga jelas"
Positif "terima kasih", "bagus", "mantap", "helpful"
Mendesak "segera", "deadline", "buru-buru", "kapan terakhir"

Keyword ini digunakan oleh Escalation Rules. Misalnya, aturan bisa berisi: "Jika sentimen = frustasi DAN skor lead > 80, eskalasi ke counselor."


2. Intents — Memahami Maksud Pesan User

Halaman: Bot Config → Intents

Sistem ini mengatur bagaimana bot mengklasifikasi apa yang user inginkan.

Cara Kerja Klasifikasi

Setiap pesan masuk melewati 4 tingkat klasifikasi:

Tingkat Cara Kecepatan Kapan Dipakai
Tingkat 1: Aturan Pencocokan kata kunci Instan Kata kunci persis (misal "mau daftar")
Tingkat 2: Cache Lookup klasifikasi sebelumnya Instan Pesan mirip pernah diklasifikasi
Tingkat 3: AI AI tentukan klasifikasi ~0.5 detik Tidak ada aturan atau cache cocok
Tingkat 4: Default Masuk ke unknown Instan AI tidak bisa tentukan → ke FAQ/KB

Daftar Intent

Intent Artinya Yang Bot Lakukan
want_register User mau mendaftar Tampilkan langkah pendaftaran, minta nama/email/telp
want_visit_campus User mau kunjungi kampus Tampilkan jadwal Open Day, minta data kontak
ask_scholarship Tanya tentang beasiswa Arahkan ke info beasiswa dari Knowledge Base
ask_program_specific Tanya tentang program tertentu Arahkan ke info program dari Knowledge Base
share_personal_info User memberikan nama/email/telp Ekstrak dan simpan ke data lead
request_human Mau bicara dengan orang Langsung eskalasi ke counselor
complaint Menyampaikan keluhan Eskalasi dengan prioritas tinggi
payment_confirmation Konfirmasi sudah bayar Eskalasi ke admin keuangan
document_upload_help Butuh bantuan upload dokumen Eskalasi ke admin
transfer_student Mahasiswa pindahan Eskalasi ke spesialis
unknown Pertanyaan umum Ke FAQ → Knowledge Base → AI jawab

Apa yang Bisa Dilakukan di Halaman Intents

  • Toggle on/off — nonaktifkan intent yang sering salah klasifikasi
  • Edit contoh — tambah atau hapus contoh kalimat untuk melatih classifier
  • AI Suggest — AI buatkan variasi contoh kalimat otomatis
  • Export/Import CSV — edit massal lewat spreadsheet
  • Lihat log klasifikasi — lihat pesan terbaru dan bagaimana diklasifikasi

Tips

  • Kalau user sering salah klasifikasi, tambah contoh kalimat untuk intent yang benar
  • Gunakan AI Suggest untuk generate variasi yang mungkin tidak terpikirkan
  • Log klasifikasi menunjukkan skor confidence — skor rendah berarti bot menebak
  • unknown itu BUKAN masalah — artinya pesan masuk ke pipeline AI lengkap untuk jawaban yang lebih baik

3. FAQ — Jawaban Cepat

Halaman: Knowledge → FAQ

Sistem ini mengatur pasangan pertanyaan-jawaban yang sudah disiapkan untuk respon instan.

Cara Kerja FAQ

FAQ adalah jalur cepat. Kalau user bertanya sesuatu yang mirip dengan FAQ, bot langsung jawab tanpa perlu proses AI yang lebih lama.

Text Only
User: "Berapa biaya kuliah Informatika?"
Sistem cek FAQ (kemiripan semantik)
    ├─ Skor > 0.7 → FAQ cocok → jawab instan (~0.4 detik)
    └─ Skor < 0.7 → tidak cocok → proses AI lengkap (~5 detik)

Statistik Saat Ini

  • 101 FAQ item aktif
  • Threshold: 0.7 skor kemiripan
  • Kecepatan: ~0.4 detik untuk FAQ vs ~5 detik untuk AI lengkap

FAQ vs Knowledge Base

FAQ Knowledge Base (Dokumen + Web Sources)
Kecepatan ~0.4 detik ~5 detik
Akurasi Tepat (jawaban ditulis manusia) Dibuat AI (bisa bervariasi)
Cakupan Hanya pertanyaan yang cocok Topik apapun yang ada di KB
Kapan pakai Pertanyaan umum yang berulang Pertanyaan kompleks dan bervariasi

Apa yang Bisa Dilakukan di Halaman FAQ

  • Tambah FAQ — tulis pertanyaan dan jawabannya
  • Toggle on/off — nonaktifkan sementara tanpa menghapus
  • Edit — ubah pertanyaan atau jawaban
  • Hapus — hapus permanen
  • Perubahan otomatis sync ke sistem dalam 5 detik

Tips

  • Mulai dari 20 pertanyaan paling sering ditanyakan — ini memberikan dampak terbesar
  • Tulis pertanyaan sesuai cara user bertanya, bukan formal (misal "Berapa biaya kuliah?" bukan "Berapakah biaya perkuliahan?")
  • Buat jawaban singkat — pesan WhatsApp harus pendek dan mudah dibaca
  • Kalau FAQ tidak pernah cocok, coba ubah kata-kata pertanyaannya sesuai cara user sebenarnya bertanya

FAQ Score Threshold — Advanced slider (Phase 2)

Location: Chatbot Config → Advanced → FAQ Score Threshold

This slider controls the minimum similarity score required before the FAQ fast-path fires. Default is 0.7 (battle-tested against the live 101-FAQ corpus).

  • Raise (e.g. 0.8) → FAQ becomes more selective; more questions fall through to the full-AI path. Useful if the Bot Health judge widget shows rejects caused by loose FAQ matches.
  • Lower (e.g. 0.6) → FAQ becomes more permissive; more questions take the fast path. Useful if full-AI volume is high but the content is already covered in FAQ.

Current state: the slider is locked until FEATURE_FAQ_THRESHOLD=true is set on the API server. We unlock it after the 1-week Phase 1 observation window (earliest 2026-05-01) proves the knob is worth tuning. Without judge data, threshold changes are guesswork.

What happens on save: the HUPH backend calls Dify's /v1/apps/annotation-reply/enable with the new threshold, which triggers an async re-index (~seconds for the 35 live annotations). User chats start using the new threshold as soon as re-index completes.

If Dify rejects: the backend does NOT persist the new value to app_config — it returns 502 so the admin sees the error and retries. That ordering prevents the split-brain where UI shows "0.8" while Dify still serves "0.7".

Rare edge — Dify accepts but local DB write fails: the current order is Dify-first, local-second. If Dify applied the new threshold but the subsequent UPSERT to app_config fails (e.g. Postgres connection drops in that exact window), Dify has the new value while app_config still shows the old one. The UI will read the stale "0.7" while the live bot actually uses "0.8". Recovery: save the slider again with the correct value (idempotent on Dify). Statistically very rare; documenting so the operator knows what happened if it does.

What the slider does NOT change: embedding_provider_name and embedding_model_name (shown read-only below the slider). Changing those requires a full re-index of every annotation — not a daily knob; handle via manual SQL + scripts/migrate-faq-threshold-config.sql only when truly needed.


4. Escalation Rules — Kapan Melibatkan Manusia

Halaman: Bot Config → Escalation Rules

Sistem ini mengatur aturan otomatis yang menentukan kapan bot harus menyerahkan percakapan ke counselor manusia.

Cara Kerja Aturan Eskalasi

Setelah setiap pesan, bot mengevaluasi SEMUA aturan eskalasi yang aktif. Setiap aturan punya kondisi (logika AND — semua harus terpenuhi) dan aksi.

Text Only
Pesan masuk → Bot klasifikasi intent + deteksi sentimen + cek skor lead
Untuk setiap aturan aktif:
    Kondisi 1 cocok? DAN Kondisi 2 cocok? DAN ...
    ├─ Semua cocok → jalankan aksi (eskalasi / notifikasi / tag)
    └─ Ada yang tidak cocok → lewati, cek aturan berikutnya

Field Kondisi

Field Apa yang Diukur Contoh Nilai
sentiment Emosi user frustrated, positive, neutral, urgent
lead_score Seberapa "panas" lead (0-100) 0, 40, 80, 95
funnel_stage Posisi di proses admisi inquiry, prospect, registered, admitted
message_count Total pesan dalam percakapan 1, 5, 10, 20
intent Apa yang user inginkan want_register, complaint, request_human
user_role Siapa yang mengirim pesan prospective_student, parent, teacher

Operator

Operator Arti Contoh
eq Sama dengan sentiment eq "frustrated"
ne Tidak sama dengan intent ne "unknown"
gt / gte Lebih besar dari / atau sama lead_score gte 80
lt / lte Lebih kecil dari / atau sama message_count lt 3
in Salah satu dari (daftar) funnel_stage in ["inquiry", "prospect"]
contains Teks mengandung intent contains "register"

Jenis Aksi

Aksi Yang Terjadi Bot Lanjut?
Escalate Status percakapan → "escalated", counselor diberitahu, bot berhenti merespons Tidak — counselor mengambil alih
Notify Notifikasi dikirim ke counselor/admin, tapi bot tetap merespons Ya — bot tetap jalan
Tag Label ditambahkan ke metadata percakapan untuk tracking Ya — tidak ada perubahan terlihat

Contoh Aturan

Nama Aturan Kondisi Aksi Mengapa
Lead panas kecewa sentimen = frustrated DAN skor_lead >= 80 Eskalasi (prioritas: tinggi) Lead bernilai tinggi sedang kecewa — perlu sentuhan manusia SEKARANG
Alert lead panas skor_lead >= 80 Notifikasi admin Beri tahu counselor tentang lead panas, tapi bot bisa terus bicara
User terjebak jumlah_pesan > 15 Eskalasi (prioritas: sedang) User sudah chat terlalu lama — kemungkinan bingung
Orang tua bertanya user_role = parent Tag "parent" Lacak percakapan orang tua secara terpisah

Eskalasi Otomatis vs Manual

Berdasarkan Intent Berdasarkan Aturan
Pemicu User bilang "mau bicara orang" Sistem mendeteksi kombinasi sinyal
Siapa yang memutuskan User meminta langsung Bot memutuskan otomatis
Contoh Intent request_human → eskalasi sentimen=frustrated + skor>80 → eskalasi
Kapan berguna User tahu mereka butuh bantuan User mungkin tidak tahu, tapi sinyal menunjukkan butuh bantuan

Keduanya bisa memicu eskalasi. Intent-based bersifat eksplisit (user minta), rules-based bersifat implisit (sistem deteksi).


5. Guidance Rules — Pedoman Pengetahuan Bot

Halaman: Bot Config → Guidance Rules

Sistem ini mengatur pengetahuan faktual dan aturan perilaku yang diinjeksi ke prompt sistem AI.

Cara Kerja Guidance Rules

Berbeda dengan FAQ (yang merupakan jawaban UNTUK user), guidance rules adalah instruksi UNTUK bot. Rules ini diinjeksi ke system prompt, sehingga AI membacanya sebelum membuat setiap jawaban.

Text Only
User bertanya
AI menerima:
  System prompt:
    "Kamu adalah HalloUPH..."                    ← dari Chatbot Config
    "Aturan yang harus diikuti:
     - Biaya formulir: 50rb/750rb/400rb           ← dari Guidance Rules
     - JANGAN sebut Rp 500rb                      ← dari Guidance Rules
     - Jawab semua pertanyaan satu-satu"           ← dari Guidance Rules
AI buat jawaban mengikuti aturan ini

Aturan yang Saat Ini Aktif

Kategori Aturan Mengapa Ada
admission "8 tahap pendaftaran: Prospect → Inquiry → Registered → Form Purchased → Submitted → Admitted → Committed → Matriculated" Bot harus tahu urutan tahap yang benar
admission "Biaya formulir: Keperawatan Rp 50.000, Kedokteran Rp 750.000, program lain Rp 400.000 — JANGAN PERNAH sebut Rp 500.000" Mencegah bot menyebut harga yang SALAH. Website lama pernah menampilkan Rp 500.000.
admission "Tes masuk hanya wajib untuk: Kedokteran, Keperawatan, Homeschool, Paket C. Lainnya: Direct Admission (tanpa tes)" Kesalahpahaman umum — banyak user mengira semua program harus tes masuk
general "Jika user kirim beberapa pertanyaan dalam satu pesan, JAWAB SEMUA pertanyaan satu per satu" Tanpa aturan ini, AI cenderung hanya menjawab pertanyaan pertama
payment "Metode pembayaran: BCA e-Payment kode 720015, BCA VA kode 75109, Mandiri ATM kode 10028" Kode pembayaran harus tepat — bot tidak boleh menebak
payment "Jenis beasiswa: Prestasi Akademik (3 semester SPP), Bantuan Keuangan (D3/S1 Farmasi), Olahraga" Info beasiswa yang akurat

Kapan Harus Menambah Guidance Rule

Tambahkan rule ketika:

  1. Bot memberikan informasi salah berulang kali — misal harga salah, deadline salah, prosedur salah
  2. Ada kesalahpahaman umum — misal "semua jurusan harus tes masuk" (salah)
  3. Kamu ingin memaksakan perilaku tertentu — misal "jawab semua pertanyaan, jangan skip"
  4. Data kritis yang harus tepat — misal kode pembayaran, nomor rekening bank

Panduan Memilih: FAQ atau Guidance Rule?

Situasi Pakai FAQ Pakai Guidance Rule
User tanya "Berapa biaya formulir?" ✅ Tulis jawaban sebagai FAQ
Bot terus menyebut harga yang salah ✅ Tambah rule: "JANGAN sebut Rp 500rb"
User tanya jenis beasiswa ✅ Daftar beasiswa di FAQ
Bot hanya jawab 1 dari 3 pertanyaan ✅ Tambah rule: "Jawab SEMUA pertanyaan"
Pertanyaan umum tentang lokasi kampus ✅ FAQ dengan alamat
Bot harus selalu arahkan ke one.uph.edu ✅ Tambah rule: "Selalu arahkan ke one.uph.edu"

Aturan sederhana:

  • FAQ = "Apa yang dijawab" — jawaban spesifik untuk user
  • Guidance Rule = "Bagaimana menjawab" — aturan perilaku untuk bot, atau "Apa yang TIDAK boleh dikatakan" — guardrail

Sistem Prioritas

Setiap rule punya nomor prioritas (lebih tinggi = lebih penting). Saat ini:

  • 95: Aturan perilaku umum (mempengaruhi semua jawaban)
  • 90: Koreksi fakta kritis (harga salah, dll.)
  • 85: Pengetahuan proses/prosedur
  • 80: Data referensi (kode pembayaran, jenis beasiswa)

Tabel Ringkasan

Sistem Halaman Mengontrol User Lihat? Seberapa Sering Diubah
Chatbot Config Bot Config → Chatbot Identitas bot, kriteria scoring, keyword sentimen Tidak langsung (mempengaruhi gaya bahasa) Jarang (diatur sekali)
Intents Bot Config → Intents Aturan klasifikasi pesan dan contoh kalimat Tidak (routing internal) Bulanan (tuning akurasi)
FAQ Knowledge → FAQ Pasangan pertanyaan-jawaban cepat Ya (dikirim ke user) Mingguan (tambah FAQ baru)
Escalation Rules Bot Config → Escalation Rules Kapan bot menyerahkan ke manusia Tidak (logika internal) Bulanan (tuning threshold)
Guidance Rules Bot Config → Guidance Rules Pengetahuan faktual dan guardrail perilaku AI Tidak langsung (mempengaruhi akurasi) Sesuai kebutuhan (saat bot buat kesalahan)

Alur Kerja yang Direkomendasikan untuk Tuning Bot

Tuning bot adalah proses iteratif. Bot semakin baik seiring waktu saat kamu menambah FAQ, guidance rules, dan contoh intent.

Langkah-langkah:

  1. Pantau percakapan — lihat inbox percakapan, cari jawaban yang salah
  2. Cek klasifikasi intent — kalau intent yang terdeteksi salah, tambah contoh kalimat di halaman Intents
  3. Tambah FAQ — kalau user terus menanyakan pertanyaan yang sama, buat FAQ untuk jawaban instan
  4. Tambah Guidance Rule — kalau bot memberikan fakta yang salah, tambah aturan guardrail
  5. Sesuaikan Escalation Rules — kalau terlalu banyak/sedikit eskalasi, ubah threshold skor
  6. Review kriteria scoring — kalau lead dinilai salah, perbaiki deskripsi HOT/WARM/COLD di Chatbot Config

Contoh Skenario:

"Bot menjawab biaya formulir Rp 500.000 padahal seharusnya Rp 400.000"

  1. Cek FAQ → ada FAQ dengan harga benar? Kalau belum, tambahkan
  2. Cek Guidance Rules → tambahkan: "JANGAN sebut Rp 500.000, harga yang benar adalah Rp 400.000"
  3. Cek Knowledge Base → apakah ada dokumen lama dengan harga salah? Hapus atau update

"User yang sangat tertarik tidak mendapat perhatian counselor"

  1. Cek scoring criteria → apakah definisi HOT sudah tepat?
  2. Cek Escalation Rules → tambahkan rule: "Jika skor >= 80, kirim notifikasi ke counselor"
  3. Cek log → apakah skor lead memang rendah padahal seharusnya tinggi?

"Bot hanya menjawab 1 dari 3 pertanyaan yang dikirim bersamaan"

  1. Cek Guidance Rules → tambahkan: "Jika user kirim beberapa pertanyaan, JAWAB SEMUA satu per satu"
  2. Tidak perlu ubah FAQ atau Intent — ini masalah perilaku AI

2026-04 additions: Bilingual + Quality Gate

Two additional capabilities active in the live chatflow (v3-observe) documented here so admins understand behavior they may observe. Main control lives in Dify chatflow YAML, not in admin pages like the 5 systems above.

6. Bilingual ID + EN (Phase A.6)

Chatflow has dual-LLM per-path: each bot path (FAQ, Registration, Multi-Q, Complaint, Off-topic) has two LLM nodes — one with native Bahasa Indonesia prompt, one native English. A language router picks one based on user_language forwarded from the API.

When BILINGUAL_ENABLED=false (default): 100% traffic routes to Bahasa LLM → behavior identical to pre-April 2026. When BILINGUAL_ENABLED=percent:N: N% of conversations get language detection + routing.

What admin can do: - Fill question_en + answer_en on FAQ page to make FAQs bilingual - Request developer flip BILINGUAL_ENABLED when UPH is ready (see docs/ops/bilingual/rollout-runbook.md)

Editing ID/EN LLM prompts requires developer (YAML chatflow).

7. Quality Gate Observe Mode (Phase A.5)

Every bot answer is judged by an LLM (Claude Haiku) on whether facts in the answer are grounded in retrieved context. Currently observe-only — judge logs decisions to Langfuse but doesn't block.

Judge decisions: - pass — answer grounded in KB - reject — claims appear ungrounded (doesn't block for now)

What admin can do: - Monitor reject patterns in Langfuse (port 3300) → identify: - Questions bot invents answers for → add KB/FAQ - Topics where bot over-extrapolates → add guidance rule - Request developer flip to block mode when UPH is ready (see docs/ops/phase-a5-observe-2026-04-23.md)

For quantitative measurement of bot answer quality, use Answer evaluation with golden questions.

Monitoring Judge Decisions (Analytics → Bot Health)

The Analytics V2 → Bot Health tab now shows a Quality Gate — Judge Decisions panel at the top. This panel surfaces the performance of the Claude Haiku judge that evaluates every bot answer in the Dify chatflow.

What it shows

  • Pass rate — percentage of bot answers rated "pass" by the judge (green = good, rose = needs review)
  • Rejects by path — reject count per answer type: FAQ, Registration, Multi-Q, Complaint, Off-Topic
  • Judged total — how many bot answers have been evaluated in the selected time window
  • Recent rejects (table) — last 20 rejects with time, path, user question excerpt, and the judge's reason for rejecting

How to read it

  • Pass rate > 90% — bot is consistent, no action needed. Move on to other metrics (intent confidence, default rate).
  • Pass rate 70-90% — review recent rejects, look for patterns:
    • Specific topics always reject → update FAQ or KB for that topic
    • Specific programs being hallucinated → add a guidance rule or fix KB sourcing
    • Specific language (ID vs EN) struggling → review bilingual KB coverage
  • Pass rate < 70% — escalate to the engineering team. Likely causes:
    • KB outdated — new info (fees, schedules) not yet updated
    • Model drift — Claude Haiku behaving differently than before
    • Judge prompt too strict — needs corpus recalibration

Time range

The panel follows the range selector at the top of the tab (Today / 7d / 30d): - Today = last 24 hours - 7d = 168 hours (1 week) - 30d = 720 hours (1 month)

Important

Quality Gate currently runs in observe mode — the router always forwards the answer to the user even if the judge rejects. Block mode (auto-escalate on reject) will be enabled after: 1. Enough data accumulated (≥50 conversations/month) 2. Corpus audit complete (verify judge labels are accurate) 3. Admin UI for per-conversation decision override is available 4. Sign-off from the UPH stakeholder team

In observe mode, reject data is a signal for KB/FAQ improvement, not automatic escalation.