
Dil 🇹🇷 Türkçe
API Kaynakları
Kimlik Doğrulama
Toplamalar
Denetim Günlükleri
Toplu İşler
Yorumlar
E-posta Şablonları
Akış Gönderileri
Etiketler
Ben
Moderatörler
Bildirim Sayısı
Bildirimler
Sayfa Tepkileri
Sayfalar
Anketler
Anket Oyları
Bekleyen Webhook Olayları
SSO Kullanıcıları
Abonelikler
Kiracı Günlük Kullanımı
Kiracılar
Kiracı Paketleri
Kiracı Kullanıcıları
Kullanıcılar
Oylar
Domain Configları
Soru Configları
Soru Sonuçları
Soru Sonuçları Toplaması
Kullanıcı Rozetleri
Kullanıcı Rozet İlerlemesi
Canlı Yorum API'leri
FastComments API'si
FastComments, birçok kaynakla etkileşim kurmak için bir API sağlar. Platformumuzla entegrasyonlar oluşturabilir ya da hatta kendi istemcilerinizi geliştirebilirsiniz!
Bu belgede, API tarafından desteklenen tüm kaynakları, istek ve yanıt türleriyle birlikte bulacaksınız.
Kurumsal müşteriler için, tüm API erişimleri Denetim Günlüğü'nde kaydedilir.
Oluşturulan SDK'lar
FastComments artık kodumuzdan bir API Spec oluşturuyor (bu henüz tam değil, ancak birçok API'yi içeriyor).
Ayrıca popüler diller için SDK'larımız da var:
- fastcomments-cpp
- fastcomments-go
- fastcomments-java
- fastcomments-sdk-js
- fastcomments-nim
- fastcomments-php
- fastcomments-php-sso
- fastcomments-python
- fastcomments-ruby
- fastcomments-rust
- fastcomments-swift
Kimlik Doğrulama
API, api anahtarınızı X-API-KEY başlığı ya da API_KEY sorgu parametresi olarak göndererek kimlik doğrulaması yapar. API çağrıları yapmak için ayrıca tenantId'ye de ihtiyacınız olacak. Bu, api anahtarınızla aynı sayfadan alınabilir.
Güvenlik Notu
Bu yollar sunucudan çağrılmak üzere tasarlanmıştır. ÇAĞIRMAYIN bir tarayıcıdan. Bunu yaparsanız API anahtarınız ortaya çıkar - bu, sayfanın kaynak kodunu görebilen herkese hesabınıza tam erişim sağlar!
Kimlik Doğrulama Seçeneği Bir - Başlıklar
- Header:
X-API-KEY - Header:
X-TENANT-ID
Kimlik Doğrulama Seçeneği İki - Sorgu Parametreleri
- Query Param:
API_KEY - Query Param:
tenantId
Kimlik Doğrulama Seçeneği Üç - OAuth Bearer Token
- Header:
Authorization: Bearer fcat_...
Zapier gibi üçüncü taraf uygulamalar ve MCP sunucusunun istemcileri, API anahtarı yerine OAuth aracılığıyla bir token alır. Bu token burada her uç noktada çalışır. Tenant, token tarafından ima edilir, bu yüzden tenantId isteğe bağlıdır, ancak verildiğinde token ile eşleşmelidir. GET istekleri read kapsamına, diğer tüm yöntemler write kapsamına ihtiyaç duyar. İstemci kaydı, PKCE, yenileme ve iptal dahil tam akış OAuth Yetkilendirme altında belgelenmiştir. Keşif https://fastcomments.com/.well-known/oauth-authorization-server adresinde başlar.
Kendi Yazılarınızı Okuma
FastComments, Active-Active kullanılabilirlik sağlar. Veri merkezinizden gelen istekler, size en yakın varlık noktasına yönlendirilir. Bu otomatik bir işlemdir ve genellikle okuma-yazma tutarlılığını gözlemleyebilirsiniz. Kendi yazılarınızı okuduğunuzdan emin olmak istiyorsanız, isteklerinizi belirli bir bölgeye sabitleyebilir ve o bölgeyi API ana bilgisayarı olarak kullanabilirsiniz (ancak çoğu entegrasyon için genellikle gerekmez):
- gdc-oregon.fastcomments.com
- gdc-virginia.fastcomments.com
- gdc-singapore.fastcomments.com
- gdc-falkenstein2.fastcomments.com
- gdc-sao-paulo.fastcomments.com
- eudc-helsinki2.fastcomments.com
- eudc-limburg.fastcomments.com
- eudc-france.fastcomments.com
Bunu yaparsanız, geçmişte giriş noktası düğümlerini kaldırdığımız ve geçiş için yeni adlar kullandığımız için bir yedek tanımlamak isteyebilirsiniz.
API Kaynakları 
Kaynak Kullanımı
API'den veri çekmenin hesabınızdaki kullanım olarak sayıldığını belirtmek gerekir.
Her kaynak, bu kullanımın ne olduğunu kendi bölümünde listeleyecektir.
Bazı kaynakların hizmet maliyeti diğerlerinden daha fazladır. Her uç nokta, API çağrısı başına belirli bir kredi maliyetine sahiptir. Bazı uç noktalar için kredi sayısı, seçenekler ve yanıt boyutlarına göre değişir.
API kullanımı, Billing Analytics sayfasında kontrol edilebilir ve her birkaç dakikada bir güncellenir.
Not!
urlId değerlerini Comment API'sine geçirirken oluşabilecek karışıklığı azaltmak için önce Pages belgelerini okumanızı öneririz.
Webhook'lar
Webhook aboneliklerinin kendi rehberi vardır. POST, GET ve DELETE /api/v1/webhooks, ve GET /api/v1/webhooks/sample-payloads, Managing Subscriptions via API altında belgelenmiştir, ve olay yükleri Webhook Structures altında açıklanmıştır.
OAuth Yetkilendirme 
FastComments bir OAuth 2.1 yetkilendirme sunucusudur. Bir uygulama, bir FastComments hesabına bağlı bir token alabilir ve bu kılavuzdaki her uç noktada API anahtarı yerine kullanabilir. Bu, Zapier uygulaması, MCP sunucusu ve diğer üçüncü taraf entegrasyonların bağlanma şeklidir.
Tokenlar, PKCE ile yetkilendirme kodu akışı üzerinden verilir. İstemci kimlik bilgileri veya örtük izin yoktur.
Keşif
Uç nokta konumları, desteklenen izinler ve kimlik doğrulama yöntemleri standart metaveri URL'sinde yayınlanır:

Açıklanan uç noktalar:

AB bölgesindeki hesaplar, aynı yollarla, https://eu.fastcomments.com adresini sağlayıcı olarak kullanır.
Bir istemci kaydetme
Bir istemcinin akışı başlatmadan önce bir client_id ve kayıtlı bir redirect_uri'ye ihtiyacı vardır. Bunu elde etmenin iki yolu vardır:
- Dinamik İstemci Kaydı. RFC 7591'e göre bir JSON gövdesiyle
POST /oauth/register(redirect_uris,client_name,client_uri,logo_uri,token_endpoint_auth_method). Yanıtclient_idve gizli istemciler içinclient_secretiçerir. Kayıt kimlik doğrulaması gerektirmez ve IP başına oran sınırlıdır. - İstemci ID Metaveri Belgesi. İstemci, kontrol ettiği bir
httpsURL'siniclient_idolarak kullanır. FastComments bu URL'yi alır ve aynı metaveri alanlarını okur. Kayıt çağrısına gerek yoktur.
FastComments kontrol panelinde listelenen ortak uygulamalar, örneğin Zapier, doğrudan FastComments tarafından kaydedilir. Bir pazar yeri listesi oluşturuyorsanız ve bir birinci taraf istemciye ihtiyacınız varsa destek ile iletişime geçin.
Kapsamlar

Hiçbir kapsam talep etmeyen bir istek her iki kapsamı da alır. Kullanıcı, istenen kapsamları onay sayfasında görür. Bu iki kapsam dışındaki bir kapsam talebi invalid_scope hatasıyla başarısız olur.
Adım 1 - Yetkilendirme isteği
Kullanıcının tarayıcısını yetkilendirme uç noktasına yönlendirin. PKCE, S256 yöntemiyle her istemci için gereklidir.


Kullanıcı gerektiğinde FastComments'a giriş yapar ve uygulamanızın adını, bağlanacağı hesabı ve istenen kapsamları gösteren bir onay sayfası görür. Kullanıcının o hesapta API Admin iznine sahip olması gerekir; başka birisi onay formu yerine izin hatası alır. Onaylamak, tarayıcıyı code ve state ile redirect_uri'nize yönlendirir. Reddetmek, error=access_denied ile yönlendirir.
Yetkilendirme kodu 10 dakika geçerlidir ve bir kez takas edilebilir. Aynı kodun ikinci takası, ilk takasın ürettiği tüm tokenları iptal eder.
Adım 2 - Token isteği
Kodu tokenlar için takas edin. Gövde form-encoded'dir. Gizli istemciler client_secret_basic (HTTP Basic) veya client_secret_post (gövdede gizli) ile kimlik doğrular. Genel istemciler sadece client_id gönderir.



Hatalar RFC 6749'e uyar: error ve error_description içeren bir JSON gövdesi, invalid_request, invalid_grant, invalid_scope, invalid_target ve unsupported_grant_type için HTTP 400, invalid_client için HTTP 401, oran sınırlaması olduğunda HTTP 429.
Adım 3 - API'yi Çağırma
Erişim tokenını bir bearer token olarak gönderin. Kiracı token tarafından ima edilir, bu yüzden tenantId isteğe bağlıdır. Verildiğinde tokenla eşleşmelidir, aksi takdirde istek başarısız olur.

GET /api/v1/me kiracıyı, yetkilendiren kullanıcıyı ve verilen kapsamları döndürür; bu, bağlantı testi için doğru çağrıdır. Süresi dolmuş veya iptal edilmiş bir tokenla yapılan istek HTTP 401 alır. Yöntemi, tokenın sahip olmadığı bir kapsam gerektiren bir istek HTTP 403 alır.
Adım 4 - Yenileme


Yanıt, kod takasıyla aynı yapıya sahiptir. Yenileme tokenları döner: her yenileme yeni bir refresh_token döndürür ve eşzamanlı istekler için 30 saniyelik bir gecikme penceresinden sonra eski tokenı iptal eder. 30 saniyeden daha uzun bir sürede dönen bir yenileme tokenı sunulursa bu tekrar olarak değerlendirilir ve tüm izin iptal edilir. FastComments tarafından kaydedilen ortak uygulamalar döndürmeden muaf tutulur ve aynı yenileme tokenını alır; süresi başka 30 gün uzatılır.
Yenileme ayrıca yetkilendiren kullanıcının hâlâ hesapta API Admin iznine sahip olup olmadığını kontrol eder. Eğer yoksa, izin iptal edilir ve yanıt invalid_grant olur.
İptal

Bir yenileme tokenını iptal etmek, aynı izinden verilen tüm erişim tokenlarını iptal eder. Bir erişim tokenını iptal etmek sadece o tokenı iptal eder. Uç nokta, token bulunup bulunmadığına bakılmaksızın boş bir JSON nesnesiyle HTTP 200 döner, RFC 7009'e göre.
Kullanıcılar ayrıca FastComments kontrol panelindeki Bağlı Uygulamalar üzerinden bir bağlantıyı iptal edebilir. O uygulama için tüm tokenlar hemen çalışmaz.
Verilerinizi Toplayın 
Bu API, belgeleri (groupBy sağlanmışsa) gruplayarak ve birden fazla işlem uygulayarak toplar (aggregate eder). Farklı işlemler (ör. sum, countDistinct, avg, vb.) desteklenir.
Maliyet değişkendir. Taranan her 500 nesne 1 API kredisi tutar.
Varsayılan olarak her API çağrısı için izin verilen maksimum bellek kullanımı 64MB'dir ve varsayılan olarak aynı anda yalnızca bir toplama işlemi çalıştırabilirsiniz. Eğer birden fazla toplama işlemini aynı anda gönderirseniz, bunlar sıraya alınır ve gönderildikleri sırayla çalıştırılır. Beklemede olan toplama işlemleri en fazla 60 saniye bekler; bundan sonra istek zaman aşımına uğrar. Bireysel toplama işlemleri en fazla 5 dakika çalışabilir.
Yönetilen kiracılarınız varsa, parentTenantId sorgu parametresini geçirerek tüm alt kiracı kaynaklarını tek bir çağrıda toplayabilirsiniz.
Örnekler
Örnek: Benzersiz Değerleri Sayma


Örnek: Farklı Değerleri Sayma

Yanıt:

Örnek: Birden Fazla Alanın Değerlerini Toplama

Yanıt:

Örnek: Birden Fazla Alanın Ortalama Değerleri

Yanıt:

Örnek: Birden Fazla Alanın Min/Max Değerleri

Yanıt:

Örnek: Birden Fazla Alanın Benzersiz Değerlerini Sayma

Yanıt:

Örnek: Sorgu Oluşturma

Yanıt:

Örnek: İnceleme Bekleyen Yorumları Sayma

Yanıt:

Örnek: Onaylanmış, İncelenmiş ve Spam Yorumların Dağılımı

Yanıt:

Yapılar


Aşağıdaki kaynaklar üzerinde toplama yapılabilir:
- AffiliateEvent
- AnonymousVote
- BannedUser
- BatchJob
- BlockedUser
- Comment
- CommentDeleted
- CommentIdToSyncOutbound
- CommentScheduled
- CommentSyncLog
- CustomConfig
- CustomEmailTemplateRenderError
- EmailToSend
- EventLogEntry
- ImportedCommentScheduled
- ModerationGroup
- Moderator
- Page
- PageReact
- PendingVote
- QuestionResult
- SSOUser
- SentEmail
- SpamEvent
- Tenant
- TenantAuditLog
- TenantBadge
- TenantDailyUsage
- TenantInvoiceHistory
- TenantPackage
- User
- UserBadge
- UserBadgeProgress
- UserNotification
- UserSubscription
- UserUsage
- Vote
Denetim Günlüğü Yapısı 
Bir AuditLog, bu özelliğe erişimi olan kiracılar (tenant) için denetlenmiş bir olayı temsil eden bir nesnedir.
AuditLog nesnesinin yapısı aşağıdaki gibidir:

targetId ve targetLabel, olayın ne üzerinde gerçekleştirildiğini açıklar; userId ve username ise onu kimin gerçekleştirdiğini açıklar. Güncellemeler için objectDetails.changes, gerçekte neyin değiştiğini gösteren bir {field: {from, to}} haritası içerir.
Denetim günlüğü değiştirilemezdir. Ayrıca manuel olarak yazılamaz. FastComments.com, denetim günlüğüne ne zaman yazılacağına yalnızca kendisi karar verebilir. Ancak bu API aracılığıyla ondan okuyabilirsiniz.
Denetim günlüğündeki olaylar iki yıl sonra sona erer.
GET /api/v1/audit-logs 
Bu API, skip, limit, before ve after parametreleriyle sağlanan sayfalama kullanır. AuditLog'lar varsayılan olarak 1000 kayıtlık sayfalarda döndürülür, maksimum limit 10000'e kadar, when ve id'ye göre sıralanır. Sayfalar büyüktür çünkü bu uç nokta genellikle geçmişi dökmek için kullanılır, etkileşimli olarak sayfalama yapmak yerine.
Dönen her 100 log için kredi maliyeti 1'dir.
Varsayılan olarak, en yeni öğeler önce olacak bir liste alırsınız. Bu şekilde, skip=0 ile başlayarak sorgulayabilir, tükettiğiniz son kaydı bulana kadar sayfalayabilirsiniz.
Alternatif olarak, en eskiyi önce sıralayabilir ve kayıt kalmayana kadar sayfalayabilirsiniz.
Sıralama, order parametresini ASC veya DESC olarak ayarlayarak yapılabilir. Varsayılan DESC'tir.
Tarih sorgulama, milisaniye cinsinden zaman damgaları olarak before ve after ile mümkündür. before ve after KAPSAMLI DEĞİLDİR ve her biri tek başına kullanılabilir.
Bir kişinin başına ne geldiğini bulma
Her olay, kim tarafından gerçekleştirildiğini (username, userId, ip) ve ayrıca ne üzerinde gerçekleştirildiğini kaydeder. targetLabel, o nesne için insan tarafından okunabilir bir etikettir, örneğin jsmith (jsmith@example.com), ve targetId onun kimliğidir. Bir kişinin adını veya e-posta adresini biliyor ancak kimliğini bilmiyorsanız, etiketteki alt dizeyi büyük/küçük harfe duyarsız eşleştirmek için target kullanın.
Silme işlemleri, olay anındaki etiketi yakalar, böylece temel kayıt silinmiş olsa bile kaldırılan bir kullanıcı veya moderatör hâlâ tanımlanabilir.
Yönetilen kiracılar
Kiracınız diğer kiracıları yönetiyorsa, includeManagedTenants=true ayarlayarak bir yanıt içinde kendi kiracınız ve yönettiği tüm kiracılardan gelen olayları döndürün. Dönen her log'un tenantId değeri, kaynağın hangi kiracıdan geldiğini gösterir.



Toplu İş Yapısı 
A BatchJob bir içe aktarma, bir dışa aktarma veya bir page migration gibi uzun süren bir görevdir. İşler kuyruğa alınır, ardından alınır ve arka planda çalıştırılır.
processedCount ve totalCount ilerlemeyi gösterir. Birimleri type değerine bağlıdır:
migrate-pages: istenen taşıma sayısına göre tamamlanan taşımalar.undo-page-migration: geri getirilen kayıtlar.totalCountyoktur.import,exportve diğer işler: işlenen satırlar.
BatchJob nesnesinin yapısı aşağıdaki gibidir:

Yeniden Denemeler
Sayfa taşıma işi çalıştıran sunucu yeniden başlatılırsa, iş kuyruğa geri konur ve son tamamlanan taşımanın ardından devam eder. Bir iş en fazla 3 kez denenir, ardından status değeri failed olur.
GET /api/v1/batch-jobs 
Bu rota, kiracının her türdeki toplu işlerini, en yeni önce, sayfa başına 100 olacak şekilde döndürür. Listeyi daraltmak için type ve status kullanın ve sayfalama için skip kullanın.



GET /api/v1/batch-jobs/:id 
Bu rota, bir toplu işin durumunu, ilerlemesini ve tamamlandığında sonucunu döndürür. POST /api/v1/pages/migrations veya POST /api/v1/pages/migrations/:undoId/undo ile başlatılan bir işi izlemek için kullanın.
Bir iş, status değeri success veya failed olduğunda tamamlanmış sayılır. Her çağrı 1 kredi maliyetindedir, bu yüzden sürekli yerine birkaç saniyede bir sorgulama yapın.




Yorum Yapısı 
Bir Comment nesnesi, bir kullanıcı tarafından bırakılan bir yorumu temsil eder.
Üst ve alt yorumlar arasındaki ilişki parentId üzerinden tanımlanır.
Comment nesnesinin yapısı aşağıdaki gibidir:

Bu alanlardan bazıları READONLY olarak işaretlenmiştir - bunlar API tarafından döndürülür ancak ayarlanamaz.
Yorum Metni Yapısı
Yorumlar, FastComments'a özgü bir markdown lehçesiyle yazılır; bu, markdown'a artı görseller için geleneksel bbcode tarzı etiketlerin eklenmiş halidir, örneğin [img]path[/img].
Metin iki alanda saklanır. Kullanıcının girdiği metin, comment alanında değiştirilmeden saklanır. Bu, işlenip commentHTML alanında saklanır.
İzin verilen HTML etiketleri b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, ve br'dir.
HTML'i işlemesi önerilir, çünkü çok küçük bir HTML alt kümesidir ve bir işleyici (renderer) oluşturmak oldukça basittir. Örneğin, React Native ve Flutter için bununla yardımcı olabilecek birden fazla kütüphane vardır.
comment alanının normalize edilmemiş değerini işlemeyi seçebilirsiniz. Örnek bir ayrıştırıcı burada..
Örnek ayrıştırıcı, HTML ile çalışacak ve HTML etiketlerini platformunuz için işlenecek beklenen öğelere dönüştürecek şekilde de uyarlanabilir.
Etiketleme
Kullanıcılar bir yorumda etiketlendiğinde, bilgi mentions adlı bir listede saklanır. Bu listedeki her nesne
aşağıdaki yapıya sahiptir.
Run 
HashTags
Hashtag'ler kullanıldığında ve başarıyla ayrıştırıldığında, bilgi hashTags adlı bir listede saklanır. Bu listedeki her nesne
aşağıdaki yapıya sahiptir. retain ayarlanmışsa, hashtag'ler sorgulama amacıyla yorumun hashTags dizisine manuel olarak da eklenebilir.
Run 
GET /api/v1/comments 
Bu API, bir kullanıcıya gösterilmek üzere yorumları almak için kullanılır. Örneğin, onaylanmamış veya spam yorumları otomatik olarak filtreler.
Sayfalama
Sayfalama, performans gereksinimlerine ve kullanım senaryosuna bağlı olarak iki yöntemden biriyle yapılabilir:
- En Hızlı: Önceden Hesaplanmış Sayfalama (Precalculated Pagination):
- FastComments, hazır widget ve istemcilerimizi kullandığınızda bu şekilde çalışır.
- "Sonraki"ye tıklamak yalnızca sayfa sayısını artırır.
- Bunu bir anahtar-değer deposundan alınmış gibi düşünebilirsiniz.
- Bu şekilde,
0ile başlayan birpageparametresi vedirectionolarak bir sıralama yönü tanımlamanız yeterlidir. - Sayfa boyutları özelleştirme kuralları aracılığıyla özelleştirilebilir.
- En Esnek: Esnek Sayfalama (Flexible Pagination):
- Bu şekilde özel
limitveskipparametreleri tanımlayabilirsiniz.pageparametresini geçmeyin. - Sıralama
directionda desteklenir. limit,skipuygulandıktan sonra döndürülecek toplam sayıdır.- Örnek:
page size = 100vepage = 2ikenskip = 200, limit = 100olarak ayarlayın.
- Örnek:
- Alt yorumlar sayfalamaya dahil edilir. Bunu
asTreeseçeneğini kullanarak aşabilirsiniz.- Alt yorumları
limitChildrenveskipChildrenile sayfalayabilirsiniz. - Döndürülen thread'lerin derinliğini
maxTreeDepthile sınırlayabilirsiniz.
- Alt yorumları
- Bu şekilde özel
Thread'ler
Precalculated Paginationkullanırken, yorumlar sayfa bazında gruplanır ve thread'lerdeki yorumlar genel sayfayı etkiler.- Bu şekilde, thread'ler istemci tarafında
parentIdtemel alınarak belirlenebilir. - Örneğin, bir üst düzey yorum ve 29 yanıtı olan bir sayfada API'ye
page=0geçirerek - yalnızca üst düzey yorumu ve 29 alt yorumu alırsınız.
- Bu şekilde, thread'ler istemci tarafında
Flexible Paginationkullanırken birparentIdparametresi tanımlayabilirsiniz.- Yalnızca üst düzey yorumları almak için bunu null olarak ayarlayın.
- Ardından thread'leri görüntülemek için API'yi tekrar çağırın ve
parentIdgeçirin. - Yaygın bir çözüm, üst düzey yorumlar için bir API çağrısı yapmak ve ardından her yorumun alt yorumlarını almak için paralel API çağrıları yapmaktır.
- Şubat 2023 itibarıyla YENİ!
&asTree=truekullanarak ağaç olarak alın.- Bunu
Flexible Pagination as a Treeolarak düşünebilirsiniz. - Sayfalamada yalnızca üst düzey yorumlar sayılır.
- Ağacı kökten başlatmak için
parentId=nullayarlayın (parentIdayarlamanız gerekir). - Sayfalama için
skipvelimitayarlayın. asTreedeğerinitrueyapın.- Kredi maliyeti
2xartar, çünkü backend'imizin bu senaryoda çok daha fazla iş yapması gerekir. maxTreeDepth,limitChildrenveskipChildrendeğerlerini istediğiniz gibi ayarlayın.
- Bunu
Ağaçlar Açıklandı
asTree kullanırken sayfalama hakkında akıl yürütmek zor olabilir. İşte faydalı bir grafik:
Kullanıcı Bağlamında Yorumları Alma
/comments API'si, farklı kullanım senaryoları için iki bağlamda kullanılabilir:
- Kendi istemcinizi oluşturmak için sıralanmış ve bilgiyle etiketlenmiş yorumlar döndürmek için.
- Bu durumda bir
contextUserIdsorgu parametresi tanımlayın.
- Bu durumda bir
- Özel entegrasyonlar için yorumları backend'inizden almak için.
- Platform,
contextUserIdolmadan varsayılan olarak bunu kullanır.
- Platform,




Yorumları Ağaç Olarak Alma
Yorumların ağaç olarak döndürülmesi, sayfalamanın yalnızca üst düzey yorumları saymasıyla mümkündür.

Yalnızca üst düzey yorumları ve birinci derece alt yorumları mı almak istiyorsunuz? İşte bir yol:

Ancak, arayüzünüzde her yorumda "yanıtları göster" düğmesinin gösterilip gösterilmeyeceğini bilmeniz gerekebilir. Yorumları ağaç olarak alırken, uygulanabilir olduğunda yorumlara bir hasChildren özelliği etiketlenir.
Yorumları Ağaç Olarak, Hash Tag ile Arama Yaparak Alma
API kullanarak tüm tenant'ınız genelinde (tek bir sayfayla veya urlId ile sınırlı olmaksızın) hashtag ile arama yapmak mümkündür.
Bu örnekte, urlId parametresini çıkarıyoruz ve birden fazla hashtag ile arama yapıyoruz. API yalnızca istenen tüm hashtag'lere sahip yorumları döndürür.

Tüm İstek Parametreleri

Yanıt

Faydalı İpuçları
URL ID
Muhtemelen Comment API'sini urlId parametresiyle kullanmak istersiniz. Size sunulan urlId değerlerinin nasıl göründüğünü görmek için önce Pages API'sini çağırabilirsiniz.
Anonim İşlemler
Anonim yorum yapma için, yorumları alırken ve işaretleme ile engelleme işlemlerini gerçekleştirirken muhtemelen anonUserId geçmek istersiniz.
(!) Bu, birçok uygulama mağazası için gereklidir, çünkü kullanıcılar oturum açmamış olsalar bile görebildikleri kullanıcı tarafından oluşturulmuş içeriği işaretleyebilmelidir. Bunu yapmamak, uygulamanızın söz konusu mağazadan kaldırılmasına neden olabilir.
Yorumların Döndürülmemesi
Yorumlarınızın onaylandığını ve spam olmadığını kontrol edin.
GET /api/v1/comments/:id 
Bu API, bir yorumu id ile almanızı sağlar.



POST /api/v1/comments 
Bu API uç noktası yorum oluşturma yeteneği sağlar.
Yaygın kullanım durumları özel kullanıcı arayüzleri, entegrasyonlar veya içe aktarımlardır.
Notlar:
- Bu API, istenirse yorum widget'ını "canlı" olarak güncelleyebilir (bu,
creditsCost'u1'den2'ye çıkarır). - E-posta sağlanırsa bu API sistemimizde otomatik olarak kullanıcı nesneleri oluşturur.
- Farklı e-postalara sahip iki yorumu, fakat aynı kullanıcı adıyla kaydetmeye çalışmak, ikinci yorum için bir hata ile sonuçlanır.
- Eğer
parentIdbelirtiyorsanız ve bir alt yorumunnotificationSentForParentdeğeri false ise, ebeveyn yorum için bildirimler göndereceğiz. Bu her saat yapılır (gönderilen e-posta sayısını azaltmak için bildirimleri toplu olarak gönderiyoruz). - Kullanıcı oluşturulurken karşılama e-postaları veya yorum doğrulama e-postaları göndermek istiyorsanız, sorgu parametrelerinde
sendEmailsdeğerinitrueolarak ayarlayın. - Bu API aracılığıyla oluşturulan yorumlar yönetici uygulamasının Analytics ve Moderation sayfalarında görünecektir.
- Ayar açık ise, "bad words" yorumcu isimlerinde ve yorum metninde hâlâ maskelenir.
- Bu API ile oluşturulan yorumlar istenirse yine de spam için kontrol edilebilir.
- Özelleştirme Kuralı yönetici sayfası aracılığıyla yapılandırıldıysa, maksimum yorum uzunluğu gibi yapılandırmalar burada uygulanır.
Yorum widget'ında görüntülenecek şekilde göndermek için gereken minimum veriler aşağıdaki gibidir:

Daha gerçekçi bir istek şöyle görünebilir:



PATCH /api/v1/comments/:id 
Bu API uç noktası tek bir yorumu güncelleme olanağı sağlar.
Notlar:
- İstenirse bu API, yorum widget'ını "live" olarak güncelleyebilir (bu, temel
creditsCostu1'den2'ye yükseltir).- Bu, sayfalar arasında yorumları "live" olarak taşımayı sağlayabilir (
urlIddeğiştirerek). - Sayfalar önceden hesaplandığı ve bunun CPU açısından maliyetli olduğu için taşımalar ek
2kredi ücreti gerektirir.
- Bu, sayfalar arasında yorumları "live" olarak taşımayı sağlayabilir (
- Oluşturma API'sinin aksine, bu API e-posta sağlansa bile sistemimizde otomatik olarak kullanıcı nesneleri oluşturmaz.
- Bu API ile güncellenen yorumlar istenirse hala spam için kontrol edilebilir.
- Maksimum yorum uzunluğu gibi yapılandırmalar, eğer Customization Rule yönetim sayfası üzerinden yapılandırıldıysa burada uygulanır.
- Kullanıcıların yorum metinlerini güncellemelerine izin vermek için istek gövdesinde yalnızca
comment'i belirtebilirsiniz. OluşancommentHTML'i biz oluşturacağız.- Hem
commenthem decommentHTMLtanımlarsanız HTML otomatik olarak oluşturulmaz. - Kullanıcı yeni metnine mentions veya hashtags eklerse, bu yine
POSTAPI'si gibi işlenecektir.
- Hem
- Bir yorumda
commenterEmail'i güncellerken, ayrıcauserId'yi belirtmek en iyisidir. Aksi takdirde, bu e-postaya sahip kullanıcının kiracınıza ait olduğundan emin olmalısınız; aksi halde istek başarısız olur. - Hedef yorum kilitliyse (
isLocked: true), istekcode: 'locked'ile reddedilir. Önce yorumu kilidini açın, güncelleyin, ardından isterseniz tekrar kilitleyin.



DELETE /api/v1/comments/:id 
Bu API uç noktası bir yorumu silme yeteneği sağlar.
Notlar:
- Bu API istenirse yorum bileşenini "canlı" olarak güncelleyebilir (bu
creditsCost'u1'den2'ye çıkarır). - Bu API tüm alt yorumları silecektir.
- Hedef yorum kilitliyse (
isLocked: true), istekcode: 'locked'ile reddedilir. Önce yorumu kilidini açın, sonra silin.



POST /api/v1/comments/:id/flag 
Bu API uç noktası, belirli bir kullanıcı için bir yorumu işaretleme (flag) yeteneği sağlar.
Notes:
- Bu çağrı her zaman bir kullanıcı bağlamında yapılmalıdır. Kullanıcı FastComments.com Kullanıcısı, SSO Kullanıcısı veya Tenant Kullanıcısı olabilir.
- Eğer bir flag-to-hide eşiği ayarlanmışsa, yorum tanımlanan sayıda işaretlendikten sonra canlı olarak otomatik gizlenecektir.
- Otomatik olarak onayı kaldırıldıktan (gizlendikten) sonra - yorum yalnızca bir yönetici veya moderatör tarafından yeniden onaylanabilir. İşaretin kaldırılması yorumu yeniden onaylamaz.

Anonim işaretleme için bir anonUserId belirtmemiz gerekir. Bu, anonim oturumu temsil eden bir kimlik veya rastgele bir UUID olabilir. Bu, bir kullanıcı giriş yapmamış olsa bile yorumları işaretleme ve işaret kaldırmayı desteklememizi sağlar. Bu şekilde, aynı anonUserId ile yorumlar alındığında yorum işaretlenmiş olarak işaretlenebilir.



POST /api/v1/comments/:id/un-flag 
Bu API uç noktası, belirli bir kullanıcı için bir yorumun bayrağını kaldırma yeteneği sağlar.
Notlar:
- Bu çağrı her zaman bir kullanıcı bağlamında yapılmalıdır. Kullanıcı, FastComments.com Kullanıcısı, SSO Kullanıcısı veya Kiracı (Tenant) Kullanıcısı olabilir.
- Bir yorum otomatik olarak onaydan çıkarıldıktan (gizlendikten) sonra — yorum yalnızca bir yönetici veya moderatör tarafından yeniden onaylanabilir. Bayrağın kaldırılması yorumu yeniden onaylamaz.

Anonim bayraklama için bir anonUserId belirtmeliyiz. Bu, anonim oturumu temsil eden bir kimlik olabilir veya rastgele bir UUID olabilir.



POST /api/v1/comments/:id/block 
Bu API uç noktası, belirli bir yorumu yazan kullanıcıyı engelleme yeteneği sağlar. FastComments.com Kullanıcıları, SSO Kullanıcıları ve Tenant Kullanıcıları tarafından yazılan yorumlardan engellemeyi destekler.
Ayrıca, bu işlem gerçekleştirildikten sonra istemcide potansiyel olarak görünür başka hangi yorumların engellenmesi/engeli kaldırılması gerektiğini kontrol etmek için bir commentIdsToCheck gövde parametresini destekler.
Notlar:
- Bu çağrı her zaman bir kullanıcı bağlamında yapılmalıdır. Kullanıcı FastComments.com Kullanıcısı, SSO Kullanıcısı veya Tenant Kullanıcısı olabilir.
- İstek içindeki
userId, engelleme işlemini yapan kullanıcıdır. Örneğin:User A,User B'yi Engellemek istiyor.userId=User AveUser Bnin yazdığı yorum kimliğini gönderin. - Tamamen anonim yorumlar (kullanıcı kimliği yok, e‑posta yok) engellenemez ve bir hata döndürülecektir.

Anonim engelleme için bir anonUserId belirtmeliyiz. Bu, anonim oturumu temsil eden bir kimlik veya rastgele bir UUID olabilir.
Bu, bir kullanıcı oturum açmamış olsa bile aynı anonUserId ile yorumlar alınarak yorumları engellemeyi desteklememizi sağlar.



POST /api/v1/comments/:id/un-block 
Bu API uç noktası, belirli bir yorumu yazmış bir kullanıcının engellemesini kaldırma yeteneği sağlar. FastComments.com Users, SSO Users, and Tenant Users tarafından yazılmış yorumların engellemesini kaldırmayı destekler.
Bu işlem gerçekleştirildikten sonra istemcideki diğer potansiyel olarak görünür yorumların engellenip/engellenmeyeceğini kontrol etmek için commentIdsToCheck gövde parametresini destekler.
Notlar:
- Bu çağrı her zaman bir kullanıcı bağlamında yapılmalıdır. Kullanıcı FastComments.com User, SSO User, veya Tenant User olabilir.
- İstek içindeki
userId, engelleme kaldırma işlemini yapan kullanıcıdır. Örneğin:User AUser B'nin engellemesini kaldırmak istiyor.userId=User AveUser Btarafından yazılan yorumun id'sini gönderin. - Tamamen anonim yorumlar (kullanıcı kimliği yok, e-posta yok) engellenemez ve bir hata döndürülecektir.




E-posta Şablonu Yapısı 
Bir EmailTemplate nesnesi, bir kiracı için özel bir e-posta şablonunun yapılandırmasını temsil eder.
Sistem, kullanılacak e-posta şablonunu şu yolla seçer:
- Türünü belirten tanımlayıcı, buna
emailTemplateIddiyoruz. Bunlar sabittir. domain. İlgili nesnenin (ör. birComment) bağlı olduğu domain için önce bir şablon bulmaya çalışacağız; eşleşme bulunmazsa domain'in null veya*olduğu bir şablon arayacağız.
EmailTemplate nesnesinin yapısı aşağıdaki gibidir:

Notlar
- Geçerli
emailTemplateIddeğerlerini/definitionsuç noktasından alabilirsiniz. /definitionsuç noktası ayrıca varsayılan çevirileri ve test verilerini içerir.- Geçersiz yapı veya test verileri durumunda şablonlar kaydedilemez.
GET /api/v1/email-templates/:id 
Bireysel EmailTemplates, karşılık gelen id ile alınabilir (NOT emailTemplateId).



GET /api/v1/email-templates 
Bu API, page sorgu parametresiyle sağlanan sayfalandırma kullanır. EmailTemplate'ler, createdAt sonra id sırasına göre, her sayfada 100 öğe olacak şekilde döndürülür.



PATCH /api/v1/email-templates/:id 
Bu API uç noktası, yalnızca id'yi ve güncellenecek özellikleri belirterek bir e-posta şablonunu güncelleme olanağı sağlar.
Bir şablon oluştururken uygulanan aynı doğrulamalar da geçerlidir, örneğin:
- Şablonun render olması gerekir. Bu, her güncellemede kontrol edilir.
- Aynı alan adı için çoğaltılmış şablonlara sahip olamazsınız (aksi takdirde biri sessizce yoksayılır).



POST /api/v1/email-templates 
Bu API uç noktası e-posta şablonları oluşturma olanağı sağlar.
Notlar:
- Aynı domain ile aynı
emailTemplateId'ye sahip birden fazla şablon olamaz. - Ancak bir joker şablon (
domain=*) ile aynıemailTemplateIdiçin alan adı özel bir şablon birlikte bulunabilir. domainbelirtmek yalnızca farklı alan adlarınız varsa veya test için belirli şablonlar kullanmak istiyorsanız önemlidir (domainset tolocalhostetc).domainbelirtirseniz, bunun birDomainConfigile eşleşmesi gerekir. Hata durumunda geçerli alan adlarının bir listesi sağlanır.- Şablon sözdizimi EJS'tir ve 500ms zaman aşımı ile render edilir. Render süresi için P99 <5ms'dir, bu nedenle 500ms'ye ulaşıyorsanız bir sorun var demektir.
- Kaydetmek için şablonunuz verilen
testDataile render olmalıdır. Render hataları birleştirilir ve kontrol panelinde raporlanır (yakında API üzerinden de kullanılabilir).
Bir şablon eklemek için gereken minimum veriler aşağıdaki gibidir:

Site başına şablonlar isteyebilirsiniz; bu durumda domain tanımlarsınız:



POST /api/v1/email-templates/render 
Bu API uç noktası e-posta şablonlarını önizleme olanağı sağlar.



DELETE /api/v1/email-templates/:id 
Bu rota, bir EmailTemplate'in id ile kaldırılmasını sağlar.



Akış Gönderisi Yapısı 
A FeedPost nesnesi, FastComments akışındaki bir gönderiyi temsil eder. Bir akış, kendi yorum dizileriyle birlikte gönderilerin bir akışı olup, Feed widget'ı tarafından render edilir. Her gönderinin bir yazarı, isteğe bağlı zengin içeriği, medyası ve bağlantıları vardır ve bir akışın filtrelenebilmesi için etiketlenebilir.
FeedPost nesnesinin yapısı aşağıdaki gibidir:

Notlar:
- Bu alanların bazıları
READONLYolarak işaretlenmiştir - bunlar API tarafından döndürülür ancak ayarlanamaz. - Bir gönderideki yorumlar,
urlId'sipost:ve ardından gönderinin_id'si gelen normal yorumlardır. Bu değeri Yorum API'si ile kullanarak bir gönderide yorum okuyabilir veya oluşturabilirsiniz.
GET /api/v1/feed-posts 
Bir akıştaki gönderileri, en yenilerden başlayarak alır. Sayfalama imleç tabanlıdır: bir sonraki sayfayı almak için aldığınız son gönderinin _id değerini afterId olarak gönderin.
Dönen her on gönderi için bir kredi, minimum bir kredi olmak üzere maliyetlidir.



POST /api/v1/feed-posts 
Bu yol tek bir FeedPost oluşturur. Her gönderinin bir yazarı vardır, bu yüzden fromUserId gereklidir ve hesabınızdaki mevcut bir FastComments veya SSO kullanıcısının kimliği olmalıdır.



PATCH /api/v1/feed-posts/:id 
Bu rota tek bir FeedPost günceller. Değiştirmek istediğiniz alanları yalnızca gönderin.



Etiket Yapısı 
Bir HashTag nesnesi, bir kullanıcı tarafından bırakılabilecek bir etiketi temsil eder. HashTags harici bir içeriğe bağlamak veya ilişkili yorumları birbirine bağlamak için kullanılabilir.
HashTag nesnesinin yapısı aşağıdaki gibidir:

Notlar:
- Bazı API uç noktalarında hashtag'in URL içinde kullanıldığını göreceksiniz. Değerleri URI ile kodlamayı unutmayın. Örneğin,
#yerine%23olarak temsil edilmelidir. - Bu alanların bazıları
READONLYolarak işaretlenmiştir - bunlar API tarafından döndürülür ancak ayarlanamaz.
GET /api/v1/hash-tags 
Bu API, page sorgu parametresi ile sağlanan sayfalama kullanır. HashTag'ler tage göre sıralanmış şekilde, 100 öğelik sayfalar halinde döndürülür.



PATCH /api/v1/hash-tags/:tag 
Bu rota tek bir HashTag'ı güncelleme olanağı sağlar.



POST /api/v1/hash-tags 
Bu rota tek bir HashTag ekleme yeteneği sağlar.



POST /api/v1/hash-tags/bulk 
Bu yol aynı anda en fazla 100 HashTag nesnesi ekleme yeteneği sağlar.



DELETE /api/v1/hash-tags/:tag 
Bu rota, sağlanan etiket ile bir HashTag kullanıcısının kaldırılmasını sağlar.
Otomatik HashTag oluşturma devre dışı bırakılmadığı sürece, kullanıcılar yorum yaparken hashtag'i sağlayarak hashtag'leri yeniden oluşturabilir.



GET /api/v1/me 
İsteği yapan kimlik bilgilerini tanımlar: ait olduğu kiracı ve OAuth erişim belirteçleri için uygulamayı yetkilendiren kullanıcı. Entegrasyonlar bunu bir bağlantıyı test etmek ve etiketlemek için kullanır.
Bir API anahtarıyla yanıt yalnızca kiracıyı tanımlar. Bir OAuth taşıyıcı belirteciyle ayrıca yetkilendiren kullanıcı ve verilen kapsamlar da taşınır.


Moderatör Yapısı 
Bir Moderator nesnesi, bir moderatörün yapılandırmasını temsil eder.
Üç tür moderatör vardır:
isCommentModeratorAdminbayrağına sahip Yönetici kullanıcılar.isCommentModeratorAdminbayrağına sahip SSO Kullanıcıları.- Moderatör olarak davet edilen normal yorumcular veya FastComments.com kullanıcıları.
Moderator yapısı, 3 numaralı kullanım senaryosunun Moderasyon Durumunu temsil etmek için kullanılır.
Bir kullanıcıyı API üzerinden moderatör olarak davet etmek isterseniz, bir Moderator oluşturarak ve onları inviting (davet ederek) Moderator API'sini kullanın.
Kullanıcının FastComments.com hesabı yoksa, davet e-postası kurulum yapmasına yardımcı olacaktır. Zaten bir hesabı varsa, kiracınıza (tenant) moderasyon erişimi verilecek ve Moderator nesnesinin userId alanı, kullanıcısını işaret edecek şekilde güncellenecektir. Bu durumda kullanıcı onlara ait olduğu ve FastComments.com tarafından yönetildiği için, kullanıcısına API erişiminiz olmayacaktır.
Kullanıcının hesabının tam yönetimine ihtiyacınız varsa, ya SSO kullanmanızı ya da onları bir Tenant User olarak eklemenizi ve ardından istatistiklerini takip etmek için bir Moderator nesnesi eklemenizi öneririz.
Moderator yapısı, 1 ve 2 numaralı kullanım senaryoları için bir istatistik takip mekanizması olarak kullanılabilir. Kullanıcıyı oluşturduktan sonra, userId alanı tanımlanmış bir Moderator nesnesi ekleyin; böylece istatistikleri Comment Moderators Page sayfasında takip edilecektir.
Moderator nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/moderators/:id 
Bu rota belirtilen id'ye sahip tek bir moderatörü döndürür.



GET /api/v1/moderators 
Bu API, skip sorgu parametresi tarafından sağlanan sayfalandırmayı kullanır. Moderators, createdAt ve id'ye göre sıralanmış olarak 100lük sayfalar halinde döndürülür.
Maliyet, döndürülen moderatör sayısına göre belirlenir; döndürülen moderatörler için maliyet 1 credit per 10'dur.



PATCH /api/v1/moderators/:id 
Bu API uç noktası, bir Moderator'ı id ile güncelleme olanağı sağlar.
Bir Moderator'ın güncellenmesi aşağıdaki kısıtlamalara tabidir:
- Bir
Moderatorgüncellenirken, aşağıdaki değerler sağlanamaz:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Bir
userIdbelirtildiğinde, o kullanıcı mevcut olmalıdır. - Bir
userIdbelirtildiğinde, sorgu parametrelerinde belirtilen aynıtenantId'e ait olmalıdırlar. - Aynı tenant içinde iki moderator aynı
emailile eklenemez. - Bir
Moderatorile ilişkilitenantId'yi değiştiremezsiniz.



POST /api/v1/moderators 
Bu rota tek bir Moderator ekleme yeteneği sağlar.
Bir Moderator oluşturmanın aşağıdaki kısıtlamaları vardır:
- Bir
nameveemailher zaman sağlanmalıdır. BiruserIdisteğe bağlıdır. - Aşağıdaki değerler
Moderatoroluşturulurken sağlanamaz:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Bir
userIdbelirtildiğinde, o kullanıcı mevcut olmalıdır. - Bir
userIdbelirtildiğinde, sorgu parametrelerinde belirtilen aynıtenantId'ye ait olmalıdır. - Aynı tenant içindeki iki moderatör aynı
emailile eklenemez.
Sadece e-postasını bildiğimiz bir kullanıcı için bir Moderator oluşturabiliriz:

Veya moderasyon istatistiklerini takip etmek için tenant'ımıza ait bir kullanıcı için bir Moderator oluşturabiliriz:



POST /api/v1/moderators/:id/send-invite 
Bu rota tek bir Moderator davet etme imkânı sağlar.
Bir Moderator'a davet e-postası göndermek için aşağıdaki kısıtlamalar vardır:
Moderatorzaten mevcut olmalıdır.fromName100 characters'den uzun olamaz.
Notlar:
- Sağlanan e-postaya sahip bir kullanıcı zaten varsa, kiracınızın yorumlarını yönetmesi için davet edilir.
- Sağlanan e-postaya sahip bir kullanıcı yoksa, davet bağlantısı onları hesap oluşturmaya yönlendirecektir.
- Davet
30 dayssonra sona erecektir.
Sadece e-postasını bildiğimiz bir kullanıcı için bir Moderator oluşturabiliriz:

Bu, Bob at TenantName is inviting you to be a moderator... gibi bir e-posta gönderecektir.


DELETE /api/v1/moderators/:id 
Bu rota, bir Moderator'ın id ile kaldırılmasını sağlar.



Bildirim Sayısı Yapısı 
Bir NotificationCount nesnesi, bir kullanıcının okunmamış bildirim sayısını ve meta verilerini temsil eder.
Okunmamış bildirim yoksa, kullanıcı için bir NotificationCount bulunmaz.
NotificationCount nesneleri otomatik olarak oluşturulur ve API aracılığıyla oluşturulamaz. Ayrıca bir yıl sonra sona ererler.
Bir kullanıcının okunmamış bildirim sayısını, kullanıcının NotificationCount kaydını silerek temizleyebilirsiniz.
NotificationCount nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/notification-count/:user_id 
Bu rota kullanıcı kimliğine göre tek bir NotificationCount döndürür. SSO ile, kullanıcı kimliği <tenant id>:<user id> formatındadır.
Okunmamış bildirim yoksa bir NotificationCount olmayacaktır - bu nedenle 404 alırsınız.
Bu, notifications/count'den farklıdır: çok daha hızlıdır, ancak filtrelemeye izin vermez.



DELETE /api/v1/notification-count/:user_id 
Bu rota, kullanıcı kimliğine göre tek bir NotificationCount'ı siler. SSO ile, kullanıcı kimliği <tenant id>:<user id> biçimindedir.
Bu, kullanıcının okunmamış bildirim sayısını temizler (yorum widget'ındaki kırmızı zil solacak ve sayı kaybolacaktır).



Bildirim Yapısı 
Bir Notification nesnesi, bir kullanıcı için bir bildirimi temsil eder.
Notification nesneleri otomatik olarak oluşturulur ve API aracılığıyla oluşturulamaz. Ayrıca bir yıl sonra sona ererler.
Bildirimler silinemez. Ancak viewed değerini false olarak ayarlamak için güncellenebilirler ve viewed alanına göre sorgulama yapabilirsiniz.
Bir kullanıcı, bildirimdeki optedOut alanını true olarak ayarlayarak belirli bir yorum için bildirimlerden çıkabilir. false olarak ayarlayarak yeniden abone olabilirsiniz.
Farklı bildirim türleri vardır - relatedObjectType ve type alanlarına bakın.
Bildirimlerin oluşturulma şekilleri oldukça esnektir ve birçok senaryo tarafından tetiklenebilir (bkz. NotificationType).
Bugün itibarıyla, bir Notification nesnesinin varlığı, bir e-postanın gönderildiği veya gönderilmesi gerektiği anlamına gelmez. Bunun yerine, bildirimler bildirim akışı ve ilgili entegrasyonlar için kullanılır.
Notification nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/notifications 
Bu rota en yeni önce olacak şekilde createdAt'e göre sıralanmış en fazla 30 Notification nesnesi döndürür.
userId ile filtreleyebilirsiniz. SSO ile, kullanıcı kimliği <tenant id>:<user id> formatındadır.



GET /api/v1/notifications/count 
Bu rota, bildirim sayısını count parametresi altında içeren bir nesne döndürür.
Bu, /notification-count/'den daha yavaştır ve kredi maliyeti iki katıdır, ancak daha fazla boyuta göre filtrelemeye izin verir.
/notifications uç noktasındaki userId gibi aynı parametrelere göre filtreleyebilirsiniz. SSO ile kullanıcı kimliği <tenant id>:<user id> formatındadır.




PATCH /api/v1/notifications/:id 
Bu API uç noktası bir Notification'ı id ile güncelleme yeteneği sağlar.
Bir Notification'ın güncellenmesi aşağıdaki kısıtlamalara tabidir:
- Sadece aşağıdaki alanları güncelleyebilirsiniz:
viewedoptedOut



Sayfa Tepkileri Genel API 
Page Reacts, kullanıcılarınızın bir sayfayı beğenmesini veya kendi tepki görselleri setinizle tepki vermesini sağlar. Page Reacts widget'ı ve Floating Likes widget'ı bu endpoint'ler üzerine kuruludur ve kendi beğenme butonunuzu oluşturmak için bunları kendiniz çağırabilirsiniz.
Bu kılavuzun geri kalanının aksine, Page Reacts endpoint'leri herkese açıktır. Bunlar kullanıcılarınızın tarayıcılarından çağrılır, API anahtarı gerektirmez ve API kredisi harcamaz. Her tepki, isteği yapan kullanıcıya aittir, dolayısıyla bir kullanıcı yalnızca kendi tepkisini ekleyebilir veya kaldırabilir.
İki endpoint seti vardır:
/page-reacts/v1/likes/:tenantId- kullanıcı başına sayfa başına tek bir "beğeni". Bunları bir beğenme butonu için kullanın./page-reacts/v2/:tenantId- sayfa başına birden fazla tepki, her biri sizin seçtiğiniz kısa biridile tanımlanır (örneğinheartveyalaugh).
Her ikisi de SDK'larımızda PublicApi'nin bir parçası olarak mevcuttur; örneğin JavaScript SDK'sında getV1PageLikes, createV1PageReact ve deleteV1PageReact.
Kimin Tepki Verdiğini Gösterme
Beğenen veya tepki veren kullanıcıları, kullanıcı adları ve avatarlarıyla birlikte en yeniden eskiye doğru almak için GET endpoint'lerine includeUserInfo=public parametresini iletin. Profil etkinliğini gizli yapmış kullanıcılar ve anonim kullanıcılar bu listede yer almaz. En fazla 100 tepki döndürülür.
SSO kullanıcıları, SSO payload'ınız isProfileActivityPrivate değerini false olarak ayarlamadıkça gizli profil etkinliğiyle oluşturulur; bu nedenle bu listelerde görünmesini istediğiniz kullanıcılar için bunu ayarlayın.
SSO gerektiren sayfalarda, yalnızca sayfayı görüntüleyebilen SSO kullanıcıları kimin tepki verdiğini listeleyebilir. Diğerleri sso-required veya page-forbidden koduyla bir 403 hatası alır.
Sunucunuzdan, GET /api/v1/pages/likes ve GET /api/v1/pages/reacts endpoint'leri bir API anahtarıyla aynı listeleri döndürür ve ayrıca gizli profilli kullanıcıları dahil etmek için includeUserInfo=include-private parametresini kabul eder.
Kullanıcıyı Tanımlama
Tepkiler, isteği yapan kullanıcıya bağlıdır:
- SSO kullanıcıları: yorum widget'ına verdiğiniz aynı SSO nesnesinin URI kodlanmış JSON'u olarak ayarlanmış
ssosorgu parametresini iletin. Bkz. SSO. - Anonim kullanıcılar:
ssoparametresi ve FastComments oturumu olmadığında, sunucu tarayıcıya FastComments oturum çerezinde saklanan anonim bir id atar. Çerezin istekler arasında korunması için isteklericredentials: 'include'ile gönderin. Üçüncü taraf çerezlerini engelleyen tarayıcılar anonim id'yi korumaz, bu nedenle her kullanıcının güvenilir bir şekilde tanınması gerekiyorsa SSO kullanın.
urlId
urlId, yorumlarda olduğu gibi sayfayı tanımlar. Beğenilerin ve yorumların aynı sayfada sayılması için yorum widget'ına verdiğiniz aynı urlId'yi kullanın. URI kodlamasını yapmayı unutmayın.

GET /page-reacts/v1/likes/:tenantId 
Bir sayfadaki beğeni sayısını ve mevcut kullanıcının beğenip beğenmediğini döndürür. Henüz var olmayan sayfalar likeCount olarak 0 döndürür.
includeUserInfo=public parametresini göndererek sayfayı beğenen kullanıcıları da alabilirsiniz, en yeni önce. Özel profil etkinliği olan kullanıcılar ve anonim kullanıcılar dışarıda bırakılır ve en fazla 100 beğeni sorgulanır. Burada sadece public kabul edilir; include-private bir 422 döndürür ve bir API anahtarı ile GET /api/v1/pages/likes üzerinden kullanılabilir. SSO gerektiren sayfalarda, includeUserInfo sayfayı görüntüleyemeyen kullanıcılar için bir 403 döndürür.



POST /page-reacts/v1/likes/:tenantId 
Mevcut kullanıcı olarak bir sayfayı beğenir. Her kullanıcı bir sayfayı bir kez beğenebilir: tekrar beğenmek already-liked kodu ile başarılı olur ve sayıyı değiştirmez.
Sayfa henüz yoksa oluşturulur. Sayfanın başlığını ayarlamak veya güncellemek için title parametresini gönderin.



DELETE /page-reacts/v1/likes/:tenantId 
Mevcut kullanıcının bir sayfadaki beğenisini kaldırır. Kullanıcı sayfayı beğenmemişse, istek not-liked kodu ile başarılı olur ve sayım değişmez.



GET /page-reacts/v2/:tenantId 
Bir sayfadaki her tepkinin sayısını ve mevcut kullanıcının eklediği tepkileri döndürür.
includeUserInfo=public parametresini göndererek, tepki veren kullanıcıları da alabilirsiniz; her tepki için tepki kimliğiyle bir giriş, en yenisi ilk. Özel profil etkinliği olan kullanıcılar ve anonim kullanıcılar dışarıda bırakılır ve en fazla 100 tepki aranır. Burada yalnızca public kabul edilir; include-private bir 422 hatası döndürür ve bir API anahtarıyla GET /api/v1/pages/reacts üzerinden kullanılabilir. SSO gerektiren sayfalarda, includeUserInfo sayfayı görüntüleyemeyen kullanıcılar için bir 403 döndürür.



GET /page-reacts/v2/:tenantId/list 
Bir sayfaya tepki ekleyen kullanıcıların adlarını alfabetik olarak döndürür. En fazla 100 tepki aranır ve anonim kullanıcılar ile özel profil etkinliği olan kullanıcılar dahil edilmez. SSO gerektiren sayfalarda, sayfayı görüntüleyemeyen kullanıcılara sso-required veya page-forbidden kodlu bir 403 hatası döner.
Avatarları ve kullanıcı kimliklerini de almak için includeUserInfo=public parametresiyle GET /page-reacts/v2/:tenantId isteğini kullanın.



POST /page-reacts/v2/:tenantId 
Mevcut kullanıcı olarak bir sayfaya bir reaksiyon ekler. Bir kullanıcı her reaksiyon kimliğini bir kez ekleyebilir: tekrar eklemek already-reacted kodu ile başarılı olur ve sayıyı değiştirmez. Bir kullanıcı aynı sayfaya birkaç farklı reaksiyon ekleyebilir.
Reaksiyon kimlikleri sizin tarafınızdan seçilir ve en fazla 36 karakter olabilir. Sayfa henüz yoksa oluşturulur. Sayfanın başlığını ayarlamak veya güncellemek için title parametresini gönderin.



DELETE /page-reacts/v2/:tenantId 
Mevcut kullanıcının bir sayfadaki tepkilerinden birini kaldırır. Kullanıcı bu tepkiyi eklememişse, istek no-react kodu ile başarılı olur ve sayım değişmez.



Sayfa Yapısı 
Bir Page nesnesi, birçok yorumun ait olabileceği sayfayı temsil eder. Bu ilişki şu şekilde tanımlanır
urlId.
Bir Page, sayfa başlığı, yorum sayısı ve urlId gibi bilgileri saklar.
Page nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/pages 
Şu anda yalnızca hesabınıza bağlı tüm sayfaları (veya /by-url-id ile tek bir sayfayı) alabilirsiniz. Daha ayrıntılı arama isterseniz, bize ulaşın.



Yararlı İpucu
Comment API'si bir urlId gerektirir. Hangi urlId değerlerinin size sunulduğunu görmek için önce Pages API'sini çağırabilirsiniz.
GET /api/v1/pages/by-url-id 
Bireysel sayfalar ilgili urlId ile getirilebilir. Bu, sayfa başlıklarını veya yorum sayılarını aramak için faydalı olabilir.



Yararlı İpucu
urlId gibi değerleri URI Encode (URI Kodlama) yapmayı unutmayın.
GET /api/v1/pages/likes 
Bir sayfadaki beğeni sayısını ve isteğe bağlı olarak beğenen kullanıcıları, en yeni önce döndürür. Bu, GET /page-reacts/v1/likes/:tenantId API'sinin sunucu tarafı sürümüdür.
includeUserInfo hangi kullanıcıların döndürüleceğini kontrol eder:
publicprofil etkinliğini gizli yapan kullanıcıları dışarı bırakır.include-privateonları dahil eder. Bu seçeneği yalnızca liste halka gösterilmeyecekse kullanın.
Anonim kullanıcılar hiçbir zaman dahil edilmez ve en fazla 100 beğeni sorgulanır. Var olmayan sayfalar likeCount değeri 0 ve boş bir users listesi döndürür.



Faydalı İpucu
urlId gibi değerleri URI Encode etmeyi unutmayın.
GET /api/v1/pages/reacts 
Bir sayfadaki her reaksiyonun sayısını ve isteğe bağlı olarak reaksiyon gösteren kullanıcıları, reaksiyon kimliğiyle bir giriş olarak, en yeni önce olacak şekilde döndürür. Bu, GET /page-reacts/v2/:tenantId isteğinin sunucu tarafı versiyonudur.
includeUserInfo hangi kullanıcıların döndürüleceğini kontrol eder:
publicprofil etkinliğini gizli yapan kullanıcıları dışarı bırakır.include-privateonları dahil eder. Bu seçeneği yalnızca liste halka gösterilmeyecekse kullanın.
Anonim kullanıcılar hiçbir zaman dahil edilmez ve en fazla 100 reaksiyon aranır. Var olmayan sayfalar counts döndürmez ve boş bir users listesi verir.



Faydalı İpucu
urlId gibi değerleri URI Encode etmeyi unutmayın.
PATCH /api/v1/pages/:id 
Bu rota tek bir Page'i güncelleme yeteneği sağlar. İlgili yorumlar da güncellenecektir.



Not
Sayfa nesnesindeki bazı parametreler otomatik olarak güncellenir. Bunlar sayaçlar (counts) ve title öznitelikleridir. Sayaçlar API aracılığıyla güncellenemez
çünkü bunlar hesaplanan değerlerdir. Sayfanın title alanı API ile ayarlanabilir, ancak yorum bileşeni aynı urlId'ye sahip ve farklı bir sayfa başlığı olan bir sayfada kullanılırsa üzerine yazılır.
POST /api/v1/pages 
Bu API uç noktası, sayfa oluşturma yeteneği sağlar.
Yaygın kullanım senaryolarından biri erişim kontrolüdür.
Notlar:
- Bir yorum dizisine yorum yaptıysanız veya bir
Commentoluşturmak için API'yi çağırdıysanız, zaten birPagenesnesi oluşturmuşsunuzdur! Bunu, yorum widget'ına iletilen aynıurlIddeğerini geçirerek/by-url-idPagerotası üzerinden getirmeyi deneyebilirsiniz. Pageyapısı bazı hesaplanmış değerler içerir. Şu anda bunlarcommentCountverootCommentCountdeğerleridir. Bunlar otomatik olarak doldurulur ve API aracılığıyla ayarlanamaz. Bunu denemek, API'nin bir hata döndürmesine neden olur.



DELETE /api/v1/pages/:id 
Bu rota, id ile tek bir sayfanın silinmesini sağlar.
Aynı urlId'ye sahip bir sayfanın yorum widget'ı ile etkileşimde bulunmanın Page'i sorunsuzca yeniden oluşturacağını unutmayın.



POST /api/v1/pages/migrations 
Bu rota, yorumları ve sayfaları bir urlId veya alan adından diğerine taşır, kontrol panelindeki Domain Migration tool ile aynı şekilde. İstek başına en fazla 100 göç gönderilebilir. Verilen sırayla çalışırlar, yani a'dan b'ye ardından b'den c'ye geçiş çalışır.
Her göçün bir type'ı vardır:
urlIdtam olarak verilenurlId'ye sahip sayfayı taşır.post-1post-10ile eşleşmez.domainherurlIdveurliçindefromdeğerini bulur/değiştirir ve her yorumundomain'ini günceller. Her iki değer de bir alan adı olmalıdır, örneğinold.example.com.
Yorumlar, sayfa, sayfa tepkileri, oylar, bildirimler ve abonelikler hepsi taşınır. to konumunda zaten bir sayfa varsa, iki sayfa birleştirilir.
Göç bir toplu iş (batch job) olarak çalışır. Yanıt bir batchJobId içerir. İlerlemesini izlemek için GET /api/v1/batch-jobs/:id isteği gönderin. İş tamamlandığında her göç için bir sonuç ve 90 gün içinde POST /api/v1/pages/migrations/:undoId/undo adresine geçirebileceğiniz bir undoId bulunur.
İstek, kuyruğa alınmadan önce doğrulanır. Herhangi bir göç geçersizse, tüm istek 422 hatasıyla başarısız olur ve hiçbir şey çalışmaz.
Bir göçün kuyruğa alınması ücretsizdir. İş tamamlandığında, taşınan her 1000 yorum için 1 kredi, minimum 1 kredi ücretlendirilir.



Notlar
- Bir kiracı için işler bir seferde bir çalışır, en eski önce. İkinci bir göç, birincisinin bitmesini bekler.
- Yeni bir
urlIdilePATCH /api/v1/pages/:idsadece sayfayı değiştirir, yorumlarını değil. Bir sayfanın yorumlarını taşımak için bu rotayı kullanın.
POST /api/v1/pages/migrations/:undoId/undo 
Bu rota, bir POST /api/v1/pages/migrations işinden yapılan tüm göçleri tersine çevirir. Tamamlanmış göç işinden GET /api/v1/batch-jobs/:id ile undoId değerini alın. Bir undoId 90 gün boyunca ve yalnızca bir kez kullanılabilir.
Geri alma, göç gibi bir toplu iş (batch job) olarak çalışır ve yanıt, onun batchJobId değerini içerir. İş tamamlandığında, pageMigrationUndoResult şu bilgileri raporlar:
restored: göçten önceki değerlerine geri döndürülen kayıtlar.skipped: göçten sonra değiştiği veya artık mevcut olmayan kayıtlar bırakılır. Daha sonraki bir düzenleme asla üzerine yazılmaz.notRestorable: iki sayfa birleştirilirken veya yinelenen sayfa tepkileri kaldırılırken göç tarafından silinen kayıtlar. Bunlar geri getirilemez.
Göçler, en yenisinden başlayarak tersine çevrilir, bu yüzden a'dan b'ye, ardından b'den c'ye olan bir zincir a'ya geri sarılır. Kısmen başarısız olan bir göç işi bile geri alınabilir; bu, başarısız olmadan önce yaptığı değişiklikleri tersine çevirir.
Geri almayı kuyruğa eklemek ücretsizdir. İş tamamlandığında, geri getirilen her 1000 kayıt için 1 kredi, minimum 1 kredi ücretlendirilir.



Anket Yapısı 
A Poll bir yorumla ilişkilendirilir, kendi başına ayrı bir nesne değildir. Yorumla birlikte oluşturulur (POST /api/v1/comments bakınız), ya da daha sonra mevcut bir yoruma PUT /api/v1/polls/:commentId ile eklenir.
Oy sayıları anketin kendisinde tutulur, bu yüzden bir anketi okuduğunuzda sonuçları toplamanıza gerek kalmaz. Bu sayıları oluşturan bireysel oylar PollVote nesneleridir.
Her seçenek, anket oluşturulduğunda oluşturulan bir id'ye sahiptir. Bu id, oy vermek, bir seçeneğin etiketini değiştirmek ve anketi seçenekler eklenip çıkarıldığında PUT ettiğinizde bir seçeneği (ve oylarını) tutmak için kullanılır. Bir seçeneğe referans vermenin tek güvenli yolu budur - listenin konumuna asla başvurmayın.

Sınırlamalar
- Bir soru zorunludur ve en fazla 200 karakter olabilir.
- Bir anketin 2 ile 10 arasında seçeneği olabilir.
- Bir seçenek etiketi zorunludur, en fazla 100 karakter olabilir ve anket içinde (büyük/küçük harf duyarsız) benzersiz olmalıdır.
closesAtanket oluşturulduğunda gelecekte olmalıdır. Bir anketi hemen kapatmak için, geçmiş bir tarih ilePATCHyapın.
Site Ayarları
Anketler, Özelleştir Widget altında değiştirebileceğiniz site yapılandırmanıza uyar:
- Bir anket oluşturulmadan önce anketlerin etkinleştirilmiş olması gerekir, aksi takdirde API
polls-disabledyanıtını verir. - Oy verme, oturum açmış kullanıcılarla sınırlı olabilir; bu durumda yalnızca bir
anonUserIdile gönderilen oy,poll-login-requiredhatasıyla reddedilir.
GET /api/v1/polls/:commentId 
Bir yoruma eklenmiş anketi, mevcut oy sayılarıyla birlikte okur.
Anketler, yorum API'leri tarafından yorumun kendisinde de döndürülür, bu yüzden yalnızca sonuçları istiyor ve tüm yorumu istemiyorsanız bunu kullanın.



Anketi olmayan bir yorum, silinmiş bir yorum ve var olmayan bir yorum kimliği hepsi aynı şekilde yanıt verir, poll-not-found ile.
PUT /api/v1/polls/:commentId 
Mevcut bir yoruma anket ekler veya zaten sahip olduğu anketin tam durumunu ayarlar.
Gövde, tam anketi içerir ve gönderdiğiniz seçenekler, o sırayla anketin seçenekleri olur. Her seçenek, id'siyle eşleştirilir:
- Mevcut bir seçeneğin
id'siyle gönderilen bir seçenek, o seçeneği ve oylarını korur. Etiketi ve konumu, gönderdiğiniz şekilde güncellenir. idolmadan gönderilen bir seçenek eklenir ve oyları yoktur.- Bıraktığınız mevcut bir seçenek, üzerindeki oylarla birlikte kaldırılır.
totalVotesaynı miktarda azalır.
Bu yüzden bir seçenek eklemek için, mevcut seçenekleri id'leriyle birlikte yeni seçeneği id'siz gönderin. Bir seçeneği kaldırmak için, listeden onu çıkartarak gönderin. Seçenek id'leri, GET /api/v1/polls/:commentId isteğiyle dönen ankette bulunur.
Hiç id göndermemek, tüm seçenekleri değiştirir ve ankete daha önce verilen tüm oyları siler. Anketin oyları varsa, bu replaceVotes=true gerektirir; aksi takdirde API replace-votes-required yanıtını verir.
Diğer alanlar da değiştirilir: closesAt, privacy veya requireVoteToSeeResults bırakılırsa, varsayılan değerine sıfırlanır. Tek bir alanı değiştirmek ve diğerlerini olduğu gibi bırakmak için PATCH /api/v1/polls/:commentId kullanın.



Diğer Notlar
polliçinde olmayan biridya da aynıidiki kez verilirse,poll-invalidhatası oluşur. Anketi olmayan bir yorumda henüz seçenek id'leri yoktur, bu yüzden gönderilen her seçenekid'yi boş bırakmalıdır.- Anket gizliliği oylar alındıktan sonra daraltılabilir ancak genişletilemez.
- Bu API site ayarlarınızı uygular. Site veya sayfa için anketler etkinleştirilmemişse,
polls-disabledhatası döner. - Kilitli bir yorumun anketi değiştirilemez ve
lockedhatası verir. - Bağlı widget'lar canlı olarak güncellenir, böylece izleyiciler yeni anketi sayfayı yeniden yüklemeden görür.
PATCH /api/v1/polls/:commentId 
Bir anketi oylarını etkilemeden düzenler. Bunu sorudaki veya bir seçenekteki yazım hatasını düzeltmek, anketi kapatmak veya yeniden açmak, ya da kimin oy kullandığını görebileceğini değiştirmek için kullanın.
Seçenekler id'leriyle adreslenir ve bir PATCH adını verdiğiniz seçeneklerin etiketlerini değiştirir. Seçenek eklemek, kaldırmak veya yeniden sıralamak için,
tam seçenek listesini PUT /api/v1/polls/:commentId adresine gönderin: id'leriyle gönderdiğiniz seçenekler oylarını da korur.
Her alan isteğe bağlıdır, ancak en az bir tanesi sağlanmalıdır.




Diğer Notlar
- Ankette bulunmayan bir seçenek kimliği adlandırmak, sessizce hiçbir şey yapmaktan ziyade
poll-invalidhatası verir. - Etiketler, değiştirmediğiniz seçenekleri de sayarak, anket içinde benzersiz kalmalıdır.
- Anket oluştururken farklı olarak, burada
closesAtgeçmişte olabilir – bu, bir anketi hemen kapatmanın yoludur. - Anket gizliliği oylar alındıktan sonra daraltılabilir ancak genişletilemez.
- Kilitli bir yorumun anketi değiştirilemez ve
lockedhatası verir.
DELETE /api/v1/polls/:commentId 
Bir anketi, üzerindeki tüm oylarla birlikte yorumundan kaldırır. Yorum kendisi olduğu gibi bırakılır.
Yorumu silmek, anketini ve oylarını da kaldırır, bu yüzden bu yalnızca yorumu tutmak istediğinizde gerekir.



Anket Oy Yapısı 
A PollVote bir kişinin ankete verdiği cevaptır. Anketin kendisinde gösterilen sayımlar bu verilerle senkronizedir, bu yüzden toplamları değil, kim neye oy verdiğini bilmek istediğinizde bu verilere ihtiyacınız olur.
Bir seçmenin bir ankette en fazla bir oyu vardır. Tekrar oy vermek, ikinci bir oy eklemek yerine mevcut oyunu yeni seçeneğe taşır ve updatedAt bu olayın ne zaman gerçekleştiğini kaydeder.
voterId seçmen oturum açtığında userId'dir, aksi takdirde anonUserId'dir.

Gizlilik
Anketin privacy ayarı, yorum widget'ında olduğu gibi bu API'ye de aynı şekilde uygulanır:
- Anonymous (varsayılan): kimsenin birinin nasıl oy verdiğini göremez, bu yüzden oylar okunamaz.
GET /api/v1/poll-votesveGET /api/v1/poll-votes/:idpoll-anonymousile yanıt verir. Anketin sayımları hâlâGET /api/v1/polls/:commentIdüzerinden erişilebilir. - Admins and moderators: API anahtarınız sitenizin yöneticisine aittir, bu yüzden oyları okuyabilir.
- Everyone: oylar okunabilir.
Anket gizliliği oylar alındıktan sonra daraltılabilir ancak genişletilemez.
GET /api/v1/poll-votes 
Bir anketin sayımlarının arkasındaki bireysel oyları listeler, en eski oylardan başlayarak. Döndürülen her 100 oy için bir kredi.
Bir anket bir yoruma aittir, bu yüzden oylar bir seferde bir anket olarak okunur ve commentId gereklidir. voterId ile bir kişinin nasıl oy kullandığını kontrol ederek, ya da optionId ile belirli bir seçeneği seçen herkesi listeleyerek daha da daraltabilirsiniz.
Her çağrıda en fazla 1000 oy döndürülür. Daha fazlasını sayfalamak için skip kullanın.
Anketin privacy ayarı dikkate alınır: anonim bir anketteki oylar okunamaz ve istek poll-anonymous hatasıyla başarısız olur. Ayrıntılar için PollVote yapısına bakın.



Seçenek Başına Oyları Sayma
Sonuçları elde etmek için bunları toplamanıza gerek yok - anket kendi sayımlarını taşır. Bunun yerine anketi GET /api/v1/polls/:commentId ile okuyun ve kimin oy kullandığını bilmeniz gerektiğinde bu API'yi kullanın.
Bir Sayfadaki Tüm Anketler
Sayfa genelinde bir oy listesi yoktur. Tüm bir sayfayı raporlamak için yorumlarını GET /api/v1/comments ile alın; bu, her yorumun anketini ve sayımlarını döndürür ve ardından ilgilendiğiniz anketlerin oylarını okuyabilirsiniz.
GET /api/v1/poll-votes/:id 
Kimliğiyle tek bir anket oyunu okunur.
Anonim bir anketteki oy okunamaz ve istek poll-anonymous hatasıyla başarısız olur. Anketin privacy ayarının nasıl uygulandığını görmek için PollVote yapısına bakın.



POST /api/v1/poll-votes 
Bir ankette oy kaydeder.
Bir seçmenin bir ankette en fazla bir oyu vardır. Aynı seçmen için bu isteği tekrar çağırmak, ikinci bir oy eklemek yerine oyunu yeni seçeneğe taşır ve zaten seçtikleri seçeneğe oy vermek hiçbir şey yapmaz.
Yanıt ankete dahildir, böylece ikinci bir istek yapmadan güncellenmiş sayımları alırsınız.




Anonim Oylar
userId yerine anonUserId ayarlayarak oturum açmamış bir kişi için oy kaydedin. Bu kimlik herhangi bir kullanıcıyla eşleşmek zorunda değildir - sadece oturumu tanımlar, böylece aynı kişi iki kez sayılmaz.
Anonim oylama sitenizde etkinleştirilmiş olmalıdır. Oylama yalnızca oturum açmış kullanıcılarla sınırlıysa, sadece anonUserId içeren bir oy poll-login-required hatasıyla başarısız olur.
Anonim oylar ayrıca anket başına IP başına oran sınırlamasına tabidir, böylece bir kişinin oturumunu temizleyerek bir anketi doldurması engellenir. Sınırlamanın sizin sunucunuza değil, son kullanıcının ip'sine uygulanması için son kullanıcının ip'sini gönderin.
Diğer Notlar
userIdsitenizde mevcut bir kullanıcı olmalıdır. Başka bir siteye ait bir kullanıcı için oylar reddedilir.- Kapalı bir ankette oylama
poll-closedhatasıyla başarısız olur. - Bu API, anketteki sayımları günceller ve bağlı widget'lara canlı olarak gönderir.
DELETE /api/v1/poll-votes/:id 
Bir oyu geri alır. Oylamanın yapıldığı seçenek sayısını geri verir ve oy veren tekrar oy kullanabilir.



Diğer Notlar
- Aynı oy iki kez silindiğinde, ikinci seferde
not-foundyanıtı döner ve sayımlar değişmeden kalır. - Oy verildikten sonra anket değiştirildiyse, oy kaldırılır ancak sayım değişmez, çünkü yeni anket sıfırdan başlar.
Bekleyen Webhook Olayı Yapısı 
Bir PendingWebhookEvent nesnesi, bekleyen kuyruğa alınmış bir webhook olayını temsil eder.
PendingWebhookEvent nesneleri otomatik olarak oluşturulur ve API üzerinden manuel olarak oluşturulamaz. Ayrıca bir yıl sonra son kullanma tarihine ulaşırlar.
Silinebilirler, bu da görevi kuyruktan kaldırır.
Farklı olay türleri vardır - eventType (OutboundSyncEventType) ve type (OutboundSyncType) alanlarını kontrol edin.
Bu API'nin yaygın bir kullanım senaryosu özel izleme uygulamaktır. Belirli filtreler için bekleyen sayıyı yoklamak amacıyla /count uç noktasını düzenli olarak çağırmak isteyebilirsiniz.
PendingWebhookEvent nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/pending-webhook-events 
Bu rota, pendingWebhookEvents parametresi altında bekleyen webhook olaylarının bir listesini döndürür.
Bu API, skip parametresiyle sağlanan sayfalama kullanır. PendingWebhookEvents 100 öğe halinde sayfalanmış şekilde döndürülür, createdAt alanına göre en yeniler ilk sırada olacak şekilde sıralanır.



GET /api/v1/pending-webhook-events/count 
Bu rota, bekleyen webhook olaylarının sayısını count parametresi altında içeren bir nesne döndürür.
Aynı parametrelere göre /pending-webhook-events uç noktasıyla filtreleyebilirsiniz.



DELETE /api/v1/pending-webhook-events/:id 
Bu rota tek bir PendingWebhookEvent öğesinin silinmesine olanak tanır.
Toplu silme yapmanız gerekiyorsa, GET API'sini sayfalandırma ile çağırın ve ardından bu API'yi art arda çağırın.



SSO Kullanıcı Yapısı 
FastComments, kullanımı kolay bir SSO çözümü sunar. HMAC tabanlı entegrasyonla bir kullanıcının bilgilerini güncellemek, kullanıcının güncellenmiş bir payload ile sayfayı yüklemesi kadar basittir.
Ancak, uygulamanızın tutarlılığını artırmak için bir kullanıcıyı bu akışın dışında yönetmek istenebilir.
SSO User API, SSOUsers olarak adlandırdığımız nesneleri CRUD yapmanın bir yolunu sağlar. Bu nesneler normal Users nesnelerinden farklıdır ve tip güvenliği için ayrı tutulur.
SSOUser nesnesinin yapısı aşağıdaki gibidir:

SSO Kullanıcılarının Faturalandırılması
SSO kullanıcıları, izin bayraklarına göre farklı şekilde faturalandırılır:
- Normal SSO Kullanıcıları: Admin veya moderatör izinlerine sahip olmayan kullanıcılar normal SSO kullanıcıları olarak faturalandırılır
- SSO Adminler:
isAccountOwnerveyaisAdminAdminbayraklarına sahip kullanıcılar ayrı olarak SSO Admin olarak faturalandırılır (normal kiracı adminleriyle aynı ücret) - SSO Moderatörler:
isCommentModeratorAdminbayrağına sahip kullanıcılar ayrı olarak SSO Moderatör olarak faturalandırılır (normal moderatörlerle aynı ücret)
Önemli: Çift faturalandırmayı önlemek için sistem, SSO kullanıcılarını e-posta adresine göre normal kiracı kullanıcıları ve moderatörlerle otomatik olarak tekilleştirir. Bir SSO kullanıcısı, normal bir kiracı kullanıcısı veya moderatörle aynı e-postaya sahipse, iki kez faturalandırılmaz.
Erişim Kontrolü
Kullanıcılar gruplara ayrılabilir. groupIds alanı bu amaçla kullanılır ve isteğe bağlıdır.
@Mentions
Varsayılan olarak @mentions, @ karakteri yazıldığında diğer SSO kullanıcılarını aramak için username alanını kullanır. displayName kullanılıyorsa, displayName için bir eşleşme olduğunda username ile eşleşen sonuçlar yok sayılır ve @mention arama sonuçları displayName alanını kullanır.
Abonelikler
FastComments ile kullanıcılar, yorum widget'ındaki zil simgesine tıklayarak ve Subscribe'a tıklayarak bir sayfaya abone olabilir.
Normal bir kullanıcıda, bildirim ayarlarına göre onlara bildirim e-postaları göndeririz.
SSO Kullanıcılarında, geriye dönük uyumluluk için bunu ayırıyoruz. Kullanıcılara bu ek abonelik bildirim e-postaları yalnızca optedInSubscriptionNotifications değerini true olarak ayarlarsanız gönderilir.
Rozetler
badgeConfig özelliğini kullanarak SSO kullanıcılara rozet atayabilirsiniz. Rozetler, yorumlarda kullanıcının adının yanında görünen görsel göstergelerdir.
badgeIds- Kullanıcıya atanacak rozet kimlikleri dizisi. Bunlar tüm sayfalarda görünen global rozetlerdir. FastComments hesabınızda oluşturulmuş geçerli rozet kimlikleri olmalıdır. 30 rozetle sınırlıdır.pageBadgeIds- Geçerli sayfaya (urlId) özel rozet kimliklerinin isteğe bağlı dizisi. Bu rozetler yalnızca atandıkları sayfada görüntülenir. Farklı sayfalar, aynı kullanıcı için farklı sayfaya özel rozetlere sahip olabilir.override- True ise, mevcut tüm görüntülenen rozetler sağlananlarla değiştirilir. Global ve sayfaya özel rozetler bağımsız olarak geçersiz kılınır — global rozetleri geçersiz kılmak sayfaya özel rozetleri etkilemez, tersi de geçerlidir. False veya belirtilmemişse, sağlanan rozetler mevcut rozetlere eklenir.update- True ise, kullanıcı her giriş yaptığında rozet görüntüleme özellikleri kiracı yapılandırmasından güncellenir.
GET /api/v1/sso-users 
Bu rota SSO Kullanıcılarını 100'erlik sayfalarda döndürür. Sayfalandırma skip parametresi ile sağlanır. Kullanıcılar signUpDate ve id alanlarına göre sıralanır.



GET /api/v1/sso-users/by-id/:id 
Bu rota, bir SSO kullanıcısını id'sine göre döndürür.



GET /api/v1/sso-users/by-email/:email 
Bu rota e-posta adresine göre tek bir SSO kullanıcısı döndürür.



PATCH /api/v1/sso-users/:id 
Bu rota, tek bir SSO kullanıcısını güncelleme olanağı sağlar.



POST /api/v1/sso-users 
Bu rota tek bir SSO kullanıcısının oluşturulmasını sağlar.
Aynı ID'ye sahip iki kullanıcı oluşturmaya çalışmak hata ile sonuçlanır.

Bu örnekte erişim kontrolü için groupIds belirtiyoruz, ancak bu isteğe bağlıdır.


Entegrasyon Notu
API tarafından gönderilen veriler, farklı bir SSO User HMAC yükü göndererek kolayca geçersiz kılınabilir. Örneğin, kullanıcı adını API üzerinden ayarlarsanız, ancak sayfa yüklemesi sırasında SSO akışıyla farklı bir kullanıcı adı gönderirseniz, kullanıcı adlarını otomatik olarak güncelleyeceğiz.
Bu akışta kullanıcı parametrelerini, bunları açıkça belirtmediğiniz veya null olarak ayarlamadığınız (undefined değil) sürece güncellemeyeceğiz.
PUT /api/v1/sso-users/:id 
Bu rota tek bir SSO kullanıcısını güncelleme yeteneği sağlar.

Bu örnekte erişim kontrolü için groupIds belirtiyoruz, ancak bu isteğe bağlıdır.


DELETE /api/v1/sso-users/:id 
Bu rota, tek bir SSO kullanıcısını id'si ile kaldırmayı sağlar.
Bu kullanıcının payload'ını içeren yorum bileşenini yeniden yüklemenin kullanıcıyı sorunsuz şekilde yeniden oluşturacağını unutmayın.
Kullanıcının yorumlarını silmek deleteComments sorgu parametresi aracılığıyla mümkündür. Bunun true olması durumunda:
- Kullanıcının tüm yorumları canlı olarak silinecektir.
- Tüm child (şimdi yetim) yorumlar, her bir yorumun ilişkili olduğu sayfa yapılandırmasına göre silinecek veya anonimleştirilecektir. Örneğin thread deletion modu "anonymize" ise yanıtlar kalacak ve kullanıcının yorumları anonimleştirilecektir. Bu yalnızca
commentDeleteModeRemove(varsayılan değer) olduğunda geçerlidir. creditsCostdeğeri2olur.
Anonimleştirilmiş Yorumlar
Kullanıcının yorumlarını koruyabilir ancak commentDeleteMode=1 olarak ayarlayarak bunları anonimleştirebilirsiniz.
Kullanıcının yorumları anonimleştirildiyse aşağıdaki değerler null olarak ayarlanır:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badges
isDeleted ve isDeletedUser true olarak ayarlanır.
Render sırasında yorum bileşeni, kullanıcının adı için DELETED_USER_PLACEHOLDER (varsayılan: "[deleted]") ve yorum için DELETED_CONTENT_PLACEHOLDER kullanır. Bunlar Widget Özelleştirme UI'si aracılığıyla özelleştirilebilir.
Örnekler



Abonelik Yapısı 
Bir Subscription nesnesi, bir kullanıcı için aboneliği temsil eder.
Subscription nesneleri, bir kullanıcı yorum bileşenindeki bildirim zilini tıkladığında ve "Bu sayfaya abone ol" seçeneğine tıkladığında oluşturulur.
Abonelikler API üzerinden de oluşturulabilir.
Bir Subscription nesnesinin var olması, Subscription için ilişkili sayfanın köküne yeni yorumlar bırakıldığında Notification nesnelerinin oluşturulmasına ve e-postaların gönderilmesine neden olur. E-postaların gönderilmesi kullanıcı türüne bağlıdır. Normal kullanıcılar için bu, optedInNotifications değerine bağlıdır. SSO Kullanıcıları için bu, optedInSubscriptionNotifications değerine bağlıdır. Bazı uygulamaların web üzerinden erişilebilir bir sayfa kavramı olmayabilir; bu durumda urlId değerini abone olduğunuz öğenin kimliğine (yorum bileşenine ileteceğiniz urlId değeriyle aynı) ayarlamanız yeterlidir.
Subscription nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/subscriptions/:id 
Bu rota, createdAt'e göre sıralanmış, en yeni ilk olacak şekilde en fazla 30 Subscription nesnesi döndürür.
userId ile filtreleyebilirsiniz. SSO ile, kullanıcı kimliği <tenant id>:<user id> formatındadır.



POST /api/v1/subscriptions 
Bu API uç noktası bir Subscription oluşturma yeteneği sağlar. Bir kullanıcının sayfa başına yalnızca bir aboneliği olabilir, çünkü fazlası gereksizdir; aynı kullanıcı için aynı sayfaya birden fazla abonelik oluşturulmaya çalışılması bir hatayla sonuçlanacaktır.
Bir abonelik oluşturmak, abone olunan urlId'nin köküne yeni bir yorum bırakıldığında (yorum parentId'si null olduğunda) Notification nesnelerinin oluşturulmasına neden olur.



DELETE /api/v1/subscriptions/:id 
Bu rota bir Subscription nesnesini id ile siler.



Kiracı Günlük Kullanım Yapısı 
Bir TenantDailyUsage nesnesi, belirli bir gün için bir kiracının (tenant) kullanımını temsil eder. Belirli bir kiracı için belirli bir günde hiçbir etkinlik olmadıysa, o gün için bir TenantDailyUsage nesnesi bulunmaz.
TenantDailyUsage nesnesi gerçek zamanlı değildir ve gerçek kullanımın birkaç dakika gerisinde kalabilir.
TenantDailyUsage nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/tenant-daily-usage 
Bu rota, bir tenant'ın kullanımını yıl, ay ve güne göre aramaya olanak tanır. En fazla 365 nesne döndürülebilir ve maliyet 10 nesne için 1 API kredisi.
Yanıt nesneleri oluşturuldukları tarihe göre sıralanır (en eski önce).



Kiracı Yapısı 
Tenant, FastComments.com müşterisini tanımlar. Bunlar API aracılığıyla white-label erişimine sahip kiracılar tarafından oluşturulabilir. White-label kiracılar
başka white-label kiracılar oluşturamaz (sadece bir düzey iç içe izin verilir).
Tenant nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/tenants/:id 
Bu rota id ile tek bir Tenant döndürür.



GET /api/v1/tenants 
Bu API, tenant'ınız tarafından yönetilen tenants listesini döndürür.
Sayfalama skip sorgu parametresi ile sağlanır. Tenants, 100 öğelik sayfalar halinde, signUpDate ve id'ye göre sıralanarak döndürülür.
Maliyet, döndürülen tenants sayısına göre belirlenir; döndürülen her 10 tenants için 1 credit per 10 ücretlendirilir.

Tenant nesneleri üzerinde meta parametreleri tanımlayabilir ve eşleşen tenants için sorgu yapabilirsiniz. Örneğin, someKey anahtarı ve some-value meta değeri için, bu anahtar/değer çiftini içeren bir JSON nesnesi oluşturup filtrelemek için bunu URI kodlayarak sorgu parametresi olarak kullanabiliriz:



POST /api/v1/tenants 
Bu rota, tek bir Tenant ekleme olanağı sağlar.
Bir Tenant oluşturmak aşağıdaki kısıtlamalara sahiptir:
- Bir
namezorunludur. domainConfigurationzorunludur.- Bir
Tenantoluşturulurken aşağıdaki değerler verilemez:hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmount
signUpDategelecekte bir tarih olamaz.namedeğeri200 karakterdenuzun olamaz.emaildeğeri300 karakterdenuzun olamaz.email, FastComments.com üzerindeki tüm tenant'lar arasında benzersiz olmalıdır.- Üst tenant'ta geçerli bir
TenantPackagetanımlı değilse tenant oluşturamazsınız.- Tenant'ınız FastComments.com üzerinden oluşturulduysa bu bir sorun olmamalıdır.
- Paketinizde
maxWhiteLabeledTenantsaltında tanımlanan sayıdan fazla tenant oluşturamazsınız. - White labeling etkinleştirilmiş
parent tenant'ınızın kimliği olantenantIdsorgu parametresini belirtmelisiniz.
Yalnızca birkaç parametre ile bir Tenant oluşturabiliriz:



PATCH /api/v1/tenants/:id 
Bu API endpoint'i, bir Tenant kaydını id üzerinden güncelleme yeteneği sağlar.
Bir Tenant güncellemenin aşağıdaki kısıtlamaları vardır:
- Aşağıdaki değerler güncellenemez:
hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmountmanagedByTenantId
signUpDategelecekte bir tarih olamaz.namedeğeri200 karakterdenuzun olamaz.emaildeğeri300 karakterdenuzun olamaz.email, FastComments.com üzerindeki tüm tenant'lar arasında benzersiz olmalıdır.billingInfoValiddeğerinitrueolarak ayarlarken, aynı istektebillingInfosağlanmalıdır.- Kendi tenant'ınızla ilişkili
packageIddeğerini güncelleyemezsiniz. - Kendi tenant'ınızla ilişkili
paymentFrequencydeğerini güncelleyemezsiniz.



DELETE /api/v1/tenants/:id 
Bu rota, bir Tenant ve ilgili tüm verilerin (kullanıcılar, yorumlar, vb.) id ile kaldırılmasını sağlar.
Aşağıdaki kısıtlamalar tenant kaldırma işlemi ile ilgilidir:
- Tenant sizin kendi tenant'ınız olmalı veya sizin yönettiğiniz beyaz etiketli bir tenant olmalıdır.
suresorgu parametresitrueolarak ayarlanmış olmalıdır.



Kiracı Paketi Yapısı 
TenantPackage, bir Tenant için mevcut paket bilgilerini tanımlar. Bir tenant'ın birden çok paketi olabilir, ancak aynı anda yalnızca biri kullanımda olabilir.
Bir Tenant, packageId geçerli bir TenantPackage'ı işaret edene kadar herhangi bir ürün için kullanılamaz.
İki tür TenantPackage nesnesi vardır:
- Sabit fiyatlı paketler -
hasFlexPricingfalse olduğunda. - Esnek fiyatlandırma -
hasFlexPricingtrue olduğunda.
Her iki durumda da paketi kullanan hesap üzerinde limitler tanımlanır, ancak Flex ile tenant'a baz bir ücret artı kullandıkları miktar flex* parametreleri ile tanımlanan şekilde faturalandırılır.
Bir tenant'ın birden fazla tenant paketi olabilir ve paketi kendileri Fatura Bilgileri Sayfası. üzerinden değiştirme yetkisi olabilir.
Faturalamayı tenantlar için kendiniz yönetecekseniz, limitlerini tanımlamak için yine de her tenant için bir paket tanımlamanız gerekir. Tenant üzerinde billingHandledExternally'i true olarak ayarlamanız yeterlidir; böylece kendi fatura bilgilerini veya aktif paketlerini değiştiremeyeceklerdir.
Üst tenant'tan daha yüksek limitlere sahip paketler oluşturamazsınız.
TenantPackage nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/tenant-packages/:id 
Bu rota, id ile tek bir Tenant Package döndürür.



GET /api/v1/tenant-packages 
Bu API, skip sorgu parametresiyle sağlanan sayfalandırmayı kullanır. TenantPackages, createdAt ve id'ye göre sıralanmış olarak, 100 öğelik sayfalar halinde döndürülür.
Maliyet, döndürülen tenant paketlerinin sayısına göre hesaplanır; döndürülen tenant paketleri için maliyet 1 credit per 10'dur.



POST /api/v1/tenant-packages 
Bu rota tek bir TenantPackage ekleme yeteneği sağlar.
Bir TenantPackage oluşturmanın aşağıdaki kısıtlamaları vardır:
- Aşağıdaki parametreler gereklidir:
nametenantIdmonthlyCostUSD- Boş (null) olabilir.yearlyCostUSD- Boş (null) olabilir.maxMonthlyPageLoadsmaxMonthlyAPICreditsmaxMonthlyCommentsmaxConcurrentUsersmaxTenantUsersmaxSSOUsersmaxModeratorsmaxDomainshasDebrandingforWhoTextfeatureTaglineshasFlexPricing- Eğer true ise, tümflex*parametreleri gereklidir.
name50 characters'den daha uzun olamaz.- Her
forWhoTextöğesi200 characters'den daha uzun olamaz. - Her
featureTaglinesöğesi100 characters'den daha uzun olamaz. TenantPackage, üst kiracıdan daha "küçük" olmalıdır. Örneğin, tümmax*parametrelerinin üst kiracıdan daha düşük değerlere sahip olması gerekir.- Bir beyaz etiketli kiracı en fazla beş pakete sahip olabilir.
- Sadece beyaz etiketleme erişimine sahip kiracılar bir
TenantPackageoluşturabilir. - Kendi kiracınıza paket ekleyemezsiniz. :)
Bir TenantPackage şu şekilde oluşturulabilir:



PATCH /api/v1/tenant-packages/:id 
Bu API endpoint'i, bir TenantPackage kaydını id üzerinden güncelleme olanağı sağlar.
Bir TenantPackage güncellemenin aşağıdaki kısıtlamaları vardır:
hasFlexPricingdeğerini true olarak ayarlıyorsanız, aynı istekte tümflex*parametreleri zorunludur.namedeğeri50 karakterdenuzun olamaz.- Her bir
forWhoTextöğesi200 karakterdenuzun olamaz. - Her bir
featureTaglinesöğesi100 karakterdenuzun olamaz. TenantPackage, üst tenant'tan "daha küçük" olmalıdır. Örneğin, tümmax*parametreleri üst tenant'taki değerlerden daha düşük değerlere sahip olmalıdır.- Bir
TenantPackageile ilişkilitenantIddeğerini değiştiremezsiniz.



DELETE /api/v1/tenant-packages/:id 
Bu rota bir TenantPackage'ı id ile kaldırmayı sağlar.
Kullanımda olan bir TenantPackage'ı kaldıramazsınız (bir tenant'ın packageId pakete işaret ediyor). Önce Tenant'ı güncelleyin.



Kiracı Kullanıcı Yapısı 
TenantUser, belirli bir kiracı (tenant) tarafından yönetilen bir User tanımlar. Hesapları, ilişkili oldukları kiracının tam kontrolündedir ve hesapları UI veya API aracılığıyla güncellenebilir veya silinebilir.
Kiracı kullanıcıları, Tenant üzerinde tüm izinlere ve erişime sahip yöneticiler olabilir veya yalnızca yorumları moderasyon, API anahtarlarına erişim gibi belirli izinlerle sınırlı olabilirler.
TenantUser nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/tenant-users/:id 
Bu rota id ile tek bir TenantUser döndürür.



GET /api/v1/tenant-users 
Bu API, sayfalama için skip sorgu parametresi ile çalışır. TenantUsers, 100 öğe sayfaları halinde döndürülür; signUpDate, username ve id'ye göre sıralanır.
Maliyet döndürülen tenant users sayısına göre belirlenir; döndürülen her 10 tenant users için 1 credit per 10 ücret alınır.



POST /api/v1/tenant-users 
Bu rota tek bir TenantUser ekleme olanağı sağlar.
Bir TenantUser oluşturmanın aşağıdaki kısıtlamaları vardır:
usernamegereklidir.emailgereklidir.signUpDategelecekte olamaz.localeşu listede olmalıdır: Desteklenen Yereller.usernameFastComments.com genelinde benzersiz olmalıdır. Bu bir sorun ise, bunun yerine SSO kullanmanızı öneririz.emailFastComments.com genelinde benzersiz olmalıdır. Bu bir sorun ise, bunun yerine SSO kullanmanızı öneririz.- Paketinizde
maxTenantUsersaltında tanımlanan sayıda tenant kullanıcıdan daha fazlasını oluşturamazsınız.
TenantUser şu şekilde oluşturabiliriz



POST /api/v1/tenant-users/:id/send-login-link 
Bu rota tek bir TenantUser'a giriş bağlantısı gönderebilme imkanı sağlar.
Kullanıcıları toplu oluştururken ve onlara FastComments.com'a nasıl giriş yapacaklarını anlatmak zorunda olmadığınız durumlarda faydalıdır. Bu, onlara giriş yapmak için süresi dolan bir "sihirli bağlantı" gönderecektir; süresi 30 days sonra sona erer.
Bir TenantUser'a giriş bağlantısı göndermek için aşağıdaki kısıtlamalar geçerlidir:
TenantUserzaten mevcut olmalıdır.TenantUser'ın ait olduğuTenant'ı yönetme erişiminiz olmalıdır.
Bir TenantUser'a giriş bağlantısı şu şekilde gönderilebilir:

Bu, şu şekilde bir e-posta gönderecektir: Bob at TenantName is inviting you to be a moderator...


PATCH /api/v1/tenant-users/:id 
Bu rota, tek bir TenantUser güncelleme olanağı sağlar.
Bir TenantUser güncellemenin aşağıdaki kısıtlamaları vardır:
signUpDategelecekte bir tarih olamaz.locale, Desteklenen Diller listesinde yer almalıdır.username, tüm FastComments.com genelinde benzersiz olmalıdır. Bu bir sorunsa, bunun yerine SSO kullanmanızı öneririz.email, tüm FastComments.com genelinde benzersiz olmalıdır. Bu bir sorunsa, bunun yerine SSO kullanmanızı öneririz.- Bir kullanıcının
tenantIddeğerini güncelleyemezsiniz.
Bir TenantUser'ı aşağıdaki gibi güncelleyebiliriz



DELETE /api/v1/tenant-users/:id 
Bu rota, bir TenantUser kaydının kimliğe (id) göre silinmesini sağlar.
Kullanıcının yorumlarının silinmesi, deleteComments sorgu parametresi ile mümkündür. Bu parametre true ise şunlara dikkat edin:
- Kullanıcının tüm yorumları canlı olarak silinecektir.
- Tüm alt (artık yetim kalmış) yorumlar, her yorumun ilişkili olduğu sayfa yapılandırmasına göre silinecek veya anonimleştirilecektir. Örneğin, iş parçacığı (thread) silme modu "anonymize" ise, yanıtlar kalır ve kullanıcının yorumları anonimleştirilir. Bu yalnızca
commentDeleteModedeğeriRemove(varsayılan değer) olduğunda geçerlidir. creditsCostdeğeri2olur.
Anonimleştirilmiş Yorumlar
Kullanıcının yorumlarını koruyabilir ve yalnızca commentDeleteMode=1 ayarlayarak anonimleştirebilirsiniz.
Kullanıcının yorumları anonimleştirilirse aşağıdaki değerler null olarak ayarlanır:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badges
isDeleted ve isDeletedUser değeri true olarak ayarlanır.
Görüntüleme sırasında, yorum bileşeni (widget) kullanıcı adı için DELETED_USER_PLACEHOLDER (varsayılan: "[deleted]") ve yorum için DELETED_CONTENT_PLACEHOLDER değerini kullanır. Bunlar Widget Özelleştirme arayüzü üzerinden özelleştirilebilir.
Örnekler



Kullanıcı Yapısı 
User tüm kullanıcı türlerinin en yaygın ortak paydasını temsil eden bir nesnedir.
Unutmayın ki FastComments'ta kullanıcılar için birçok farklı kullanım durumu bulunur:
- Secure SSO
- Simple SSO
- Tenant Users (Örneğin: Yöneticiler)
- Commenters
Bu API Commenters ve Simple SSO aracılığıyla oluşturulan kullanıcılar içindir. Temelde, siteniz üzerinden oluşturulan herhangi bir kullanıcıya bu API aracılığıyla erişilebilir. Tenant Users da bu şekilde alınabilir, ancak /tenant-users/ API'si ile etkileşime girerek daha fazla bilgi edinebilirsiniz.
Secure SSO için lütfen /sso-users/ API'sini kullanın.
Bu tür kullanıcıları güncelleyemezsiniz. Hesaplarını siteniz aracılığıyla oluşturmuşlardır, bu yüzden temel bazı salt okunur erişim sağlıyoruz, ancak değişiklik yapamazsınız. Bu tür bir akışa sahip olmak istiyorsanız - Secure SSO'yu kurmanız gerekir.
User nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/users/:id 
Bu rota id ile tek bir Kullanıcı döndürür.



Oy Yapısı 
Bir Vote nesnesi, bir kullanıcı tarafından bırakılan bir oyu temsil eder.
Yorumlar ile oy arasındaki ilişki commentId aracılığıyla tanımlanır.
Vote nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/votes 
Oylar urlId ile alınmalıdır.
Oy Türleri
Üç tür oy vardır:
- Kimliği doğrulanmış oylar, ilgili yoruma uygulanır. Bunları bu API aracılığıyla oluşturabilirsiniz.
- Kimliği doğrulanmış oylar, doğrulama için beklemede olan ve bu nedenle henüz yoruma uygulanmamış olanlar. Bunlar bir kullanıcı FastComments.com oy vermek için giriş yap mekanizmasını kullandığında oluşturulur.
- Anonim oylar, ilgili yoruma uygulanır. Bunlar anonim yorumla birlikte oluşturulur.
Bunlar karışıklığı azaltmak için API'de ayrı listeler halinde döndürülür.



Anonim Oylar Notları
Bu API aracılığıyla oluşturulan anonim oyların appliedAuthorizedVotes listesinde görüneceğini unutmayın. API anahtarıyla API aracılığıyla oluşturuldukları için yetkili olarak kabul edilirler.
appliedAnonymousVotes yapısı e-posta, API anahtarı vb. olmadan oluşturulan oylar içindir.
GET /api/v1/votes/for-user 
Belirli bir urlId üzerinde bir kullanıcı tarafından bırakılan oyları getirmeyi sağlar. Herhangi bir FastComments.com veya SSO User olabilecek bir userId alır.
Bu, bir kullanıcının bir yoruma oy verip vermediğini göstermek istiyorsanız yararlıdır. Yorumları getirirken, aynı urlId ile kullanıcı için aynı anda bu API'yi çağırmanız yeterlidir.
Eğer anonim oy kullanıyorsanız bunun yerine anonUserId göndermek isteyeceksiniz.


Anonim oyların appliedAuthorizedVotes listesinde görüneceğini unutmayın. API anahtarı ile API üzerinden oluşturuldukları için yetkili kabul edilirler.


POST /api/v1/votes 
Bu rota tek bir yetkili Vote ekleme yeteneği sağlar. Oylar up (+1) veya down (-1) olabilir.




Anonim Oy Oluşturma
Anonim oylar, sorgu parametrelerinde userId yerine anonUserId ayarlanarak oluşturulabilir.
Bu id herhangi bir kullanıcı nesnesiyle eşleşmek zorunda değildir (dolayısıyla anonim). Bu, yalnızca oturum için bir tanımlayıcıdır, böylece aynı oturum içinde oyları tekrar alabilir ve bir yorumun oylandığını kontrol edebilirsiniz.
Eğer FastComments'ın sahip olduğu gibi "anonim oturumlar" gibi bir şeye sahip değilseniz - bunu basitçe rastgele bir ID'ye, örneğin bir UUID'ye ayarlayabilirsiniz (ancak alan tasarrufu için daha küçük tanımlayıcıları tercih ediyoruz).
Diğer Notlar
- Bu API, tenant düzeyindeki ayarlara uyar. Örneğin, belirli bir sayfa için oylamayı devre dışı bırakırsanız ve API aracılığıyla bir oy oluşturmaya çalışırsanız,
voting-disabledhata kodu ile başarısız olur. - Bu API varsayılan olarak canlıdır.
- Bu API, ilgili
Comment'invotesalanını güncelleyecektir.
DELETE /api/v1/votes/:id 
Bu rota tek bir Vote'u silme imkanı sağlar.



Notlar:
- Bu API, kiracı düzeyindeki ayarlara uyar. Örneğin, belirli bir sayfa için oylamayı devre dışı bırakırsanız ve API üzerinden bir oy oluşturmaya çalışırsanız,
voting-disabledhata kodu ile başarısız olur. - Bu API varsayılan olarak canlıdır.
- Bu API, ilgili
Comment'invotesdeğerini güncelleyecektir.
Domain Config Yapısı 
Bir DomainConfig nesnesi, bir kiracı (tenant) için bir alan adının yapılandırmasını temsil eder.
DomainConfig nesnesinin yapısı aşağıdaki gibidir:


Kimlik Doğrulama İçin
Alan Adı Yapılandırması, hangi sitelerin hesabınız için FastComments widget'ını barındırabileceğini belirlemek için kullanılır. Bu, temel bir kimlik doğrulama biçimidir; yani herhangi bir Alan Adı Yapılandırmasının eklenmesi veya kaldırılması, FastComments kurulumunuzun üretim ortamındaki kullanılabilirliğini etkileyebilir.
Şu anda kullanımda olan bir alan adı için Domain Config öğesinin domain özelliğini, o alan adını devre dışı bırakma amacı yoksa, kaldırmayın veya güncellemeyin.
Bu, /auth/my-account/configure-domains adresinden bir alan adını kaldırmayla aynı davranışa sahiptir.
Ayrıca, My Domains arayüzünden bir alan adının kaldırılmasının, bu arayüz aracılığıyla eklenmiş olabilecek o alan adına ait tüm ilgili yapılandırmayı da kaldıracağını unutmayın.
E-posta Özelleştirme İçin
E-posta alt bilgisindeki abonelikten çıkma bağlantısı ve birçok e-posta istemcisinin sunduğu tek tıkla abonelikten çıkma özelliği, sırasıyla footerUnsubscribeURL ve emailHeaders tanımlanarak bu API aracılığıyla yapılandırılabilir.
DKIM İçin
DKIM DNS kayıtlarınızı tanımladıktan sonra, tanımlanan yapıyı kullanarak DomainConfig'i DKIM yapılandırmanızla güncellemeniz yeterlidir.
GET /api/v1/domain-configs 
Bu API, bir kiracı için tüm DomainConfig nesnelerini getirme yeteneği sağlar.



GET /api/v1/domain-configs/:domain 
Bireysel DomainConfig'ler, karşılık gelen domain ile alınabilir.



POST /api/v1/domain-configs 
Bu API uç noktası alan adı yapılandırmaları oluşturma yeteneği sağlar.
Bir alan adı için yapılandırma eklemek, o alan adını FastComments hesabı için yetkilendirir.
Bu API'nin yaygın kullanım durumları başlangıç kurulumu, birçok alan adı eklenmesi gerektiğinde veya e-posta gönderimi için özel yapılandırmadır.



PATCH /api/v1/domain-configs/:domain 
Bu API uç noktası, yalnızca alan adını ve güncellenecek özniteliği belirterek bir alan yapılandırmasını güncelleme yeteneği sağlar.



PUT /api/v1/domain-configs/:domain 
Bu API uç noktası bir alan yapılandırmasını değiştirme yeteneği sağlar.



DELETE /api/v1/domain-configs/:domain 
Bu rota, tek bir DomainConfig'in id'sine göre kaldırılmasını sağlar.
- Not: Bir
DomainConfig'in kaldırılması, o alan adının FastComments kullanma yetkisini kaldırır. - Not: UI üzerinden bir alan adını yeniden eklemek nesneyi yeniden oluşturur (yalnızca
domainalanı doldurulmuş olarak).



Soru Config Yapısı 
FastComments, soru oluşturma ve bunların sonuçlarını toplama yolu sağlar. Bir soru örneği (bundan sonra QuestionConfig olarak anılacaktır)
yıldız derecelendirmesi, bir kaydırıcı veya bir NPS sorusu olabilir (type ile belirlenir).
Soru verileri ayrı ayrı, birlikte, zaman içinde, genel olarak, sayfaya göre vb. şekilde toplanabilir.
Bu çerçeve, istemci tarafı widget'ları (bu API'nin önünde sunucunuzla), yönetici panolarını ve raporlama araçlarını oluşturmak için gereken tüm yeteneklere sahiptir.
İlk olarak bir QuestionConfig tanımlamamız gerekiyor. Yapısı şu şekildedir:

GET /api/v1/question-configs 
Bu rota sayfalandırılmış şekilde tek seferde en fazla 100 QuestionConfig nesnesi döndürür. Maliyet 100 nesne başına 1'dir. Bunlar
soru metnine göre artan sırada sıralanırlar (question alanı).



GET /api/v1/question-configs/:id 
Bu rota verilen id ile tek bir QuestionConfig döndürür.



POST /api/v1/question-configs 
Bu API uç noktası bir QuestionConfig oluşturma yeteneği sağlar.



PATCH /api/v1/question-configs/:id 
Bu rota tek bir QuestionConfig'i güncelleme olanağı sağlar.
Aşağıdaki yapı değiştirilebilecek tüm değerleri temsil eder:




DELETE /api/v1/question-configs/:id 
Bu rota, bir QuestionConfig'ı id ile kaldırmayı sağlar.
Bu, ilgili tüm soru sonuçlarını silecektir (ancak yorumları silmez). Bu, yüksek kredi maliyetinin bir parçasıdır.



Soru Sonucu Yapısı 
Sorular için sonuçları kaydetmek amacıyla bir QuestionResult oluşturursunuz. Ardından soru sonuçlarını toplu hâlde işleyebilir ve raporlama amaçları için yorumlara bağlayabilirsiniz.

GET /api/v1/question-results 
Bu rota sayfalandırılmış olarak aynı anda en fazla 1000 QuestionResults nesnesi döndürür. Ücret her 100 nesne için 1'dir. Onlar
createdAt'e göre artan sırada sıralanırlar. Çeşitli parametrelere göre filtreleyebilirsiniz.



GET /api/v1/question-results/:id 
Bu rota, id'sine göre tek bir QuestionResult döndürür.



POST /api/v1/question-results 
Bu API uç noktası bir QuestionResult oluşturma yeteneği sağlar.



PATCH /api/v1/question-results/:id 
Bu rota tek bir QuestionResult'ı güncelleme yeteneği sağlar.
Aşağıdaki yapı, değiştirilebilecek tüm değerleri temsil eder:




DELETE /api/v1/question-results/:id 
Bu rota, id ile bir QuestionResult'ın kaldırılmasını sağlar.



GET /api/v1/question-results-aggregate 
Sonuçların toplandığı (agregasyon) yer burasıdır.
Agregasyon yanıt yapısı aşağıdaki gibidir:

Agregasyon için kullanılabilen sorgu parametreleri şunlardır:

Örnek bir istek:

Örnek yanıt:


Performans Notları
- Önbellek isabeti olmadığında agregasyonlar genellikle milyon sonuç başına beş saniye sürer.
- Aksi takdirde, istekler sabit zamanda tamamlanır.
Önbellekleme ve Maliyet Notları
forceRecalculatebelirtildiğinde maliyet normal2yerine her zaman10olur.- Önbellek süresi dolarsa ve veriler yeniden hesaplanırsa,
forceRecalculatebelirtilmediği takdirde maliyet yine sabit2olur. Önbellek, agregasyon yapılan veri kümesinin boyutuna göre sona erer (30 saniye ile 5 dakika arasında değişebilir). - Bu, önbelleğin kullanılmasını teşvik etmek içindir.
GET /api/v1/question-results-aggregate/combine/comments 
Bu, sonuçların yorumlarla birleştirildiği yerdir. Örneğin bir ürün için "son olumlu ve olumsuz yorumlar" grafiği oluşturmak için faydalıdır.
Değer aralığı (dahil), bir veya daha fazla soru ve bir başlangıç tarihi (dahil) ile arama yapabilirsiniz.
Yanıt yapısı şu şekildedir:

Toplama için kullanılabilen sorgu parametreleri şunlardır:

İşte bir örnek istek:

Örnek yanıt:


Önbellekleme ve Maliyet Notları
forceRecalculatebelirtildiğinde maliyet normal2yerine her zaman10olur.- Önbellek süresi dolup veriler yeniden hesaplanırsa,
forceRecalculatebelirtilmemişse maliyet yine sabit2olur. - Bu, önbelleğin kullanılmasını teşvik etmek içindir.
Kullanıcı Rozeti Yapısı 
UserBadge, FastComments sisteminde bir kullanıcıya atanan rozeti temsil eden bir nesnedir.
Rozetler, kullanıcı etkinliğine (örneğin yorum sayısı, yanıt süresi, veteran durumu) göre otomatik olarak veya site yöneticileri tarafından manuel olarak kullanıcılara atanabilir.
UserBadge nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/user-badges 
Bu uç nokta, çeşitli kriterlere göre kullanıcı rozetlerini getirmenize olanak tanır.
Örnek İstek:
Run 
Sonuçları filtrelemek için çeşitli sorgu parametreleri ekleyebilirsiniz:
userId- Belirli bir kullanıcı için rozetleri alınbadgeId- Belirli bir rozete ait örnekleri alıntype- Rozet türüne göre filtreleyin (0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, vb. Tam liste için UserBadge yapısına bakın)displayedOnComments- Rozetin yorumlarda görüntülenip görüntülenmediğine göre filtreleyin (true/false)limit- Döndürülecek maksimum rozet sayısı (varsayılan 30, maksimum 200)skip- Atlanacak rozet sayısı (sayfalama için)
Örnek Yanıt:

Olası Hata Yanıtları:


GET /api/v1/user-badges/:id 
Bu uç nokta, benzersiz bir ID ile belirli bir kullanıcı rozetini getirmenize olanak tanır.
Örnek İstek:
Run 
Örnek Yanıt:

Olası Hata Yanıtları:


POST /api/v1/user-badges 
Bu uç nokta, yeni bir kullanıcı rozet ataması oluşturmanıza olanak tanır.
Örnek İstek:
Run 
İstek gövdesi aşağıdaki parametreleri içermelidir:
userId(required) - Rozeti atayacağınız kullanıcının kimliğibadgeId(required) - Atanacak rozetin kimliğidisplayedOnComments(optional) - Rozetin kullanıcının yorumlarında gösterilip gösterilmeyeceği (varsayılan true)
Önemli Notlar:
- Rozet, tenant'ınızın rozet kataloğunda mevcut olmalı ve etkinleştirilmiş olmalıdır
- Rozetleri yalnızca tenant'ınıza ait olan veya sitenizde yorum yapmış kullanıcılara atayabilirsiniz
Örnek Yanıt:

Olası Hata Yanıtları:





PUT /api/v1/user-badges/:id 
Bu uç nokta, bir kullanıcı rozeti atamasını güncellemenize olanak tanır.
Şu anda yalnızca güncellenebilen özellik displayedOnComments'tir; bu özellik rozetin kullanıcının yorumlarında gösterilip gösterilmeyeceğini kontrol eder.
Örnek İstek:
Run 
Örnek Yanıt:

Olası Hata Yanıtları:



DELETE /api/v1/user-badges/:id 
Bu uç nokta bir kullanıcı rozet atamasını silmenize olanak tanır.
Örnek İstek:
Run 
Örnek Yanıt:

Olası Hata Yanıtları:



Kullanıcı Rozet İlerlemesi Yapısı 
UserBadgeProgress, bir kullanıcının FastComments sistemindeki çeşitli rozetleri kazanmaya yönelik ilerlemesini temsil eden bir nesnedir.
Bu takip, kullanıcıların topluluğunuzdaki etkinliklerine ve katılımlarına göre ne zaman otomatik rozet alması gerektiğini belirlemeye yardımcı olur.
UserBadgeProgress nesnesinin yapısı aşağıdaki gibidir:

GET /api/v1/user-badge-progress 
Bu uç nokta, kullanıcı rozet ilerleme kayıtlarını çeşitli kriterlere göre getirmenizi sağlar.
Örnek İstek:
Run 
Sonuçları filtrelemek için çeşitli sorgu parametreleri ekleyebilirsiniz:
userId- Belirli bir kullanıcının ilerlemesini getirlimit- Döndürülecek maksimum kayıt sayısı (varsayılan 30, maksimum 200)skip- Atlanacak kayıt sayısı (sayfalama için)
Örnek Yanıt:

Olası Hata Yanıtları:


GET /api/v1/user-badge-progress/:id 
Bu uç nokta, benzersiz kimliğiyle belirli bir kullanıcı rozet ilerleme kaydını almanıza olanak tanır.
Example Request:
Run 
Example Response:

Possible Error Responses:


GET /api/v1/user-badge-progress/user/:userId 
Bu uç nokta, bir kullanıcının user ID'sine göre rozet ilerleme kaydını almanıza olanak tanır.
Example Request:
Run 
Example Response:

Possible Error Responses:



Sonuç olarak
API belgelerimizin kapsamlı ve anlaşılması kolay olduğunu umuyoruz. Herhangi bir eksiklik bulursanız, lütfen aşağıdan bize bildirin.