Yukleniyor...

skypea k Hive
{{ globalError }}
{{ globalOk }}

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...

Haftalik grid dolulugu

{{ formatDashboardPercent(dashboardStats.weekOccupancyPercent) }}

{{ dashboardStats.filledDistinctSlotCount }} / {{ dashboardStats.totalSlotCount }} farkli slot

Ders saati ve kisi

{{ dashboardStats.totalEntries }}

Her kayit 1 saat ve 1 kisi kabul edilir.

Egitmen basina ortalama kisi

{{ formatDashboardFixed(dashboardStats.avgPeoplePerInstructor, 2) }}

Kayit / egitmen ({{ dashboardStats.distinctInstructorCount }} egitmen)

QR ile giris

{{ formatDashboardPercent(dashboardStats.qrCoveragePercent) }}

{{ dashboardStats.entriesWithQrCount }} kayit, {{ dashboardStats.entriesWithoutQrCount }} QR yok

Gec ilk QR

{{ formatDashboardPercent(dashboardStats.lateEntryPercentOfTotal) }}

Tum kayitlara gore ({{ dashboardStats.entriesWithLateQrCount }} kayit). QR olanlarda: {{ formatDashboardPercent(dashboardStats.lateQrPercentOfQrEntries) }}

Iceride kalma / 1 saatlik slot

{{ formatDashboardFixed(dashboardStats.avgStayToAllocatedHourRatio, 2) }}

En az iki QR okumada (ilk-son) ortalama oran. Ornek 1.0 = tam slot. N={{ dashboardStats.entriesUsedForStayAverageCount }}

Ilk QR zaman farki

{{ formatDashboardFixed(dashboardStats.avgFirstScanOffsetMinutes, 1) }} dk

Pozitif: ders baslangicindan sonra; negatif: once. N={{ dashboardStats.entriesUsedForFirstScanOffsetCount }}

QR okuma sayisi (QR olan kayit)

{{ formatDashboardFixed(dashboardStats.avgQrScansPerQrEntry, 2) }}

Kayit basina ortalama tarama

Veri yok veya yuklenemedi.

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

Kullanici yok veya liste alinamadi.

{{ scheduleWeekRangeLabel }} · {{ scheduleWeekHolidaysLabel }}

{{ mobileSelectedDay.dayName }} {{ mobileSelectedDay.shortDate }}

Resmi tatil: {{ mobileSelectedDay.holiday.localName }}

  • {{ formatHour(h) }}
    {{ e.firstName }} {{ e.lastName }} {{ scheduleEntryInstructorInitials(e) }}
{{ d.dayName }}
{{ d.shortDate }}
{{ d.holiday.localName }}
{{ formatHour(h) }}
  • {{ e.firstName }} {{ e.lastName }} {{ scheduleEntryInstructorInitials(e) }}

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.

  • {{ entry.firstName }} {{ entry.lastName }} {{ entry.phone }}
    {{ entry.entryDate }} {{ String(entry.entryHour).padStart(2, '0') }}:00 {{ entry.ownerDisplayName }}
    {{ scheduleExtraTagLabel(tag) }}

Henuz gecis olayi yok.

  • {{ evt.izin === true ? 'Onay' : (evt.izin === false ? 'Red' : 'Bilinmiyor') }}
    {{ passageEventPersonName(evt) }}
    {{ evt.unvan }}

    {{ evt.mesaj }}

    {{ passageEventZamanLabel(evt) }}

    {{ evt.kapiIp }} · {{ evt.cihazId }}

WhatsApp baglantisi yok. Yeni konusmalar size atanmaz; WhatsApp sekmesini acik tutun.
Sekme arka planda; atamalar devam eder. Bildirimleri acik tutun.

WhatsApp baglantisi

{{ whatsAppStatusLabel }}

{{ whatsAppStatusError }}
{{ whatsAppStatusReason }}

QR bekleniyor...

WhatsApp QR kodu

Telefonda WhatsApp > Bagli cihazlar > Cihaz bagla ile QR kodu tarayin.

{{ whatsAppSelectedContactName }} · {{ whatsAppSelectedAssigneeLabel }}
{{ whatsAppSelectedContactNumber }}
Kapatildi

Soldan bir konusma secin.

{{ portalUsername || 'Kullanici' }}

APK modu

{{ portalRolesLabel }}

    • Konum {{ companionPermLabel('location') }}
    • Rehber {{ companionPermLabel('contacts') }}
    • Cagri gunlugu {{ companionPermLabel('callLog') }}
    • Bildirimler {{ companionPermLabel('notifications') }}
  • Hangfire
  • Android uygulamasini indir

Telegram ayna AI, WhatsApp AI agent ve diger AI cagrilari icin varsayilan model.

PBX cagri transkripti

/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.

{{ formatWhatsAppPhone(phone) }}

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 }).

Kapilar

Kapi adi Kapi IP
{{ door.name || '-' }} {{ door.ip || '-' }}

Henuz kapi tanimi yok.

Uzak ajan API key

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.

Misafir kurallari

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.

Yeni / yenileme

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 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...

  • {{ u.label }} whatsapp acik

Aktif Greeter kullanicisi yok.

  • {{ u.label }}

Aktif WhatsApp operatoru yok.

Yukleniyor...

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.

Konum (WhatsApp gonder)

{{ whatsAppLocationCoordsLabel }}

Konusmadaki konum butonu bu sabit konumu gonderir. Haritadan secmek icin dugmeye basin.

Model ve API anahtari Ayarlar > OpenAI sekmesinden kullanilir.

{{ whatsAppStatusLabel }}

{{ whatsAppStatusError }}
{{ whatsAppStatusReason }}
Baslangic hatasi: {{ whatsAppStatusDiagnostics.startupFailure }}
Node process calismiyor (exit {{ whatsAppStatusDiagnostics.nodeExitCode }})
Servis: {{ whatsAppStatusDiagnostics.serviceDirectory }}
Node: {{ whatsAppStatusDiagnostics.nodeExecutable }}
Chrome: {{ whatsAppStatusDiagnostics.nodeChromePath || whatsAppStatusDiagnostics.chromePath || '(bulunamadi)' }}
Port: {{ whatsAppStatusDiagnostics.nodePort }} · Headless: {{ whatsAppStatusDiagnostics.headless ? 'evet' : 'hayir' }}
WhatsApp QR kodu

API, arka plan servisleri, WhatsApp Node ve diger sistem loglari. Son 2000 kayit bellekte tutulur.

Loglar yukleniyor...

Henuz log yok.
{{ formatAppLogTime(entry.at) }} [{{ entry.source || '?' }}] {{ entry.message }}
Gecis
{{ globalDoorsPassageIndex + 1 }}/{{ globalDoorsPassageEvents.length }}

Henuz gecis olayi yok.

{{ globalDoorsPassageEvent.izin === true ? 'Onay' : (globalDoorsPassageEvent.izin === false ? 'Red' : 'Bilinmiyor') }}
{{ globalDoorsPassagePersonName }}

{{ globalDoorsPassageEvent.mesaj }}

Gecis fotografi
Kapilar

Yukleniyor...

{{ globalDoorsList.length ? 'Gosterilen kapi yok. Duzenle ile kapilari gorunur yapabilirsiniz.' : 'Aktif kapi bulunamadi.' }}

  • {{ door.name || door.Name }} {{ door.ip || door.Ip }}
{{ phoneLookupToast.found ? 'Bulundu' : 'Bulunamadi' }}