FastComments.com

API-ji za komentarisanje uživo

FastComments API

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

U ovoj dokumentaciji ćete pronaći sve podržane resurse API‑ja dokumentovane sa njihovim tipovima zahteva i odgovora.

Za Enterprise korisnike, sav pristup API‑ju se beleži u revizijskom dnevniku.

Generisani SDK‑ovi

FastComments sada generiše API specifikaciju iz našeg koda (još nije kompletna, ali uključuje mnoge API‑e).

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

Autentifikacija

API se autentifikuje prosleđivanjem vašeg api ključa kao X-API-KEY zaglavlja ili API_KEY parametra upita. Takođe će vam biti potreban tenantId za pozivanje API‑ja. Može se preuzeti sa iste stranice kao i vaš api ključ.

Napomena o bezbednosti

Ove rute su namenjene pozivanju sa servera. NE pozivajte ih iz pregledača. To će otkriti vaš API ključ – što omogućava potpun pristup vašem nalogu bilo kome ko može da vidi izvorni kod stranice!

Opcija autentifikacije 1 – Zaglavlja

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

Opcija autentifikacije 2 – Parametri upita

  • Query Param: API_KEY
  • Query Param: tenantId

Opcija autentifikacije 3 – OAuth Bearer token

  • Header: Authorization: Bearer fcat_...

Third‑party aplikacije kao što su Zapier i klijenti MCP servera dobijaju token putem OAuth‑a umesto API ključa. Taj token funkcioniše na svakom krajnjem punktu ovde. Tenant je impliciran tokenom, pa je tenantId opcionalan, ali mora da se podudara sa tokenom ako je naveden. GET zahtevi zahtevaju read opseg, a svi ostali metodi zahtevaju write opseg. Ceo tok, uključujući registraciju klijenta, PKCE, osvežavanje i opoziv, dokumentovan je pod OAuth Authorization. Otkrivanje počinje na https://fastcomments.com/.well-known/oauth-authorization-server.

Čitanje sopstvenih upisa

FastComments pruža Active‑Active dostupnost. Zahtevi iz vašeg data‑centra se usmeravaju na najbližu tačku prisustva u odnosu na vas. Ovo je automatsko i obično možete primetiti semantiku čitanja‑posle‑pisanja. Ako želite da budete sigurni da čitate sopstvene upise, možete fiksirati svoje zahteve na određenu regiju koristeći tu regiju kao API host (iako to obično nije potrebno za većinu integracija):

  • 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

Napomena: ako to uradite, možda ćete želeti da definišete rezervni plan, pošto smo u prošlosti ukinuli ulazne čvorove i koristimo nove nazive za prebacivanje.

Struktura audit loga Internal Link

An AuditLog je objekat koji predstavlja revizijski događaj za zakupce koji imaju pristup ovoj funkciji.

Struktura za objekat AuditLog je sledeća:

Struktura AuditLog-a
Copy Copy
1
2interface AuditLog {
3 id: string;
4 /** Ko je izvršio događaj. **/
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 /** Pregledač koji je izvršio događaj, kada je došao iz pregledača. **/
13 ua?: string;
14 /** Hash sesije iz koje je događaj došao, za povezivanje radnji jedne osobe. Nikada sama sesija. **/
15 sIdHashed?: string;
16 when: string;
17 description?: string;
18 serverStartDate: string;
19 /** ID objekta na kojem je događaj izvršen, nasuprot tome ko ga je izvršio. **/
20 targetId?: string;
21 /** Ljudski čitljiva oznaka za taj objekat, npr. "jsmith (jsmith@example.com)". **/
22 targetLabel?: string;
23 objectDetails?: object;
24}
25

targetId i targetLabel opisuju na čemu je događaj izvršen; userId i username opisuju ko ga je izvršio. Za ažuriranja, objectDetails.changes sadrži {field: {from, to}} mapu onoga što se zaista promenilo.

Revizijski zapis je nepromenljiv. Takođe se ne može ručno upisivati. FastComments.com može samo odlučiti kada da upiše u revizijski zapis. Međutim, možete ga čitati putem ovog API-ja.

Događaji u revizijskom zapisu ističu nakon dve godine.

Struktura batch job-a Internal Link

A BatchJob je zadatak koji traje dugo, poput uvoza, izvoza ili migracije stranice. Poslovi se stavljaju u red, a zatim se preuzimaju i izvršavaju u pozadini.

processedCount i totalCount prikazuju napredak. Njihova jedinica zavisi od type:

-a migrate-pages: migracije završene, od zahtevanih migracija.

  • undo-page-migration: zapisi vraćeni. Nema totalCount.
  • import, export i drugi poslovi: obrađeni redovi.

Struktura objekta BatchJob je sledeća:

Struktura BatchJob
Copy Copy
1
2interface BatchJob {
3 id: string
4 /** Na primer migrate-pages, undo-page-migration, migrate-domains, import, export, users-export ili copy-comments. **/
5 type: string
6 status: 'requested' | 'running' | 'success' | 'failed'
7 createdAt: string
8 completedAt?: string
9 processedCount: number
10 /** Ukupni rad, kada je poznat unapred. **/
11 totalCount?: number
12 /** migrate-pages: jedan unos po završnoj migraciji, po redosledu zahteva. **/
13 pageMigrationResults?: Array<PageMigrationSuccess | PageMigrationFailure>
14 /**
15 * migrate-pages: postavljeno kada posao završi (uspeh ili neuspeh). Prosledite na POST /api/v1/pages/migrations/:undoId/undo u roku od 90 dana.
16 * undo-page-migration: migracija koja se poništava.
17 **/
18 undoId?: string
19 /** undo-page-migration: postavljeno kada posao završi. **/
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 /** Zapisi vraćeni na svoje vrednosti pre migracije. **/
42 restored: number
43 /** Zapisi ostavljeni nepromenjeni jer su se promenili nakon migracije, ili više ne postoje. **/
44 skipped: number
45 /** Zapisi migracije obrisani prilikom spajanja stranica. Ovi se ne mogu vratiti. **/
46 notRestorable: number
47}
48

Pokušaji ponovnog izvršavanja

Ako se server koji izvršava posao migracije stranice restartuje, posao se vraća u red i nastavlja nakon poslednje završene migracije. Posao se pokušava najviše 3 puta, nakon čega njegov status postaje failed.

Struktura komentara Internal Link

A Comment object predstavlja komentar ostavljen od strane korisnika.

Odnos između roditeljskih i dečijih komentara je definisan putem parentId.

Struktura za Comment objekat je sledeća:

Struktura Comment objekta
Copy Copy
1
2interface Comment {
3 /** SAMO ZA ČITANJE: Podesiti na true ako je anti-spam motor odredio da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Da li je komentar odobren za prikaz. Podesi na true prilikom čuvanja komentara, u suprotnom će biti sakriven. **/
6 approved?: boolean
7 /** Korisnikov avatar. **/
8 avatarSrc?: string
9 /** Dečiji komentari. Nisu popunjeni u svim scenarijima. Koristi se kada je asTree podešen na true preko API-ja. **/
10 children: Comment[]
11 /** Sirovi komentar koji je unela osoba. **/
12 comment: string
13 /** SAMO ZA ČITANJE: Komentar parse-ovan u HTML. **/
14 commentHTML?: string
15 /** Email osobe koja komentariše. Obavezno ako je anonimno komentarisanje isključeno. **/
16 commenterEmail?: string
17 /** Link osobe koja komentariše (na primer njihov blog). **/
18 commenterLink?: string
19 /** Ime osobe koja komentariše. 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 etiketa" za komentar - na primer "Admin", "Moderator", ili nešto poput "VIP User". **/
24 displayLabel?: string
25 /** Domen na kojem je komentar objavljen. **/
26 domain?: string
27 /** SAMO ZA ČITANJE: Broj puta koliko je komentar označen (flagovan). **/
28 flagCount?: number
29 /** Broj #hashtag-ova upisanih u komentar koji su uspešno parsirani. Takođe možete ručno dodavati heštegove, 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 prilikom kreiranja! Ovo se hešira za skladištenje. **/
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 od admina? Automatski se podešava na osnovu userId. **/
42 isByAdmin?: boolean
43 /** SAMO ZA ČITANJE: Da li je komentar od moderatora? Automatski se podešava na osnovu userId. **/
44 isByModerator?: boolean
45 /** Podesiti na true ako je komentar privremeno obrisan (morao je ostati rezervni zapis zbog neke druge konfiguracije). **/
46 isDeleted?: boolean
47 /** Podesiti na true ako je korisnički nalog obrisan, a komentar je morao biti sačuvan. **/
48 isDeletedUser?: boolean
49 /** SAMO ZA ČITANJE: Da li je komentara označen od strane trenutno prijavljenog korisnika (contextUserId)? **/
50 isFlagged?: boolean
51 /** Da li je komentar prikvačen (pinned)? **/
52 isPinned?: boolean
53 /** Da li je komentar zaključan? Kada je true, niko (uključujući moderatore) ne može odgovoriti, izmeniti ili obrisati komentar dok se ne otključa. **/
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 u kojem je komentar. Ako nije naveden, biće izveden iz HTTP Accept-Language 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: @pomeni upisani u komentar koji su uspešno parsirani. **/
64 mentions?: CommentUserMention[]
65 /** Opcionalni metapodaci povezani sa komentarom. **/
66 meta?: Record<string, string | number | boolean>
67 /** Opcionalna lista ID-eva 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 za ovaj komentar poslata obaveštenja komentarima. Da biste sprečili slanje obaveštenja prilikom uvoza, postavite ovo na true. **/
72 notificationSentForParent?: boolean
73 /** Da li su za ovaj komentar poslata obaveštenja tenant korisnicima. Da biste sprečili slanje obaveštenja prilikom uvoza, postavite ovo na true. **/
74 notificationSentForParentTenant?: boolean
75 /** Naslov stranice na kojoj je ovaj komentar. **/
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 kojem komentar pripada. **/
82 tenantId: string
83 /** Korisnik koji je napisao komentar. Kreira se automatski pri čuvanju komentara sa imenom/email-om. **/
84 userId?: string|null
85 /** URL lokacije na kojoj je ovaj komentar vidljiv, kao na primer blog post. **/
86 url: string
87 /** "Očišćena" verzija urlId koju ste poslali. Prilikom čuvanja specificirate ovo polje, ali kada povučete komentar nazad ovo će biti "očišćeno" i vaša originalna vrednost biće pomerena u "urlIdRaw". **/
88 urlId: string
89 /** SAMO ZA ČITANJE: Originalni urlId koji ste poslali. **/
90 urlIdRaw?: string
91 /** Da li je korisnik i ovaj komentar verifikovan? **/
92 verified: boolean
93 /** Broj pozitivnih glasova. **/
94 votesUp?: number
95 /** Broj negativnih glasova. **/
96 votesDown?: number
97 /** "Karma" komentara (= votes up - votes down). **/
98 votes?: number
99}
100

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

Struktura teksta komentara

Komentari se pišu u FastComments varijanti markdown-a, što je standardni markdown plus tradicionalne bbcode stil oznake za slike, poput [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 da renderujete HTML, pošto je reč o vrlo malom podskupu HTML-a i izrada renderer-a je prilično jednostavna. Postoji više biblioteka za React Native i Flutter, na primer, koje mogu pomoći u tome.

Možete odlučiti 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 transformiše HTML tagove u očekivane elemente za prikaz na vašoj platformi.

Označ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 u komentaru
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ID korisnika. Za SSO korisnike, ovo će imati prefiks vašeg tenant ID-a. **/
4 id: string
5 /** Konačni @mention tag tekst, uključujući @ simbol. **/
6 tag: string
7 /** Originalni @mention tag tekst, 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

Haštagovi

Kada se koriste haštagovi i uspešno se parsiraju, informacije se čuvaju u listi nazvanoj hashTags. Svaki objekat u toj listi ima sledeću strukturu. Haštagovi se takođe mogu ručno dodati u niz hashTags komentara za potrebe pretrage, ako je retain podešen.

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

Struktura email šablona 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 Feed posta Internal Link

A FeedPost objekat predstavlja objavu u FastComments feedu. Feed je tok objava sa svojim nitima komentara, prikazan od strane Feed widgeta. Svaka objava ima autora, opcioni bogati sadržaj, medije i linkove, i može biti označena tako da se feed može filtrirati.

Struktura za FeedPost objekat je sledeća:

Struktura FeedPost
Copy Copy
1
2interface FeedPost {
3 /** READONLY **/
4 _id: string
5 /** READONLY **/
6 tenantId: string
7 title?: string
8 /** ID FastComments ili SSO korisnika koji je autor objave. **/
9 fromUserId?: string
10 /** Popunjava se iz podataka korisnika ako nije postavljeno. **/
11 fromUserDisplayName?: string | null
12 /** READONLY. Popunjava se iz podataka korisnika. **/
13 fromUserAvatar?: string | null
14 /** Koristi se za filtriranje feeda. **/
15 tags?: string[]
16 /** Težina sortiranja unutar feeda. Veće vrednosti se sortiraju prve. **/
17 weight?: number
18 /** Slobodni parovi ključ/vrednost za vašu ličnu upotrebu. **/
19 meta?: Record<string, string>
20 /** Sanitisani HTML. **/
21 contentHTML?: string
22 media?: FeedPostMediaItem[]
23 links?: FeedPostLink[]
24 /** READONLY **/
25 createdAt: string
26 /** READONLY. Tip reakcije za brojanje. **/
27 reacts?: Record<string, number>
28 /** READONLY **/
29 commentCount?: number | null
30}
31
32interface FeedPostMediaItem {
33 title?: string
34 /** Gde medijski element vodi kada se klikne. **/
35 linkUrl?: string
36 /** Jedan unos po rendiciji. Widget bira najbolje. **/
37 sizes: FeedPostMediaItemAsset[]
38}
39
40interface FeedPostMediaItemAsset {
41 w: number
42 h: number
43 src: string
44}
45
46interface FeedPostLink {
47 /** Tekst linka, npr. "Registrujte se sada". **/
48 text?: string
49 /** Naslov prikazan uz link. **/
50 title?: string
51 /** Opis prikazan uz link. **/
52 description?: string
53 url?: string
54}
55

Napomene:

  • Neka od ovih polja su označena READONLY – ona se vraćaju iz API‑ja, ali se ne mogu postaviti.
  • Komentari na objavi su regularni komentari čiji je urlId post: praćen ID‑jem objave _id. Koristite tu vrednost sa Comment API‑jem da biste čitali ili kreirali komentare na objavi.

Struktura hashtag-a 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

Objekat Notification predstavlja notifikaciju za korisnika.

Objekti Notification se kreiraju automatski i ne mogu se kreirati putem API-ja. Takođe ističu nakon godinu dana. Notifikacije se ne mogu brisati. Međutim, mogu se ažurirati tako da se viewed postavi na false, i možete pretraživati po viewed.

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

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

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

Do danas, postojanje Notification zapravo ne podrazumeva da je email poslat ili da bi trebalo da bude poslat. Umesto toga, notifikacije se koriste za feed notifikacija i povezane integracije.

Struktura objekta Notification je sledeća:

Struktura 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 nizu (čak i deci dece) niza u kom ste komentarisali. **/
12 RepliedTransientChild = 1,
13 /** Ako je vaš komentar dobio plus. **/
14 VotedMyComment = 2,
15 /** Ako je novi komentar ostavljen na korenu stranice na koju ste pretplaćeni. **/
16 SubscriptionReplyRoot = 3,
17 /** Ako je neko komentarisao na vašem profilu. **/
18 CommentedOnProfile = 4,
19 /** Ako imate direktnu 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, id korisnika je u formatu `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Kada radite sa SSO, morate voditi računa samo o `userId`. **/
33 anonUserId?: string
34 /** urlId je skoro uvek definisan. Opciono je samo za notifikacije na nivou tenanta, koje su retke. **/
35 urlId?: string
36 /** URL se kešira za brzu navigaciju do izvora notifikacije. **/
37 url?: string
38 /** Naslov stranice se kešira 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 keširani ovde 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 ankete Internal Link

Poll je vezan za komentar, a nije samostalan objekat. Kreira se zajedno sa komentarom (vidi POST /api/v1/comments), ili se kasnije dodaje postojećem komentaru putem PUT /api/v1/polls/:commentId.

Brojevi glasova se čuvaju na samoj anketi, tako da čitanje ankete daje rezultate bez potrebe da bilo šta sabirate. Pojedinačni glasovi iza tih brojeva su PollVote objekti.

Svaka opcija ima id koji se generiše prilikom kreiranja ankete. Taj id koristite za glasanje, za preimenovanje opcije, i za zadržavanje opcije (i njenih glasova) kada PUT-ujete anketu sa dodatim ili uklonjenim opcijama. To je jedini bezbedan način da se referišete na opciju - nikada njen položaj u listi.

Struktura ankete
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 /** Kada je postavljeno i u prošlosti, anketa je zatvorena i više ne prima glasove. **/
13 closesAt?: string | null
14 /** 0 anonimno (podrazumevano), 1 admini i moderatori, 2 svi. Odsustvo znači anonimno. **/
15 privacy?: 0 | 1 | 2 | null
16 /** Kada je true, brojevi su skriveni od svih koji još nisu glasali. Odsustvo znači false. **/
17 requireVoteToSeeResults?: boolean | null
18}
19

Ograničenja

  • Pitanje je obavezno i ima najviše 200 znakova.
  • Anketa ima između 2 i 10 opcija.
  • Oznaka opcije je obavezna, ima najviše 100 znakova i mora biti jedinstvena u okviru ankete (ignorišući velika/mala slova).
  • closesAt mora biti u budućnosti prilikom kreiranja ankete. Da biste odmah zatvorili anketu, PATCH-ujte je sa datumom u prošlosti.

Podešavanja sajta

Ankete poštuju konfiguraciju vašeg sajta, koju možete promeniti pod Customize Widget:

  • Ankete moraju biti omogućene pre nego što se anketa može kreirati, inače API odgovara sa polls-disabled.
  • Glasanje može biti ograničeno na prijavljene korisnike, u kom slučaju se glas poslat samo sa anonUserId odbija sa poll-login-required.

Struktura glasanja u anketi Internal Link

A PollVote je odgovor jedne osobe na anketu. Brojke prikazane na samoj anketi ažurirane su u skladu s ovim, pa su vam potrebne samo kada želite da znate ko je glasao za šta, a ne ukupne rezultate.

Glasač može imati najviše jedan glas po anketi. Ponovno glasanje premješta njihov postojeći glas na novu opciju umesto da doda drugi, a updatedAt beleži kada se to dogodilo.

voterId je userId kada je glasač bio prijavljen, a anonUserId u suprotnom.

Struktura PollVote
Copy Copy
1
2interface PollVote {
3 id: string
4 tenantId: string
5 commentId: string
6 urlId: string
7 /** userId kada je glasač bio prijavljen, u suprotnom anonUserId. **/
8 voterId: string
9 optionId: string
10 createdAt: string
11 /** Kada je glasač poslednji put premestio svoj glas na drugu opciju. **/
12 updatedAt?: string
13}
14

Privatnost

  • Anoniman (podrazumevano): niko ne može videti kako je ko glasao, pa glasovi ne mogu biti pročitani. GET /api/v1/poll-votes i GET /api/v1/poll-votes/:id odgovaraju sa poll-anonymous. Brojke ankete i dalje su dostupne putem GET /api/v1/polls/:commentId.
  • Administratori i moderatori: vaš API ključ pripada administratoru vašeg sajta, pa može čitati glasove.
  • Svi: glasovi se mogu čitati.

Privatnost ankete može biti sužena, ali ne i proširena nakon što ima glasova.

Struktura pending 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 rešenje za SSO. Ažuriranje informacija o korisniku putem HMAC-bazirane integracije je jednostavno kao to da korisnik učita stranicu sa ažuriranim payload-om.

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

SSO User API pruža način za CRUD operacije nad objektima koje nazivamo SSOUsers. Ovi objekti su različiti od običnih Users i održavaju se odvojeno radi sigurnosti 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 // Admin dozvola - SSO korisnici sa ovom oznakom se naplaćuju kao SSO Admini (odvojeno od običnih SSO korisnika)
16 isAdminAdmin?: boolean // Admin dozvola - SSO korisnici sa ovom oznakom se naplaćuju kao SSO Admini (odvojeno od običnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Dozvola moderatora - SSO korisnici sa ovom oznakom se naplaćuju kao SSO Moderatori (odvojeno od običnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa se ne primenjuje na korisnika. Ako je prazna lista, 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 radi sigurnih profila. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dozvolite drugim korisnicima da ostavljaju komentare na profilu korisnika, niti da vide postojeće komentare profila. 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 /** Opciona konfiguracija za bedževe korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-jeva bedževa koje treba dodeliti korisniku. Ograničeno na 30 bedževa. Redosled se poštuje. Ovo su globalni bedževi vidljivi na svim stranicama. **/
31 badgeIds: string[]
32 /** Niz ID-jeva bedževa ograničenih na trenutnu stranicu (urlId). Ovi bedževi se prikazuju samo na stranici na kojoj su dodeljeni. **/
33 pageBadgeIds?: string[]
34 /** Ako je true, zamenjuje sve postojeće prikazane bedževe datim. Globalni bedževi i bedževi ograničeni na stranicu se zamenjuju nezavisno. Ako je false, dodaje se na postojeće bedževe. **/
35 override?: boolean
36 /** Ako je true, ažurira svojstva prikaza bedževa iz konfiguracije tenanta. **/
37 update?: boolean
38 }
39}
40

Naplata SSO korisnika

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

  • Obični SSO korisnici: Korisnici bez admin ili moderatorskih dozvola naplaćuju se kao obični SSO korisnici
  • SSO Admini: Korisnici sa oznakama isAccountOwner ili isAdminAdmin naplaćuju se odvojeno kao SSO Admini (ista stopa kao za obične admine tenanta)
  • SSO Moderatori: Korisnici sa oznakom isCommentModeratorAdmin naplaćuju se odvojeno kao SSO Moderatori (ista stopa kao za obične moderatore)

Važno: Da bi se sprečilo dvostruko naplaćivanje, sistem automatski deduplira SSO korisnike u odnosu na obične korisnike i moderatore tenanta prema email adresi. Ako SSO korisnik ima isti email kao običan korisnik ili moderator tenanta, neće se naplaćivati dva puta.

Kontrola pristupa

Korisnici mogu biti podeljeni u grupe. Za to služi polje groupIds, i opciono je.

@Mentions

Podrazumevano, @mentions koriste username za pretragu drugih SSO korisnika kada se ukuca znak @. Ako se koristi displayName, rezultati koji se podudaraju sa username biće ignorisani kada postoji podudaranje sa displayName, a rezultati pretrage @mention koristiće displayName.

Pretplate

U FastComments-u, korisnici mogu da se pretplate na stranicu klikom na ikonu zvonce u vidžetu za komentare i klikom na Subscribe.

Kod običnog korisnika, šaljemo mu email obaveštenja na osnovu njegovih podešavanja obaveštenja.

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

Bedževi

Možete dodeliti bedževe SSO korisnicima pomoću svojstva badgeConfig. Bedževi su vizuelni indikatori koji se pojavljuju pored imena korisnika u komentarima.

  • badgeIds - Niz ID-jeva bedževa koje treba dodeliti korisniku. Ovo su globalni bedževi vidljivi na svim stranicama. Mora biti reč o važećim ID-jevima bedževa kreiranih u vašem FastComments nalogu. Ograničeno na 30 bedževa.
  • pageBadgeIds - Opcioni niz ID-jeva bedževa ograničenih na trenutnu stranicu (urlId). Ovi bedževi se prikazuju samo na stranici na kojoj su dodeljeni. Različite stranice mogu imati različite bedževe ograničene na stranicu za istog korisnika.
  • override - Ako je true, svi postojeći prikazani bedževi biće zamenjeni datim. Globalni bedževi i bedževi ograničeni na stranicu se zamenjuju nezavisno — zamena globalnih bedževa ne utiče na bedževe ograničene na stranicu, i obrnuto. Ako je false ili izostavljeno, dati bedževi biće dodati na postojeće.
  • update - Ako je true, svojstva prikaza bedževa biće ažurirana iz konfiguracije tenanta svaki put kada 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 glasanja 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, veteranski status) ili ručno od strane administratora sajta.

Struktura za UserBadge objekat je sledeća:

Struktura UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Jedinstveni identifikator za ovu dodelu značke korisniku */
4 id: string
5 /** ID korisnika kojem je ova značka dodeljena */
6 userId: string
7 /** ID definicije značke iz kataloga znački tenanta */
8 badgeId: string
9 /** ID tenanta 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 slike koja se prikazuje na znački */
33 displaySrc?: string
34 /** Boja pozadine za značku (hex kod) */
35 backgroundColor?: string
36 /** Boja ivice značke (hex kod) */
37 borderColor?: string
38 /** Boja teksta na znački (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 komentarima korisnika */
45 displayedOnComments: boolean
46 /** Redosled prikaza značke */
47 order?: number
48 /** Ako je postavljeno, ova značka se prikazuje samo na stranici sa odgovarajućim urlId. Null za globalne značke. */
49 urlId?: string | null
50}
51

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.