FastComments.com

API-ji za live komentiranje

FastComments API

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

U ovoj dokumentaciji naći ćete sve podržane resurse API‑ja dokumentirane s njihovim tipovima zahtjeva i odgovora.

Za Enterprise korisnike, sav pristup API‑ju bilježi se u Dnevniku revizija.

Generirani SDK‑ovi

FastComments sada generira API Spec iz našeg koda (ovo još nije potpuno, ali uključuje mnoge API‑e).

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

Autentifikacija

API se autentificira prosljeđivanjem vašeg api ključa kao X-API-KEY zaglavlja ili API_KEY parametra upita. Također će vam trebati vaš tenantId za izvođenje API poziva. On se može preuzeti s iste stranice kao i vaš api ključ.

Napomena o sigurnosti

Ove rute su namijenjene pozivanju s poslužitelja. NE pozivajte ih iz preglednika. To će otkriti vaš API ključ – što će omogućiti potpun pristup vašem računu svima koji mogu vidjeti izvorni kod stranice!

Opcija autentifikacije jedan – Zaglavlja

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

Opcija autentifikacije dva – Parametri upita

  • Parametar upita: API_KEY
  • Parametar upita: tenantId

Opcija autentifikacije tri – OAuth Bearer token

  • Zaglavlje: Authorization: Bearer fcat_...

Aplikacije trećih strana poput Zapiera i klijenti MCP poslužitelja dobivaju token putem OAuth‑a umjesto API ključa. Taj token funkcionira na svakom krajnjem točki ovdje. Najmodavac je impliciran tokenom, pa je tenantId opcionalan, ali mora odgovarati tokenu ako je naveden. GET zahtjevi trebaju read opseg, a sve ostale metode write opseg. Cijeli tijek, uključujući registraciju klijenta, PKCE, osvježavanje i opoziv, dokumentiran je pod OAuth Authorization. Otkrivanje započinje na https://fastcomments.com/.well-known/oauth-authorization-server.

Čitanje vlastitih zapisa

FastComments pruža Active‑Active dostupnost. Zahtjevi iz vašeg podatkovnog centra usmjeravaju se na najbližu točku prisutnosti u odnosu na vas. Ovo je automatsko i obično možete primijetiti semantiku čitanja‑vašeg‑zapisa. Ako želite biti sigurni da čitate vlastite zapise, možete učvrstiti svoje zahtjeve 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 učinite, možda ćete željeti definirati rezervni plan, jer smo u prošlosti ukinuli ulazne čvorove i koristimo nove nazive za prebacivanje.

Struktura AuditLog-a Internal Link

An AuditLog je objekt koji predstavlja revizijski događaj za najamnike koji imaju pristup ovoj značajci.

Struktura objekta AuditLog je sljedeća:

Struktura AuditLoga
Copy Copy
1
2interface AuditLog {
3 id: string;
4 /** Tko 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 /** Preglednik koji je izvršio događaj, kada je došao iz preglednika. **/
13 ua?: string;
14 /** Hash sesije iz koje je došao događaj, 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 izvršen događaj, nasuprot tko ga je izvršio. **/
20 targetId?: string;
21 /** Ljudski čitljiva oznaka za taj objekt, 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 tko ga je izvršio. Za ažuriranja, objectDetails.changes sadrži mapu {field: {from, to}} koja prikazuje što se zapravo promijenilo.

Revizijski zapis je nepromjenjiv. Također se ne može ručno zapisivati. FastComments.com može odlučiti kada zapisati u revizijski zapis. Međutim, možete ga čitati putem ovog API-ja.

Događaji u revizijskom zapisu istječu nakon dvije godine.

Struktura BatchJob-a Internal Link

A BatchJob je zadatak dugog trajanja, poput uvoza, izvoza ili page migration. Poslovi se stavljaju u red, a zatim se preuzimaju i izvršavaju u pozadini.

processedCount i totalCount prikazuju napredak. Njihova jedinica ovisi o type:

  • migrate-pages: migracije završene, od traženih migracija.
  • undo-page-migration: zapisi obnovljeni. Nema totalCount.
  • import, export i ostali poslovi: obrađeni redci.

Struktura objekta BatchJob je sljedeća:

Struktura BatchJob
Copy Copy
1
2interface BatchJob {
3 id: string
4 /** Na primjer: 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 unaprijed. **/
11 totalCount?: number
12 /** migrate-pages: jedan unos po završetoj migraciji, redoslijedom zahtjeva. **/
13 pageMigrationResults?: Array<PageMigrationSuccess | PageMigrationFailure>
14 /**
15 * migrate-pages: postavi kada je posao završen (uspjeh ili neuspjeh). Proslijedi na POST /api/v1/pages/migrations/:undoId/undo unutar 90 dana.
16 * undo-page-migration: migracija koja se poništava.
17 **/
18 undoId?: string
19 /** undo-page-migration: postavi kada je posao završen. **/
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 njihove vrijednosti prije migracije. **/
42 restored: number
43 /** Zapisi ostavljeni nepromijenjeni jer su se promijenili nakon migracije, ili više ne postoje. **/
44 skipped: number
45 /** Zapisi migracije izbrisani prilikom spajanja stranica. Ovi se ne mogu vratiti. **/
46 notRestorable: number
47}
48

Ponovni pokušaji

Ako se poslužitelj koji izvršava zadatak migracije stranice ponovno pokrene, zadatak se vraća u red i nastavlja nakon posljednje završene migracije. Zadaci se pokušavaju najviše 3 puta, nakon čega je njihov status failed.

Struktura komentara Internal Link

Objekt Comment predstavlja komentar koji je ostavio korisnik.

Odnos između roditeljskih i podređenih komentara definiran je putem parentId.

Struktura objekta Comment je sljedeća:

Struktura Comment objekta
Copy Copy
1
2interface Comment {
3 /** SAMO ZA ČITANJE: Postavljeno na true ako je sustav za otkrivanje spama utvrdio da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Je li komentar odobren za prikaz. Postavljeno na true pri spremanju komentara, inače će biti skriven. **/
6 approved?: boolean
7 /** Avatar korisnika. **/
8 avatarSrc?: string
9 /** Podređeni komentari. Nisu popunjeni u svim scenarijima. Koristi se kada je asTree postavljeno na true putem API-ja. **/
10 children: Comment[]
11 /** Izvorni (neobrađeni) 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 komentiranje isključeno. **/
16 commenterEmail?: string
17 /** Link autora komentara (na primjer njihov blog). **/
18 commenterLink?: string
19 /** Ime autora komentara. Uvijek 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 primjer "Admin", "Moderator", ili nešto poput "VIP User". **/
24 displayLabel?: string
25 /** Domena na kojoj je komentar objavljen. **/
26 domain?: string
27 /** SAMO ZA ČITANJE: Broj puta koliko je komentar prijavljen. **/
28 flagCount?: number
29 /** Hashtagovi (#) upisani u komentar koji su uspješno parsirani. Možete također ručno dodati hashtagove za upite, ali oni se neće automatski prikazivati u tekstu komentara. **/
30 hashTags?: CommentHashTag[]
31 /** SAMO ZA ČITANJE: Sadrži li komentar slike? **/
32 hasImages?: boolean
33 /** SAMO ZA ČITANJE: Sadrži li komentar linkove? **/
34 hasLinks?: boolean
35 /** SAMO ZA ČITANJE: Jedinstveni id komentara. **/
36 id: string
37 /** Samo pri kreiranju! Ovo se hešira za pohranu. **/
38 ip?: string
39 /** SAMO ZA ČITANJE: Je li trenutni korisnik blokirao korisnika koji je napisao ovaj komentar? **/
40 isBlocked?: boolean
41 /** SAMO ZA ČITANJE: Je li komentar od administratora? Automatski postavljeno na temelju userId. **/
42 isByAdmin?: boolean
43 /** SAMO ZA ČITANJE: Je li komentar od moderatora? Automatski postavljeno na temelju userId. **/
44 isByModerator?: boolean
45 /** Postavite na true ako je komentar meko izbrisan (morao je ostati zamjenski zapis zbog neke druge konfiguracije). **/
46 isDeleted?: boolean
47 /** Postavite na true ako je korisnički račun izbrisan i komentar je morao biti zadržan. **/
48 isDeletedUser?: boolean
49 /** SAMO ZA ČITANJE: Je li komentar označen od strane trenutno prijavljenog korisnika (contextUserId)? **/
50 isFlagged?: boolean
51 /** Je li komentar pričvršćen? **/
52 isPinned?: boolean
53 /** Je li komentar zaključan? Kada je true, nitko (uključujući moderatore) ne može odgovarati, uređivati ili brisati komentar dok se ne otključa. **/
54 isLocked?: boolean
55 /** Je li komentar spam? **/
56 isSpam?: boolean
57 /** SAMO ZA ČITANJE: Je li komentar ocijenjen negativno za trenutnog korisnika (contextUserId)? **/
58 isVotedDown?: boolean
59 /** SAMO ZA ČITANJE: Je li komentar ocijenjen pozitivno za trenutnog korisnika (contextUserId)? **/
60 isVotedUp?: boolean
61 /** Lokalizacija u kojoj je komentar. Ako nije navedena, izvest će se 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: @mentions napisane u komentaru koje su uspješno parsirane. **/
64 mentions?: CommentUserMention[]
65 /** Opcionalni metapodaci povezani s komentarom. **/
66 meta?: Record<string, string | number | boolean>
67 /** Opcionalna lista id-eva grupa za moderiranje povezanih s 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 /** Jesu li obavijesti poslane za ovaj komentar komentatorima. Da spriječite slanje obavijesti prilikom uvoza, postavite ovo na true. **/
72 notificationSentForParent?: boolean
73 /** Jesu li obavijesti poslane za ovaj komentar korisnicima tenanta. Da spriječite slanje obavijesti prilikom uvoza, postavite ovo na true. **/
74 notificationSentForParentTenant?: boolean
75 /** Naslov stranice na kojoj se nalazio ovaj komentar. **/
76 pageTitle?: string
77 /** Ako odgovaramo na komentar, ovo je ID na koji odgovaramo. **/
78 parentId?: string|null
79 /** Je li 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 spremanju komentara s imenom/emailom. **/
84 userId?: string|null
85 /** URL lokacije na kojoj je ovaj komentar vidljiv, poput objave na blogu. **/
86 url: string
87 /** "Očišćena" verzija urlId koju ste nam poslali. Pri spremanju specificirate ovo polje, ali kada dohvatite komentar natrag, ovo će biti "očišćeno" i vaša originalna vrijednost premještena u "urlIdRaw". **/
88 urlId: string
89 /** SAMO ZA ČITANJE: Originalni urlId koji ste nam poslali. **/
90 urlIdRaw?: string
91 /** Je li korisnik i ovaj komentar verificiran? **/
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 - ona se vraćaju od strane API-ja ali ih nije moguće postaviti.

Struktura teksta komentara

Komentari se pišu u FastComments varijanti Markdowna, što je jednostavno Markdown plus tradicionalne bbcode oznake za slike, poput [img]path[/img].

Tekst je pohranjen u dva polja. Tekst koji je korisnik unio pohranjuje se nepromijenjen u polje comment. On se renderira i pohranjuje u polje commentHTML.

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

Preporučuje se renderirati HTML, budući da je u pitanju vrlo mali podskup HTML-a, izrada renderer-a je prilično jednostavna. Postoji više biblioteka za React Native i Flutter, na primjer, koje mogu pomoći u tome

Možete odabrati renderiranje nenormalizirane vrijednosti polja comment. Primjer parsera je ovdje..

Primjer parsera se također može prilagoditi za rad s HTML-om i transformirati HTML tagove u očekivane elemente za renderiranje na vašoj platformi.

Označavanje

Kada su korisnici označeni u komentaru, informacije se pohranjuju u listu nazvanu mentions. Svaki objekt u toj listi ima sljedeću strukturu.

Struktura CommentUserMention objekta
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 tekst @mention oznake, uključujući simbol @. **/
6 tag: string
7 /** Originalni tekst @mention oznake, uključujući simbol @. **/
8 rawTag: string
9 /** Koje vrste korisnik je bio označen. user = FastComments.com račun. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Ako se korisnik odjavi od obavijesti, ovo će i dalje biti postavljeno na true. **/
12 sent: boolean
13}
14

Hashtagovi

Kada se koriste hashtagovi i uspješno se parsiraju, informacije se pohranjuju u listu nazvanu hashTags. Svaki objekt u toj listi ima sljedeću strukturu. Hashtagove je moguće također ručno dodati u niz hashTags komentara za upite, ako je retain postavljeno.

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

Struktura predložaka e-pošte Internal Link

Objekt EmailTemplate predstavlja konfiguraciju za prilagođeni predložak e-pošte za zakupnika.

Sustav će odabrati predložak e-pošte za upotrebu putem:

  • Njegovog identifikatora tipa, koji nazivamo emailTemplateId. To su konstante.
  • Polja domain. Najprije ćemo pokušati pronaći predložak za domenu s kojom je povezani objekt (poput Comment) povezan, a ako se podudaranje ne pronađe tada ćemo pokušati pronaći predložak gdje je domain null ili *.

Struktura objekta EmailTemplate je sljedeća:

Struktura predloška e-pošte
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 /** Domena s kojom bi predložak trebao biti povezan. **/
14 domain?: string | '*' | null
15 /** Sadržaj predloška e-pošte u EJS sintaksi. **/
16 ejs: string
17 /** Mapa zamjenskih prijevoda (ključ → vrijednost) za svaku podržanu lokalizaciju. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Objekt koji predstavlja kontekst za renderiranje predloška. **/
20 testData: object
21}
22

Bilješke

  • Valjane vrijednosti emailTemplateId možete dobiti s endpointa /definitions.
  • Endpoint /definitions također uključuje zadane prijevode i testne podatke.
  • Predlošci će propasti pri spremanju ako struktura ili testni podaci nisu valjani.

Struktura Feed posta Internal Link

A FeedPost objekt predstavlja objavu u FastComments feedu. Feed je tok objava sa svojim vlastitim nitima komentara, prikazan od strane Feed widgeta. Svaka objava ima autora, opcionalni bogati sadržaj, medije i linkove, i može biti označena tagovima kako bi se feed mogao filtrirati.

Struktura za FeedPost objekt je sljedeća:

Struktura FeedPosta
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 /** Popunjeno iz korisnika kada nije postavljeno. **/
11 fromUserDisplayName?: string | null
12 /** READONLY. Popunjeno iz korisnika. **/
13 fromUserAvatar?: string | null
14 /** Koristi se za filtriranje feeda. **/
15 tags?: string[]
16 /** Težina sortiranja unutar feeda. Veće vrijednosti se sortiraju prve. **/
17 weight?: number
18 /** Parovi ključ/vrijednost slobodnog oblika za vlastitu upotrebu. **/
19 meta?: Record<string, string>
20 /** Sanitizirani HTML. **/
21 contentHTML?: string
22 media?: FeedPostMediaItem[]
23 links?: FeedPostLink[]
24 /** READONLY **/
25 createdAt: string
26 /** READONLY. Vrsta reakcije za brojanje. **/
27 reacts?: Record<string, number>
28 /** READONLY **/
29 commentCount?: number | null
30}
31
32interface FeedPostMediaItem {
33 title?: string
34 /** Gdje medijski element vodi kada se klikne. **/
35 linkUrl?: string
36 /** Jedan unos po izvedbi. Widget odabire 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. "Sign up now". **/
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 putem API-ja, ali se ne mogu postaviti.
  • Komentari na objavi su regularni komentari čiji je urlId post: praćen ID-om objave _id. Upotrijebite tu vrijednost s Comment API-jem za čitanje ili stvaranje komentara na objavi.

Struktura hashtagova Internal Link

Objekt HashTag predstavlja oznaku (tag) koju korisnik može ostaviti. HashTagovi se mogu koristiti za povezivanje s vanjskim sadržajem ili za povezivanje srodnih komentara.

Struktura objekta HashTag je sljedeća:

Struktura HashTaga
Copy Copy
1
2interface HashTag {
3 /** Treba početi s znakom "#" ili željenim znakom. **/
4 tag: string
5 /** Opcionalni URL na koji hashtag može upućivati. Umjesto filtriranja komentara po hashtagu, UI će pri kliku preusmjeriti na ovaj URL. **/
6 url?: string
7 /** READONLY **/
8 createdAt: string
9}
10

Napomene:

  • U nekim API endpointima vidjet ćete da se hashtag koristi u URL-u. Ne zaboravite URI-kodirane vrijednosti. Na primjer, # treba umjesto toga predstaviti kao %23.
  • Neka od ovih polja označena su kao READONLY - API ih vraća, ali se ne mogu postaviti.

Struktura broja obavijesti Internal Link

Objekt NotificationCount predstavlja broj nepročitanih obavijesti i metapodatke za korisnika.

Ako nema nepročitanih obavijesti, za korisnika neće postojati NotificationCount.

NotificationCount objekti se stvaraju automatski i ne mogu se stvoriti putem API-ja. Također istječu nakon jedne godine.

Možete obrisati broj nepročitanih obavijesti korisnika brisanjem njihovog NotificationCount.

Struktura NotificationCount objekta je sljedeća:

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

Struktura obavijesti Internal Link

Objekt Notification predstavlja obavijest za korisnika.

Notification objekti se stvaraju automatski i ne mogu se stvarati putem API-ja. Također istječu nakon jedne godine. Obavijesti se ne mogu izbrisati. Međutim, mogu se ažurirati postavljanjem viewed na false, i možete ih pretraživati po viewed.

Korisnik se također može odjaviti od obavijesti za određeni komentar postavljanjem optedOut u obavijesti na true. Možete se ponovno prijaviti postavljanjem na false.

Postoje različite vrste obavijesti - provjerite relatedObjectType i type.

Načini na koje se obavijesti stvaraju su prilično fleksibilni i mogu biti pokrenuti u mnogim scenarijima (pogledajte NotificationType).

Trenutno, postojanje Notification ne znači nužno da je e-pošta poslana ili bi trebala biti poslana. Umjesto toga, obavijesti se koriste za feed obavijesti i povezane integracije.

Struktura za Notification objekt izgleda ovako:

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 netko odgovorio. **/
10 RepliedToMe = 0,
11 /** Ako je netko odgovorio negdje u niti (čak i u pod-nitima) niti na kojoj ste komentirali. **/
12 RepliedTransientChild = 1,
13 /** Ako je vaš komentar dobio glas. **/
14 VotedMyComment = 2,
15 /** Ako je ostavljen novi komentar na korijenu stranice na koju ste pretplaćeni. **/
16 SubscriptionReplyRoot = 3,
17 /** Ako je netko komentirao vaš profil. **/
18 CommentedOnProfile = 4,
19 /** Ako imate privatnu poruku (DM). **/
20 DirectMessage = 5,
21 /** TrialLimits je samo za korisnike tenant-a. **/
22 TrialLimits = 6,
23 /** Ako ste bili @mentioned. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** With SSO, the user id is in the format `<tenant id>:<user id>`. **/
31 userId?: string
32 /** When working with SSO, you only have to worry about `userId`. **/
33 anonUserId?: string
34 /** urlId is almost always defined. It is only optional for tenant-level notifications, which are infrequent. **/
35 urlId?: string
36 /** URL is cached for quick navigation to the source of the notification. **/
37 url?: string
38 /** Page Title is cached for quick reading of notification source. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** For example, comment id. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // string datuma
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName and fromUserAvatarSrc are cached here for quick displaying of the notification. They are updated when the user is updated. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Set this to true to stop getting notifications for this object. **/
53 optedOut?: boolean
54}
55

Struktura stranice Internal Link

Objekt Page predstavlja stranicu kojoj može pripadati više komentara. Ovaj odnos definira se pomoću urlId.

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

Struktura za objekt Page je sljedeća:

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

Struktura ankete Internal Link

Poll je vezan uz komentar, a ne da je samostalan objekt. Stvara se zajedno s komentarom (vidi POST /api/v1/comments), ili se kasnije dodaje postojećem komentaru putem PUT /api/v1/polls/:commentId.

Brojevi glasova čuvaju se na samom anketu, pa čitanje ankete daje rezultate bez potrebe za zbrajanjem bilo čega. Pojedinačni glasovi iza tih brojeva su PollVote objekti.

Svaka opcija ima id koji se generira prilikom stvaranja ankete. Taj id koristite za davanje glasa, za preimenovanje opcije i za zadržavanje opcije (i njenih glasova) kada PUT-ate anketu s dodanim ili uklonjenim opcijama. To je jedini siguran način referenciranja opcije - 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 /** When set and in the past, the poll is closed and no longer accepts votes. **/
13 closesAt?: string | null
14 /** 0 anonymous (the default), 1 admins and moderators, 2 everyone. Absent means anonymous. **/
15 privacy?: 0 | 1 | 2 | null
16 /** When true, the counts are hidden from anyone who has not voted yet. Absent means 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 unutar ankete (zanemarujući velika/mala slova).
  • closesAt mora biti u budućnosti prilikom stvaranja ankete. Za trenutno zatvaranje ankete, PATCH-ajte je s datumom u prošlosti.

Postavke stranice

Ankete poštuju konfiguraciju vaše stranice, koju možete promijeniti pod Customize Widget:

  • Ankete moraju biti omogućene prije stvaranja ankete, inače API odgovara s polls-disabled.
  • Glasovanje može biti ograničeno na prijavljene korisnike, u kojem slučaju glas poslan samo s anonUserId se odbija s poll-login-required.

Struktura glasova za anketu Internal Link

A PollVote je odgovor jedne osobe na anketu. Brojke prikazane na samoj anketi ažurirane su u skladu s njima, pa ih trebate samo kada želite znati tko je glasao za što, a ne ukupne zbrojeve.

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

voterId je userId kada je glasatelj 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 /** The userId when the voter was logged in, otherwise the anonUserId. **/
8 voterId: string
9 optionId: string
10 createdAt: string
11 /** When the voter last moved their vote to a different option. **/
12 updatedAt?: string
13}
14

Privatnost

Postavka privacy ankete primjenjuje se na ovaj API na isti način kao što se primjenjuje u widgetu za komentare:

  • Anonymous (zadano): nitko ne može vidjeti kako je netko glasao, pa se glasovi ne mogu pročitati.
    GET /api/v1/poll-votes i GET /api/v1/poll-votes/:id odgovaraju s poll-anonymous. Brojke ankete i dalje su dostupne putem GET /api/v1/polls/:commentId.

  • Admins and moderators: vaš API ključ pripada administratoru vaše stranice, pa može čitati glasove.

  • Everyone: glasovi se mogu čitati.

Privatnost ankete može se suziti, ali ne i proširiti nakon što ima glasova.

Struktura čekajućih webhook događaja Internal Link

A PendingWebhookEvent object predstavlja webhook događaj u redu koji je na čekanju.

PendingWebhookEvent objects se stvaraju automatski i ne mogu se ručno stvarati putem API-ja. Također istječu nakon jedne godine. Mogu se izbrisati, što uklanja zadatak iz reda.

Postoje različite vrste događaja - provjerite eventType (OutboundSyncEventType) i type (OutboundSyncType).

Uobičajen slučaj upotrebe ovog API-ja je implementacija prilagođenog nadzora. Možda ćete htjeti periodički pozivati endpoint /count kako biste provjeravali broj preostalih zadataka za zadane filtere.

Struktura objekta PendingWebhookEvent je sljedeća:

Struktura objekta PendingWebhookEvent
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** Zadatak sinkronizacije specifičan za WordPress. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** ID komentara povezan s događajem. **/
17 commentId: string
18 /** Objekt komentara za događaj u trenutku događaja. Počeli smo ih dodavati u studenom 2023. **/
19 comment: Comment
20 /** Vanjski ID koji može biti povezan s komentarom. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Postavlja se prije prvog pokušaja i nakon svakog neuspjeha. **/
26 nextAttemptAt: Date
27 /** Je li ovo događaj stvaranja, brisanja ili ažuriranja... **/
28 eventType: OutboundSyncEventType
29 /** Vrsta sinkronizacije koju treba izvršiti (WordPress, poziv API-ja, itd.). **/
30 type: OutboundSyncType
31 /** Domena koja odgovara komentaru. Tu domenu koristimo za odabir API ključa. **/
32 domain: string
33 /** Zadnja pogreška koja se dogodila. Ovaj tip nije tipiziran i predstavlja "dump" onoga što se dogodilo. Obično sadrži objekt sa statusCode, body i mapom headers. **/
34 lastError: object | null
35}
36

Struktura SSO korisnika Internal Link

FastComments nudi jednostavno rješenje za SSO koje se lako koristi. Ažuriranje korisničkih podataka putem integracije temeljene na HMAC-u jednostavno je kao učitavanje stranice s ažuriranim payloadom od strane korisnika.

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

SSO User API pruža način za CRUD operacije nad objektima koje nazivamo SSOUsers. Ti su objekti različiti od običnih korisnika (Users) i drže se odvojeno radi sigurnosti tipova.

Struktura objekta SSOUser je sljedeć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 permission - SSO users with this flag are billed as SSO Admins (separate from regular SSO users)
16 isAdminAdmin?: boolean // Admin permission - SSO users with this flag are billed as SSO Admins (separate from regular SSO users)
17 isCommentModeratorAdmin?: boolean // Moderator permission - SSO users with this flag are billed as SSO Moderators (separate from regular SSO users)
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

Naplata za SSO korisnike

SSO korisnici se naplaćuju različito ovisno o njihovim oznakama dozvola:

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

Važno: Kako bi se spriječila dvostruka naplata, sustav automatski uklanja duplikate SSO korisnika naspram običnih korisnika i moderatora tenanta prema adresi e-pošte. Ako SSO korisnik ima istu e-poštu kao obični korisnik ili moderator tenanta, neće se naplatiti dvaput.

Kontrola pristupa

Korisnici se mogu podijeliti u grupe. Za to služi polje groupIds, i ono je neobavezno.

@Spominjanja

Prema zadanim postavkama @mentions će koristiti username za pretraživanje drugih SSO korisnika kada se upiše znak @. Ako se koristi displayName, tada će rezultati koji odgovaraju username biti ignorirani kada postoji podudaranje za displayName, a rezultati pretrage @mention koristit će displayName.

Pretplate

Uz FastComments, korisnici se mogu pretplatiti na stranicu klikom na ikonu zvona u widgetu za komentare i klikom na Pretplati se.

Kod običnog korisnika, šaljemo im e-poštu s obavijestima na temelju njihovih postavki obavijesti.

Kod SSO korisnika, ovo razdvajamo radi kompatibilnosti unatrag. Korisnici će primati dodatne e-pošte s obavijestima o pretplati samo ako postavite optedInSubscriptionNotifications na true.

Značke (Badges)

Možete dodijeliti značke SSO korisnicima koristeći svojstvo badgeConfig. Značke su vizualni pokazatelji koji se pojavljuju uz korisničko ime u komentarima.

  • badgeIds - Polje ID-ova znački koje treba dodijeliti korisniku. To su globalne značke vidljive na svim stranicama. Mora biti riječ o valjanim ID-ovima znački stvorenim u vašem FastComments računu. Ograničeno na 30 znački.
  • pageBadgeIds - Neobavezno polje ID-ova znački ograničenih na trenutnu stranicu (urlId). Te se značke prikazuju samo na stranici na kojoj su dodijeljene. Različite stranice mogu imati različite značke ograničene na stranicu za istog korisnika.
  • override - Ako je true, sve postojeće prikazane značke bit će zamijenjene pruženima. Globalne i značke ograničene na stranicu nadjačavaju se neovisno — nadjačavanje globalnih znački ne utječe na značke ograničene na stranicu, i obrnuto. Ako je false ili izostavljeno, pružene značke bit će dodane postojećim značkama.
  • update - Ako je true, svojstva prikaza znački bit će ažurirana iz konfiguracije tenanta svaki put kada se korisnik prijavi.

Struktura pretplate Internal Link

Objekt Subscription predstavlja pretplatu za korisnika.

Objekti Subscription stvaraju se kada korisnik klikne na zvonce za obavijesti u widgetu za komentare i klikne "Subscribe to this page".

Pretplate se mogu stvoriti i putem API-ja.

Postojanje objekta Subscription uzrokuje generiranje objekata Notification i slanje e-pošte kada se novi komentari ostave na korijenu povezane stranice za koju je Subscription vezan. Slanje e-pošte ovisi o vrsti korisnika. Za obične korisnike to ovisi o optedInNotifications. Za SSO korisnike to ovisi o optedInSubscriptionNotifications. Imajte na umu da neke aplikacije možda nemaju koncept web-dostupne stranice, u kojem slučaju jednostavno postavite urlId na id stavke na koju se pretplaćujete (ista vrijednost za urlId koju biste proslijedili widgetu za komentare).

Struktura objekta Subscription je sljedeća:

Struktura pretplate
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** With SSO, the user id is in the format `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // date string
12}
13

Struktura dnevne upotrebe najmodavca Internal Link

Objekt TenantDailyUsage predstavlja korištenje za tenant na određenom danu. Ako za određenog tenant-a na određen dan nije bilo aktivnosti, taj dan neće imati objekt TenantDailyUsage.

Objekt TenantDailyUsage nije u stvarnom vremenu i može zaostajati nekoliko minuta za stvarnom upotrebom.

Struktura za objekt TenantDailyUsage je sljedeć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 /** Ignorirano za naplatu. **/
19 ignored: boolean
20}
21

Struktura najmodavca Internal Link

Tenant definira FastComments.com korisnika. Mogu se stvoriti putem API-ja od strane tenanata s pristupom white labelingu. White labelirani tenanti ne mogu stvarati druge white labelirane tenante (dopuštena je samo jedna razina ugniježđivanja).

Struktura objekta Tenant je sljedeća:

Struktura Tenant-a
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Ovo se također može riješiti putem DomainConfig API-ja. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // vjerojatno želite Unknown
14 logoSrc?: string, // sirova putanja slike
15 logoSrc100px?: string, // promijenjena 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 - Računa se na temelju packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Računa se na temelju packageId. **/
69 hasAuditing?: boolean
70 /** Možete pohraniti par ključ-vrijednost s tenantom koji možete koristiti za upite. Ključevi ne smiju sadržavati "." ili "$", niti biti dulji od 100 znakova. Vrijednosti ne smiju biti dulje od 2k znakova. **/
71 meta?: Record<string, string | null>
72}
73

Struktura korisnika Internal Link

User je objekt koji predstavlja najčešći zajednički nazivnik svih korisnika.

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

  • Secure SSO
  • Simple SSO
  • Tenant Users (Na primjer: Administratori)
  • Commenters

Ovaj API je za Komentatore i korisnike stvorene putem Simple SSO. U osnovi, svaki korisnik stvoren putem vaše stranice može se dohvatiti putem ovog API-ja. Tenant Users se također mogu dohvatiti na ovaj način, ali ćete dobiti više informacija interakcijom s /tenant-users/ API-jem.

Za Secure SSO molimo koristite /sso-users/ API.

Ne možete ažurirati ove vrste korisnika. Oni su kreirali svoj račun putem vaše stranice, stoga pružamo osnovni pristup samo za čitanje, ali ne možete napraviti promjene. Ako želite imati takav tijek - morate postaviti Secure SSO.

Struktura za objekt User je sljedeća:

Struktura objekta User
Copy Copy
1
2export interface User {
3 /** Ovo je također id koji se koristi kao userId na objektima komentara. **/
4 id: string
5 username: string
6 /** Na primjer, poveznica na blog komentatora. **/
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 glasova Internal Link

Objekt Vote predstavlja glas koji je ostavio korisnik.

Odnos između komentara i glasa definiran je putem commentId.

Struktura objekta Vote je sljedeć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 konstruiranje pitanja i agregiranje njihovih rezultata. Primjer pitanja (u daljnjem tekstu nazvan QuestionConfig) može biti ocjena zvjezdicama, klizač, ili NPS pitanje (određeno putem type).

Podaci o pitanjima mogu se agregirati pojedinačno, zajedno, tijekom vremena, ukupno, po stranici i slično.

Okvir ima sve mogućnosti potrebne za izgradnju klijentskih widgeta (s vašim serverom ispred ovog API-ja), administratorskih nadzornih ploča i alata za izvještavanje.

Prvo moramo definirati a QuestionConfig. Struktura je sljedeć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 - povećava se za svaki novi odgovor. **/
13 usedCount: number
14 /** Niz datuma koji označava kada je konfiguracija zadnji put korištena (ostavljen je 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 spremili rezultate za pitanja, stvorite QuestionResult. Zatim možete agregirati rezultate pitanja, i također povezati ih s komentarima u svrhu izvješ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 objekt koji predstavlja značku dodijeljenu korisniku u FastComments sustavu.

Značke se korisnicima mogu dodjeljivati automatski na temelju njihove aktivnosti (kao što su broj komentara, vrijeme odgovora, status veterana) ili ručno od strane administratora stranice.

Struktura objekta UserBadge je sljedeća:

Struktura UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Jedinstveni identifikator ove dodjele značke korisniku */
4 id: string
5 /** ID korisnika kojem je značka dodijeljena */
6 userId: string
7 /** ID definicije značke iz kataloga znački tenant-a */
8 badgeId: string
9 /** ID tenant-a koji je stvorio/dodijelio ovu značku */
10 fromTenantId: string
11 /** Kada je ova značka stvorena (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 temeljene na pragovima, vrijednost praga */
25 threshold?: number
26 /** Naziv/oznaka značke */
27 name?: string
28 /** Detaljan opis značke */
29 description?: string
30 /** Tekst prikazan na znački */
31 displayLabel?: string
32 /** URL slike prikazane na znački */
33 displaySrc?: string
34 /** Boja pozadine značke (hex kod) */
35 backgroundColor?: string
36 /** Boja ruba značke (hex kod) */
37 borderColor?: string
38 /** Boja teksta značke (hex kod) */
39 textColor?: string
40 /** Dodatna CSS klasa za stiliziranje */
41 cssClass?: string
42 /** Za značke veterana, prag vremena u milisekundama */
43 veteranUserThresholdMillis?: number
44 /** Je li ova značka prikazana na komentarima korisnika */
45 displayedOnComments: boolean
46 /** Redoslijed prikaza značke */
47 order?: number
48 /** Ako je postavljeno, ova se značka prikazuje samo na stranici s odgovarajućim urlId. Null za globalne značke. */
49 urlId?: string | null
50}
51

Struktura napretka značke korisnika Internal Link

UserBadgeProgress je objekt koji predstavlja napredak korisnika prema stjecanju različitih bedževa u FastComments sustavu.

Ovo praćenje pomaže odrediti kada korisnici trebaju dobiti automatske bedževe na temelju njihove aktivnosti i sudjelovanja u vašoj zajednici.

Struktura za UserBadgeProgress objekt je sljedeća:

Struktura UserBadgeProgress objekta
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Jedinstveni identifikator ovog zapisa napretka */
4 id: string
5 /** ID tenanta kojem pripada ovaj zapis napretka */
6 tenantId: string
7 /** ID korisnika kojeg ovaj zapis napretka prati */
8 userId: string
9 /** ID prvog komentara korisnika u sustavu */
10 firstCommentId?: string
11 /** Datum prvog komentara korisnika (milisekunde od epohe) */
12 firstCommentDate?: number
13 /** Automatski izračunati faktor povjerenja na temelju aktivnosti korisnika */
14 autoTrustFactor?: number
15 /** Faktor povjerenja postavljen ručno od strane administratora */
16 manualTrustFactor?: number
17 /** Detaljan objekt napretka s različitim metrima, ključevi odgovaraju BadgeType enumeraciji */
18 progress: {
19 /** 0: CommentCount - Broj komentara koje je korisnik napisao */
20 '0'?: number
21 /** 1: CommentUpVotes - Broj pozitivnih glasova (upvote) koje je korisnik primio */
22 '1'?: number
23 /** 2: CommentReplies - Broj odgovora koje je korisnik napisao */
24 '2'?: number
25 /** 3: CommentsPinned - Broj prikvačenih (pinned) komentara koje korisnik ima */
26 '3'?: number
27 /** 4: Veteran - Starost korisničkog računa */
28 '4'?: number
29 /** 5: NightOwl - Broj puta kada je korisnik objavio tijekom noćnih sati */
30 '5'?: number
31 /** 6: FastReplyTime - Prosječno vrijeme odgovora u milisekundama */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Za moderator bedževe, broj izbrisanih komentara */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Za moderator bedževe, broj odobrenih komentara */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Za moderator bedževe, broj neodobrenih komentara */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Za moderator bedževe, broj pregledanih komentara */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Za moderator bedževe, broj komentara označenih kao spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Za moderator bedževe, 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šu API dokumentaciju smatrali sveobuhvatnom i lako razumljivom. Ako uočite bilo kakve nedostatke, javite nam u nastavku.