Faturalama, koşullar ve aksama
Ücretsiz hafta, 12 aylık sözleşme, yenilemeyi iptal etme, iade olmaması, bir çalışma alanının hangi modüllere sahip olduğu ve bir ödeme başarısız olduğunda ne olduğu.
Bir çalışma alanı tek bir temele abone olur: bir plan veya bir sektör paketi, artı eklentiler. Bunlar birlikte, hangi modüllere sahip olduğunu belirler. Her modülün ardından bir faturalama durumu vardır; bunu yalnızca faturalama (hizmet rolü) yazar, uygulamadaki bir kişi asla yazmaz.
Ücretsiz hafta
Her satın alma, müşteri başına bir tane olmak üzere 7 günlük ücretsiz bir deneme ile başlar. Tarihler, @callwise/pricing içindeki trialSchedule(purchaseDay) işlevinden gelir:
- Ödeme ekranında müşteri ödeme bilgilerini girer ve onay kutusunu işaretler. Bir ödeme yöntemi kaydedilir ve bugün $0 tahsil edilir. Ödeme ekranı
Today: $0 · First charge on <date>yazar ve tutarı gösterir. - 7. gün (son ücretsiz günün ertesi günü): yıllık toplam bir kez tahsil edilir ve 12 aylık sözleşme o gün başlar. 16 Oct 2026 tarihli bir satın alma 16–22 Oct tarihleri arasında ücretsizdir, 23 Oct 2026 tarihinde tahsil edilir ve sözleşmesi 23 Oct 2026 tarihinden 22 Oct 2027 tarihine kadar sürer; 23 Oct 2027 tarihinde yenilenir.
- Deneme sırasında iptal hiçbir şeye mal olmaz. Sitede bu, Denemeyi iptal et sayfasıdır (
/account/trial, sipariş numarası + e-posta). Sayfa,@callwise/storeiçindekicancelTrial()çağrısını yapar: yalnızca sipariştrialingdurumundayken ve ilk tahsilat gününden önce izin verilir; kayıtlı yöntemi geçersiz kılar ve hiçbir şey tahsil etmez. İlk tahsilattan sonra sözleşme iade edilmez ve yalnızca yenileme iptal edilebilir. - Müşteri başına bir deneme, saklanan siparişlerde normalize edilmiş e-posta ile sayılır (küçük harf, kırpılmış,
+tagsatılmış, Gmail noktaları yok sayılmış). İkinci bir satın almanın denemesi yoktur: ödeme ekranında tahsil edilir, sözleşmesi o gün başlar (termFrom(today)) ve ödeme ekranı "Your free trial was used on an earlier order: charged today" der.
@callwise/store içindeki sipariş durumları şöyledir: trialing (yöntem kaydedildi, hiçbir şey tahsil edilmedi) → active (ilk tahsilat alındı) veya trialing → trial_cancelled (hiçbir zaman hiçbir şey tahsil edilmedi). Her sipariş trial: { start, end, firstChargeOn } değerini, amountToday değerini, firstCharge: { amount, on, idempotencyKey, status } değerini ve sözleşme tarihlerini saklar.
7. günün tahsilat işi
runDueTrialCharges(now), ilk tahsilat günü bugün veya daha erken olan her trialing siparişi tam olarak bir kez tahsil eder ve active durumuna geçirir. İptal edilmiş denemeler atlanır; 7. günü henüz gelmemiş siparişlere dokunulmaz. İş yinelenmeye karşı güvenlidir: tahsil edilmiş bir sipariş artık trialing değildir ve her tahsilat, sipariş başına tek bir idempotency anahtarı taşır (first-charge:<orderId>). Bu yüzden işi iki kez çalıştırmak veya tahsilat ile kayıt arasında bir çökmeden sonra çalıştırmak asla iki kez tahsil etmez. Başarısız bir tahsilat trialing kalır ve sonraki çalıştırmada yeniden denenir.
pnpm --filter @callwise/store charge-due # against apps/site/.data/orders.json
pnpm --filter @callwise/store charge-due -- --now 2026-10-23 # pretend it is day 7Ödeme sağlayıcıları
PaymentProvider arayüzünde setupPaymentMethod (bir yöntem kaydeder, $0), charge (hemen tahsil eder; denemesiz bir satın alma için), chargeFirst(order) (7. gün tahsilatı) ve voidOnCancel(order) vardır. İade çağrısı yoktur. Bu derleme yalnızca demo sağlayıcıyı içerir: ödeme ekranındaki demo kart formu (4242 4242 4242 4242) yalnızca markayı, son 4 haneyi ve son kullanma tarihini tutar; tam numarayı veya CVC'yi asla tutmaz ve para hareket etmez.
Yazılmamış ve doğrulanmamıştır (kodda verified: false):
- Stripe: SetupIntent ile kaydedilmiş bir yöntem üzerinde
trial_period_days=7olan bir abonelik. Kart alanları Stripe Elements olurdu; böylece kart numaraları bizim sunucumuza hiç ulaşmaz. - Yinelenen faturalaması olmayan bankalar: ödeme ekranında yıllık toplam için bir 3D Secure ön yetkilendirmesi. Zamanlanmış iş bunu 7. günde tahsil eder, iptalde ise geçersiz kılar.
Sözleşme
- Her plan, paket ve eklenti, ücretsiz haftadan sonra başlayan (veya denemesini daha önce kullanmış bir müşteri için ödeme ekranında başlayan), peşin yıllık faturalandırılan 12 aylık asgari bir sözleşmedir. Aydan aya bir seçenek yoktur.
- Fiyatlar aylık gösterilir: liste fiyatından 12% düşülmüş hali. Sözleşme bedeli bunların on ikisidir ve peşin alınır. Bkz. Fiyatlandırma.
@callwise/pricingiçindekitermFrom(start), tarihleri verir: sözleşme ilk yıldönümünden önceki gün biter ve yıldönümünde yenilenir. 16 Oct 2026 tarihinde başlayan bir sözleşme 15 Oct 2027 tarihinde biter ve 16 Oct 2027 tarihinde yenilenir. Ay sonları sınırlanır (31 Jan başlarsa 31 Jan tarihinde yenilenir, 30 Jan tarihinde biter).cw_subscriptions,term_start,term_endverenewal_cancelled_atdeğerlerini saklar.
Yenilemeyi iptal etmek
İptal etmek, yenilemeyi iptal etmek demektir; başka bir şey değil. Bir sahip bunu Ayarlar → Faturalama → Yenilemeyi iptal et üzerinden yapar. İşlem şunları yapar:
renewal_cancelled_atdeğerini ayarlar (yenileme tarihi boşalır),- her modülü
term_endtarihine kadar etkin tutar, - hiçbir şey tahsil etmez ve hiçbir şey iade etmez.
term_end tarihinden sonra, iptal edilmiş bir çalışma alanının aşağıdaki süresi dolmuş çalışma alanı gibi salt okunur olması amaçlanır. Bu derlemede o tarihte durumu değiştiren bir şey henüz yoktur (zamanlanmış bir faturalama işi yoktur); kural, işin ona uyabilmesi için yazılmıştır.
İade yok
İlk yıllık tahsilat alındıktan sonra ödemelerin iadesi yoktur (ücretsiz hafta sırasında iptal hiçbir şeye mal olmadığı için iade edilecek bir şey de yoktur): kullanılmayan aylar, kullanılmayan krediler, artık kullanılmayan eklentiler veya daha küçük bir plana geçiş (bir sonraki yenilemede yürürlüğe girer) için tam ya da kısmi iade yapılmaz. Kodda bir iade yolu yoktur: @callwise/pricing, REFUNDS = 'none' değerini dışa aktarır ve bir iade işlevi yoktur; @callwise/store ile onun PaymentProvider arayüzünde hiç iade işlevi yoktur ve siparişler refund: 'never' taşır.
Ödeme onayı
Sitenin ödeme ekranında, işaretsiz başlayan zorunlu bir onay kutusu vardır. Cümlesi; ücretsiz haftayı, ilk tahsilatın tarihini ve tutarını, deneme sırasında iptalin hiçbir şeye mal olmadığını, denemeden sonra başlayan 12 aylık asgari süreyi, peşin yıllık faturalamayı, otomatik yenilemeyi ve iade olmadığını söyler ve Koşullar ile İptal ve iade politikasına bağlanır. Cümleyi her sipariş için consentText(offer) kurar; denemesini kullanmış bir müşteri için denemenin kullanıldığını ve tahsilatın bugün olduğunu söyler. Sunucu teklifi yeniden hesaplar, kutu işaretli olmayan veya cümlesi farklı olan bir siparişi reddeder ve siparişe şunu kaydeder:
{ "accepted": true, "at": "2026-10-16T09:30:00.000Z", "termsVersion": "2026-10-16", "text": "I agree to the Terms and …" }Bu derlemedeki koşullar sürümü 2026-10-16b değeridir. Daha eski bir metin veya daha eski bir sürüm gösteren bir sayfadan verilen sipariş reddedilir.
Faturalama durumları
| Durum | Nereden gelir | Kişiler ne yapabilir |
|---|---|---|
locked | Modül planda, pakette veya bir eklentide yoktur | Hiçbir şey. Sayfa, hangi planın kilidini açtığını gösterir. |
active | Ödenmiştir veya ücretsiz haftadadır | Erişim düzeylerinin izin verdiği her şey |
grace | Ödeme kısa süre önce başarısız olmuştur | Ödeme düzeltilirken her şey |
read_only | Ödeme bir süredir başarısızdır veya sözleşme yenilenmeden bitmiştir | Yalnızca görüntüleme. Düzenleme yok, yayınlama yok. |
Bir sahip, Ayarlar içinde active bir modülü kapatabilir de; bu, modülü herkesten gizler. locked bir modülü açmak veritabanı tarafından reddedilir.
Bir ödeme başarısız olduğunda
Aşağıdaki sayılar, @callwise/pricing içindeki LAPSE_RULES değerinden gelir.
| Days after a failed payment | Status | Module state | What happens |
|---|---|---|---|
| 0 | active | active | Full access. |
| 1–7 | past_due | grace | Full access while the payment is fixed. |
| 8–30 | read_only | read_only | Data visible, no edits. Calls forward to the fallback number. |
| after 30 | lapsed | read_only | Still read-only. Data is kept for 90 days. |
Çalışma alanı salt okunurken aramalar düşürülmez: Ayarlar → Telefon numaraları içinde ayarlanan yedek numaraya yönlendirilirler. Veri, bir aksamadan sonra veya yenilenmeden biten bir sözleşmeden sonra 90 gün tutulur; böylece dışa aktarılabilir.
Krediler
Her planın ve paketin ayda bir paylaşılan kredi havuzu vardır; bunu her modül ve her yapay zeka modeli kullanır (bkz. Fiyatlandırma ve Yapay zeka modelleri ve krediler). Aramalar, ajanlarının kullandığı modellerin oranında kredi harcar. Krediler sonraki aya devretmez. Sahipler %80'de ve %100'de bir uyarı alır. %100'ün ötesinde, çalışma alanı kredi başına $0.03 aşımına izin vermediyse aramalar yedek numaralara yönlendirilir.
Planı kim değiştirebilir
Uygulamanın içinden kimse. Plan, durum, sözleşme ve havuz hakkı cw_subscriptions içinde durur; oturum açmış kullanıcılar bunu okuyabilir ama yazamaz. Bir sahibin yapabildiği tek faturalama yazması, yenilemeyi iptal etmektir. Bu derlemede gerçek bir ödeme yoktur: sitenin mağazası demo siparişlerini kaydeder, demo modunda bir plan değişikliği simüle edilir ve yerel veritabanı modunda hizmet rolüyle yazılır.
Roller ve erişim
Sahip, yönetici ve üye ile her kişinin modül başına sahip olduğu dört erişim düzeyi.
Yapay zeka modelleri ve krediler
Hiçbir model yerleşik değildir. Bir aramanın her adımı tek bir katalogdan bir model seçer, kullanım kredilere dönüşür ve planlar aylık bir kredi havuzu satar. @callwise/pricing içindeki MODEL_CATALOG değerinden üretilir.