FastComments.com

FastComments API

FastComments pruža API za interakciju sa mnogim resursima. Izgradite integracije sa našom platformom, ili čak napravite sopstvene klijente!

U ovoj dokumentaciji pronaći ćete sve resurse koje podržava API, dokumentovane sa njihovim tipovima zahteva i odgovora.

Za Enterprise korisnike, sav pristup API-ju se beleži u Audit logu.

Generisani SDK-i

FastComments sada generiše API specifikacija iz našeg koda (ovo još nije kompletno, ali uključuje mnoge API-je).

Takođe sada imamo SDK-ove za popularne jezike:

Autentifikacija

API se autentifikuje prosleđivanjem vašeg API ključa kao ili X-API-KEY headera ili API_KEY query parametra. Takođe će vam biti potreban vaš tenantId za pozivanje API-ja. To možete preuzeti sa iste stranice kao i vaš API ključ.

Napomena o bezbednosti

Ove rute su namenjene da budu pozivane sa servera. NE POZIVAJTE ih iz pregledača. Ako to uradite, izložićete vaš API ključ — to će omogućiti potpuni pristup vašem nalogu svima koji mogu da vide izvorni kod stranice!

Opcija autentifikacije 1 - Headeri

  • Zaglavlje: X-API-KEY
  • Zaglavlje: X-TENANT-ID

Opcija autentifikacije 2 - Parametri upita

  • Parametar upita: API_KEY
  • Parametar upita: tenantId

Struktura audit loga Internal Link

AuditLog je objekat koji predstavlja evidentirani događaj za tenant-e koji imaju pristup ovoj funkciji.

Struktura za AuditLog objekat je sledeća:

Struktura AuditLog objekta
Copy Copy
1
2interface AuditLog {
3 id: string;
4 userId?: string;
5 username?: string;
6 resourceName: string;
7 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
8 from: string;
9 url?: string;
10 ip?: string;
11 when: string;
12 description?: string;
13 serverStartDate: string;
14 objectDetails?: object;
15}
16

Audit log je nepromenljiv. Takođe se u njega ne može ručno pisati. FastComments.com jedino odlučuje kada će se upisati u audit log. Međutim, možete ga čitati putem ovog API-ja.

Događaji u audit logu ističu nakon dve godine.

Struktura komentara Internal Link

Objekat Comment predstavlja komentar koji je ostavio korisnik.

Odnos između roditeljskih i podređenih komentara definiše se preko parentId.

Struktura objekta Comment je sledeća:

Struktura komentara
Copy Copy
1
2interface Comment {
3 /** SAMO ZA ČITANJE: Postavljeno na true ako je spam mehanizam utvrdio da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Da li je komentar odobren za prikaz. Postavi se na true prilikom čuvanja komentara, inače će biti sakriven. **/
6 approved?: boolean
7 /** Avatar korisnika. **/
8 avatarSrc?: string
9 /** Podkomentari. Nisu popunjeni u svim scenarijima. Koriste se kada je asTree podešeno na true preko API-ja. **/
10 children: Comment[]
11 /** Originalni komentar autora. **/
12 comment: string
13 /** SAMO ZA ČITANJE: Komentar autora parsiran u HTML. **/
14 commentHTML?: string
15 /** Email autora komentara. Obavezno ako je anonimno komentarisanje isključeno. **/
16 commenterEmail?: string
17 /** Link autora komentara (na primer, njihov blog). **/
18 commenterLink?: string
19 /** Ime autora komentara. Uvek obavezno. Ako nije dostupno, postavite nešto poput "Anonymous". **/
20 commenterName: string
21 /** Datum kada je komentar ostavljen, u UTC epoch formatu. **/
22 date: number
23 /** "Prikazna oznaka" za komentar - na primer "Admin", "Moderator", ili nešto kao "VIP User". **/
24 displayLabel?: string
25 /** Domen na kojem je komentar objavljen. **/
26 domain?: string
27 /** SAMO ZA ČITANJE: Broj puta koliko je komentar prijavljen. **/
28 flagCount?: number
29 /** Hashtagovi (#) napisani u komentaru koji su uspešno parsirani. Takođe možete ručno dodati hashtagove za pretragu, ali oni se neće automatski prikazivati u tekstu komentara. **/
30 hashTags?: CommentHashTag[]
31 /** SAMO ZA ČITANJE: Da li komentar sadrži slike? **/
32 hasImages?: boolean
33 /** SAMO ZA ČITANJE: Da li komentar sadrži linkove? **/
34 hasLinks?: boolean
35 /** SAMO ZA ČITANJE: Jedinstveni id komentara. **/
36 id: string
37 /** Samo pri kreiranju! Ovo se hešira za čuvanje. **/
38 ip?: string
39 /** SAMO ZA ČITANJE: Da li je trenutni korisnik blokirao korisnika koji je napisao ovaj komentar? **/
40 isBlocked?: boolean
41 /** SAMO ZA ČITANJE: Da li je komentar napisao administrator? Automatski se postavlja na osnovu userId. **/
42 isByAdmin?: boolean
43 /** SAMO ZA ČITANJE: Da li je komentar napisao moderator? Automatski se postavlja na osnovu userId. **/
44 isByModerator?: boolean
45 /** Postaviti na true ako je komentar "soft deleted" (ostavljen je zamenski zapis zbog neke druge konfiguracije). **/
46 isDeleted?: boolean
47 /** Postaviti na true ako je nalog korisnika obrisan, a komentar je morao biti zadržan. **/
48 isDeletedUser?: boolean
49 /** SAMO ZA ČITANJE: Da li je komentar prijavljen od strane trenutno prijavljenog korisnika (contextUserId)? **/
50 isFlagged?: boolean
51 /** Da li je komentar pinovan? **/
52 isPinned?: boolean
53 /** Da li je komentar zaključan za nove odgovore (moderatori i dalje mogu odgovoriti)? **/
54 isLocked?: boolean
55 /** Da li je komentar spam? **/
56 isSpam?: boolean
57 /** SAMO ZA ČITANJE: Da li je komentar ocenjen negativno od strane trenutnog korisnika (contextUserId)? **/
58 isVotedDown?: boolean
59 /** SAMO ZA ČITANJE: Da li je komentar ocenjen pozitivno od strane trenutnog korisnika (contextUserId)? **/
60 isVotedUp?: boolean
61 /** Lokal (jezik) komentara. Ako nije naveden, biće izveden iz Accept-Language HTTP zaglavlja. **/
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 /** SAMO ZA ČITANJE: @pominjanja napisana u komentaru koja su uspešno parsirana. **/
64 mentions?: CommentUserMention[]
65 /** Opcioni meta-podaci povezani sa komentarom. **/
66 meta?: Record<string, string | number | boolean>
67 /** Opcionalna lista ID-jeva grupa za moderaciju povezanih sa ovim komentarom. **/
68 moderationGroupIds?: string[]|null
69 /** SAMO ZA ČITANJE: ID objekta glasanja koji odgovara glasu trenutnog korisnika (contextUserId) za ovaj komentar. **/
70 myVoteId?: string
71 /** Da li su notifikacije poslate za ovaj komentar komentatorima. Da biste sprečili slanje notifikacija prilikom uvoza, postavite ovo na true. **/
72 notificationSentForParent?: boolean
73 /** Da li su notifikacije poslate za ovaj komentar korisnicima tenanta. Da biste sprečili slanje notifikacija prilikom uvoza, postavite ovo na true. **/
74 notificationSentForParentTenant?: boolean
75 /** Naslov stranice na kojoj se ovaj komentar nalazi. **/
76 pageTitle?: string
77 /** Ako odgovaramo na komentar, ovo je ID na koji odgovaramo. **/
78 parentId?: string|null
79 /** Da li je komentar označen kao pregledan. **/
80 reviewed: boolean
81 /** ID tenanta kome komentar pripada. **/
82 tenantId: string
83 /** Korisnik koji je napisao komentar. Kreira se automatski prilikom čuvanja komentara sa imenom/email-om. **/
84 userId?: string|null
85 /** URL lokacije na kojoj je ovaj komentar vidljiv, na primer objava na blogu. **/
86 url: string
87 /** "Očišćena" verzija urlId koju ste prosledili. Prilikom čuvanja specificirate ovo polje, ali kada dobijete komentar nazad ovo će biti "očišćeno" i vaša originalna vrednost prebačena u "urlIdRaw". **/
88 urlId: string
89 /** SAMO ZA ČITANJE: Originalni urlId koji ste prosledili. **/
90 urlIdRaw?: string
91 /** Da li su korisnik i ovaj komentar verifikovani? **/
92 verified: boolean
93 /** Broj pozitivnih glasova. **/
94 votesUp?: number
95 /** Broj negativnih glasova. **/
96 votesDown?: number
97 /** "Karma" komentara (= broj pozitivnih glasova - broj negativnih glasova). **/
98 votes?: number
99}
100

Neka od ovih polja su označena kao READONLY - ta polja se vraćaju iz API-ja, ali se ne mogu postaviti.

Struktura teksta komentara

Komentari su napisani u FastComments varijanti markdown-a, koja je samo markdown plus tradicionalne bbcode stil oznake za slike, kao što je [img]path[/img].

Tekst se čuva u dva polja. Tekst koji je korisnik uneo se čuva neizmenjen u polju comment. Ovo se renderuje i čuva u polju commentHTML.

Dozvoljeni HTML tagovi su b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

Preporučuje se renderovanje HTML-a, s obzirom da je to vrlo mali podskup HTML-a, pa je izgradnja renderera prilično jednostavna. Na primer, postoji više biblioteka za React Native i Flutter koje mogu pomoći u tome

Možete izabrati da renderujete ne-normalizovanu vrednost polja comment. Primer parsera je ovde..

Primer parsera se takođe može prilagoditi da radi sa HTML-om i da transformiše HTML tagove u očekivane elemente za renderovanje na vašoj platformi.

Obeležavanje

Kada su korisnici označeni u komentaru, informacije se čuvaju u listi nazvanoj mentions. Svaki objekat u toj listi ima sledeću strukturu.

Objekat pomena komentara
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ID korisnika. Za SSO korisnike, biće prefiksiran vašim tenant ID-jem. **/
4 id: string
5 /** Konačni tekst @mention tag-a, uključujući simbol @. **/
6 tag: string
7 /** Originalni tekst @mention tag-a, uključujući simbol @. **/
8 rawTag: string
9 /** Koji tip korisnika je označen. user = FastComments.com nalog. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Ako se korisnik odjavi od notifikacija, ovo će i dalje biti postavljeno na true. **/
12 sent: boolean
13}
14

Hashtagovi

Kada se hashtagovi koriste i uspešno parsiraju, informacije se čuvaju u listi nazvanoj hashTags. Svaki objekat u toj listi ima sledeću strukturu. Hashtagove takođe možete ručno dodati u niz hashTags komentara za pretragu, ako je retain postavljeno.

Objekat Hashtag-a komentara
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ID hashtaga. **/
4 id: string
5 /** Konačni tekst #hashtag taga, uključujući simbol #. **/
6 tag: string
7 /** Ako je hashtag povezan sa prilagođenim URL-om, ovo će biti definisano. **/
8 url?: string
9 /** Da li treba zadržati hashtag, čak i ako ne postoji u tekstu komentara, kada se komentar ažurira. Korisno za označavanje komentara bez menjanja teksta komentara. **/
10 retain?: boolean
11}
12

Struktura šablona e-pošte Internal Link


Objekat EmailTemplate predstavlja konfiguraciju za prilagođeni email šablon, za tenant.

Sistem će izabrati email šablon za upotrebu na osnovu:

  • Njegovog identifikatora tipa, koji nazivamo emailTemplateId. To su konstante.
  • domain. Prvo ćemo pokušati da pronađemo šablon za domen sa kojim je povezan relevantan objekat (npr. Comment), a ako se poklapanje ne pronađe pokušaćemo da pronađemo šablon gde je domain null ili *.

Struktura objekta EmailTemplate je sledeća:

Struktura email šablona
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** SAMO ZA ČITANJE **/
8 createdAt: string
9 /** SAMO ZA ČITANJE **/
10 updatedAt: string
11 /** SAMO ZA ČITANJE **/
12 updatedByUserId: string
13 /** Domen sa kojim bi šablon trebalo da bude povezan. **/
14 domain?: string | '*' | null
15 /** Sadržaj email šablona u EJS sintaksi. **/
16 ejs: string
17 /** Mapa zamenjenih prevodnih ključeva na vrednosti, za svaki podržani locale. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Objekat koji predstavlja kontekst renderovanja šablona. **/
20 testData: object
21}
22

Napomene

  • Možete dobiti validne emailTemplateId vrednosti sa /definitions endpoint-a.
  • /definitions endpoint takođe uključuje podrazumevane prevode i test podatke.
  • Šabloni neće moći da se sačuvaju ako struktura ili test podaci nisu validni.

Struktura haštagova Internal Link

Objekat HashTag predstavlja oznaku koju korisnik može ostaviti. HashTags se mogu koristiti za povezivanje sa spoljnim sadržajem ili za povezivanje povezanih komentara.

Struktura HashTag objekta je sledeća:

Struktura HashTag objekta
Copy Copy
1
2interface HashTag {
3 /** Treba da počinje sa "#" ili željenim karakterom. **/
4 tag: string
5 /** Opcioni URL na koji hashtag može da pokazuje. Umesto filtriranja komentara po hashtag-u, UI će preusmeriti na ovaj URL nakon klika. **/
6 url?: string
7 /** SAMO ZA ČITANJE **/
8 createdAt: string
9}
10

Napomene:

  • U nekim API endpoint-ima videćete da se hashtag koristi u URL-u. Zapamtite da treba URI-enkodirati vrednosti. Na primer, # bi trebalo da bude predstavljeno kao %23.
  • Neki od ovih polja su označeni kao READONLY - ona se vraćaju iz API-ja, ali se ne mogu postaviti.

Struktura broja obaveštenja Internal Link

Objekat NotificationCount predstavlja broj nepročitanih obaveštenja i metapodatke za korisnika.

Ako nema nepročitanih obaveštenja, za korisnika neće postojati NotificationCount.

NotificationCount objekti se automatski kreiraju i ne mogu se kreirati preko API-ja. Takođe ističu nakon jedne godine.

Možete obrisati broj nepročitanih obaveštenja korisnika tako što ćete izbrisati njihov NotificationCount.

Struktura objekta NotificationCount je sledeća:

Struktura NotificationCount
Copy Copy
1
2interface NotificationCount {
3 id: string // id korisnika
4 count: number
5 createdAt: string // datum kao string
6 expireAt: string // datum kao string
7}
8

Struktura obaveštenja Internal Link

A Notification objekat predstavlja notifikaciju za korisnika.

Notification objekti se kreiraju automatski i ne mogu se kreirati preko API-ja. Takođe ističu nakon jedne godine. Notifikacije se ne mogu obrisati. Međutim, mogu se ažurirati da se viewed postavi na false, i možete ih pretraživati po viewed.

Korisnik se takođe može odjaviti od notifikacija za određeni komentar postavljanjem optedOut u notifikaciji na true. Možete se ponovo prijaviti postavljanjem na false.

Postoje različiti tipovi notifikacija - proverite relatedObjectType i type.

Načini na koje se notifikacije kreiraju su prilično fleksibilni i mogu biti pokrenuti u mnogim scenarijima (videti NotificationType).

U ovom trenutku, postojanje Notification zapravo ne znači da je email poslat ili da bi trebao biti poslat. Umesto toga, notifikacije se koriste za feed notifikacija i povezane integracije.

The structure for the Notification object is as follows:

Struktura objekta Notification
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Ako vam je neko odgovorio. **/
10 RepliedToMe = 0,
11 /** Ako je neko odgovorio bilo gde u niti (čak i u potomcima potomaka) na kojoj ste komentarisali. **/
12 RepliedTransientChild = 1,
13 /** Ako je neko glasao za vaš komentar. **/
14 VotedMyComment = 2,
15 /** Ako je ostavljen novi komentar na korenu stranice na koju ste pretplaćeni. **/
16 SubscriptionReplyRoot = 3,
17 /** Ako je neko komentarisao vaš profil. **/
18 CommentedOnProfile = 4,
19 /** Ako imate privatnu poruku. **/
20 DirectMessage = 5,
21 /** TrialLimits je samo za korisnike tenanta. **/
22 TrialLimits = 6,
23 /** Ako ste bili pomenuti. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** Sa SSO, user id je u formatu `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Kada radite sa SSO, treba da brinete samo o `userId`. **/
33 anonUserId?: string
34 /** urlId je skoro uvek definisan. Opcionalan je samo za notifikacije na nivou tenanta, koje su retke. **/
35 urlId?: string
36 /** URL je keširan za brzu navigaciju do izvora notifikacije. **/
37 url?: string
38 /** Naslov stranice je keširan za brzo čitanje izvora notifikacije. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Na primer, id komentara. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // date string
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName i fromUserAvatarSrc su ovde keširani za brzo prikazivanje notifikacije. Ažuriraju se kada se korisnik ažurira. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Postavite ovo na true da biste prestali da dobijate notifikacije za ovaj objekat. **/
53 optedOut?: boolean
54}
55

Struktura stranice Internal Link

Objekat Page predstavlja stranicu kojoj može pripadati mnogo komentara. Ovaj odnos je definisan preko urlId.

Page čuva informacije kao što su naslov stranice, broj komentara i urlId.

Struktura za Page objekat je sledeća:

Struktura Page objekta
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 /** Postavljanje na null znači da svi SSO korisnici mogu videti stranicu. Prazna lista znači da je zatvorena za sve korisnike. **/
11 accessibleByGroupIds?: string[] | null
12 /** Da li je ova stranica zatvorena za nove komentare? **/
13 isClosed?: boolean
14}
15

Struktura očekivanog webhook događaja Internal Link


Objekat PendingWebhookEvent predstavlja webhook događaj koji stoji u redu i čeka obradu.

PendingWebhookEvent objekti se kreiraju automatski i ne mogu se ručno kreirati putem API-ja. Takođe ističu nakon jedne godine. Mogu se obrisati što uklanja zadatak iz reda.

Postoje različiti tipovi događaja - proverite eventType (OutboundSyncEventType) i type (OutboundSyncType).

Uobičajen slučaj upotrebe ovog API-ja je implementacija prilagođenog nadzora. Možda ćete želeti da pozivate /count endpoint periodično da biste ispitivali broj stavki na čekanju za date filtere.

Struktura PendingWebhookEvent objekta je sledeća:

Struktura objekta PendingWebhookEvent
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** Zadatak sinhronizacije specifičan za WordPress. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** ID komentara povezan sa događajem. **/
17 commentId: string
18 /** Objekat komentara za događaj u trenutku događaja. Počeli smo da ih dodajemo u novembru 2023. **/
19 comment: Comment
20 /** Spoljni id koji može biti povezan sa komentarom. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Podešava se pre prvog pokušaja i nakon svakog neuspeha. **/
26 nextAttemptAt: Date
27 /** Da li je u pitanju događaj kreiranja, brisanja ili ažuriranja... **/
28 eventType: OutboundSyncEventType
29 /** Tip sinhronizacije koja treba da se izvrši (WordPress, poziv API-ja, itd.). **/
30 type: OutboundSyncType
31 /** Domen koji je odgovarao komentaru. Koristimo ovaj domen za izbor API ključa. **/
32 domain: string
33 /** Poslednja greška koja se desila. Ovaj tip nije tipiziran i predstavlja "dump" onoga što se desilo. Obično sadrži objekat sa statusCode, body, i mapom headers. **/
34 lastError: object | null
35}
36

Struktura SSO korisnika Internal Link

FastComments pruža jednostavno SSO rešenje. Ažuriranje informacija o korisniku pomoću HMAC-integracije je jednostavno kao učitavanje stranice od strane korisnika sa ažuriranim payload-om.

Međutim, može biti poželjno upravljati korisnikom van tog toka, radi poboljšanja konzistentnosti vaše aplikacije.

SSO User API pruža način za CRUD objekata koje nazivamo SSOUsers. Ovi objekti se razlikuju od regularnih Users i držani su odvojeno radi bezbednosti tipova.

Struktura SSOUser objekta je sledeća:

Struktura SSOUser
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 // Dozvola administratora - SSO korisnici sa ovom zastavicom se fakturišu kao SSO Admins (odvojeno od regularnih SSO korisnika)
16 isAdminAdmin?: boolean // Dozvola administratora - SSO korisnici sa ovom zastavicom se fakturišu kao SSO Admins (odvojeno od regularnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Dozvola moderatora - SSO korisnici sa ovom zastavicom se fakturišu kao SSO Moderators (odvojeno od regularnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa neće biti primenjena na korisnika. Ako je prazan spisak, ovaj korisnik neće moći da vidi nijednu stranicu niti da @mention-uje druge korisnike. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dozvolite drugim korisnicima da vide aktivnost ovog korisnika, uključujući komentare, na njegovom profilu. Podrazumevano je true kako bi profili bili podrazumevano sigurni. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dozvolite drugim korisnicima da ostavljaju komentare na korisnikovom profilu, niti da vide postojeće komentare na profilu. Podrazumevano false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dozvolite drugim korisnicima da šalju direktne poruke ovom korisniku. Podrazumevano false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Opcionalna konfiguracija za značke korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-jeva znački koje će biti dodeljene korisniku. Ograničeno na 30 znački. Redosled se poštuje. **/
31 badgeIds: string[]
32 /** Ako je true, zamenjuje sve postojeće prikazane značke sa dostavljenim. Ako je false, dodaje se postojećim značkama. **/
33 override?: boolean
34 /** Ako je true, ažurira svojstva prikaza znački iz konfiguracije tenant-a. **/
35 update?: boolean
36 }
37}
38

Naplata za SSO korisnike

SSO korisnici se naplaćuju različito u zavisnosti od njihovih dozvola:

  • Regular SSO Users: Korisnici bez administratorskih ili moderatorskih dozvola se naplaćuju kao regularni SSO korisnici
  • SSO Admins: Korisnici sa isAccountOwner ili isAdminAdmin zastavicama se naplaćuju odvojeno kao SSO Admins (isti tarifni razred kao regularni tenant admini)
  • SSO Moderators: Korisnici sa isCommentModeratorAdmin zastavicom se naplaćuju odvojeno kao SSO Moderators (isti tarifni razred kao regularni moderatori)

Važno: Da bi se sprečilo dvostruko naplaćivanje, sistem automatski deduplicira SSO korisnike naspram regularnih tenant korisnika i moderatora po email adresi. Ako SSO korisnik ima isti email kao regularni tenant korisnik ili moderator, neće biti naplaćen dva puta.

Kontrola pristupa

Korisnici mogu biti podeljeni u grupe. Za to služi polje groupIds, i nije obavezno.

@Mentions

Po podrazumevanoj vrednosti, @mentions će koristiti username za pretragu drugih sso korisnika kada se unese karakter @. Ako se koristi displayName, tada će rezultati koji odgovaraju username biti zanemareni kada postoji poklapanje za displayName, i rezultati pretrage za @mention će koristiti displayName.

Pretplate

Sa FastComments, korisnici se mogu pretplatiti na stranicu klikom na ikonicu zvona u widgetu za komentare i izborom Subscribe.

Kod regularnog korisnika, šaljemo im email notifikacije na osnovu njihovih podešavanja za notifikacije.

Kod SSO korisnika, razdvajamo ovo radi kompatibilnosti unazad. Korisnici će dobijati ove dodatne emailove o pretplati samo ako postavite optedInSubscriptionNotifications na true.

Značke

Možete dodeljivati značke SSO korisnicima pomoću svojstva badgeConfig. Značke su vizuelni indikatori koji se pojavljuju pored imena korisnika u komentarima.

  • badgeIds - Niz ID-jeva znački koje će biti dodeljene korisniku. Moraju biti važeći ID-jevi znački kreirani na vašem FastComments nalogu. Ograničeno na 30 znački.
  • override - Ako je true, sve postojeće značke prikazane na komentarima biće zamenjene navedenim. Ako je false ili izostavljeno, navedene značke biće dodate postojećim značkama.
  • update - Ako je true, svojstva prikaza znački će se ažurirati iz konfiguracije tenant-a kad god se korisnik prijavi.

Struktura pretplate Internal Link

Subscription objekat predstavlja pretplatu za korisnika.

Subscription objekti se kreiraju kada korisnik klikne na ikonu zvona za obaveštenja u komentarskom widgetu i klikne na "Pretplati se na ovu stranicu".

Pretplate se takođe mogu kreirati putem API-ja.

Pojava Subscription objekta izaziva generisanje Notification objekata i slanje mejlova kada se ostave novi komentari na root-u povezane stranice za koju je Subscription. Slanje mejlova zavisi od tipa korisnika. Za obične korisnike ovo zavisi od optedInNotifications. Za SSO korisnike ovo zavisi od optedInSubscriptionNotifications. Imajte na umu da neke aplikacije možda nemaju koncept veb-pristupačne stranice, u kom slučaju jednostavno postavite urlId na id stavke na koju se pretplaćujete (ista vrednost za urlId koju biste prosledili komentarskom widgetu).

Struktura za Subscription objekat je sledeća:

Struktura Subscription objekta
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** Kod SSO, user id je u formatu `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // string datuma
12}
13

Struktura dnevne upotrebe zakupca Internal Link

Objekat TenantDailyUsage predstavlja upotrebu za tenant-a za određeni dan. Ako nije bilo aktivnosti za datog tenant-a na određen dan, taj dan neće imati objekat TenantDailyUsage.

Objekat TenantDailyUsage je NIJE u realnom vremenu i može kasniti za nekoliko minuta u odnosu na stvarnu upotrebu.

Struktura objekta TenantDailyUsage je sledeća:

Struktura TenantDailyUsage
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 /** Ignorisano za naplatu. **/
19 ignored: boolean
20}
21

Struktura zakupca Internal Link

Tenant definiše FastComments.com kupca. Mogu se kreirati preko API-ja od strane tenanta koji imaju pristup za white labeling. White labeled tenanti ne mogu kreirati druge white labeled tenante (dozvoljen je samo jedan nivo ugnježđivanja).

Struktura Tenant objekta je sledeća:

Struktura Tenant objekta
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Ovo se takođe može rešiti putem DomainConfig API-ja. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // verovatno želite Unknown
14 logoSrc?: string, // putanja do originalne slike
15 logoSrc100px?: string, // promenjena veličina za sličice
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; // broj zbog "legacy" razloga
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 - Izračunava se na osnovu packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Izračunava se na osnovu packageId. **/
69 hasAuditing?: boolean
70 /** Možete sačuvati par ključ-vrednost sa tenant-om koji možete koristiti za upite. Ključevi ne mogu sadržati "." ili "$", ili biti duži od 100 karaktera. Vrednosti ne mogu biti duže od 2k karaktera. **/
71 meta?: Record<string, string | null>
72}
73

Struktura korisnika Internal Link

User je objekat koji predstavlja najčešći zajednički imenilac svih korisnika.

Imajte na umu da u FastComments imamo više različitih slučajeva upotrebe za korisnike:

  • Secure SSO
  • Simple SSO
  • Tenant korisnici (na primer: Administratori)
  • Komentatori

Ovaj API je za Komentatore i korisnike kreirane putem Simple SSO. U suštini, svaki korisnik kreiran preko vašeg sajta može se pristupiti putem ovog API-ja. Tenant korisnici takođe mogu biti dobijeni na ovaj način, ali ćete dobiti više informacija koristeći /tenant-users/ API.

Za Secure SSO koristite /sso-users/ API.

Ne možete izmeniti ove tipove korisnika. Oni su kreirali svoj nalog preko vašeg sajta, tako da pružamo osnovni pristup samo za čitanje, ali ne možete vršiti izmene. Ako želite imati ovaj tip toka - morate podesiti Secure SSO.

Struktura za the User objekat je sledeća:

Struktura objekta User
Copy Copy
1
2export interface User {
3 /** Ovo je takođe id koji se koristi kao userId na objektima komentara. **/
4 id: string
5 username: string
6 /** Link ka blogu komentatora, na primer. **/
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

Struktura glasa Internal Link

Objekat Vote predstavlja glas koji je ostavio korisnik.

Veza između komentara i glasa definiše se preko commentId.

Struktura objekta Vote je sledeća:

Struktura objekta Vote
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

Struktura konfiguracije pitanja Internal Link

FastComments pruža način za konstrukciju pitanja i agregiranje njihovih rezultata. Primer pitanja (u daljem tekstu nazvan QuestionConfig) može biti ocena zvezdicama, klizač, ili NPS pitanje (određeno putem type).

Podaci pitanja mogu se agregirati pojedinačno, zajedno, tokom vremena, ukupno, po stranici, i tako dalje.

Framework ima sve mogućnosti potrebne za izgradnju klijentskih widgeta (sa vašim serverom ispred ovog API-ja), administratorskih kontrolnih tabli, i alata za izveštavanje.

Prvo moramo definisati QuestionConfig. Struktura je sledeća:

Struktura QuestionConfig
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 /** SAMO ZA ČITANJE - uvećava se za svaki novi odgovor. **/
13 usedCount: number
14 /** String datuma koji označava kada je konfiguracija poslednji put korišćena (ostavljen rezultat). **/
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

Struktura rezultata pitanja Internal Link

Da biste sačuvali rezultate za pitanja, kreirate QuestionResult. Zatim možete agregirati rezultate pitanja i povezati ih sa komentarima za potrebe izveštavanja.

Struktura QuestionResult
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

Struktura značke korisnika Internal Link

UserBadge je objekat koji predstavlja značku dodeljenu korisniku u FastComments sistemu.

Značke mogu biti dodeljene korisnicima automatski na osnovu njihove aktivnosti (kao što su broj komentara, vreme odgovora, status veterana) ili ručno od strane administratora sajta.

Struktura objekta UserBadge je sledeća:

Struktura objekta UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Jedinstveni identifikator za ovu dodelu značke korisniku */
4 id: string
5 /** ID korisnika kome je ova značka dodeljena */
6 userId: string
7 /** ID definicije značke iz tenant-ovog kataloga */
8 badgeId: string
9 /** ID tenant-a koji je kreirao/dodelio ovu značku */
10 fromTenantId: string
11 /** Kada je ova značka kreirana (milisekunde od epohe) */
12 createdAt?: number
13 /** Kada je korisnik primio ovu značku (milisekunde od epohe) */
14 receivedAt?: number
15 /**
16 * Tip značke:
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 /** Za značke zasnovane na pragu, vrednost praga */
25 threshold?: number
26 /** Ime/oznaka značke */
27 name?: string
28 /** Detaljan opis značke */
29 description?: string
30 /** Tekst koji se prikazuje na znački */
31 displayLabel?: string
32 /** URL do slike koja se prikazuje na znački */
33 displaySrc?: string
34 /** Boja pozadine značke (hex kod) */
35 backgroundColor?: string
36 /** Boja ivice značke (hex kod) */
37 borderColor?: string
38 /** Boja teksta značke (hex kod) */
39 textColor?: string
40 /** Dodatna CSS klasa za stilizovanje */
41 cssClass?: string
42 /** Za veteransku značku, vremenski prag u milisekundama */
43 veteranUserThresholdMillis?: number
44 /** Da li se ova značka prikazuje na korisnikovim komentarima */
45 displayedOnComments: boolean
46 /** Redosled prikaza značke */
47 order?: number
48}
49
---

Struktura napretka značke korisnika Internal Link


UserBadgeProgress je objekat koji predstavlja napredak korisnika u sticanju različitih znački u FastComments sistemu.

Ovo praćenje pomaže da se odredi kada korisnici treba da dobiju automatske značke na osnovu njihove aktivnosti i učešća u vašoj zajednici.

Struktura UserBadgeProgress objekta je sledeća:

Struktura UserBadgeProgress objekta
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Jedinstveni identifikator ovog zapisa o napretku */
4 id: string
5 /** ID tenanta kome ovaj zapis o napretku pripada */
6 tenantId: string
7 /** ID korisnika koga ovaj zapis o napretku prati */
8 userId: string
9 /** ID prvog komentara korisnika u sistemu */
10 firstCommentId?: string
11 /** Datum prvog komentara korisnika (milisekunde od epohe) */
12 firstCommentDate?: number
13 /** Automatski izračunat faktor poverenja na osnovu aktivnosti korisnika */
14 autoTrustFactor?: number
15 /** Ručno postavljen faktor poverenja od strane administratora */
16 manualTrustFactor?: number
17 /** Detaljan objekat napretka sa različitim metrikama, ključevi odgovaraju BadgeType enum-u */
18 progress: {
19 /** 0: CommentCount - Broj komentara koje je korisnik ostavio */
20 '0'?: number
21 /** 1: CommentUpVotes - Broj pozitivnih glasova koje je korisnik dobio */
22 '1'?: number
23 /** 2: CommentReplies - Broj odgovora koje je korisnik postavio */
24 '2'?: number
25 /** 3: CommentsPinned - Broj prikačenih komentara koje korisnik ima */
26 '3'?: number
27 /** 4: Veteran - Starost naloga korisnika */
28 '4'?: number
29 /** 5: NightOwl - Broj puta kada je korisnik objavio tokom noćnih sati */
30 '5'?: number
31 /** 6: FastReplyTime - Prosečno vreme odgovora u milisekundama */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Za moderatorške značke, broj obrisanih komentara */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Za moderatorške značke, broj odobrenih komentara */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Za moderatorške značke, broj neodobrenih komentara */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Za moderatorške značke, broj pregledanih komentara */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Za moderatorške značke, broj komentara označenih kao spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Za moderatorške značke, broj komentara označenih kao ne-spam */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Za svaku stranicu, broj odgovora */
46 '13'?: Record<string, number>
47 }
48}
49
---

Zaključno

Nadamo se da ste našli našu API dokumentaciju sveobuhvatnom i lakom za razumevanje. Ako primetite bilo kakve nedostatke, javite nam ispod.