Menyiapkan workspace...

CS AI Alineaku

Sales CRM & AI Workspace

{{ loginError }}

Akses dashboard dilindungi login dan role. Jangan bagikan akun Anda kepada orang lain.

Ganti password sementara

Untuk keamanan, {{ authUser.name }} wajib membuat password pribadi sebelum membuka dashboard.

{{ passwordError }}

Minimal 10 karakter.

{{ currentPageTitle }}

{{ appBusyLabel }}
{{ authUser.name }}@{{ authUser.username }} • {{ roleLabel(authUser.role) }}
Koneksi internet terputus. Data tetap ditampilkan dan akan diperbarui setelah tersambung.
{{ dataLoadError }}

{{ greetingText }}, {{ firstName }} 👋

Mulai dari pekerjaan yang membutuhkan perhatian, lalu pantau aktivitas dan performa penjualan.

{{ todayOperations.chatCustomers }}

Customer Chat

Customer unik yang masuk hari ini

{{ todayOperations.closing }}

Closing

Order terbaru yang closing hari ini

{{ todayOperations.handoffResolved }}

Kasus Selesai

Handoff diselesaikan hari ini

Funnel Penjualan & Performa Agent

Pantau perjalanan customer dari pertama masuk sampai closing untuk setiap Agent AI dan nomor CS.

Conversion Rate

{{ Number(analytics.summary?.conversionRate||0).toLocaleString('id-ID') }}%

Closing ÷ customer masuk

Omzet Tercatat

{{ money(analytics.summary?.revenue) }}

Dari closing ber-checkout

Response AI

{{ duration(analytics.summary?.avgResponseMs) }}

Rata-rata waktu balas

Takeover Manual

{{ Number(analytics.summary?.manualTakeovers||0).toLocaleString('id-ID') }}

Diambil alih manusia

Token AI

{{ compactNumber(analytics.summary?.totalTokens) }}

{{ Number(analytics.summary?.aiReplies||0).toLocaleString('id-ID') }} balasan AI

Estimasi Biaya AI

{{ money(analytics.summary?.estimatedCost) }}

Chat {{ money(analytics.summary?.chatEstimatedCost) }} • OCR {{ money(analytics.summary?.ocrEstimatedCost) }} ({{ analytics.summary?.ocrRuns||0 }}x)

Sales Funnel

Tren customer masuk dan closing per hari.

{{ analyticsRangeLabel }}
{{ series.label }}{{ Number(series.total||0).toLocaleString('id-ID') }}
{{ point.label }} • {{ series.label }}: {{ point.value }} {{ label.label }}
Belum ada data tren untuk periode ini.

Performa per Agent AI & Nomor CS

Bandingkan conversion, kecepatan respons, takeover, biaya AI, dan omzet.

{{ a.agentName }}

{{ a.waName }}

{{ a.conversionRate }}%
{{ a.customers ?? a.chats }}

Customer

{{ a.productInterest }}

Tanya

{{ a.checkouts }}

Checkout

{{ a.transfers }}

Transfer

{{ a.closings }}

Closing

Response {{ duration(a.avgResponseMs) }}
Takeover {{ a.manualTakeovers }}
Token {{ compactNumber(a.totalTokens) }}
Biaya {{ money(a.estimatedCost) }}
Omzet{{ money(a.revenue) }}

Produk Paling Banyak Ditanyakan

Urutan berdasarkan customer unik yang menunjukkan minat.

{{ idx+1 }}
{{ p.name }}

{{ p.mentions }} kali terdeteksi

{{ p.customers }}

customer

Belum ada minat produk yang tercatat.

Produk Paling Banyak Closing

Diambil dari checkout customer saat CRM ditandai Terclosing.

{{ idx+1 }}
{{ p.name }}

{{ p.qty }} unit • {{ p.closings }} closing

{{ money(p.revenue) }}

nilai produk

Belum ada produk closing yang tercatat.

Settings

Cari pengaturan berdasarkan tujuan. Status setiap modul memberi tahu bagian yang sudah siap atau masih perlu tindakan.

{{ settingsAvailableCount }} modul tersedia
WorkspaceTampilan dan kenyamanan kerja
Tampilan & KepadatanPilih ruang baca nyaman atau tampilan ringkas untuk data lebih banyak.
WhatsAppKoneksi nomor dan kanal masuk
AIAgent, knowledge, dan bantuan balasan
OtomatisasiFollow-up dan komunikasi terjadwal
KeamananKesehatan sistem, akses, dan akun
Pengaturan tidak ditemukan

Coba kata seperti WhatsApp, AI, Alinev, otomatisasi, atau keamanan.

Operations Control Center

{{ operationsStatusLabel(db.operations?.overall) }}

Terakhir diperiksa {{ db.operations?.generatedAt?formatDateTime(db.operations.generatedAt):'belum pernah' }} • otomatis setiap {{ db.operations?.state?.monitorIntervalMinutes||5 }} menit.

WhatsApp Compliance Guard & Cloud API

{{ db.whatsappCompliance?.settings?.emergencyStop?'EMERGENCY STOP':db.whatsappCompliance?.cloud?.configured?'CLOUD AI SIAP':'PERLU KONFIGURASI' }}

Pesan masuk Cloud API diteruskan ke Agent AI yang dipilih dan balasannya dikirim kembali melalui Cloud API. Pengiriman tetap mengikuti jendela layanan, consent, template resmi, dan batas frekuensi.

Cloud API

{{ db.whatsappCompliance?.cloud?.configured?'Siap':'Belum siap' }}

{{ db.whatsappCompliance?.cloud?.version||'-' }} • ID ***{{ db.whatsappCompliance?.cloud?.phoneNumberIdLast4||'----' }}

Service Window

{{ db.whatsappCompliance?.stats?.openSessions||0 }} chat aktif

24 jam dari pesan masuk

Consent Promo

{{ db.whatsappCompliance?.stats?.optedInMarketing||0 }} customer

Opt-in terdokumentasi

Terkirim 24j

{{ db.whatsappCompliance?.stats?.sent24h||0 }}

Diterima Cloud API

Ditahan / Gagal

{{ db.whatsappCompliance?.stats?.blocked24h||0 }} / {{ db.whatsappCompliance?.stats?.failed24h||0 }}

24 jam terakhir

Cloud API belum lengkap. Isi Phone Number ID, Access Token, dan Verify Token pada /opt/whatsapp-ai-bot/.env, lalu restart aplikasi. Sebelum lengkap, pesan proaktif ditahan dan tidak dialihkan ke WhatsApp Web.

Aturan Guard & Template Resmi
Buat template approved dengan satu body variable {{1}}. Sistem memasukkan isi pesan lengkap ke variabel tersebut.

Webhook {{ db.whatsappCompliance?.cloud?.webhookVerifyConfigured?'verify token siap':'belum memiliki verify token' }} • signature {{ db.whatsappCompliance?.cloud?.signatureVerificationConfigured?'divalidasi':'opsional belum aktif' }}.

Audit Pengiriman Terbaru
{{ whatsappComplianceActionLabel(event.action) }}{{ event.purpose }}***{{ event.phoneLast4||'----' }}

{{ event.reason||event.status||'-' }}

{{ formatDateTime(event.timestamp) }}
Belum ada keputusan pengiriman yang tercatat.

Normal

{{ db.operations?.summary?.healthy||0 }}

Peringatan

{{ db.operations?.summary?.warning||0 }}

Kritis

{{ db.operations?.summary?.critical||0 }}

Insiden Aktif

{{ db.operations?.summary?.openIncidents||0 }}

Kesehatan Sistem

Pemeriksaan aplikasi, database, WhatsApp, Alinev, backup, disk, dan memori.

{{ check.label }}

{{ check.message }}

{{ operationsStatusLabel(check.status) }}

{{ check.detail }}

Monitoring & Notifikasi

Notifikasi proaktif dikirim melalui template resmi WhatsApp Cloud API.

Gunakan format 62. Nomor hanya terlihat oleh Owner.

Riwayat Insiden

Insiden selesai tetap tersimpan untuk audit dan evaluasi.

{{ (db.operations?.incidents||[]).length }} catatan
{{ incident.label }}{{ operationsStatusLabel(incident.status==='OPEN'?incident.severity:'RESOLVED') }}

{{ incident.message }}

{{ incident.detail }}

{{ formatDateTime(incident.lastSeenAt) }}

{{ incident.occurrences||1 }} kali terdeteksi

Belum ada insiden operasional.

Nomor WhatsApp CS AI

{{ can('canManageWa') ? 'Tambahkan beberapa nomor. Setiap nomor dapat ditugaskan ke satu Agent AI.' : 'Mode lihat saja: hanya nomor CS yang menjadi akses Anda yang ditampilkan.' }}

Belum ada nomor WhatsApp.

Order Non-Alinev

DIBUAT DI APLIKASI

Order manual ini berdiri sendiri dan tidak dikirim atau disinkronkan ke Alinev.

Buat minimal satu produk Non-Alinev di Katalog Produk sebelum menambahkan order.
{{ order.customerName }}{{ order.orderNumber }} • +{{ order.customerPhone }}
{{ money(order.total) }}

{{ (order.items||[]).map(item=>item.quantity+'× '+item.name).join(', ') }}

{{ localPaymentStatusLabel(order.paymentStatus) }}{{ localOrderStatusLabel(order.orderStatus) }}
Belum ada order Non-Alinev.

Katalog Produk

Produk Non-Alinev dibuat langsung di aplikasi. Produk Alinev tetap masuk melalui sinkronisasi satu arah dan tidak bercampur pada order manual.

Alinev → Katalog{{ db.alinevConfig?.apiHealth?.catalog?.localActive||0 }} aktif{{ db.alinevConfig.apiHealth.catalog.localArchived }} arsip

Terakhir berhasil: {{ db.alinevConfig?.apiHealth?.catalog?.lastSuccessAt?formatDateTime(db.alinevConfig.apiHealth.catalog.lastSuccessAt):'belum pernah' }}. Produk yang hilang di Alinev hanya diarsipkan, bukan dihapus.

{{ filteredProducts.length }} produk ditampilkan

Foto produk
{{ p.alinevSource==='api'?(p.scalevSource==='api'?'ALINEV + SCALEV':'ALINEV'):p.scalevSource==='api'?'SCALEV':'LOKAL' }}{{ p.brief||p.faq?'Knowledge siap':'Belum lengkap' }}

{{ p.name }}

Harga belum tersedia dari Alinev

{{ money(p.price||0) }}

{{ fulfillmentLabel(p) }}{{ shippingLabel(p) }}
Produk yang dicari tidak ditemukan.Belum ada produk pada filter ini.

Agent AI

Kelola Agent yang menangani percakapan customer. Buka pengaturan hanya saat ingin mengubah SOP, produk, testimoni, atau pengiriman.

{{ db.shippingConfig?.apiConfigured ? 'RajaOngkir terhubung' : 'RajaOngkir belum dikonfigurasi' }}
{{ agentActionMessage }}
{{ a.isActive?'Aktif':'Nonaktif' }}
{{ initials(a.name||'AI') }}

{{ a.name }}

{{ a.storeName||'Toko belum diisi' }}

{{ waName(a.waAccountId) }}

{{ a.productIds?.length||0 }} produk{{ a.testimonials?.length||0 }} testimoni

Hapus {{ a.name }}? Customer yang memakai Agent ini perlu ditugaskan ulang.

{{ agentSearch?'Agent tidak ditemukan.':'Belum ada Agent AI.' }}

Chat Customer

{{ unreadChatCount }} baru{{ handoffCount }} perlu CS

Kasus komplain, minta admin, masalah pembayaran, atau AI tidak yakin otomatis masuk antrean manusia.

{{ initials(customerDisplayName(c)) }}
{{ customerDisplayName(c) }}
{{ chatPreviewTime(c) }}{{ c.handoffRequired?'Butuh CS':c.isAiActive?'AI On':'Manual' }}
{{ latestChatPreview(c) || 'Belum ada percakapan' }}
{{ waName(c.waAccountId) }}
{{ handoffReason(c) }} • {{ handoffAge(c) }}
{{ chatQueueFilter==='HANDOFF'?'Tidak ada chat yang menunggu CS.':'Tidak ada customer.' }}
{{ customerDisplayName(currentSelectedContact) }}
{{ displayPhone(currentSelectedContact) }}
Butuh CS
{{ waName(currentSelectedContact.waAccountId) }} • {{ agentForContactName(currentSelectedContact) }}
{{ waName(currentSelectedContact.waAccountId) }}•{{ agentForContactName(currentSelectedContact) }}
{{ currentSelectedContact.profile?.name || 'Nama belum tersimpan' }} {{ profileLocation(currentSelectedContact) }} {{ profileProductNames(currentSelectedContact.profile.interestedProductIds).slice(0,2).join(', ') }} +{{ currentSelectedContact.profile.interestedProductIds.length-2 }} {{ lastOrderStatusLabel(currentSelectedContact.profile.lastOrder.status) }} • {{ money(currentSelectedContact.profile.lastOrder.total||0) }}
Perlu dibalas manusia

{{ handoffReason(currentSelectedContact) }} • {{ handoffAge(currentSelectedContact) }}

Pemicu: “{{ currentSelectedContact.handoffLastMessage }}”

{{ handoffActionMessage }}

Pilih customer.
{{ visibleChatLogs.length }} pesan cocok dengan “{{ conversationSearch }}”
Belum ada balasan cepat untuk nomor CS ini.
Preview foto
{{ manualImageFile?.name || 'Foto' }}{{ manualImageFile ? (manualImageFile.size/1024/1024).toFixed(2)+' MB' : '' }} • Caption dapat ditulis di bawah
Balasan cepat • pilih untuk memasukkan

Auto Follow-up Berdasarkan Label

Customer yang tetap berada pada label tertentu akan di-follow-up setelah jeda yang kamu tentukan.

Berdasarkan labelBisa buat rule berbeda untuk tiap label.
Chat baru reset timerPesan customer baru menunda follow-up otomatis.
Jam aktifDefault hanya 08.00–20.00 WIB.
STOP dihormatiCustomer opt-out, handoff, atau mode manual tidak dikirimi.
Memuat Auto Follow-up...

Belum ada Auto Follow-up

Contoh: label Tanya-tanya → follow-up setelah 1 hari jika customer belum membalas.

{{ rule.name }}

{{ rule.active?'AKTIF':'DIJEDA' }}

{{ rule.waAccountId==='ALL'?'Semua nomor CS':waName(rule.waAccountId) }}

LABEL{{ rule.label }}
KIRIM SETELAH{{ autoFollowupDelayText(rule.delayMinutes) }}
JAM AKTIF{{ rule.quietStart }}–{{ rule.quietEnd }}
OPT-IN{{ rule.requireOptIn?'Wajib':'Tidak wajib' }}
{{ rule.messageMode==='AI'?'PESAN AI OTOMATIS':'TEMPLATE MANUAL' }}

Dibuat berbeda untuk setiap customer berdasarkan chat terakhir dan memori percakapannya.

{{ rule.message }}

{{ rule.summary?.matchingContacts||0 }}Customer cocok
{{ rule.summary?.sentTotal||0 }}Terkirim
{{ rule.summary?.blocked||0 }}Terblokir guardrail

Satu rule hanya mengirim sekali selama customer berada pada siklus label tersebut. Jika label berubah lalu kembali lagi, rule dapat berjalan lagi.

Safe Broadcast Manager

Campaign hanya dikirim ke customer yang memiliki izin broadcast dan lolos guardrail.

Opt-in wajibSTOP otomatisAuto-pause risiko

JPG, PNG, atau WEBP • maksimal 5 MB • dikirim bersama teks sebagai caption.

{{ broadcastImage.originalName }}

{{ broadcastImage.size?Math.round(broadcastImage.size/1024)+' KB':'' }}

Dengan gambar, teks maksimal 900 karakter.

{{ broadcastText.length }}/{{ broadcastImage.filename?900:4000 }} • Footer STOP otomatis

Spintax seperti {Halo|Hai} tetap didukung. Dengan gambar, teks menjadi caption gambar.

Guardrail aktif: customer tanpa opt-in, sudah STOP, sedang Human Handoff, label Komplain, atau masih terkena frequency cap otomatis dikeluarkan.
{{ broadcastPreview?.eligibleCount ?? 0 }} customer eligible

Batas operasional saat ini: {{ db.broadcastConfig?.maxTargets || 200 }} target/campaign.

Mencegah customer menerima campaign terlalu sering dari nomor ini.

Eligible{{ broadcastPreview.eligibleCount }}
Kandidat Awal{{ broadcastPreview.totalCandidates }}
{{ broadcastExclusionLabel(key) }}-{{ count }}

Contoh penerima eligible

{{ c.name || c.phone || 'Customer' }}{{ c.label || '-' }}{{ c.phone }}

Riwayat Campaign

Reply dan closing dihitung sebagai aktivitas setelah campaign dalam jendela atribusi sistem.

Memuat
Belum ada campaign.
{{ c.name }}{{ broadcastStatusLabel(c.status) }}

{{ waName(c.waAccountId) }} • {{ c.segmentLabel }} • {{ formatDateTime(c.createdAt) }}

Target{{ c.stats?.total||0 }}
Terkirim{{ c.stats?.sent||0 }}
Reply{{ c.stats?.replied||0 }} ({{ c.stats?.replyRate||0 }}%)
Closing{{ c.stats?.closing||0 }}
STOP{{ c.stats?.optOut||0 }}
Omzet*{{ money(c.stats?.revenue||0) }}
Gambar + Teks

{{ c.messagePreview }}

{{ c.pauseReason }}

*Omzet adalah closing yang terjadi setelah campaign dalam jendela atribusi, bukan bukti bahwa campaign menjadi satu-satunya penyebab closing.

Lead Priority & Next Best Action

Urutkan customer yang perlu ditangani dan lihat tindakan berikutnya beserta alasannya.

REKOMENDASI SAJA

{{ leadPriorityQueue.summary?.protected||0 }}

Dilindungi guard

Menghitung prioritas lead...
Tidak ada lead yang cocok dengan filter.

{{ item.name }}

{{ leadPriorityLabel(item.intelligence.priority) }}TERLAMBAT

{{ item.phone||'-' }} • {{ item.waAccountName }} • {{ item.agentName }}

{{ item.store.name||item.store.id }} • {{ item.store.orderId }} • {{ item.store.paymentStatus }}

{{ item.intelligence.score }}dari 100
Next Best Action{{ item.intelligence.nextActionLabel }}
{{ leadDueText(item.intelligence.dueAt) }}

{{ item.intelligence.objective }}

Mengapa diprioritaskan

{{ item.intelligence.reason }}

{{ reason.points>0?'+':'' }}{{ reason.points }} {{ reason.label }}
CONTOH BALASAN

{{ item.intelligence.suggestedMessage }}

Tidak ada contoh balasan penjualan karena guard {{ item.intelligence.guardReason }} aktif.

Skor dan Next Best Action adalah rekomendasi internal. Pesan tidak pernah dikirim otomatis dari halaman ini.

Customer

Cari, pilih, dan kelola satu atau banyak customer sekaligus.

{{ crmContacts.length }} hasil{{ crmPageStart }}–{{ crmPageEnd }}
Filter aktif
{{ customerDisplayName(c) }}{{ displayPhone(c) }}
{{ waName(c.waAccountId) }}

{{ agentForContactName(c) }}

{{ c.label }}Butuh CS{{ c.isAiActive?'AI':'Manual' }}
{{ profileLocation(c) }}{{ c.profile.interestedProductIds.length }} minat
{{ money(c.closingRevenue||0) }} • {{ closingRevenueSourceLabel(c.closingRevenueSource) }}
WA: {{ waLabelSyncText(c) }}
Tidak ada customer yang cocok dengan filter.
CustomerNomor CSAgent AILabelStatusTerakhirProfil
{{ customerDisplayName(c) }}{{ displayPhone(c) }}{{ profileLocation(c) }}{{ waName(c.waAccountId) }}{{ agentForContactName(c) }}
{{ money(c.closingRevenue||0) }} • {{ closingRevenueSourceLabel(c.closingRevenueSource) }}
{{ waLabelSyncText(c) }}
Butuh CS{{ c.isAiActive?'AI Aktif':'Manual' }}{{ c.lastChat ? String(c.lastChat).replace(/^(\d{1,2}[.:]\d{2})[.:]\d{2}$/, '$1').replace(':','.') : '-' }}
Tidak ada customer yang cocok dengan filter.

Menampilkan {{ crmPageStart }}–{{ crmPageEnd }} dari {{ crmContacts.length }} customer

{{ crmPage }} / {{ crmTotalPages }}

Alinev

Kelola koneksi store, pembayaran, dan recovery dari satu tempat.

{{ alinevHealthCount }}/6 fitur aktif

{{ db.alinevStats?.total||0 }}

Order tersimpan

{{ db.alinevStats?.paid||0 }}

Sudah dibayar

{{ db.alinevStats?.pending||0 }}

Menunggu bayar

{{ db.alinevStats?.matched||0 }}

Customer cocok

{{ db.alinevStats?.needsReview||0 }}

Perlu ditinjau

Status Sistem

Lihat bagian yang perlu diperiksa tanpa membuka semua pengaturan.

Akses Cepat

Pilih pekerjaan yang ingin dilakukan.

Aktivasi Webhook Alinev

Gunakan URL ini di Alinev → Settings → Developers → Webhooks.

{{ db.alinevConfig?.signingSecretConfigured?'Signing Secret sudah tersimpan aman di server.':'Tambahkan ALINEV_WEBHOOK_SIGNING_SECRET ke file .env server, lalu restart PM2.' }}

Event yang harus dipilih

{{ event }}
  1. Masukkan Webhook URL di Alinev.
  2. Pilih seluruh event di atas.
  3. Masukkan Signing Secret Alinev ke `.env` server.
  4. Aktifkan webhook di Alinev; event uji akan tampil pada statistik.

Pengaturan Integrasi

Berlaku untuk seluruh store setelah nomor CS masing-masing berhasil dipetakan. Tidak ada Nomor CS fallback.

Strict Store Routing aktif. Order tanpa identitas store atau tanpa mapping tidak dikirim ke customer dan masuk Perlu Ditinjau.

Alinev API V3 & Kesehatan Sinkronisasi

Menemukan store, mengambil order yang terlewat, dan memverifikasi pembayaran sebelum Checkout Recovery dikirim.

{{ db.alinevConfig?.apiKeyConfigured?'API KEY TERPASANG':'API KEY BELUM ADA' }}
Tambahkan ALINEV_API_KEY ke .env server, lalu restart PM2. Buat key dari menu Developer Alinev dengan akses read dan orders:write.
{{ db.alinevConfig.apiHealth.lastError }} • {{ formatDateTime(db.alinevConfig.apiHealth.lastErrorAt) }}
Order Reliability & Self-Healing

Webhook real-time dengan pemeriksaan API cadangan setiap {{ Math.round((db.alinevConfig?.apiHealth?.reliability?.intervalMs||300000)/60000) }} menit dan antrean retry yang bertahan setelah restart.

{{ db.alinevConfig?.apiHealth?.reliability?.active?'AKTIF':'PERLU API KEY' }}

Webhook terakhir

{{ db.alinevConfig?.apiHealth?.reliability?.lastWebhookAt?formatDateTime(db.alinevConfig.apiHealth.reliability.lastWebhookAt):'Belum pernah' }}

{{ db.alinevConfig?.apiHealth?.reliability?.recoveredTotal||0 }}

Order dipulihkan API

{{ db.alinevConfig?.apiHealth?.reliability?.jobs?.pending||0 }}

Antrean retry

Pemeriksaan terakhir

{{ db.alinevConfig?.apiHealth?.reliability?.lastSuccessAt?formatDateTime(db.alinevConfig.apiHealth.reliability.lastSuccessAt):'Belum pernah' }}

Webhook pernah terlewat. Self-Healing menemukan order melalui API pada {{ formatDateTime(db.alinevConfig.apiHealth.reliability.webhookGapDetectedAt) }}. Order: {{ db.alinevConfig.apiHealth.reliability.lastRecoveredOrderIds.join(', ') }}
{{ db.alinevConfig.apiHealth.reliability.lastError }}
PAID Watchdog aktif. Order lokal yang masih menunggu diperiksa langsung ke API Alinev setiap {{ Math.round((db.alinevConfig.apiHealth.paidWatchdog.intervalMs||120000)/60000) }} menit, walaupun sinkronisasi order penuh dimatikan.Dipulihkan terakhir: {{ db.alinevConfig.apiHealth.paidWatchdog.lastResult?.paymentsCorrected||0 }}

Terakhir berhasil

{{ db.alinevConfig?.apiHealth?.lastSuccessAt?formatDateTime(db.alinevConfig.apiHealth.lastSuccessAt):'Belum pernah' }}

{{ db.alinevConfig?.apiHealth?.lastResult?.storesFetched||0 }}

Store terbaca

{{ db.alinevConfig?.apiHealth?.lastResult?.ordersFetched||0 }}

Order diperiksa

{{ db.alinevConfig?.apiHealth?.lastResult?.ordersImported||0 }}

Order ditemukan

{{ db.alinevConfig?.apiHealth?.lastResult?.paymentsCorrected||0 }}

Pembayaran dikoreksi

menit
hari
Payment Guard: ketika API sync aktif, follow-up otomatis maupun tombol Kirim AI ditahan jika status order tidak dapat diverifikasi langsung ke Alinev.
StoreTerakhir syncDiperiksaBaruDikoreksiStatus
{{ store.storeName||store.storeId }}{{ store.lastSuccessAt?formatDateTime(store.lastSuccessAt):'-' }}{{ store.ordersFetched||0 }}{{ store.ordersImported||0 }}{{ store.paymentsCorrected||0 }}{{ store.lastError }}Sehat

Sinkronisasi Katalog Produk Satu Arah

Alinev menjadi sumber nama, harga, jenis produk, varian, SKU, berat, dan gambar. Data fulfillment lokal tidak ditimpa.

{{ db.alinevConfig?.apiHealth?.catalog?.active?'OTOMATIS AKTIF':'NONAKTIF' }}
{{ db.alinevConfig.apiHealth.catalog.lastError }} • {{ formatDateTime(db.alinevConfig.apiHealth.catalog.lastErrorAt) }}

Terakhir berhasil

{{ db.alinevConfig?.apiHealth?.catalog?.lastSuccessAt?formatDateTime(db.alinevConfig.apiHealth.catalog.lastSuccessAt):'Belum pernah' }}

{{ db.alinevConfig?.apiHealth?.catalog?.lastResult?.apiVariants||0 }}

Varian Alinev

{{ db.alinevConfig?.apiHealth?.catalog?.lastResult?.created||0 }}

Produk baru

{{ db.alinevConfig?.apiHealth?.catalog?.lastResult?.updated||0 }}

Diperbarui

{{ db.alinevConfig?.apiHealth?.catalog?.lastResult?.archived||0 }}

Diarsipkan

{{ db.alinevConfig?.apiHealth?.catalog?.lastResult?.priceMissing||0 }}

Harga kosong

menit

Pemetaan Store & Nomor CS

Setiap store hanya mengirim dan menerima tindak lanjut melalui nomor CS yang dipilih.

{{ db.alinevConfig?.mappedStores||0 }} dipetakan{{ db.alinevConfig.unmappedStores }} belum dipetakan

Alinev API • {{ formatDateTime(mapping.apiLastSeenAt) }}

Terdeteksi webhook • {{ mapping.orderCount||0 }} order

ID lebih diutamakan daripada nama.

Belum ada store terdeteksi. Tambahkan manual atau tunggu order Alinev pertama masuk.
Jika satu customer berbelanja di store berbeda, kontak dan proses order tetap dipisahkan berdasarkan nomor CS WhatsApp tujuan.

Jadwal AI Checkout Recovery

Jeda dihitung ulang dari balasan customer terbaru. Pembayaran, STOP, handoff, dan mode manual menghentikan pengiriman.

{{ index+1 }}menit setelah aktivitas terakhir
hari
Safe Rollout aktif. Otomatis hanya berlaku untuk order baru setelah {{ alinevConfigForm.checkoutRecovery.enabledAt?formatDateTime(alinevConfigForm.checkoutRecovery.enabledAt):'pengaturan ini disimpan' }}. Order sebelumnya tetap dapat dikirim satu per satu melalui tombol Kirim AI.
Recovery otomatis sedang nonaktif. Saat diaktifkan kembali, sistem membuat waktu aktivasi baru sehingga order lama tidak ikut terkirim.

Laporan Recovery per Store

Pesan, balasan, pembayaran hasil recovery, dan omzet dipisahkan sesuai store serta nomor CS.

{{ alinevRecoveryReport.reached||0 }}

Customer dijangkau

{{ alinevRecoveryReport.messagesSent||0 }}

Pesan terkirim

{{ alinevRecoveryReport.customerReplies||0 }}

Customer membalas

{{ alinevRecoveryReport.recoveredOrders||0 }}

Berhasil bayar

{{ money(alinevRecoveryReport.recoveredRevenue||0) }}

Omzet recovery • {{ alinevRecoveryReport.recoveryRate||0 }}%

StoreNomor CSMenungguPesanBalasanBerhasilOmzet
{{ store.storeName }}{{ store.waAccountName }}{{ store.waiting }}{{ store.messagesSent }}{{ store.customerReplies }}{{ store.recoveredOrders }}{{ money(store.recoveredRevenue) }}
Belum ada aktivitas recovery pada periode ini.
Memuat laporan...

Order Alinev Terbaru

Informasi penting digabung per proses agar lebih mudah dipindai. Periksa ulang tetap aman dan idempotent.

{{ (db.alinevOrders||[]).length }} order {{ db.alinevStats?.processedEvents||0 }} berhasil {{ db.alinevStats?.failedEvents||0 }} gagal

{{ order.orderId }}

{{ order.items?.length||0 }} item • {{ order.matchedItems||0 }} cocok

{{ alinevPaymentLabel(order.paymentStatus) }}
Customer{{ order.customerName||'Tanpa nama' }}

{{ order.customerPhone||'-' }}

Store & CS{{ order.storeName||order.storeId||'Store tidak terbaca' }}

{{ order.waAccountName||'Belum dipetakan' }}

Total & Fulfillment{{ money(order.total||0) }}{{ alinevFulfillmentLabel(order.fulfillment) }}
Recovery{{ alinevRecoveryStatusLabel(order.recovery?.status) }}

{{ order.recovery?.attempts||0 }} pesan • {{ formatDateTime(order.recovery.nextAttemptAt) }}

{{ alinevMatchStatusLabel(order.matchStatus) }}

{{ formatDateTime(order.lastEventAt) }}

Resi {{ order.shipmentReceipt }}

Fulfillment: {{ order.fulfillment.error }}

Recovery: {{ order.recovery.lastError }}

{{ order.error }}

Belum ada webhook order Alinev yang diterima.

Integrasi SCALEV

Berjalan berdampingan dengan Alinev; order dan transaksi tidak saling tercampur.

{{ db.scalevConfig?.active?'Webhook aktif':'Webhook belum aktif' }}{{ db.scalevConfig?.apiKeyConfigured?'API key terpasang':'API key belum ada' }}

{{ db.scalevStats?.total||0 }}

Total order

{{ db.scalevStats?.paid||0 }}

Sudah lunas

{{ db.scalevStats?.pending||0 }}

Menunggu

{{ db.scalevConfig?.mappedStores||0 }}

Store terhubung

{{ db.scalevStats?.needsReview||0 }}

Perlu perhatian

Kesiapan integrasi: {{ db.scalevConfig?.readiness?.status||'MEMERIKSA' }}

{{ db.scalevConfig?.readiness?.activeProducts||0 }} produk aktif • {{ db.scalevConfig?.readiness?.unreadyDigitalProducts||0 }} belum siap • {{ db.scalevConfig?.readiness?.failedEvents||0 }} webhook gagal • {{ db.scalevConfig?.readiness?.paidAwaitingFulfillment||0 }} akses terlambat • {{ db.scalevConfig?.readiness?.failedDigitalFulfillments||0 }} akses gagal

{{ alert.level==='INFO'?'Pengingat keamanan:':'•' }} {{ alert.message }}

Order {{ failure.orderId }}

{{ failure.error }}

Periksa nomor WhatsApp pelanggan dan minta pelanggan mengirim pesan ke nomor CS. Jangan kirim berulang sebelum nomor dapat menerima pesan.

Order {{ manual.orderId }} • tindak lanjut email

Pengiriman WhatsApp dihentikan sesuai instruksi. Email belum dikirim; tim akan menghubungi pelanggan secara manual.

Koneksi & Sinkronisasi

Produk dan order hanya diambil dari Store ID yang ditambahkan manual. Event store lain otomatis diabaikan.

{{ db.scalevConfig?.signingSecretConfigured?'Signing Secret sudah aktif.':'Signing Secret belum dikonfigurasi di server.' }}
Tambahkan SCALEV_API_KEY ke server untuk sinkronisasi otomatis. Webhook tetap dapat digunakan setelah Signing Secret aktif.
{{ db.scalevConfig.apiHealth.lastError }}
Pengaman real-time aktif. Webhook memproses seketika; pemeriksaan order terbaru berjalan tiap ±1 menit. Terakhir berhasil {{ formatDateTime(db.scalevConfig.apiHealth.realtime.lastSuccessAt) }}. {{ db.scalevConfig.apiHealth.realtime.lastError }}
Antrean webhook

{{ db.scalevConfig?.apiHealth?.webhookQueue?.received||0 }} menunggu • {{ db.scalevConfig?.apiHealth?.webhookQueue?.processing||0 }} diproses

Webhook gagal

{{ db.scalevConfig?.apiHealth?.webhookQueue?.failed||0 }}

Sisa batas API

{{ db.scalevConfig?.apiHealth?.rateLimit?.remaining||'-' }} / {{ db.scalevConfig?.apiHealth?.rateLimit?.limit||'-' }}

Webhook perlu diproses ulang
{{ event.event }} • {{ event.orderId||event.uniqueId }}{{ event.error }}

Pemetaan Store Manual

Sistem tidak menambah store otomatis. Hanya store di daftar ini yang disinkronkan.

Belum ada store SCALEV.

Jadwal AI Checkout Recovery

Jeda dihitung ulang dari balasan customer terbaru. Pembayaran, STOP, handoff, dan mode manual menghentikan pengiriman.

{{ index+1 }}menit setelah aktivitas terakhir
hari
Safe Rollout aktif. Otomatis hanya berlaku untuk order baru setelah {{ scalevConfigForm.checkoutRecovery.enabledAt?formatDateTime(scalevConfigForm.checkoutRecovery.enabledAt):'pengaturan ini disimpan' }}. Order sebelumnya tidak otomatis dikirim.
Recovery otomatis sedang nonaktif. Saat diaktifkan, order lama tidak ikut terkirim.

Laporan Recovery per Store

Pesan, balasan, pembayaran hasil recovery, dan omzet dipisahkan sesuai store serta nomor CS.

{{ scalevRecoveryReport.reached||0 }}

Customer dijangkau

{{ scalevRecoveryReport.messagesSent||0 }}

Pesan terkirim

{{ scalevRecoveryReport.customerReplies||0 }}

Customer membalas

{{ scalevRecoveryReport.recoveredOrders||0 }}

Berhasil bayar

{{ money(scalevRecoveryReport.recoveredRevenue||0) }}

Omzet recovery • {{ scalevRecoveryReport.recoveryRate||0 }}%

StoreNomor CSMenungguPesanBalasanBerhasilOmzet
{{ store.storeName }}{{ store.waAccountName }}{{ store.waiting }}{{ store.messagesSent }}{{ store.customerReplies }}{{ store.recoveredOrders }}{{ money(store.recoveredRevenue) }}
Belum ada aktivitas recovery pada periode ini.
Memuat laporan...

Order SCALEV Terbaru

Hanya menampilkan order dari Store ID yang dipetakan.

OrderCustomerStore & CSPembayaranStatusAksi
{{ order.orderId }}

{{ formatDateTime(order.createdAt) }}

{{ order.customerName||'Tanpa nama' }}

{{ order.customerPhone||'-' }}

{{ order.storeName||order.storeId||'-' }}

{{ order.waAccountName||'Belum dipetakan' }}

{{ money(order.total||0) }}

{{ order.paymentStatus }}

{{ order.matchStatus }}

{{ order.error }}

Belum ada order SCALEV yang diterima.

User & Role

Kelola akun Owner, Supervisor, dan CS serta batas akses nomor/Agent.

UserRoleAksesStatusAksi
{{ initials(u.name) }}
{{ u.name }}

@{{ u.username }} • Anda

{{ roleLabel(u.role) }}Semua data operasional{{ u.assignedWaAccountIds?.length||0 }} nomor CS • {{ u.assignedAgentIds?.length||0 }} agent{{ u.isActive?'Aktif':'Nonaktif' }}Password sementara

Audit Aktivitas

Riwayat tindakan penting user di dashboard.

{{ a.userName }}{{ auditActionLabel(a.action) }}

{{ a.detail || a.targetType }} • {{ a.targetId }}

{{ formatDateTime(a.timestamp) }} • {{ a.role }}

Belum ada audit aktivitas.
{{ t.title }}

{{ t.message }}