Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler

İnternette müşteri davranışlarını analiz etmenin yararları hakkında yüzlerce makale var. Çoğu zaman bu perakende sektörüyle ilgilidir. Yiyecek sepeti analizinden ABC ve XYZ analizine, elde tutma pazarlamasına ve kişisel tekliflere kadar. Onlarca yıldır çeşitli teknikler kullanılmış, algoritmalar düşünülmüş, kod yazılmış ve hata ayıklanmıştır - alın ve kullanın. Bizim durumumuzda temel bir sorun ortaya çıktı; biz ISPsystem olarak perakende satışla değil, yazılım geliştirmeyle ilgileniyoruz.
Adım Denis ve şu anda ISPsystem'deki analitik sistemlerin arka ucundan sorumluyum. Bu da meslektaşım ve benim hikayemiz Danil Veri görselleştirmeden sorumlu olanlar, yazılım ürünlerimize bu bilginin prizmasından bakmaya çalıştılar. Her zamanki gibi tarihle başlayalım.

Başlangıçta bir kelime vardı ve bu kelime “Deneyelim mi?”

O dönemde Ar-Ge departmanında geliştirici olarak çalışıyordum. Her şey Danil'in burada Habré'yi okumasıyla başladı işte tutma hakkında — uygulamalardaki kullanıcı geçişlerini analiz etmeye yönelik bir araç. Burada kullanma fikri konusunda biraz şüpheliydim. Örnek olarak, kütüphane geliştiricileri, hedef eylemin açıkça tanımlandığı (bir sipariş vermek veya sahibi şirkete nasıl ödeme yapılacağına ilişkin başka bir varyasyon) uygulamaların analizini gösterdi. Ürünlerimiz yerinde tedarik edilmektedir. Yani kullanıcı önce bir lisans satın alır ve ancak bundan sonra uygulamadaki yolculuğuna başlar. Evet demo versiyonlarımız var. Zor durumda kalmamak için ürünü orada deneyebilirsiniz.

Ancak ürünlerimizin çoğu hosting pazarına yöneliktir. Bunlar büyük müşterilerdir ve iş geliştirme departmanı onlara ürün yetenekleri konusunda tavsiyelerde bulunur. Ayrıca müşterilerimiz, satın alma sırasında yazılımımızın hangi sorunları çözmelerine yardımcı olacağını zaten biliyorlar. Uygulamadaki rotaları, ürüne yerleştirilmiş CJM ile örtüşmelidir ve UX çözümleri onların doğru yolda kalmalarına yardımcı olacaktır. Spoiler: Bu her zaman olmaz. Kütüphaneye giriş ertelendi... ama uzun sürmedi.

Startup'ımızın piyasaya sürülmesiyle her şey değişti - Cartbee — Instagram hesabından çevrimiçi mağaza oluşturmaya yönelik platformlar. Bu uygulamada kullanıcıya tüm işlevleri ücretsiz olarak kullanması için iki haftalık bir süre verildi. Daha sonra abone olup olmayacağınıza karar vermeniz gerekiyordu. Bu da “rota-hedef eylemi” konseptine mükemmel bir şekilde uyuyor. Karar verildi: deneyelim!

İlk sonuçlar veya nereden fikir alınacağı

Geliştirme ekibi ve ben, ürünü tam anlamıyla bir günde etkinlik toplama sistemine bağladık. Hemen söyleyeceğim, ISPsystem sayfa ziyaretleriyle ilgili olayları toplamak için kendi sistemini kullanıyor ancak hiçbir şey ham verileri ücretsiz olarak indirmenize olanak tanıyan Yandex.Metrica'yı aynı amaçlarla kullanmanızı engellemiyor. Kütüphaneyi kullanma örnekleri incelendi ve bir haftalık veri toplamanın ardından bir geçiş grafiği aldık.
Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Geçiş grafiği. Temel işlevsellik, diğer geçişler netlik sağlamak amacıyla kaldırıldı

Tıpkı örnekteki gibi ortaya çıktı: düzlemsel, net, güzel. Bu grafikten yola çıkarak insanların en sık vakit geçirdiği rotaları ve kavşakları tespit edebildik. Bu, aşağıdakileri anlamamızı sağladı:

  • Bir düzine varlığı kapsayan büyük bir CJM yerine yalnızca iki tanesi aktif olarak kullanılıyor. Ayrıca UX çözümlerini kullanarak kullanıcıları ihtiyacımız olan yerlere yönlendirmek gerekiyor.
  • UX tasarımcıları tarafından uçtan uca tasarlanan bazı sayfalar, insanların bu sayfalarda mantıksız miktarda zaman harcamasına neden oluyor. Belirli bir sayfada durdurma öğelerinin ne olduğunu bulmanız ve ayarlamanız gerekir.
  • Uygulamada 10 geçişten sonra kişilerin %20'si yorulmaya ve seansı bırakmaya başladı. Ve bu, uygulamada 5'e kadar başlangıç ​​sayfamızın olduğu gerçeğini hesaba katıyor! Kullanıcıların düzenli olarak oturumdan vazgeçtiği sayfaları tespit edip onlara giden yolu kısaltmanız gerekiyor. Daha da iyisi: Düzenli rotaları tanımlayın ve kaynak sayfadan hedef sayfaya hızlı geçişe izin verin. ABC analizi ve terk edilmiş sepet analiziyle ortak bir nokta olduğunu düşünmüyor musunuz?

Ve burada, bu aracın şirket içi ürünlere uygulanabilirliğine ilişkin tutumumuzu yeniden değerlendirdik. Aktif olarak satılan ve kullanılan bir ürünün analiz edilmesine karar verildi - VM Yöneticisi 6. Çok daha karmaşıktır, daha fazla sayıda varlık vardır. Geçiş grafiğinin nasıl olacağını heyecanla bekliyorduk.

Hayal kırıklıkları ve ilhamlar hakkında

Hayal kırıklığı #1

Aynı anda iş gününün sonu, ayın sonu ve yılın sonuydu - 27 Aralık. Veriler toplandı, sorgular yazıldı. Her şeyin işlenmesine saniyeler kalmıştı ve bir sonraki çalışma yılının nerede başlayacağını öğrenmek için çalışmalarımızın sonucuna bakabilirdik. Ar-Ge departmanı, ürün müdürü, UX tasarımcıları, ekip lideri, geliştiriciler, ürünlerinde kullanıcı yollarının nasıl göründüğünü görmek için monitörün önünde toplandılar, ancak... şunu gördük:
Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Retentioneering kütüphanesi tarafından oluşturulan geçiş grafiği

İlham #1

Güçlü bir şekilde birbirine bağlı, düzinelerce varlık, açık olmayan senaryolar. Yeni çalışma yılının analizle değil, böyle bir grafikle çalışmayı basitleştirmenin bir yolunun icadıyla başlayacağı açıktı. Ancak her şeyin göründüğünden çok daha basit olduğu hissinden kurtulamadım. Ve Retentioneering kaynak kodunu on beş dakika inceledikten sonra oluşturulan grafiği nokta formatına aktarabildik. Bu, grafiği başka bir araca (Gephi) yüklemeyi mümkün kıldı. Grafikleri analiz etmek için zaten bir alan var: düzenler, filtreler, istatistikler; tek yapmanız gereken arayüzde gerekli parametreleri yapılandırmak. Bu düşünceyle yılbaşı hafta sonu için yola çıktık.

Hayal kırıklığı #2

İşe döndükten sonra, herkes dinlenirken müşterilerimizin ürünü incelediği ortaya çıktı. Evet, o kadar zor ki depoda daha önce var olmayan olaylar ortaya çıktı. Bu, sorguların güncellenmesi gerektiği anlamına geliyordu.

Bu gerçeğin üzüntüsünü anlamak için biraz arka plan. Hem işaretlediğimiz olayları (örneğin, bazı düğmelere tıklamalar) hem de kullanıcının ziyaret ettiği sayfaların URL'lerini iletiyoruz. Cartbee örneğinde "tek eylem - tek sayfa" modeli işe yaradı. Ancak VMmanager'da durum tamamen farklıydı: bir sayfada birkaç kalıcı pencere açılabiliyordu. Bunlarda kullanıcı çeşitli sorunları çözebilir. Örneğin URL'si:

/host/item/24/ip(modal:modal/host/item/ip/create)

kullanıcının “IP Adresleri” sayfasına bir IP adresi eklediği anlamına gelir. Ve burada iki sorun aynı anda görülebilir:

  • URL, bir tür yol parametresi (sanal makinenin kimliği) içerir. Hariç tutulması gerekiyor.
  • URL kalıcı pencere kimliğini içerir. Bu tür URL'leri bir şekilde "paketten çıkarmanız" gerekir.
    Diğer bir sorun da işaretlediğimiz olayların parametrelerinin olmasıydı. Örneğin, listeden bir sanal makine hakkındaki bilgilerin bulunduğu sayfaya ulaşmanın beş farklı yolu vardı. Buna göre bir olay gönderildi ancak kullanıcının hangi yöntemle geçiş yaptığını belirten bir parametre ile. Bu tür pek çok olay vardı ve tüm parametreler farklıydı. Ve Clickhouse için SQL lehçesinde tüm veri alma mantığına sahibiz. 150-200 satırlık sorgular artık sıradan gelmeye başladı. Sorunlar etrafımızı sarmıştı.

İlham #2

Bir sabah erkenden, isteğin ikinci dakikasına üzülerek göz atan Danil bana şunu önerdi: "Veri işleme hatları yazalım mı?" Düşündük ve eğer yapacaksak ETL gibi bir şey olacağına karar verdik. Böylece anında filtrelenir ve gerekli verileri diğer kaynaklardan çeker. Tam teşekküllü bir arka uca sahip ilk analitik hizmetimiz bu şekilde doğdu. Veri işlemenin beş ana aşamasını uygular:

  1. Olayların ham veri deposundan kaldırılması ve işlenmeye hazırlanması.
  2. Açıklama, modal pencerelerin, olay parametrelerinin ve olayı açıklığa kavuşturan diğer ayrıntıların tanımlayıcılarının “paketinin açılmasıdır”.
  3. Zenginleştirme ("zengin olma" kelimesinden gelir), olayların üçüncü taraf kaynaklardan gelen verilere eklenmesidir. O zamanlar bu yalnızca faturalandırma sistemimiz BILLmanager'ı içeriyordu.
  4. Filtreleme, analiz sonuçlarını bozan olayları (iç duruşlardan, aykırı değerlerden vb. kaynaklanan olaylar) filtreleme işlemidir.
  5. Alınan olayların temiz veri dediğimiz depoya yüklenmesi.
    Artık bir olayı veya hatta benzer olay gruplarını işlemek için kurallar ekleyerek alaka düzeyini korumak mümkündü. Örneğin, o zamandan beri URL paketini açmayı hiç güncellemedik. Ancak bu süre zarfında birçok yeni URL varyasyonu eklendi. Hizmette halihazırda belirtilen kurallara uyuyorlar ve doğru şekilde işleniyorlar.

Hayal kırıklığı #3

Analiz etmeye başladığımızda grafiğin neden bu kadar tutarlı olduğunu anladık. Gerçek şu ki, neredeyse her N-gram, arayüz aracılığıyla gerçekleştirilemeyen geçişler içeriyordu.

Küçük bir soruşturma başladı. Tek bir varlık içinde imkansız geçişlerin olmadığı konusunda kafam karışmıştı. Bu, bunun etkinlik toplama sistemimizde veya ETL hizmetimizde bir hata olmadığı anlamına gelir. Kullanıcının, birinden diğerine geçmeden aynı anda birkaç varlıkta çalıştığı hissi vardı. Bu nasıl başarılır? Tarayıcıda farklı sekmeler kullanma.

Cartbee'yi analiz ederken özgüllüğü bizi kurtardı. Uygulama, birkaç sekmeden çalışmanın kesinlikle sakıncalı olduğu mobil cihazlardan kullanıldı. Burada bir masaüstümüz var ve bir varlıkta bir görev gerçekleştirilirken, bu zamanı başka bir varlıkta kurulum veya durumu izlemek için harcamak istemek mantıklıdır. İlerlemeyi kaybetmemek için başka bir sekme açmanız yeterli.

İlham #3

Ön uç geliştirme ekibindeki arkadaşlar, etkinlik toplama sistemine sekmeler arasında ayrım yapmayı öğretti. Analiz başlayabilir. Ve başladık. Beklendiği gibi, CJM gerçek yollarla eşleşmedi: Kullanıcılar dizin sayfalarında, terk edilmiş oturumlarda ve en beklenmedik yerlerdeki sekmelerde çok fazla zaman harcadı. Geçiş analizini kullanarak bazı Mozilla yapılarında sorunlar bulmayı başardık. Bunlarda, uygulama özellikleri nedeniyle, yalnızca yöneticinin erişebilmesi gereken gezinme öğeleri kayboldu veya yarı boş sayfalar görüntülendi. Sayfa açıldı ancak arka uçtan içerik gelmedi. Geçişlerin sayılması, gerçekte hangi özelliklerin kullanıldığını değerlendirmeyi mümkün kıldı. Zincirler, kullanıcının bu veya bu hatayı nasıl aldığını anlamayı mümkün kıldı. Kullanıcı davranışına dayalı olarak test yapılmasına izin verilen veriler. Bu bir başarıydı, fikir boşuna değildi.

Analitik otomasyonu

Sonuç gösterimlerinden birinde Gephi'nin grafik analizi için nasıl kullanıldığını gösterdik. Bu araçta dönüşüm verileri bir tabloda görüntülenebilir. Ve UX departmanı başkanı, şirketteki tüm davranış analitiği yönünün gelişimini etkileyen çok önemli bir düşünceyi söyledi: "Aynısını yapalım, ancak Tableau'da ve filtrelerle - daha uygun olacak."

Sonra düşündüm: neden olmasın, Retentioneering tüm verileri pandas.DataFrame yapısında saklıyor. Ve bu genel olarak bir masa. Başka bir hizmet böyle ortaya çıktı: Veri Sağlayıcı. Grafikten sadece bir tablo çıkarmakla kalmadı, aynı zamanda sayfanın ve onunla ilişkili işlevlerin ne kadar popüler olduğunu, kullanıcı tutma oranını nasıl etkilediğini, kullanıcıların ne kadar süre orada kaldığını ve kullanıcıların en sık hangi sayfalardan ayrıldığını da hesapladı. Tableau'da görselleştirmenin kullanılması grafiği inceleme maliyetini o kadar azalttı ki, üründeki davranış analizinin yineleme süresi neredeyse yarı yarıya azaldı.

Danil bu görselleştirmenin nasıl kullanıldığı ve hangi sonuçların çıkarılmasına olanak sağladığı hakkında konuşacak.

Masa tanrısı için daha fazla masa!

Basitleştirilmiş bir biçimde görev şu şekilde formüle edildi: geçiş grafiğini Tableau'da görüntüleyin, filtreleme yeteneği sağlayın ve mümkün olduğunca net ve kullanışlı hale getirin.

Aslında Tableau'da yönlendirilmiş bir grafik çizmek istemedim. Başarılı olsa bile Gephi'ye kıyasla kazanç bariz görünmüyordu. Daha basit ve daha erişilebilir bir şeye ihtiyacımız vardı. Masa! Sonuçta grafik, her satırın "kaynak-hedef" türünün bir kenarı olduğu tablo satırları biçiminde kolayca temsil edilebilir. Üstelik böyle bir tabloyu, Elde Tutma ve Veri Sağlayıcı araçlarını kullanarak özenle hazırladık. Geriye kalan tek şey tabloyu Tableau'da görüntülemek ve raporu karıştırmaktı.
Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Herkesin masaları ne kadar sevdiğinden bahsetmişken.

Ancak burada başka bir sorunla karşı karşıyayız. Veri kaynağıyla ne yapmalı? Pandaları bağlamak imkansızdı. DataFrame'in böyle bir konektörü yok. Grafiği depolamak için ayrı bir taban oluşturmak, belirsiz olasılıkları olan çok radikal bir çözüm gibi görünüyordu. Ve sürekli manuel operasyonlara duyulan ihtiyaç nedeniyle yerel boşaltma seçenekleri uygun değildi. Mevcut konektörlerin listesine baktık ve bakışlarımız öğeye takıldı Web Veri Bağlayıcısı, çaresizce en altta toplanmış.

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Tableau zengin bir konnektör yelpazesine sahiptir. Sorunumuzu çözen birini bulduk

Ne tür bir hayvan? Tarayıcıda birkaç yeni sekme açıldı ve bu bağlayıcının bir URL'ye erişirken veri almanıza izin verdiği ortaya çıktı. Verileri hesaplamak için kullanılan arka uç neredeyse hazırdı, geriye kalan tek şey onu WDC ile arkadaş hale getirmekti. Denis birkaç gün boyunca belgeleri inceledi ve Tableau mekanizmalarıyla mücadele etti, ardından bana bir bağlantı gönderdi ve ben de bağlantı penceresine yapıştırdım.

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
WDC'mize bağlantı formu. Denis öne çıktı ve güvenliği sağladı

Birkaç dakika bekledikten sonra (istendiğinde veriler dinamik olarak hesaplanır) aşağıdaki tablo ortaya çıktı:

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Tableau arayüzünde ham veri dizisi böyle görünüyor

Söz verildiği gibi, böyle bir tablonun her satırı grafiğin bir kenarını, yani kullanıcının yönlendirilmiş geçişini temsil ediyordu. Ayrıca birkaç ek özellik daha içeriyordu. Örneğin, benzersiz kullanıcıların sayısı, toplam geçiş sayısı ve diğerleri.

Bu tabloyu raporda olduğu gibi görüntülemek, filtreleri cömertçe serpmek ve aracı denize göndermek mümkün olacaktır. Kulağa mantıklı geliyor. Masayla ne yapabilirsiniz? Ancak bizim yöntemimiz bu değil çünkü biz sadece bir tablo değil, aynı zamanda analiz ve ürün kararları verme aracı da yapıyoruz.

Tipik olarak, verileri analiz ederken kişi soruların yanıtlarını almak ister. Harika. Onlarla başlayalım.

  • En sık geçişler nelerdir?
  • Belirli sayfalardan nereye gidiyorlar?
  • Ayrılmadan önce bu sayfada ortalama ne kadar zaman harcıyorsunuz?
  • A'dan B'ye geçişi ne sıklıkla yapıyorsunuz?
  • Oturum hangi sayfalarda bitiyor?

Raporların her biri veya bunların bir kombinasyonu, kullanıcının bu soruların yanıtlarını bağımsız olarak bulmasına olanak sağlamalıdır. Buradaki temel strateji, size bunu kendi başınıza yapabilmeniz için gerekli araçları vermektir. Bu, hem analiz departmanının yükünü azaltmak hem de karar verme süresini kısaltmak açısından faydalıdır; sonuçta artık Youtrack'a gidip analist için bir görev oluşturmanıza gerek yoktur, yalnızca raporu açmanız yeterlidir.

Ne elde ettik?

İnsanlar gösterge tablosundan en çok nerede ayrılıyor?

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Raporumuzun bir kısmı. Kontrol panelinden sonra herkes ya VM listesine ya da düğüm listesine gitti

Geçişleri içeren genel bir tablo alalım ve kaynak sayfaya göre filtreleyelim. Çoğu zaman kontrol panelinden sanal makineler listesine giderler. Üstelik Düzenlilik sütunu bunun yinelenen bir eylem olduğunu öne sürüyor.

Kümeler listesine nereden geliyorlar?

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Raporlardaki filtreler her iki yönde de çalışır: Nereden ayrıldığınızı veya nereye gittiğinizi öğrenebilirsiniz

Örneklerden, iki basit filtrenin varlığının ve satırları değerlere göre sıralamanın bile hızlı bir şekilde bilgi almanızı sağladığı açıktır.

Daha zor bir şey soralım.

Kullanıcılar oturumlarını en sık nerede bırakıyor?

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
VMmanager kullanıcıları genellikle ayrı sekmelerde çalışır

Bunu yapmak için verileri yönlendirme kaynakları tarafından toplanan bir rapora ihtiyacımız var. Ve sözde kırılma noktaları, geçiş zincirinin sonu olarak hizmet eden olaylar olarak görevlendirildi.

Burada bunun oturumun sonu ya da yeni bir sekmenin açılması olabileceğini unutmamak önemlidir. Örnek, zincirin çoğunlukla sanal makinelerin listesini içeren bir tabloda bittiğini göstermektedir. Bu durumda karakteristik davranış, beklenen modelle tutarlı olan başka bir sekmeye geçiştir.

Analizi benzer şekilde yaptığımızda öncelikle bu raporların işe yararlığını kendimizde test ettik. Vepbir diğer ürünlerimiz. Tabloların ve filtrelerin ortaya çıkışıyla hipotezler daha hızlı test edildi ve gözler daha az yoruldu.

Raporları geliştirirken görsel tasarımı da unutmadık. Bu boyuttaki tablolarla çalışırken bu önemli bir faktördür. Mesela sakin, algılanması kolay bir renk yelpazesi kullandık. tek aralıklı yazı tipi sayılar için, özelliklerin sayısal değerlerine uygun olarak çizgilerin renkle vurgulanması. Bu tür ayrıntılar kullanıcı deneyimini iyileştirir ve aracın şirket içinde başarılı bir şekilde ortaya çıkma olasılığını artırır.

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Tablonun oldukça hacimli olduğu ortaya çıktı, ancak okunabilirliğini kaybetmediğini umuyoruz

Dahili müşterilerimizin eğitiminden ayrıca bahsetmeye değer: ürün uzmanları ve UX tasarımcıları. Analiz örnekleri ve filtrelerle çalışma ipuçları içeren kılavuzlar onlar için özel olarak hazırlandı. Kılavuzlara olan bağlantıları doğrudan rapor sayfalarına ekledik.

Ürünün gerçek yüzünü görün ve hayatta kalın. Birkaç yeni hizmet yazmanın nedeni olarak kullanıcı geçişlerine ilişkin veriler
Kılavuzu Google Dokümanlar'da basit bir sunum olarak hazırladık. Tableau araçları, web sayfalarını doğrudan bir rapor çalışma kitabının içinde görüntülemenize olanak tanır.

yerine epilogue

Sonuç olarak ne var? Her gün için bir aleti nispeten hızlı ve ucuza alabildik. Evet, bu kesinlikle grafiğin kendisinin, tıklamaların ısı haritasının veya web görüntüleyicinin yerini almaz. Ancak bu tür raporlar, listelenen araçları önemli ölçüde tamamlıyor ve üzerinde düşünmeye, yeni ürün ve arayüz hipotezlerine katkıda bulunuyor.

Bu hikaye, ISP sisteminde analitiklerin geliştirilmesi için yalnızca bir başlangıç ​​görevi gördü. Geçtiğimiz altı ayda, üründeki kullanıcının dijital portreleri ve Benzer hedefleme için veri tabanları oluşturmaya yönelik bir hizmet de dahil olmak üzere yedi yeni hizmet daha ortaya çıktı, ancak bunlar hakkında aşağıdaki bölümlerde konuşacağız.

Kaynak: habr.com

Yorum ekle