Haftalik grid dolulugu
{{ formatDashboardPercent(dashboardStats.weekOccupancyPercent) }}
Yukleniyor...
Hafta: {{ dashboardStats.weekStart }} – {{ dashboardStats.weekEnd }} · Saat bandi {{ dashboardStats.scheduleStartHour }}–{{ dashboardStats.scheduleEndHour }} · Gec giris: ders baslangicina +{{ dashboardStats.lateGraceMinutes }} dk tolerans
Ders programi sekmesindeki hafta ile ayni Pazartesi tarihi kullanilir ({{ scheduleWeekStart || dashboardStats.weekStart }}).
Yukleniyor...
{{ formatDashboardPercent(dashboardStats.weekOccupancyPercent) }}
{{ dashboardStats.totalEntries }}
{{ formatDashboardFixed(dashboardStats.avgPeoplePerInstructor, 2) }}
{{ formatDashboardPercent(dashboardStats.qrCoveragePercent) }}
{{ formatDashboardPercent(dashboardStats.lateEntryPercentOfTotal) }}
{{ formatDashboardFixed(dashboardStats.avgStayToAllocatedHourRatio, 2) }}
{{ formatDashboardFixed(dashboardStats.avgFirstScanOffsetMinutes, 1) }} dk
{{ formatDashboardFixed(dashboardStats.avgQrScansPerQrEntry, 2) }}
Veri yok veya yuklenemedi.
Yukleniyor...
Yukleniyor...
Ortalama {{ formatAnalyticsNumber(analyticsSnapshot.membershipOrtalama) }}
| Tip | Kisi | Sozlesme | Yenileme | Yeni | Tutar | KDV haric | Toplam |
|---|---|---|---|---|---|---|---|
| {{ r.item }} | {{ r.kisiSayisi ?? '-' }} | {{ r.sozlesmeSayisi ?? '-' }} | {{ r.yenilemeSayisi != null ? r.yenilemeSayisi : '-' }} | {{ r.yeniAlmaSayisi != null ? r.yeniAlmaSayisi : '-' }} | {{ formatAnalyticsNumber(r.tutar) }} | {{ formatAnalyticsNumber(r.kdvHaricTutar) }} | {{ formatAnalyticsNumber(r.toplam) }} |
Uyelik satiri yok.
| Hizmet | Adet | Yenileme | Yeni | Tutar | KDV haric | Paket ort. | Ders basi ort. | Toplam |
|---|---|---|---|---|---|---|---|---|
| {{ r.hizmetItem }} | {{ r.adet ?? '-' }} | {{ r.yenilemeSayisi != null ? r.yenilemeSayisi : '-' }} | {{ r.yeniAlmaSayisi != null ? r.yeniAlmaSayisi : '-' }} | {{ formatAnalyticsNumber(r.tutar) }} | {{ formatAnalyticsNumber(r.kdvHaricTutar) }} | {{ formatAnalyticsNumber(r.kdvHaricPaketOrtalamaFiyat) }} | {{ formatAnalyticsNumber(r.kdvHaricPaketOrtalamaDersBasi) }} | {{ formatAnalyticsNumber(r.toplam) }} |
Hizmet satiri yok.
Bu ay icin snapshot yok. Job calistirin veya Simdi calistir ile veri olusturun.
Yukleniyor...
| {{ col.label }} | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ c.status === 'open' ? 'Devam ediyor' : 'Kapatildi' }} |
{{ whatsAppContactLabel(c) }}
|
{{ c.operatorName || '-' }} | {{ c.messageCount }} | {{ formatDurationSeconds(c.durationSeconds) }} | {{ c.status === 'open' ? '-' : formatDurationSeconds(c.firstReplySeconds) }} | {{ c.status === 'open' ? '-' : formatDurationSeconds(c.avgReplySeconds) }} | {{ c.status === 'open' ? '-' : formatDurationSeconds(c.maxReplySeconds) }} | {{ c.status === 'open' ? '-' : waCategoryLabel(c.category) }} | - - |
-
AI
Op
{{ c.satisfactionMismatchNote }}
|
- |
|
{{ c.aiSummary }}
|
Secilen tarih araliginda kapatilmis konusma yok.
Rapor yuklenemedi.
{{ overnightStayReportRunning ? 'Snapshot olusturuluyor...' : 'Yukleniyor...' }}
Eksik snapshot: {{ overnightStayRecentReport.missingDates.join(', ') }}. Simdi calistir ile tamamlayabilirsiniz.
| Isim | Son giris | Cikis | Durum |
|---|---|---|---|
| {{ member.memberName || '-' }} | {{ member.lastGirisAt ? formatDate(member.lastGirisAt) : '-' }} | {{ overnightStayCikisLabel(member) }} | {{ overnightStayIssueLabel(t) }} |
Secilen aralikta kayit bulunamadi.
Rapor yuklenemedi. Simdi calistir ile snapshot olusturabilirsiniz.
Yukleniyor...
| Kullanici | Telefon | Son konum | Dogruluk | Harita |
|---|---|---|---|---|
| {{ row.displayName || row.username || '-' }} | {{ row.phone ? formatWhatsAppPhone(row.phone) : '-' }} | {{ formatCompanionRecordedAt(row.recordedAt || row.RecordedAt) }} | {{ row.accuracyM != null ? ('+/- ' + Math.round(row.accuracyM) + ' m') : '-' }} | Ac |
Secilen surede konum kaydi bulunamadi.
Rapor yuklenemedi.
Yukleniyor...
| {{ col.label }} | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ formatCompanionRecordedAt(row.scannedAtUtc) }} | {{ qrPassageScanSourceLabel(row) }} | {{ row.success ? 'OK' : 'HATA' }} {{ row.httpStatusCode }} | {{ qrPassageScanStudentLabel(row) }} | {{ qrPassageScanInstructorLabel(row) }} | {{ qrPassageScanSlotLabel(row) }} | {{ qrPassageScanTimingLabel(row) }} | {{ qrPassageScanOffsetLabel(row) }} | {{ row.scanInputMasked || '-' }} | {{ row.requestPhone || '-' }} | {{ row.resultMessage || '-' }} |
Secilen aralikta QR scan kaydi yok.
Rapor yuklenemedi.
Yukleniyor...
| Zaman | Musteri | Operator | Transfer | Eslesme | Neden | Queue | CDR | Transfer sonuc | Sure | Konusma | CallId |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ formatPbxLocalAt(row.customerCallAt) }} | {{ row.customerPhone || '-' }} | {{ row.operatorRaw || '-' }} | {{ row.transferTarget || '-' }} | {{ row.matched ? 'Evet' : 'Hayir' }} | {{ row.matchReason || '-' }} | {{ row.queueEvent || '-' }} | {{ row.cdrResult || '-' }} | {{ row.transferResult || '-' }} | {{ row.transferGSure != null ? row.transferGSure : '-' }} | {{ row.conversationId || '-' }} | {{ row.callId || '-' }} |
Secilen aralikta PBX cagrisi yok.
Rapor yuklenemedi.
Yukleniyor...
| Telefon | Ad Soyad | Giris | Son giris |
|---|---|---|---|
| {{ row.phone || row.phone10 }} | {{ memberGuestReportName(row) }} | {{ row.visitCount }} | {{ formatCompanionRecordedAt(row.lastPassageZamanUtc || row.lastCreatedUtc) }} |
Misafir kaydi yok.
Rapor yuklenemedi.
Yukleniyor...
| Ad Soyad | Telefon | Olasilik | Kaynak | Takip sekli | Son takip | Gun |
|---|---|---|---|---|---|---|
| {{ stalePotentialMemberName(row) }} | {{ row.telefon || row.Telefon || '-' }} | {{ row.olasilik || row.Olasilik || '-' }} | {{ stalePotentialMemberKaynakLabel(row) || '-' }} | {{ row.takipSekli || row.TakipSekli || '-' }} | {{ formatPbxLocalAt(row.sonTakipTarih || row.SonTakipTarih) || '-' }} | {{ row.gunSayisi ?? row.GunSayisi ?? 0 }} |
Kayit yok.
Rapor yuklenemedi.
Yukleniyor...
{{ assignmentTimelineEventLine(assignmentTimelineFocusEvent) }}
Bu ana kadar atama yok.
Rapor yuklenemedi.
Degiskenler gonderim sirasinda doldurulur.
Yukleniyor...
| Telefon | Ad | Kaynak | Bolum | Durum | SMS id |
|---|---|---|---|---|---|
| {{ r.phone10 }} | {{ ((r.firstName || '') + ' ' + (r.lastName || '')).trim() }} | {{ r.sourceKey }} | {{ r.partIndex }} | {{ r.status }} | {{ r.providerSmsId || r.errorMessage || '' }} |
Alici yok. Once kitle olusturun.
{{ (campaignDetail && campaignDetail.totalRecipients) || (campaignBuildInfo && campaignBuildInfo.totalRecipients) || (campaignPreview && campaignPreview.finalCount) || 0 }} alici hazir
Yukleniyor...
Bu klasor bos. Yeni kampanya veya klasor olusturun.
| Job | Cron | Son calisma | |
|---|---|---|---|
| {{ j.name }} | {{ j.cronExpression }} | {{ j.lastRunUtc ? formatDate(j.lastRunUtc) : '-' }} |
|
{{ busy ? 'Yukleniyor...' : 'Kayitli job yok.' }}
Yukleniyor...
| Ad | Soyad | Telefon | Kullanici adi | Rol | Sicil | WA Op. | Durum | |
|---|---|---|---|---|---|---|---|---|
| {{ u.firstName }} | {{ u.lastName }} | {{ u.phone || '-' }} | {{ u.username }} | {{ portalUserRolesLabel(u) }} | {{ u.erpMemberId || '-' }} | {{ u.isWhatsappOperator ? 'Evet' : '-' }} | {{ u.isActive === false ? 'Pasif' : 'Aktif' }} |
|
|
|
||||||||
Kullanici yok veya liste alinamadi.
{{ scheduleWeekRangeLabel }} · {{ scheduleWeekHolidaysLabel }}
{{ mobileSelectedDay.dayName }} {{ mobileSelectedDay.shortDate }}
|
{{ d.dayName }}
{{ d.shortDate }}
{{ d.holiday.localName }}
|
|
|---|---|
| {{ formatHour(h) }} |
|
Yukleniyor... Saat araligi bos veya veri yok. Hafta saat bandi sunucu ayarlarindan (yonetici) tanimlanir. Saat araligi bos. Ayarlar -> Ders programi sekmesinden baslangic ve bitis saatlerini ayarlayin.
Tanimli kapi yok. Ayarlar -> Kapi acma bolumunden kapi ekleyin.
Bu haftaki ders programi kayitlari aranir ({{ doorAccessWeekStart || '—' }} haftasi).
Araniyor...
Sonuc bulunamadi.
Aramak icin en az 2 karakter yazin.
Henuz gecis olayi yok.
{{ evt.mesaj }}
{{ passageEventZamanLabel(evt) }}
{{ whatsAppStatusLabel }}
QR bekleniyor...
Telefonda WhatsApp > Bagli cihazlar > Cihaz bagla ile QR kodu tarayin.
Soldan bir konusma secin.
APK modu
{{ portalRolesLabel }}
Telegram ayna AI, WhatsApp AI agent ve diger AI cagrilari icin varsayilan model.
/v1/audio/transcriptions. Konusmaci ayirimi icin *-diarize modeli kullanin.
OpenAI audio transcription language alani. Varsayilan tr.
Ses metnine yardimci kelimeler / ozel isimler. Kisa tutun.
Kayitli. Acik metin gosterilmez; degistirmek icin dugmeye basin.
Dogrudan AI telefonlarindan bunu ogren: ... yazinca AI bunu_ogren araci ile bilgiyi kalici prompta ekler.
Henuz kayit yok.
Listedeki numaralar round-robin atlanir, dogrudan AI'ya atanir ve AI yanit verir (genel AI kapali olsa da). Numara yazip Enter'a basin.
Giris OTP ve ders katilim linki SMS, sunucudaki SmsProviderApiKeys ve
DcsExternalServices (SOAP send_sms) uzerinden gonderilir; katilim SMS ile ayni yol.
Asagidaki AjansSMS alanlari gonderimde kullanilmaz; yalnizca settings.json icinde saklanmaya devam eder.
Bos birakilirsa https://g.ajanswebsms.com/ kullanilir.
AjansSMS panelindeki kullanici adi ve bayi kodu; kullanici-bayi biciminde.
Kayitli. Acik metin gosterilmez; degistirmek icin dugmeye basin.
Alicida gorunen baslik; en fazla 11 karakter, AjansSMS kurallarina uygun.
Test modunda her A/B grubundan yalnizca 1 ornek SMS bu numaraya gider.
Son X gunde gercek SMS alan numaralar kitleden otomatik cikarilir. 0 = kapali.
Kayitli. Acik metin gosterilmez; degistirmek icin dugmeye basin.
Bos ortamda Gmail__ClientId / Gmail__ClientSecret kullanilabilir.
Bos birakirsaniz ortam degiskeni Gmail__ClientId ve Gmail__ClientSecret kullanilir.
Kayitli. Acik metin gosterilmez; degistirmek icin dugmeye basin veya Gmail ile tekrar baglayin.
OAuth ile yetkilendirilen hesap; otomatik baglanti sonrasi doldurulur.
Google Cloud OAuth istemcisi turu Web uygulamasi ise "Yetkili yonlendirme URI" olarak sunucu adresiniz + /api/gmail/oauth/callback ekleyin.
Kayitli. Acik metin gosterilmez; degistirmek icin dugmeye basin.
Veritabani: dotnet run -- db-migrate veya Database:AutoMigrate=true (Data/Sql/migrations).
Veritabani: dotnet run -- db-migrate veya Database:AutoMigrate=true (Data/Sql/migrations).
QR tarama sonrasi consent_sessions (dcs_service) kontrolu icin.
QR tarama sonrasi consent_sessions (dcs_service) kontrolu icin.
Local PbxAgent X-Pbx-Agent-Secret basligi ile ayni olmali.
Local PbxAgent X-Pbx-Agent-Secret basligi ile ayni olmali. Bos birakilirsa sunucu ilk istekte uretir.
Tablo bu araliktaki saatleri gosterir (bitis saati dahil degildir).
Kapi acma istegi SignalR ile tum Door tipi uzak ajanlara openDoor olayi olarak gider ({ ip }).
| Kapi adi | Kapi IP | ||
|---|---|---|---|
| {{ door.name || '-' }} | {{ door.ip || '-' }} |
Henuz kapi tanimi yok.
Bu anahtar yalnizca bir kez gosterilir. Kopyalayip guvenli yerde saklayin.
{{ remoteAgentCreatedKey }}
| Ad | Tip | On ek | Olusturma | ||
|---|---|---|---|---|---|
| {{ key.name }} | {{ remoteAgentKeyTypeLabel(key.type) }} | {{ key.keyPrefix }}... | {{ key.createdAtUtc }} |
Henuz API key yok.
Uzak makine /hubs/remote-agent?apiKey=... ile baglanir. Door tipi key openDoor dinler.
Uye gecisinde misafir eklerken guvenlik limitleri. Limit asilirsa kayit engellenir.
Bir uye gunde en fazla misafir getirebilir.
Bir misafir gunde en fazla kez girebilir.
Kayitli. ERP uzerinde yalnizca SELECT; sonuclar MySQL snapshot tablolarina yazilir.
ERP uzerinde yalnizca SELECT; ApplicationIntent=ReadOnly uygulanir. Sonuclar MySQL snapshot tablolarina yazilir.
Ozet aylik raporda yeni ve yenileme sinifi. Snapshot yeniden alindiginda gecerli olur.
Uyelikte ayni kisi ayni aboneligi, onceki bitisten hafta icinde tekrar alirsa yenileme, asarsa yeni alma sayilir.
Hizmette ayni kisi ayni hizmeti, onceki alimdan hafta icinde tekrar alirsa yenileme, asarsa yeni alma sayilir.
Hangfire kuyrugu hangfire.sqlite dosyasina yazilir (varsayilan storage Memory; degistirmek icin appsettings.json -> HiveSkypeak:HangfireStorage).
Telegram ayna AI kaydettigi notlar; her Telegram sohbeti (chat id) ayri listelenir. Veri dosyasi: telegram-ai-learned.json
Yukleniyor...
| Kayit (UTC) | Not |
|---|---|
| {{ formatDate(n.savedAtUtc) }} | {{ n.text }} |
Kayit yok veya dosya henuz olusturulmadi.
Bu sure icinde karsilayici yanit vermezse konusma operator round-robin'e duser.
Acikken her karsilayici, baska karsilayiciya atanmis konusmalari da listede gorur ve acabilir.
Yukleniyor...
Aktif Greeter kullanicisi yok.
Aktif WhatsApp operatoru yok.
Yukleniyor...
Siradaki atama: {{ whatsAppRoundRobin.nextLabel }}
Operator round-robin onizlemesi yok.
{{ whatsAppPushStatusLabel }}
Kapali iken Chrome penceresi acilir; QR kodu icin kullanilir. Linux sunucuda DISPLAY yoksa xvfb-run kullanilir veya asagida DISPLAY girin. Degisiklik icin Node servisini yeniden baslatin.
Yerel: :99. Uzak X sunucusu: ip:99 veya host:99. Uzak makinede xhost/xauth ve TCP (6000+display) acik olmali.
whatsapp-service icine goreli veya mutlak yol. Varsayilan: .wwebjs_auth. Degisiklik icin Node servisini yeniden baslatin.
QR ve eslestirme kodu bu numaraya yoneltilir.
Konusmadaki konum butonu bu sabit konumu gonderir. Haritadan secmek icin dugmeye basin.
Model ve API anahtari Ayarlar > OpenAI sekmesinden kullanilir.
{{ whatsAppStatusLabel }}
API, arka plan servisleri, WhatsApp Node ve diger sistem loglari. Son 2000 kayit bellekte tutulur.
Loglar yukleniyor...