FastComments.com

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:

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.

Denetim Günlüğü Yapısı Internal Link

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:

AuditLog Yapısı
Copy Copy
1
2interface AuditLog {
3 id: string;
4 /** Olayı gerçekleştiren kişi. **/
5 userId?: string;
6 username?: string;
7 resourceName: string;
8 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
9 from: string;
10 url?: string;
11 ip?: string;
12 /** Olayı gerçekleştiren tarayıcı, olay bir tarayıcıdan geldiyse. **/
13 ua?: string;
14 /** Olayın geldiği oturumun hash'i, bir kişinin eylemlerini ilişkilendirmek için. Asla oturumun kendisi değildir. **/
15 sIdHashed?: string;
16 when: string;
17 description?: string;
18 serverStartDate: string;
19 /** Olayın gerçekleştirildiği nesnenin kimliği, olayı gerçekleştiren kişinin aksine. **/
20 targetId?: string;
21 /** Bu nesne için insan tarafından okunabilir bir etiket, örn. "jsmith (jsmith@example.com)". **/
22 targetLabel?: string;
23 objectDetails?: object;
24}
25

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.

Toplu İş Yapısı Internal Link

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. totalCount yoktur.
  • import, export ve diğer işler: işlenen satırlar.

BatchJob nesnesinin yapısı aşağıdaki gibidir:

BatchJob Yapısı
Copy Copy
1
2interface BatchJob {
3 id: string
4 /** Örneğin migrate-pages, undo-page-migration, migrate-domains, import, export, users-export veya copy-comments. **/
5 type: string
6 status: 'requested' | 'running' | 'success' | 'failed'
7 createdAt: string
8 completedAt?: string
9 processedCount: number
10 /** Önceden bilindiğinde toplam iş. **/
11 totalCount?: number
12 /** migrate-pages: istek sırasına göre tamamlanan her taşıma için bir giriş. **/
13 pageMigrationResults?: Array<PageMigrationSuccess | PageMigrationFailure>
14 /**
15 * migrate-pages: iş tamamlandığında (başarılı veya başarısız) ayarlanır. 90 gün içinde POST /api/v1/pages/migrations/:undoId/undo adresine gönderin.
16 * undo-page-migration: geri alınan taşıma.
17 **/
18 undoId?: string
19 /** undo-page-migration: iş tamamlandığında ayarlanır. **/
20 pageMigrationUndoResult?: PageMigrationUndoResult
21}
22
23interface PageMigrationSuccess {
24 from: string
25 to: string
26 type: 'urlId' | 'domain'
27 status: 'success'
28 commentsMigrated: number
29}
30
31interface PageMigrationFailure {
32 from: string
33 to: string
34 type: 'urlId' | 'domain'
35 status: 'failed'
36 code: string
37 reason: string
38}
39
40interface PageMigrationUndoResult {
41 /** Taşıma öncesi değerlerine geri getirilen kayıtlar. **/
42 restored: number
43 /** Taşıma sonrası değiştiği için veya artık mevcut olmadığı için bırakılan kayıtlar. **/
44 skipped: number
45 /** Sayfalar birleştirilirken silinen taşıma kayıtları. Bunlar geri getirilemez. **/
46 notRestorable: number
47}
48

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.

Yorum Yapısı Internal Link

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:

Comment Yapısı
Copy Copy
1
2interface Comment {
3 /** READONLY: Spam motoru yorumun spam olduğunu belirlediyse true olarak ayarlanır. **/
4 aiDeterminedSpam?: boolean
5 /** Yorumun gösterilmesi onaylandı mı. Yorum kaydedilirken true olarak ayarlanır, aksi halde gizlenir. **/
6 approved?: boolean
7 /** Kullanıcının avatarı. **/
8 avatarSrc?: string
9 /** Alt yorumlar. Her senaryoda doldurulmaz. API üzerinden asTree true olarak ayarlandığında kullanılır. **/
10 children: Comment[]
11 /** Yorum yapan kişinin ham yorumu. **/
12 comment: string
13 /** READONLY: Yorum yapan kişinin yorumu HTML'e dönüştürülmüş hali. **/
14 commentHTML?: string
15 /** Yorum yapan kişinin e-postası. Anonim yorumlama kapalıysa gereklidir. **/
16 commenterEmail?: string
17 /** Yorum yapan kişinin bağlantısı (örneğin blogu). **/
18 commenterLink?: string
19 /** Yorum yapan kişinin adı. Her zaman gereklidir. Mevcut değilse "Anonymous" gibi bir değere ayarlanır. **/
20 commenterName: string
21 /** Yorumun bırakıldığı tarih, UTC epoch cinsinden. **/
22 date: number
23 /** Yorum için "görüntüleme etiketi" - örneğin "Admin", "Moderator" veya "VIP User" gibi. **/
24 displayLabel?: string
25 /** Yorumun gönderildiği alan adı. **/
26 domain?: string
27 /** READONLY: Yorumun bayrak eklenme sayısı. **/
28 flagCount?: number
29 /** Yorumda yazılan ve başarıyla ayrıştırılan #hashtags. Sorgulama amacıyla manuel olarak da hashtag ekleyebilirsiniz, ancak bunlar yorum metninde otomatik olarak görüntülenmez. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Yorum görseller içeriyor mu? **/
32 hasImages?: boolean
33 /** READONLY: Yorum bağlantılar içeriyor mu? **/
34 hasLinks?: boolean
35 /** READONLY: Benzersiz yorum kimliği. **/
36 id: string
37 /** Sadece oluşturma sırasında! Bu değer depolama için hash'lenir. **/
38 ip?: string
39 /** READONLY: Mevcut kullanıcı, bu yorumu yazan kullanıcıyı engelledi mi? **/
40 isBlocked?: boolean
41 /** READONLY: Yorum bir yönetici tarafından mı yapıldı? userId'ye göre otomatik olarak ayarlanır. **/
42 isByAdmin?: boolean
43 /** READONLY: Yorum bir moderatör tarafından mı yapıldı? userId'ye göre otomatik olarak ayarlanır. **/
44 isByModerator?: boolean
45 /** Yorum yumuşak silindi ise true olarak ayarlanır (başka bir yapılandırma nedeniyle yer tutucu bırakılması gerekti). **/
46 isDeleted?: boolean
47 /** Kullanıcının hesabı silindiğinde ve yorumun korunması gerektiğinde true olarak ayarlanır. **/
48 isDeletedUser?: boolean
49 /** READONLY: Şu anda oturum açmış kullanıcı (contextUserId) tarafından bayraklandı mı? **/
50 isFlagged?: boolean
51 /** Yorum sabitlendi mi? **/
52 isPinned?: boolean
53 /** Yorum kilitli mi? True olduğunda, kilidi açılana kadar kimse (moderatörler dahil) yanıt veremez, düzenleyemez veya silemez. **/
54 isLocked?: boolean
55 /** Yorum spam mi? **/
56 isSpam?: boolean
57 /** READONLY: Yorum, mevcut kullanıcı (contextUserId) için aşağı oylandı mı? **/
58 isVotedDown?: boolean
59 /** READONLY: Yorum, mevcut kullanıcı (contextUserId) için yukarı oylandı mı? **/
60 isVotedUp?: boolean
61 /** Yorumun bulunduğu yerel ayar. Sağlanmazsa, HTTP accept-language başlığından türetilir. **/
62 locale?: 'de_de' | 'en_us' | 'es_es' | 'fr_fr' | 'it_it' | 'ja_jp' | 'ko_kr' | 'pl_pl' | 'pt_br' | 'ru_ru' | 'tr_tr' | 'zh_cn' | 'zh_tw'
63 /** READONLY: Yorumda yazılan ve başarıyla ayrıştırılan @mentions. **/
64 mentions?: CommentUserMention[]
65 /** Yorumla ilişkili isteğe bağlı meta veriler. **/
66 meta?: Record<string, string | number | boolean>
67 /** Bu yorumla ilişkili isteğe bağlı moderasyon grubu kimlikleri listesi. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: Bu yorum üzerindeki mevcut kullanıcının (contextUserId) oylamasına karşılık gelen oy nesnesinin kimliği. **/
70 myVoteId?: string
71 /** Bu yorum için yorum yapanlara bildirim gönderilip gönderilmediği. İçe aktarımlarda bildirim gönderilmesini önlemek için bunu true olarak ayarlayın. **/
72 notificationSentForParent?: boolean
73 /** Bu yorum için kiracı (tenant) kullanıcılarına bildirim gönderilip gönderilmediği. İçe aktarımlarda bildirim gönderilmesini önlemek için bunu true olarak ayarlayın. **/
74 notificationSentForParentTenant?: boolean
75 /** Bu yorumun bulunduğu sayfanın başlığı. **/
76 pageTitle?: string
77 /** Bir yoruma yanıt veriyorsak, bu yanıt verdiğimiz yorumun kimliğidir. **/
78 parentId?: string|null
79 /** Yorum incelendi olarak işaretlendi mi. **/
80 reviewed: boolean
81 /** Yorumun ait olduğu kiracı (tenant) kimliği. **/
82 tenantId: string
83 /** Yorumu yazan kullanıcı. Ad/e-posta ile bir yorum kaydedilirken otomatik olarak oluşturulur. **/
84 userId?: string|null
85 /** Bu yorumun göründüğü konumun URL'si, örneğin bir blog yazısı. **/
86 url: string
87 /** Bize ilettiğiniz urlId'nin "temizlenmiş" bir sürümü. Kaydederken bu alanı belirtirsiniz, ancak yorumu geri getirdiğinizde bu "temizlenmiş" olur ve orijinal değeriniz "urlIdRaw" alanına taşınır. **/
88 urlId: string
89 /** READONLY: Bize ilettiğiniz orijinal urlId. **/
90 urlIdRaw?: string
91 /** Kullanıcı ve bu yorum doğrulanmış mı? **/
92 verified: boolean
93 /** Yukarı oy sayısı. **/
94 votesUp?: number
95 /** Aşağı oy sayısı. **/
96 votesDown?: number
97 /** Yorumun "karma" değeri (= yukarı oylar - aşağı oylar). **/
98 votes?: number
99}
100

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.

Comment Mentions Nesnesi
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** Kullanıcı kimliği. SSO kullanıcıları için, bu önüne kiracı (tenant) kimliğiniz eklenmiş şekilde olur. **/
4 id: string
5 /** @ sembolü dahil, nihai @mention etiket metni. **/
6 tag: string
7 /** @ sembolü dahil, orijinal @mention etiket metni. **/
8 rawTag: string
9 /** Etiketlenen kullanıcı türü. user = FastComments.com hesabı. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Kullanıcı bildirimlerden çıkış yapmış olsa bile, bu yine de true olarak ayarlanır. **/
12 sent: boolean
13}
14

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.

Comment HashTag Nesnesi
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** Hashtag kimliği. **/
4 id: string
5 /** # sembolü dahil, nihai #hashtag etiket metni. **/
6 tag: string
7 /** Hashtag özel bir URL ile ilişkilendirilmişse, bu tanımlı olacaktır. **/
8 url?: string
9 /** Yorum güncellendiğinde, hashtag yorum metninde bulunmasa bile korunması gerekiyorsa. Yorum metnini değiştirmeden yorumları etiketlemek için kullanışlıdır. **/
10 retain?: boolean
11}
12

E-posta Şablonu Yapısı Internal Link

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 emailTemplateId diyoruz. Bunlar sabittir.
  • domain. İlgili nesnenin (ör. bir Comment) 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:

E-posta Şablon Yapısı
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** SADECE OKUNUR **/
8 createdAt: string
9 /** SADECE OKUNUR **/
10 updatedAt: string
11 /** SADECE OKUNUR **/
12 updatedByUserId: string
13 /** Şablonun ilişkilendirileceği domain. **/
14 domain?: string | '*' | null
15 /** EJS sözdiziminde e-posta şablonu içeriği. **/
16 ejs: string
17 /** Her desteklenen yerel için geçersiz kılınmış çeviri anahtarlarının değerlerini içeren bir harita. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Şablonun render bağlamını temsil eden bir nesne. **/
20 testData: object
21}
22

Notlar

  • Geçerli emailTemplateId değerlerini /definitions uç noktasından alabilirsiniz.
  • /definitions uç noktası ayrıca varsayılan çevirileri ve test verilerini içerir.
  • Geçersiz yapı veya test verileri durumunda şablonlar kaydedilemez.

Akış Gönderisi Yapısı Internal Link

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:

FeedPost Yapısı
Copy Copy
1
2interface FeedPost {
3 /** READONLY **/
4 _id: string
5 /** READONLY **/
6 tenantId: string
7 title?: string
8 /** Gönderiyi oluşturan FastComments veya SSO kullanıcısının kimliği. **/
9 fromUserId?: string
10 /** Ayarlanmamışsa kullanıcıdan doldurulur. **/
11 fromUserDisplayName?: string | null
12 /** READONLY. Kullanıcıdan doldurulur. **/
13 fromUserAvatar?: string | null
14 /** Bir akışı filtrelemek için kullanılır. **/
15 tags?: string[]
16 /** Bir akış içinde sıralama ağırlığı. Daha yüksek değerler önce sıralanır. **/
17 weight?: number
18 /** Kendi kullanımınız için serbest biçimli anahtar/değer çiftleri. **/
19 meta?: Record<string, string>
20 /** Temizlenmiş HTML. **/
21 contentHTML?: string
22 media?: FeedPostMediaItem[]
23 links?: FeedPostLink[]
24 /** READONLY **/
25 createdAt: string
26 /** READONLY. Sayılacak reaksiyon türü. **/
27 reacts?: Record<string, number>
28 /** READONLY **/
29 commentCount?: number | null
30}
31
32interface FeedPostMediaItem {
33 title?: string
34 /** Medya öğesine tıklandığında yönlendirilen adres. **/
35 linkUrl?: string
36 /** Her bir versiyon için bir giriş. Widget en uygun olanı seçer. **/
37 sizes: FeedPostMediaItemAsset[]
38}
39
40interface FeedPostMediaItemAsset {
41 w: number
42 h: number
43 src: string
44}
45
46interface FeedPostLink {
47 /** Bağlantı metni, örneğin "Şimdi kaydol". **/
48 text?: string
49 /** Bağlantıyla birlikte gösterilen bir başlık. **/
50 title?: string
51 /** Bağlantıyla birlikte gösterilen bir açıklama. **/
52 description?: string
53 url?: string
54}
55

Notlar:

  • Bu alanların bazıları READONLY olarak işaretlenmiştir - bunlar API tarafından döndürülür ancak ayarlanamaz.
  • Bir gönderideki yorumlar, urlId'si post: 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.

Etiket Yapısı Internal Link

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:

HashTag Yapısı
Copy Copy
1
2interface HashTag {
3 /** "#" veya istenen karakterle başlamalı. **/
4 tag: string
5 /** Hashtag'in işaret edebileceği isteğe bağlı bir URL. Yorumları hashtag ile filtrelemek yerine, kullanıcı arayüzü tıklanınca buna yönlendirir. **/
6 url?: string
7 /** SADECE OKUNUR **/
8 createdAt: string
9}
10

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 %23 olarak temsil edilmelidir.
  • Bu alanların bazıları READONLY olarak işaretlenmiştir - bunlar API tarafından döndürülür ancak ayarlanamaz.

Bildirim Sayısı Yapısı Internal Link

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:

NotificationCount Yapısı
Copy Copy
1
2interface NotificationCount {
3 id: string // user id
4 count: number
5 createdAt: string // date string
6 expireAt: string // date string
7}
8

Bildirim Yapısı Internal Link

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:

Notification Yapısı
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Birisi size yanıt verdiyse. **/
10 RepliedToMe = 0,
11 /** Birisi, yorum yaptığınız bir iş parçacığının (çocukların çocukları dahil) herhangi bir yerinde yanıt verdiyse. **/
12 RepliedTransientChild = 1,
13 /** Yorumunuz beğenildiyse (up-vote). **/
14 VotedMyComment = 2,
15 /** Abone olduğunuz bir sayfanın köküne yeni bir yorum bırakıldıysa. **/
16 SubscriptionReplyRoot = 3,
17 /** Birisi profilinize yorum yaptıysa. **/
18 CommentedOnProfile = 4,
19 /** Bir DM'niz varsa. **/
20 DirectMessage = 5,
21 /** TrialLimits yalnızca tenant kullanıcıları içindir. **/
22 TrialLimits = 6,
23 /** @mention ile bahsedildiySEN. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** SSO ile kullanıcı kimliği `<tenant id>:<user id>` biçimindedir. **/
31 userId?: string
32 /** SSO ile çalışırken yalnızca `userId` ile ilgilenmeniz gerekir. **/
33 anonUserId?: string
34 /** urlId neredeyse her zaman tanımlıdır. Yalnızca seyrek görülen tenant düzeyindeki bildirimler için isteğe bağlıdır. **/
35 urlId?: string
36 /** URL, bildirimin kaynağına hızlı gezinme için önbelleğe alınır. **/
37 url?: string
38 /** Sayfa Başlığı, bildirim kaynağının hızlı okunması için önbelleğe alınır. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Örneğin, yorum kimliği. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // date string
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName ve fromUserAvatarSrc, bildirimin hızlı görüntülenmesi için burada önbelleğe alınır. Kullanıcı güncellendiğinde güncellenirler. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Bu nesne için bildirim almayı durdurmak için bunu true olarak ayarlayın. **/
53 optedOut?: boolean
54}
55

Sayfa Yapısı Internal Link

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:

Sayfa Yapısı
Copy Copy
1
2interface Page {
3 id: string
4 urlId: string
5 url: string
6 title?: string
7 createdAt: string
8 commentCount: number
9 rootCommentCount: number
10 /** Bunu null olarak ayarlamak, tüm SSO kullanıcılarının sayfayı görebileceği anlamına gelir. Boş bir liste ise tüm kullanıcılara kapalı olduğu anlamına gelir. **/
11 accessibleByGroupIds?: string[] | null
12 /** Bu sayfa yeni yorumlara kapalı mı? **/
13 isClosed?: boolean
14}
15

Anket Yapısı Internal Link

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.

Anket Yapısı
Copy Copy
1
2interface CommentPollOption {
3 id: string
4 label: string
5 votes: number
6}
7
8interface CommentPoll {
9 question: string
10 options: CommentPollOption[]
11 totalVotes: number
12 /** Ayarlandığında ve geçmişte ise, anket kapanır ve artık oy kabul etmez. **/
13 closesAt?: string | null
14 /** 0 anonim (varsayılan), 1 yöneticiler ve moderatörler, 2 herkes. Yoksa anonim anlamına gelir. **/
15 privacy?: 0 | 1 | 2 | null
16 /** true olduğunda, sayılar henüz oy vermemiş olan herkes tarafından gizlenir. Yoksa false anlamına gelir. **/
17 requireVoteToSeeResults?: boolean | null
18}
19

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.
  • closesAt anket oluşturulduğunda gelecekte olmalıdır. Bir anketi hemen kapatmak için, geçmiş bir tarih ile PATCH yapı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-disabled yanıtını verir.
  • Oy verme, oturum açmış kullanıcılarla sınırlı olabilir; bu durumda yalnızca bir anonUserId ile gönderilen oy, poll-login-required hatasıyla reddedilir.

Anket Oy Yapısı Internal Link

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.

PollVote Yapısı
Copy Copy
1
2interface PollVote {
3 id: string
4 tenantId: string
5 commentId: string
6 urlId: string
7 /** Seçmen oturum açtığında userId, aksi takdirde anonUserId. **/
8 voterId: string
9 optionId: string
10 createdAt: string
11 /** Seçmenin oyunu en son farklı bir seçeneğe taşıdığı zaman. **/
12 updatedAt?: string
13}
14

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-votes ve GET /api/v1/poll-votes/:id poll-anonymous ile 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.

Bekleyen Webhook Olayı Yapısı Internal Link

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:

PendingWebhookEvent Yapısı
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** WordPress'e özel senkronizasyon görevi. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** Olayla ilişkili yorum kimliği. **/
17 commentId: string
18 /** Olay anındaki olaya ait yorum nesnesi. Bunları eklemeye Kasım 2023'te başladık. **/
19 comment: Comment
20 /** Yorumla ilişkilendirilmiş olabilecek harici bir kimlik. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** İlk denemeden önce ve her başarısızlıktan sonra ayarlanır. **/
26 nextAttemptAt: Date
27 /** Bunun bir oluşturma, silme veya güncelleme olayı olup olmadığı... **/
28 eventType: OutboundSyncEventType
29 /** Gerçekleştirilecek senkronizasyonun türü (WordPress, API çağrısı vb). **/
30 type: OutboundSyncType
31 /** Yorumla eşleşen alan adı. API anahtarını seçmek için bu alan adını kullanıyoruz. **/
32 domain: string
33 /** Oluşan son hata. Bu tür tiplenmemiştir ve olan her şeyin bir "dökümüdür". Genellikle statusCode, body ve bir headers haritası içeren bir nesne içerir. **/
34 lastError: object | null
35}
36

SSO Kullanıcı Yapısı Internal Link

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:

SSOUser Yapısı
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // Admin izni - Bu bayrağa sahip SSO kullanıcıları SSO Admin olarak faturalandırılır (normal SSO kullanıcılardan ayrı)
16 isAdminAdmin?: boolean // Admin izni - Bu bayrağa sahip SSO kullanıcıları SSO Admin olarak faturalandırılır (normal SSO kullanıcılardan ayrı)
17 isCommentModeratorAdmin?: boolean // Moderatör izni - Bu bayrağa sahip SSO kullanıcıları SSO Moderatör olarak faturalandırılır (normal SSO kullanıcılardan ayrı)
18 /** If null, Access Control will not be applied to the user. If an empty list, this user will not be able to see any pages or @mention other users. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Don't let other users see this user's activity, including comments, on their profile. Default is true to provide secure profiles by default. **/
22 isProfileActivityPrivate?: boolean
23 /** Don't let other users leave comments on the user's profile, or see existing profile comments. Default false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Don't let other users send direct messages to this user. Default false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Optional configuration for user badges. **/
29 badgeConfig?: {
30 /** Array of badge IDs to assign to the user. Limited to 30 badges. Order is respected. These are global badges visible on all pages. **/
31 badgeIds: string[]
32 /** Array of badge IDs scoped to the current page (urlId). These badges are only displayed on the page where they were assigned. **/
33 pageBadgeIds?: string[]
34 /** If true, replaces all existing displayed badges with the provided ones. Global and page-scoped badges are overridden independently. If false, adds to existing badges. **/
35 override?: boolean
36 /** If true, updates badge display properties from tenant configuration. **/
37 update?: boolean
38 }
39}
40

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: isAccountOwner veya isAdminAdmin bayraklarına sahip kullanıcılar ayrı olarak SSO Admin olarak faturalandırılır (normal kiracı adminleriyle aynı ücret)
  • SSO Moderatörler: isCommentModeratorAdmin bayrağı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.

Abonelik Yapısı Internal Link

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:

Subscription Yapısı
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** SSO ile kullanıcı kimliği `<tenant id>:<user id>` formatındadır. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // tarih dizisi
12}
13

Kiracı Günlük Kullanım Yapısı Internal Link

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:

TenantDailyUsage Yapısı
Copy Copy
1
2export interface TenantDailyUsage {
3 yearNumber: number
4 monthNumber: number
5 dayNumber: number
6 commentFetchCount?: number
7 commentCreateCount?: number
8 conversationCreateCount?: number
9 voteCount?: number
10 accountCreatedCount?: number
11 userMentionSearch?: number
12 hashTagSearch?: number
13 gifSearchTrending?: number
14 gifSearch?: number
15 apiCreditsUsed?: number
16 createdAt: string
17 billed: boolean
18 /** Faturalandırma için yok sayılır. **/
19 ignored: boolean
20}
21

Kiracı Yapısı Internal Link

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:

Tenant Yapısı
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Bu, DomainConfig API aracılığıyla da işlenebilir. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // muhtemelen Unknown kullanmak istersiniz
14 logoSrc?: string, // ham resim yolu
15 logoSrc100px?: string, // küçük resimler için yeniden boyutlandırılmış
16 footerUnsubscribeURL?: string,
17 emailHeaders?: Record<string, string>,
18 disableUnsubscribeLinks?: boolean,
19 dkim?: {
20 domainName: string,
21 keySelector: string,
22 privateKey: string
23 }
24}
25
26export interface TenantBillingInfo {
27 name: string
28 address: string
29 city: string
30 state: string
31 zip: string
32 country: string
33}
34
35export enum TenantPaymentFrequency {
36 Monthly = 0,
37 Annually = 1
38}
39
40export interface Tenant {
41 id: string
42 name: string
43 email?: string
44 signUpDate: number; // sayı, "legacy" nedenlerden dolayı
45 packageId?: string | null
46 paymentFrequency?: TenantPaymentFrequency
47 billingInfoValid?: boolean
48 billingHandledExternally?: boolean
49 createdBy?: string
50 isSetup?: boolean
51 domainConfiguration: FastCommentsAPITenantDomainConfig[]
52 billingInfo?: FastCommentsAPITenantBillingInfo
53 stripeCustomerId?: string
54 stripeSubscriptionId?: string
55 stripePlanId?: string
56 enableProfanityFilter?: boolean
57 enableSpamFilter?: boolean
58 lastBillingIssueReminderDate?: string
59 removeUnverifiedComments?: boolean
60 unverifiedCommentsTTLms?: number
61 commentsRequireApproval?: boolean
62 autoApproveCommentOnVerification?: boolean
63 sendProfaneToSpam?: boolean
64 /** @readonly - packageId'ye göre hesaplanır. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - packageId'ye göre hesaplanır. **/
69 hasAuditing?: boolean
70 /** Kiracıyla sorgulamada kullanabileceğiniz bir anahtar-değer çifti saklayabilirsiniz. Anahtarlar "." veya "$" içeremez veya 100 karakterden uzun olamaz. Değerler 2k karakterden uzun olamaz. **/
71 meta?: Record<string, string | null>
72}
73

Kullanıcı Yapısı Internal Link

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:

Kullanıcı Yapısı
Copy Copy
1
2export interface User {
3 /** Bu, yorum nesnelerindeki userId olarak da kullanılan id'dir. **/
4 id: string
5 username: string
6 /** Örneğin yorumcunun bloguna bir bağlantı. **/
7 websiteUrl?: string
8 email: string
9 signUpDate: number
10 createdFromUrlId: string
11 createdFromTenantId: string
12 avatarSrc?: string
13 locale: FastCommentsLocale
14 displayLabel?: string
15 karma?: number
16}
17

Oy Yapısı Internal Link

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:

Vote Yapısı
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

Soru Config Yapısı Internal Link

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:

QuestionConfig Yapısı
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** SADECE OKUNUR - her yeni yanıta göre artırılır. **/
13 usedCount: number
14 /** Yapılandırmanın en son ne zaman kullanıldığına (sonucun bırakıldığı) dair bir tarih dizgesi. **/
15 lastUsed?: string
16 type: QuestionConfigType
17 numStars?: number
18 min?: number
19 max?: number
20 defaultValue?: number
21 labelNegative?: string
22 labelPositive?: string
23 subQuestionIds?: string[]
24 alwaysShowSubQuestions?: boolean
25 reportingOrder: number
26}
27

Soru Sonucu Yapısı Internal Link

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.

QuestionResult Yapısı
Copy Copy
1
2interface QuestionResultMeta {
3 name: string
4 values: string[]
5}
6
7interface QuestionResult {
8 id: string
9 tenantId: string
10 urlId: string
11 anonUserId?: string
12 userId?: string
13 createdAt?: string
14 value: number
15 commentId?: string
16 questionId: string
17 meta?: QuestionResultMeta[]
18}
19

Kullanıcı Rozeti Yapısı Internal Link

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:

UserBadge Yapısı
Copy Copy
1
2export interface UserBadge {
3 /** Bu kullanıcı rozet atamasının benzersiz tanımlayıcısı */
4 id: string
5 /** Bu rozeti alan kullanıcının ID'si */
6 userId: string
7 /** Tenant'ın rozet kataloğundan rozet tanımının ID'si */
8 badgeId: string
9 /** Bu rozeti oluşturan/atan tenant'ın ID'si */
10 fromTenantId: string
11 /** Bu rozetin oluşturulduğu zaman (epoch'tan itibaren milisaniye) */
12 createdAt?: number
13 /** Bu rozetin kullanıcı tarafından alındığı zaman (epoch'tan itibaren milisaniye) */
14 receivedAt?: number
15 /**
16 * Rozet türü:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** Eşik tabanlı rozetler için eşik değeri */
25 threshold?: number
26 /** Rozetin adı/etiketi */
27 name?: string
28 /** Rozetin ayrıntılı açıklaması */
29 description?: string
30 /** Rozette gösterilen metin */
31 displayLabel?: string
32 /** Rozette gösterilen görselin URL'si */
33 displaySrc?: string
34 /** Rozet için arka plan rengi (hex kodu) */
35 backgroundColor?: string
36 /** Rozet için çerçeve rengi (hex kodu) */
37 borderColor?: string
38 /** Rozet için metin rengi (hex kodu) */
39 textColor?: string
40 /** Stil için ek CSS sınıfı */
41 cssClass?: string
42 /** Veteran rozetleri için zaman eşiği (milisaniye cinsinden) */
43 veteranUserThresholdMillis?: number
44 /** Bu rozetin kullanıcının yorumlarında gösterilip gösterilmediği */
45 displayedOnComments: boolean
46 /** Rozetin gösterim sırası */
47 order?: number
48 /** Belirlenmişse, bu rozet yalnızca eşleşen urlId'ye sahip sayfada gösterilir. Genel rozetler için null. */
49 urlId?: string | null
50}
51

Kullanıcı Rozet İlerlemesi Yapısı Internal Link

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:

UserBadgeProgress Yapısı
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Bu ilerleme kaydının benzersiz tanımlayıcısı */
4 id: string
5 /** Bu ilerleme kaydının ait olduğu kiracı (tenant) kimliği */
6 tenantId: string
7 /** Bu ilerleme kaydının takip ettiği kullanıcının kimliği */
8 userId: string
9 /** Kullanıcının sistemdeki ilk yorumunun kimliği */
10 firstCommentId?: string
11 /** Kullanıcının ilk yorumunun tarihi (epoch'tan beri geçen milisaniye) */
12 firstCommentDate?: number
13 /** Kullanıcı etkinliğine göre otomatik hesaplanan güven faktörü */
14 autoTrustFactor?: number
15 /** Yöneticiler tarafından manuel olarak ayarlanan güven faktörü */
16 manualTrustFactor?: number
17 /** Çeşitli metriklerle ilgili ayrıntılı ilerleme nesnesi, anahtarlar BadgeType enum ile eşleşir */
18 progress: {
19 /** 0: CommentCount - Kullanıcının yaptığı yorum sayısı */
20 '0'?: number
21 /** 1: CommentUpVotes - Kullanıcının aldığı beğeni (upvote) sayısı */
22 '1'?: number
23 /** 2: CommentReplies - Kullanıcının yaptığı yanıt sayısı */
24 '2'?: number
25 /** 3: CommentsPinned - Kullanıcının sabitlenmiş yorum sayısı */
26 '3'?: number
27 /** 4: Veteran - Kullanıcının hesap yaşı */
28 '4'?: number
29 /** 5: NightOwl - Kullanıcının gece saatlerinde paylaşım yapma sayısı */
30 '5'?: number
31 /** 6: FastReplyTime - Milisaniye cinsinden ortalama yanıt süresi */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Moderatör rozetleri için, silinen yorum sayısı */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Moderatör rozetleri için, onaylanan yorum sayısı */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Moderatör rozetleri için, onaydan kaldırılan yorum sayısı */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Moderatör rozetleri için, incelenen yorum sayısı */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Moderatör rozetleri için, spam olarak işaretlenen yorum sayısı */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Moderatör rozetleri için, spam değil olarak işaretlenen yorum sayısı */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Her sayfa için yanıt sayısı */
46 '13'?: Record<string, number>
47 }
48}
49

Sonuç olarak

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