İçeriğe geç
Yuva
0.0.1 sürümü çıktıAçık kaynak · Kendi sunucunuzda · Alfa öncesi

Bütün ürünleriniz için tek gelen kutusu.

Yuva, bütün ürünlerinizin destek e-postalarını, canlı sohbetlerini ve uygulama içi konuşmalarını ekibiniz için tek bir ortak gelen kutusunda toplar. Açık kaynaktır, kendi sunucunuzda çalışır; tek bir Go programı ve Postgres yeterlidir.

Sunucu AGPL-3.0, SDK'lar MIT. Konuşmalarınız kendi sunucularınızda kalır.

Yuva paneli: üç üründen gelen konuşmalar tek listede; iç notu ve yanıtıyla bir uygulama içi konuşma; ana uygulamanın gönderdiği kişi bilgileri.

Neden Yuva

Birden çok ürün, birden çok yerde yanıt vermek demek.

Küçük ekipler nadiren tek bir ürünle yetinir. Bir uygulama, onun sitesi, bir yan proje ve faturaları ödeyen bir araç vardır; her biri mesajları başka bir yerde toplar.

Destek postası dağınık

Her ürünün kendi destek adresi var ve biri kişisel posta kutusuna yönlendirilmiş. Kimin yanıtladığı görünmüyor, yazışmalar dağılıyor, otomatik yanıtlar birbirine çarpıp duruyor.

Canlı sohbet yalnızca parası ödenen yerde

Bir sitede kişi başı ücretli bir sohbet bileşeni var, ötekilerde yalnızca iletişim formu. Kimse yanıtlamadan ayrılan ziyaretçi de öylece kayboluyor.

Uygulama içi mesajlar kapalı bir kutuda

Mobil uygulamalardan gelen geri bildirim üçüncü taraf bir SDK'ya, bir e-posta formuna ya da hiçbir yere gitmiyor. Kullanıcılarınızın konuşmaları başkasının bulutunda duruyor.

Yuva hepsine tek bir yuva olur: her ürün bir gelen kutusudur, her kanal aynı konuşma modeline düşer ve bütün ekip, sizin yönettiğiniz sunucularda tek bir panelden yanıt verir.

Nasıl çalışır

Mesajlar her kanaldan gelir. Ekibiniz tek yerden yanıtlar.

Her mesaj bir gelen kutusundaki konuşmanın parçası olur, ekip de panelden yanıtlar. Yuva olup biteni imzalı webhook'larla sunucunuza bildirir; anlık bildirimleri kendi uygulamalarınız gönderir.

Mesajlar Yuva'da nasıl ilerlerE-posta, canlı sohbet, API istekleri ve uygulama içi mesajlar, Postgres ile çalışan tek bir Go programı olan Yuva'ya ulaşır; Yuva gelen kutularını, konuşmaları ve kişileri tutar. Ekip panelden yanıtlar. Yuva sunucunuza imzalı webhook'lar gönderir, sunucunuz da kendi anahtarlarıyla APNs ya da FCM üzerinden anlık bildirim yollar; yanıt böylece uygulamaya ulaşır.E-postaWorker ya da bir MTACanlı sohbet<yuva-chat> bileşeniAPIFormlar ve betiklerUygulama içiiOS ve Android SDK'larıYuvaTek bir Go programıGelen kutuları · konuşmalar · kişilerPostgrescanlıwebhookEkip paneliYanıtla, ata, bildirSunucunuzİmzalı webhook'larAPNs / FCMKendi anahtarlarınızlaUygulamanızYanıtı gösterir
  1. Ürünlerinizi bağlayın

    Her ürün için bir gelen kutusu açın ve ona kanallar verin: bir destek adresi, bir sohbet bileşeni, bir uygulama anahtarı, bir API.

  2. Tek panelden yanıtlayın

    Her kanaldan gelen konuşma aynı listede, aynı görünümde, aynı araçlarla durur. Ekip üyeleri yalnızca kendilerine verilen gelen kutularını görür.

  3. Sunucunuz tepki versin

    İmzalı webhook'lar sunucunuza yeni mesajları haber verir; sunucunuz da yanıtı, elindeki anahtarlarla kapalı uygulamaya bildirim olarak iletir.

Kanallar

Her kanal, tek bir konuşma modeli.

Canlı sohbetle eşzamansız mesajlaşma arasındaki fark yalnızca ayarlarda. Konuşma hangi kanalda başlarsa başlasın panelde aynı görünür, aynı çalışır; her gelen kutusu canlı mı eşzamansız mı olacağını kendisi seçer.

E-postaE-posta, olması gerektiği gibi

Bir destek adresini Cloudflare Email Worker, herhangi bir MTA ya da imzalı bir HTTP isteğiyle Yuva'ya yönlendirin. Yanıtlar her kanalın kendi SMTP hesabından çıkar: SES, Postmark ya da kendi sunucunuz.

  • Yazışmalar In-Reply-To ve References başlıklarını izler; bir e-posta istemcisi bu başlıkları atsa bile yanıt kendi konuşmasını bulur.
  • Okuduğunuz metinden alıntılar ve imzalar ayıklanır; tam metin, temizlenmiş HTML ve mesajın aslı saklanır.
  • Alan adı başına tümünü yakalayan adresler ve kendi kanalına ulaşan ad+etiket adresleri.
  • Döngü koruması: otomatik yanıtlar, toplu postalar ve Yuva'nın kendi mesajları asla yeni bir otomatik mesajı tetiklemez.
  • Teslim raporlarından ve Amazon SES'ten gelen geri dönmeler, adresi ulaşılamaz olarak işaretler.
E-posta rehberi

Canlı sohbetCanlı sohbet ve gömülü konuşmalar

Tek bir script etiketiyle yüklenen tek bir web bileşeni. Bir sitede köşede duran sohbet düğmesi olarak kullanın ya da bir konuşmayı doğrudan kendi ürününüzün paneline yerleştirin.

  • Shadow DOM: sizin stilleriniz dışarıda, bileşenin stilleri içeride kalır.
  • Canlı gelen kutularında çevrimiçi durumu, yazıyor bilgisi ve okundu bilgisi; eşzamansız olanlarda tahmini yanıt süresi.
  • Ziyaretçi ayrıldıysa okunmamış yanıtlar ona e-postayla ulaşır; onun yanıtı da aynı konuşmadan devam eder.
  • İster anonim ziyaretçiler, ister sunucunuzun verdiği kimlik jetonuyla giriş yapmış kullanıcılar.
  • Türkçe ve İngilizce; soldan sağa ve sağdan sola.
Bileşen rehberi
Bir bülten aracının sitesinde açık Yuva sohbet bileşeni: ziyaretçinin sorusu ve çevrimiçi görünen ekip üyesinin yanıtı.

Uygulama içiUygulama içi mesajlaşma ve geri bildirim

iOS (YuvaKit, SwiftUI) ve Android (Kotlin, Jetpack Compose) için yerel SDK'lar uygulamanıza bir konuşma listesi, ekli mesajlaşma ve bir geri bildirim formu kazandırır; isterseniz kendi arayüzünüz için arayüzsüz bir istemci de sunar.

  • Kategorisi (hata, fikir, övgü, diğer), ekran görüntüleri ve cihaz bilgileriyle geri bildirim: uygulama sürümü, derleme, sistem, cihaz ve ekran.
  • Panel geri bildirimi kategoriye göre süzer ve hâlâ açık olanları sayar.
  • Kullanıcılar, sunucunuzun imzaladığı kısa ömürlü bir jetonla kendi adlarına yazar; Yuva kullanıcı veritabanınızı hiç görmez.
  • Anlık bildirim sizde kalır: Yuva bir webhook gönderir, bildirimi sunucunuz APNs ya da FCM üzerinden yollar.
Mobil SDK rehberi
Panelde bir hata bildirimi: geldiği uygulama sürümü, cihaz, sistem ve ekranla birlikte.
Örnek bir uygulamada iOS SDK'nın mesajlar ekranı: bir geri bildirim ve bir konuşma.

Geri kalan her şey için de bir API

Kendi sunucunuzun oluşturduğu bir geri bildirim formu, çalışma alanı API anahtarıyla /v1/feedback adresine gönderir. Betikler gelen kutusu, kanal ve anahtar oluşturur; sunucunuz kişileri kendi kullanıcı kimliğinizle bulur ya da siler.

Ekip paneli

Yanıtlayan insanlar için yapıldı.

Panel programın içinde gelir. Hızlıdır, klavyeyle kullanılmak için yapılmıştır ve telefonlarda kurulabilir bir uygulama olarak çalışır.

Ortak gelen kutusu
Tümü, bana atananlar, atanmamışlar, gelen kutusuna ve etikete göre; açık, beklemede, ertelenmiş ve kapalı.
Atama
Konuşmaları atayın, önceliğini belirleyin, devredin; her değişiklik konuşmanın içinde kayıt altında.
İç notlar
Notlar yanıtların yanında durur ve asla kişiye ulaşmaz.
Etiketler ve hazır yanıtlar
Konuşmaları etiketleyin, yazı alanında / yazarak kayıtlı yanıtları ekleyin.
Arama
Postgres üzerinde, tüm konuşmalarda tam metin arama.
Canlı
Yeni mesajlar, yazıyor bilgisi ve ekip arkadaşlarınızın değişiklikleri WebSocket üzerinden anında görünür.
Bildirimler
Paneli uygulama olarak kurun; telefonda ve masaüstünde Web Push bildirimi alın, yedekte de e-posta olsun.
Önce klavye
Listede gezinin, yanıtlayın, not yazın, arayın; fareye uzanmadan.
Kişinin bağlamı
Ad, adresler, sizdeki kullanıcı kimliği, plan ya da uygulama sürümü gibi özellikler ve önceki konuşmalar.
Parola yok
E-postayla gelen bir kodla ya da passkey ile girilir. Açık kayıt yok; herkes davetle gelir.
Roller ve erişim
Sahipler, yöneticiler ve temsilciler; temsilciler yalnızca kendilerine verilen gelen kutularını görür.
Türkçe ve İngilizce
Panel, sohbet bileşeni ve SDK'lar iki dili de konuşur; her ekip üyesi kendi dilini seçer.
Telefonda panel: etiketleri, öncelikleri ve atanan kişileriyle konuşma listesi.

Geliştiriciler için

Ürünlerinizin içine yerleşmek için yapıldı.

Yuva kendi yazılımını yapan ekipler için tasarlandı. Her yüzeyin tipli bir sözleşmesi ve küçük, belgelenmiş bir entegrasyonu var.

OpenAPI 3.1 sözleşmesi

Asıl kaynak openapi/openapi.yaml: sunucu da istemciler de ondan üretilir; siz de istediğiniz dilde kendi istemcinizi üretebilirsiniz.

Kimlik jetonları

Sunucunuz giriş yapmış kullanıcı için kısa ömürlü bir HS256 jetonu imzalar. sdk/go bunu tek çağrıda yapar; herhangi bir JWT kütüphanesi de iş görür.

Standard Webhooks

Konuşma, mesaj, geri bildirim ve kişi olayları; imzalı, yaklaşık bir gün boyunca yeniden denenen, teslim kaydı ve yeniden gönderimiyle.

Kullanıcılarınız sizde kalır

Kişiler sizin kullanıcı kimliğinizle bulunur. Bir kullanıcı hesabını sildiğinde tek bir API çağrısı onu yazdığı her şeyle birlikte kaldırır.

Web sitesi: sohbet bileşeni

<script src="https://support.example.com/yuva.js" defer></script>
<yuva-chat channel="yuva_pk_xxxxxxxxxxxxxxxx"></yuva-chat>

Web bileşeniKimlik jetonlarıMobil SDK'larWebhook'larOpenAPI

Kendi sunucunuzda

Tek, küçük bir sunucuda, sizin elinizde.

Yuva tek bir Go programı ve bir Postgres veritabanıdır. İş kuyruğu, canlı olaylar ve arama Postgres'te durur; işletmeniz gereken başka bir şey yoktur.

Tek Docker imajı

Sunucu, panel ve sohbet bileşeni, root olmayan bir kullanıcıyla çalışan tek bir imajda. Bütün yönetim komutları da aynı imajdan çalışır.

Postgres 16 ya da üstü

İş kuyruğu ve canlı olay dağıtımı dahil her şey veritabanında. Redis yok, ayrı çalışan süreç yok.

Dosyalar istediğiniz yerde

Ekler ve e-postaların asılları yerel bir diskte ya da S3 uyumlu herhangi bir depoda: S3, R2, MinIO.

İzlemesi kolay

JSON günlükler, Prometheus metrikleri ve izleme için sağlık ve hazırlık uç noktaları.
  1. İmajı çekin

    Yayımlanan imajı GitHub Container Registry'den çekin; linux/amd64 ve linux/arm64 için hazır.

    docker pull ghcr.io/productdevbook/yuva:0.0.1
  2. compose.yaml ve .env dosyalarını yazın

    İki dosyayı da kurulum rehberinden kopyalayın: Postgres, herkese açık adresiniz, bir ana anahtar, bir gelen posta sırrı ve bir SMTP hesabı.

    Kurulum rehberini açın
  3. Başlatın

    Bir Web Push anahtar çifti ekleyin, sistemi başlatın ve hazır olduğunu kontrol edin. Veritabanı geçişleri açılışta kendiliğinden çalışır.

    docker run --rm ghcr.io/productdevbook/yuva:0.0.1 vapid-keys >> .env
    docker compose up -d
    curl -s http://127.0.0.1:8080/readyz     # {"status":"ok"}
  4. İlk sahibi oluşturun

    Açık kayıt yok. Çalışma alanını ve sahibini oluşturun, e-postayla gelen kodla giriş yapın ve ekibinizi davet edin.

    docker compose exec yuva /yuva bootstrap --email you@example.com --workspace "Example" --name "Your Name"

WebSocket'leri geçiren, TLS'li bir ters vekil sunucunun arkasına koyun; Caddy olduğu gibi çalışır. Kurulum rehberinde nginx, yedekleme, güncelleme ve tüm ayarlar da anlatılıyor. İşletim rehberi

Güvenlik ve gizlilik

Emanet ettiklerinize özen gösterir.

Bir destek kutusunda başkalarının sözleri durur. Yuva bunu bilerek yapıldı ve henüz bağımsız bir güvenlik denetiminden geçmediğini de açıkça söylüyor.

Güvenilmeyen posta zararsız kalır

Gelen HTML temizlenir ve sıkı bir İçerik Güvenliği Politikası altında, korumalı bir çerçevede gösterilir; uzak görseller bir ekip üyesi açana kadar yüklenmez.

İmzalı gelen posta

Gelen posta, güncel bir zaman damgasıyla HMAC imzası taşımak zorunda; Amazon SNS bildirimleri de AWS'nin imza sertifikasıyla doğrulanır.

Ağınızın içine istek yok

Webhook adresleri, SMTP sunucuları ve bildirim uç noktaları çözümlenir; özel, yerel ya da bulut meta veri adreslerine çıkıyorlarsa reddedilir.

Köken denetimi

Veriyi değiştiren panel istekleri yalnızca panelin kendi kökeninden gelebilir; sohbet bileşeni de yalnızca bir sohbet kanalının izin verdiği kökenlere yanıt verir.

Passkey'ler ve şifreli sırlar

Deneme sınırlı tek kullanımlık kodlar ve passkey'ler. SMTP parolaları ve imza sırları, ana anahtarınızla AES-256-GCM kullanılarak şifrelenir.

Silebileceğiniz veriler

Bir kişiyi panelden ya da kendi kullanıcı kimliğinizle silin; konuşmaları, mesajları ve dosyaları da onunla gider. Bir kanalın göndermek üzere ayarlandığı şeyler dışında üçüncü taraflara hiçbir şey gitmez.

Bir güvenlik açığı mı buldunuz? Herkese açık bir issue'da değil, GitHub üzerinden gizlice bildirin. Güvenlik politikası

Açık kaynak ve lisans

Açık kaynak ve öyle kalacak.

Yuva iki lisans kullanır: sunucu açık kalır, kendi uygulamalarınıza gömdüğünüz parçalar ise hiçbir copyleft yükümlülüğü getirmez.

AGPL-3.0

Sunucu ve panel

Kullanın, değiştirin, çalıştırın. Değiştirdiğiniz bir Yuva'yı başkalarına ağ hizmeti olarak sunarsanız kaynak kodunu da onlara sunarsınız.
MIT

SDK'lar ve API sözleşmesi

Sohbet bileşeni, Swift, Kotlin ve Go SDK'ları ve OpenAPI sözleşmesi MIT lisanslıdır; kapalı kaynaklı uygulamalarda ve mağaza derlemelerinde hiçbir yükümlülük doğurmadan kullanılır.
CLA

Katkı Lisans Sözleşmesi

Katkılar bir CLA ile yapılır; böylece proje, AGPL'yi kullanamayan kurumlara ticari lisans da sunabilir. AGPL ile yayımlanmış kod hiçbir zaman daha kısıtlayıcı bir lisansa taşınmaz.
™

Ad ve logo

Lisanslar kodu kapsar, adı değil. Yuva'yı kullandığınızı ya da onun üzerine kurduğunuzu söyleyebilirsiniz; yayımladığınız ya da başkaları için barındırdığınız bir çatala kendi adını verin.

Neden bu ayrım?

Copyleft çekirdek, sunucuya yapılan iyileştirmelerin açıkta kalmasını sağlar. Serbest lisanslı SDK'lar, onları gömen her uygulamanın önündeki engeli kaldırır. CLA ise kodu hiç kapatmadan geliştirmeyi finanse etmenin yolunu açık tutar; böylece proje hem açık kalır hem de yaşamaya devam eder.

Durum ve yol haritası

Bugün nerede duruyor.

Yuva alfa öncesi aşamada ve herkesin gözü önünde geliştiriliyor. Sürümler 0.0.1'den başlıyor, proje hazır olana kadar 1.0 yok ve ilk sürüm olan 0.0.1 artık yayında.

  1. Tamamlandı

    Temel

    Go sunucusu, OpenAPI sözleşmesi, veritabanı geçişleri, iş kuyruğu ve CI.

  2. Tamamlandı

    Temel model ve giriş

    Çalışma alanları, roller, gelen kutuları, kanallar, kişiler, konuşmalar, API anahtarları, kodlar ve passkey'ler.

  3. Tamamlandı

    Ekip paneli

    Liste, arama, konuşmalar, notlar, etiketler, hazır yanıtlar, canlı güncellemeler, Türkçe ve İngilizce.

  4. Tamamlandı

    E-posta

    Worker ya da herhangi bir MTA ile gelen posta, yazışma zinciri, alıntı ayıklama, SMTP, döngü koruması ve geri dönmeler.

  5. Tamamlandı

    Web bileşeni

    Canlı sohbet, gömülü konuşmalar, kimlik jetonları, çevrimiçi durumu ve e-postayla devam.

  6. Tamamlandı

    Mobil SDK'lar, geri bildirim ve webhook'lar

    iOS ve Android, cihaz bilgileriyle geri bildirim, Standard Webhooks.

  7. Tamamlandı

    Ekip bildirimleri

    Kurulabilir panel, Web Push, olay ve gelen kutusu bazında tercihler, yedek olarak e-posta.

  8. Tamamlandı

    İlk herkese açık sürüm, 0.0.1

    Giriş, istemci oturumları, gelen posta ve ek işleme sıkılaştırıldıktan sonra v0.0.1 etiketlendi; Docker imajı GitHub Container Registry'de.

  9. Sürüyor

    İlk gerçek kullanım

    Birkaç ürünün gerçek destek işini yalnızca Yuva ile yürütmek.

Sonra: bir Helm chart ve isteğe bağlı olarak Yuva'nın kendisinin gönderdiği anlık bildirimler. Şimdilik planda olmayanlar: CRM, pazarlama e-postası, herkese açık bilgi bankası ve sosyal medya kanalları. Yol haritasının tamamı

SSS

Sık sorulanlar.

Aradığınız yok mu? GitHub'da bir issue açın.

Her ürününüzün kullanıcısına size ulaşmanın bir yolunu verin.

Kodu okuyun, 0.0.1'i kendi makinenizde çalıştırın ve Yuva büyürken birlikte izleyin.