Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-internal
Tabung Riwayat + Voicemail kelas dengan alat pemutar media-
Tab sejarah (SoftphoneHistoriTab.tsx): - Gulungan tak terbatas melalui IntersectionObserver di dalam wadah gulungan panel - Filter chips: All / Inbound / Outbound / Missed / Recorded - Ikon rekaman dalam aksi baris ketika sisi pencitraan memiliki baris perekaman - Per- row overflow menu (Tambahkan ke kontak) - Klik-to- panggilan kembali melalui dialek yang ada Tab voicemail (SoftphoneVoiceTab.tsx): - Gulungan tak terbatas, chip filter (Semua / Belum dibaca / Telah audio) - Per- row Play / Call back / More actions - Auto- mark- baca main - Two-option hapus dialog: Archive (soft-hide, all users) vs Permanently delete (gated by VOIP _ VOICEMAIL _ PERMANENT _ DELETE right; falls back to disabled state for users without it) - Mark- all- baca tombol dengan no-op- ketika-nol caudance Alat popup MediaPlayer * * * * * * * * * * * * * * * - Audio: disintesis waveform-style scrubber, click-to-seek, Replay10 / Forward10, laju putar (0.5x-2x), loop, volume + bisu, perangkat keluaran dihormati dari pengaturan AV - Video: berisi viewport, PiP, layar penuh, scrubber + kontrol yang sama - Selektor trek multi- untuk rekaman panggilan (master + setiap per- saluran kaki) - Unduh - Dua mode sumber: voipApi merekam (call / VM) atau gambar aset oleh imgId - Terdaftar dalam alat / registry / registrations.ts sebagai multi- instance Pipa Hook +: - use softphone exposes) and archive / kekal-delete action - voipApi memperoleh lookup Recordings, getRecordingMetadata, archiveVoimail, paginated getVoicemail - / api / voip proxy melewati audio / video / octet-mayat melalui dengan * * * * * * * * * * * * utuh (tidak ada buffering) sehingga elemen media scrub - Baru * * * * * * * * * * * * * ke depan ke DocsService baru streaming titik akhir dengan Range - VOIP _ VOICEMAIL _ PERMANENT _ DELETE ditambahkan ke depan registry RoleRightType sehingga cek Gerbang Kanan hapus UI
· InitializerService
Pelari migrasi untuk menyediakan Rekaman-pencarian kolom + kolom archive VM
Tambahkan RECORDINGS.provider _ instance _ id (UUID) dan provider _ external _ id (VARCHAR (64)) plus komposit idx _ records _ provider _ provider _ lookup indeks yang dipakai oleh tab riwayat softphone. Juga menambahkan PHONE _ VOICEMAIL.is _ archived + date _ archived untuk aliran lembut -archive baru. Menggunakan RECORDINGS / RECORDING _ EXTS baris dalam tahap yang sama - idempoten alami (hanya cocok baris yang penyedia _ external _ id masih NULL, yang tidak akan terjadi sekali ConversionService berada di jalur kode baru). Pesan 35 - setelah * * * * * * * * * * * * (30) tabel rekaman ada sebelum lahan ALTERs.
· ConversionService
Persist provider InstanceId + providerExternalId pada Recording di Ingest
Thread asterisk- support X-Phone- Server-Id dan X-Asterisk-Unique-Id (already in UnrecesedRecording) ke field X-RecordingMetadata baru sehingga call / voicemail dalam sistem pencitraan membawa kunci bergabung kembali ke baris sumber. Untuk voicemail pembantu mengirim basis nama berkas mentah (misalnya msg0000); kita strip awalan msg dan nol terkemuka sehingga kunci yang disimpan cocok dengan pesan suara FreePBX REST API kembali sebagai id pesan.
· DocsService
Tambah * * * * * * * * * * * * * * * dengan dukungan Range HTTP
Streaming akhir umum untuk aset pencitraan audio / video, yang dipakai oleh alat media kamo- internal. Mengurangi otorisasi ImageService (sama dengan / download /...) tapi aliran dengan Diterima Rentang + Kontent- Rentang sehingga elemen media dapat menghapus tanpa memuat berkas penuh.
· VOIPService
Rekaman putar, voicemail arsip, paginated voicemail, riwayat pengayaan
- Recording Baru Controller dengan pencarian massal, range- streaming audio untuk master + per-channel trek, dan metadata untuk jendela alat media- player - CallController.getCallHistory / getVoicemail memperkaya setiap baris dengan pencitraan recordingId melalui RecordingLookup baru - perjalanan keliling tunggal, tidak ada N + 1 - PhoneProvider.getVoicemail sekarang mengambil (memberId, page, size); FreePBX paginates clients -side dari satu fetch, RingCentral menggunakan paging asli, KamoPBX terus melempar NotSupported - Arsip Voicemail endpoint (soft- hide via PhoneVoice.isArchived) dan kekal-delete digated oleh VOIP _ VOCEMAIL _ PERMANENT _ DELETE - bypass godActive membutuhkan kedua GD eligibility DAN aktif toggle - PhoneProvider memperoleh getInstanceId () sehingga pengontrol dapat menyelesaikan kunci bergabung untuk rekaman pencarian tanpa panggilan pabrik kedua
· kamo-shared-library
Penyedia tombol pencarian pada Perekam, arsip voicemail, jangkauan streaming MinIO
- Recording: tambahkan providerInstanceId + providerExternalId untuk bergabung dengan operator panggilan riwayat / voicemail baris kembali ke pencitraan aset - PhoneVoicemail: tambahkan is Archived + dateArchived untuk soft- hide dari daftar softphone - RoleRightType: tambahkan VOIP _ VOICEMAL _ PERMANENT _ DELETE (gerbang penghapusan destruktif; archive tetap tersedia untuk semua) - MinIOStorageService: tambahkan openRange () + RangeStream sehingga audio / video titik akhir dapat menghormati Jangkauan HTTP - Recording ImaginService: thread provider id + external id melalui RecordingMetadata ke baris Rekaman di telest
· kamo-internal
Tambahkan tab Sejarah - padinated audit timeline dengan pencarian dan penyaring
- LeadHistories Panel: bilah alat penyaring lengket dengan pencarian debounced, * * * * * * * * * * * filter, tabel MUI dengan pagination, warna - chip acara, resolusi nama member- untuk bidang penempatan / akun - LeadsApi: getLeadiHistory () dan getLeadHistoriFilter () dengan dukungan kuiri penuh param - LeadHistories Entry, LeadHistories Actor, LeadHistoriFieldMeta, LeadHistoresPateRespon, LeadHistorsResponse type - Next.js proxy route untuk * * * * * * * * * * * * * dan / filter - LeadViewClient ditransfer ke render LeadHistories Panel ketika History tab aktif
· SecurityService
Tambahkan GET / {id} / history dan / {id} / history / filter titik akhir
Padinated, filterable, searable lead- history endpoint dengan batch actor loading (tidak ada N + 1). Penyaring titik akhir mengembalikan ruas yang berbeda, semua ruas registri, aktor yang berbeda, dan semua tipe acara. Semua titik akhir bermutasi sekarang lulus anggota panggilan sebagai aktor ke LeadHistories Service untuk atpials.
· kamo-shared-library
Tambahkan log audit sejarah - entitas, registri, layanan, DTO, kait LeadService
- Entitas LeadHistory (UUID PK, FK panjang polos - tidak ada batasan FK untuk memungkinkan penghapusan / konversi memimpin) - LeadHistory EventType enum dengan label yang mudah dibaca - LeadHistory FieldRegistry: sumber kebenaran tunggal untuk ~ 55 bidang Lead dilacak; menambahkan sebuah lapangan adalah satu baris - LeadFieldDeslitortor record (kunci, label, kategori, ekstraktor) - LeadHistories Service: snapshot / diff pipeline, * * * * * * * * * * * * * * * padinated + filtered Find, Dibedakan Fields / Actors for filter dropdowns - LeadHistorDTO dengan sarang ActorDTO; semua ID panjang serialisasi sebagai String untuk keselamatan CockroachDB JS presisi - LeadService: pengait sejarah pada pembuatan, pembaruan, hapus, timbal balik, LeadAccount, LeadAccount yang tidak sah
· SecurityService
Aktor layanan LeadHistories kabel pada LeadController
· kamo-internal
Tambahkan penempatan akun-manual UI, sistem mata uang, assign / new halaman akun, daerah pengaturan mata uang
· SecurityService
Tambahkan penempatan ujung-akun titik akhir, perbarui Controller AkuntController untuk Tipe Mata Uang
· kamo-shared-library
Tambahkan nilai mata uang enum, perbarui CountryType dengan mata uang primer, tambahkan mata uang ke Akun / Organisasi, tambahkan penempatan lead- akun ke LeadService
· kamo-internal
Tipe label anggota dinamis dalam judul halaman Akun saya
Judul sekarang berbunyi "My {Anggota = 124; Team Anggota} Akun" menggunakan org- dikonfigurasi label perilaku, beralih secara otomatis setelah tipe anggota dimuat.
· kamo-internal
Pindahkan tombol Dokumen ke bilah alat DocManager
Tombol hanya tersedia pada / doc / manager melalui aksi prop. Pindah semua logika (state, handler, DOC _ TYPES, menu) ke DocManager jadi itu muncul pada setiap instansi tertanam. Sederhanakan page.tsx untuk hanya render DocManager with no action prop.
· kamo-internal
Pindahkan Alamat Mailing ke baris 3-kolom dengan Kontak Lead Info dan Primer
· kamo-internal
Dukungan internasional - CountrySelect, LanguageSelect, Subdivisi Ruas di semua bentuk
- Tambahkan KontrosySelect yang dapat dipakai ulang (207 negara, bendera ikon), LanguageSelect (26 bahasa, flag ikon), Lapangan Subdivisionary (dropdown negara AS dengan bendera; negara lain menampilkan ruas teks berlabel) - Tambahkan konstanta negara (countries.ts, littages.ts, usStates.ts, timezones.ts) - Lead view Detail tab: per- card in- place edit dengan * * * * * * * * * * * * * * - Memimpin membuat bentuk: full country / subdivision / timezone dropdowns menggantikan daftar inline terbatas - Pengaturan LabelManager: org bahasa baku dalam Bagian 8, CountrySelect + Subdivisi Ruas di alamat - ContactInfoStep (jaringan menciptakan wizard): CountrySelect + SubdivisionField menggantikan pilihan terbatas - MyAccountTab: Bagian CountrySelect + SubdivisionField menggantikan ruas teks biasa - tipe / leads.ts: tambahkan daerah negara dan subdivisi
· kamo-shared-library
Tambahkan dukungan internasional - Memimpin negara / subdivisi / zona waktu, Bahasa Org, Provinsi Tipe KontryType
- CountryType: tambahkan PROVINCE _ NAMES set, isProvince (), getSubdivisionLabel () - Organisasi: tambahkan bahasa (LanguageType) field - Lead: tambahkan negara (CountryType), subdivision (String), zona waktu (TimeType) - * * * * * * * * * * * * * * menambahkan negara, subdivisi, zona waktu bidang String - LeadService.createLead: menangani ruas baru; bahasa baku + negara dari pengaturan org - LeadService.updateLead: menangani ruas baru - * * * * * * * * * * * * * * * * tambahkan bahasa penangan touchedKey
· kamo-internal
ASSIGN _ LEADS benar, agen filter pilihan tidak ditugaskan, kolom pembersihan
- Gate 'Unassign Leads' agen filter pilihan di belakang ASSIGN _ LEads kanan - 'All Leads' excludes unassign lead untuk anggota tanpa hak - Hapus Street, Produk, Kolom Sumber; hapus Deteksi / Sumber filter dropdown - Hapus kolom Perusahaan; kolom kontak menunjukkan nama perusahaan, kembali ke nama kontak - Kolom vendor menampilkan tooltip dengan Detail Produk - Sumber - Tanggal kolom drop awalan hari kerja, menyusut dari 170px ke 140px - Tampilan Waktu Tanggal: tambahkan prop showWeekday (default false)
· kamo-shared-library
Tambahkan ASSIGN _ LEADS kanan (ID 137) di bawah daerah CRM
· kamo-internal
Tambah Tanda Ke field ke bagian Pasar & Penugasan pada / lead / baru
- Fetches anggota tim aktif dari * * * * * * * * * * * * * * * * * * pada mount - Anggota grup oleh departemen dengan abjad terurut departemen dan anggota - Nama formulir sebagai "Last, First"; pilihan pertama adalah "Auto Assign / Unassign" - Bagian daerah reorders: Pasar Lead, Assign To, Waktu terbaik untuk Kontak, Vendor, Produk, Tipe Prospect (all lg = 4) - Fixes leadsApi.ts untuk mengirim assignedTeamMMMDId bukan field pengguna mati - Tambahkan TeamAnggota Tim ke tipe Lead
· kamo-asterisk-support
Keluarkan recordedAt + per-file ekstensi dalam upload manifest
- Watcher: setiap yang dibebaskan Rekaman membawa RecordedAt, berasal dari segmen EPOCH dari kami dikelola * * * * * * * * * * * * * * * nama berkas, mundur ke file mtime untuk berkas voicemail / legacy. - Grouper: CallBatch now track FileExtensions [] (satu per berkas, paralel ke Berkas []) dan batch 's keseluruhan Rekaman (awal awal kaki mulai). Urutkan kunci untuk kaki adalah Recordedat dengan FinalizeDI sebagai Tiebreaker sehingga kaki master deterministik. - Uploader: daftar sekarang termasuk catatan tingkat atas dan per- file ekstensi. Layanan Percakapan mengkonsumsi keduanya untuk menulis Rekaman (date _ record, length from ffprobe) and per- leg RecordingExt baris.
· ConversionService
Pass Metadata Rekaman untuk pencitraan - panjang ffprobe + parsing manifest
- * * * * * * * * * * * * * * jalankan format ffprobe -show _ entry = durasi pada master Opus / WebM, kembali ms. 0 = tidak diketahui (bukan fatal). - * * * * * * * * * * * * * * * * sekarang: * menjalankan probeDurationM pada master untuk mendapatkan panjang rekaman; * parses manifest (dikirim oleh kamo- tanda bintang-dukungan) untuk recordedAt dan data ekstensi / saluran berkas, mundur ke baris pementasan datecreated and channel- name parsing for older payloads; * melewati * * * * * * * * * * * * * * * * dateRecorded, Panjang M, Ekstensi partisipating) untuk Layanan Gambar Rekaman sehingga dapat menulis baris Recording + RecordingExt yang baru.
· kamo-shared-library
Recording + RecordingExt entitas, RecordingPicture Service menulisnya
- Entitas rekaman baru (UUID, IMG _ ID, IS _ MASTER, IS _ VM, EXTENSI, MEMBER _ ID, LENGTH, DATE _ RECORDED, DATE _ CREADTED [DB- digagalkan melalui @ CreationTimtistemp]). Satu baris per pesan suara terfinalisasi atau rekaman panggilan diunggah untuk pencitraan. - Entitas Recording Ext baru (UUID, RECORDING _ ID, EXTENSION, MEMBER _ ID, IS _ MASTER). Satu baris per saluran yang berpartisipasi dalam rekaman; kaki master ditandai IS _ MASTER = benar, setiap kaki lainnya salah. - * * * * * * * * * * * * * sekarang mengambil Metadata Rekaman bundel (phoneServerInstanceId, dateRecorded, lenghM, Ekstensi partisipating) dan perkuat baris Recording + RecordingExt di transaksi yang sama seperti anggota Img / ImgDat. telah diselesaikan per kaki via * * * * * * * * * * * * * * * * pada memulai instansi VOIP (kosong ketika tidak ditugaskan).
· kamo-internal
Mutakhirkan Kartu Administrasi Platform untuk mencocokkan struktur tab terpadu
Ganti dua kartu basi (Halaman standalone Organisasi + Konfigurasi) dengan lima kartu yang cocok dengan tab sebenarnya: Umum, Organisasi, VOIP & SMS, Sistem Pengguna, dan Advanced - masing-masing menghubungkan langsung ke kanan? tab = param.
· kamo-internal
Tata letak kisi lebar penuh dan pindahkan pemicu sinkronisasi dari tab Lanjutan
- Redesign tab VOIP & SMS untuk menggunakan lebar area-penuh: rentang statistik pipeline baris atas, Recording Processing dan Global Sync Jadwal duduk berdampingan dalam dua kolom kisi di lg + breakpoint - Kartu titik pipa menunjukkan jumlah hidup dengan zero- status checkmarks dan error coding warna; auto- refresh setiap 30-an dicatat dalam subjudul - Global Sync kartu konsolidasi pengaturan jadwal, terakhir - sync timestamp row, dan pemicu manual ke satu panel; diaktifkan / pause chip dalam header - Pindahkan "Force global VOIP sync" dari tab Advanced (duplikasi pemicu sudah ada di VOIP & SMS); Tab tingkat lanjut sekarang menunjukkan teks placeholder
· kamo-internal
Gabung Organisasi ke halaman Konfigurasi dengan nav tab terpadu
- Tambahkan Organisasi sebagai tab dalam * * * * * * * * * * * * * * * * * * (Jenderal) - Hapus halaman standalone - Update Platform Administrasi nav dalam SettingStatusWindow untuk daftar semua 5 tab sebagai subitem yang menunjuk ke konfigurasi? tab =... - Tata letak fix di seluruh tab: konsisten p: {x: 2, sm: 3} isi sehingga tidak lagi berjalan ke dinding kartu - Meningkatkan kartu status GeneralTab dengan latar belakang ikon dan ritme tipografi lebih ketat - Mutakhirkan judul / subjudul SettingsView untuk halaman terpadu
· kamo-marketing
Add Go logo to BUILT WITH banner
· kamo-internal
PONCE _ SERVER _ ID permukaan pada tab overview-telepon
Operator mengatur dukungan kamo-asterisk- pada host FreePBX perlu menempel UUID VoipProviderInstance yang cocok ke berkas konfigurasi pembantu sebagai ID telepon. Sampai sekarang mereka harus grub melalui bar URL atau Database. Daerah "Server Telepon" baru pada / pengaturan / fitur / telepon / {id} overview menampilkan UUID dalam sebuah field baca-saja monospace dengan satu- klik tombol salin (copyableIdField helper, juga dapat digunakan kembali untuk masa depan yang mirip Identifikasi).
· kamo-internal
Clickable VOIP ekstensi di Interaction Center membuka softphone dengan nomor yang telah ada sebelumnya

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit