FastComments.com

FastComments API

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

U ovoj dokumentaciji naći ćete sve podržane resurse koje API dokumentuje zajedno sa tipovima zahtjeva i odgovora.

Za Enterprise korisnike, sav pristup API-ju se bilježi u Dnevniku revizije.

Generisani SDK-ovi

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

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

Autentifikacija

API se autentifikuje tako što proslijedite svoj API ključ kao ili X-API-KEY zaglavlje ili API_KEY parametar upita. Također će vam trebati vaš tenantId za pozive API-ja. To se može dobiti na istoj stranici kao i vaš API ključ.

Napomena o sigurnosti

Ove rute su namijenjene da se pozivaju sa servera. NEMOJTE ih pozivati iz preglednika. Time ćete otkriti vaš API ključ - to će omogućiti potpuni pristup vašem nalogu svima koji mogu vidjeti izvorni kod stranice!

Authentication Option One - Headers

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

Authentication Option Two - Query Parameters

  • Parametar upita: API_KEY
  • Parametar upita: tenantId

Структура ревизијског дневника Internal Link

AuditLog је објекат који представља ревидиран догађај за тенанте који имају приступ овој функцији.

Структура за AuditLog објекат је следећа:

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

Дневник ревизија је непроменљив. У њега се такође не може ручно уписивати. Само FastComments.com може одлучити када ће уписати у дневник ревизија. Међутим, ви можете читати из њега преко овог API-ја.

Записи у дневнику ревизија истичу након двије године.

Структура коментара Internal Link

Objekat Comment predstavlja komentar koji je ostavio korisnik.

Veza između roditeljskih i podkomentara definiše se preko parentId.

Struktura objekta Comment je sljedeća:

Struktura komentara
Copy Copy
1
2interface Comment {
3 /** READONLY: Postavljeno na true ako spam mehanizam odredi da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Da li je komentar odobren za prikaz. Postavi se na true prilikom čuvanja komentara, inače će biti skriven. **/
6 approved?: boolean
7 /** Avatar korisnika. **/
8 avatarSrc?: string
9 /** Podkomentari. Nisu popunjeni u svim scenarijima. Koristi se kada je asTree postavljeno na true preko API-ja. **/
10 children: Comment[]
11 /** Neobrađeni komentar koji je ostavio korisnik. **/
12 comment: string
13 /** READONLY: Komentar korisnika parsiran u HTML. **/
14 commentHTML?: string
15 /** Email komentatora. Obavezan ako je anonimno komentarisanje isključeno. **/
16 commenterEmail?: string
17 /** Link komentatora (npr. njihov blog). **/
18 commenterLink?: string
19 /** Ime komentatora. Uvijek obavezno. Ako nije dostupno, postavite npr. "Anonymous". **/
20 commenterName: string
21 /** Datum ostavljanja komentara, u UTC epoch formatu. **/
22 date: number
23 /** 'Prikazna oznaka' za komentar – npr. "Admin", "Moderator" ili nešto poput "VIP User". **/
24 displayLabel?: string
25 /** Domen na kojem je komentar objavljen. **/
26 domain?: string
27 /** READONLY: Broj puta koliko je komentar prijavljen/označen. **/
28 flagCount?: number
29 /** The #hashtags written in the comment that were successfully parsed. You can also manually add hashtags, for querying, but they won't display in the comment text automatically. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Does the comment contain images? **/
32 hasImages?: boolean
33 /** READONLY: Does the comment contain links? **/
34 hasLinks?: boolean
35 /** READONLY: The unique comment id. **/
36 id: string
37 /** Only on create! This is hashed for storage. **/
38 ip?: string
39 /** READONLY: Did the current user block the user that wrote this comment? **/
40 isBlocked?: boolean
41 /** READONLY: Is the comment by an admin? Automatically set based on userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Is the comment by a moderator? Automatically set based on userId. **/
44 isByModerator?: boolean
45 /** Set to true if the comment was soft deleted (placeholder had to be left due to some other configuration). **/
46 isDeleted?: boolean
47 /** Set to true if the user's account was deleted and the comment had to be retained. **/
48 isDeletedUser?: boolean
49 /** READONLY: Is the flagged by the currently logged-in user (contextUserId)? **/
50 isFlagged?: boolean
51 /** Is the comment pinned? **/
52 isPinned?: boolean
53 /** Is the comment locked for new replies (moderators still can reply)? **/
54 isLocked?: boolean
55 /** Is the comment spam? **/
56 isSpam?: boolean
57 /** READONLY: Is the comment voted down for the current user (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Is the comment voted up for the current user (contextUserId)? **/
60 isVotedUp?: boolean
61 /** The locale the comment is in. If not provided, will be derived from the language accept HTTP header. **/
62 locale?: 'de_de' | 'en_us' | 'es_es' | 'fr_fr' | 'it_it' | 'ja_jp' | 'ko_kr' | 'pl_pl' | 'pt_br' | 'ru_ru' | 'tr_tr' | 'zh_cn' | 'zh_tw'
63 /** READONLY: The @mentions written in the comment that were successfully parsed. **/
64 mentions?: CommentUserMention[]
65 /** Optional metadata associated with the comment. **/
66 meta?: Record<string, string | number | boolean>
67 /** The optional list of moderation group ids associated with this comment. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: The id of the vote object that corresponds to the vote from the current user (contextUserId) on this comment. **/
70 myVoteId?: string
71 /** Whether notifications were sent for this comment for commenters. To prevent notifications being sent on imports, set this to true. **/
72 notificationSentForParent?: boolean
73 /** Whether notifications were sent for this comment for tenant users. To prevent notifications being sent on imports, set this to true. **/
74 notificationSentForParentTenant?: boolean
75 /** The title of the page this comment was on. **/
76 pageTitle?: string
77 /** If we're replying to a comment, this is the ID that we are replying to. **/
78 parentId?: string|null
79 /** Whether the comment is marked reviewed. **/
80 reviewed: boolean
81 /** The tenant id where the comment belongs. **/
82 tenantId: string
83 /** The user that wrote the comment. Created automatically when saving a comment with a name/email. **/
84 userId?: string|null
85 /** The URL to the location that this comment is visible, like a blog post. **/
86 url: string
87 /** A "cleaned" version of the urlId you passed us. When saving, you specify this field, but when you fetch the comment back this will be "cleaned" and your original value moved to "urlIdRaw". **/
88 urlId: string
89 /** READONLY: The original urlId you passed us. **/
90 urlIdRaw?: string
91 /** Is the user and this comment verified? **/
92 verified: boolean
93 /** Number of votes up. **/
94 votesUp?: number
95 /** Number of votes down. **/
96 votesDown?: number
97 /** The "karma" of the comment (= votes up - votes down). **/
98 votes?: number
99}
100

Neka od ovih polja su označena kao READONLY - ta polja vraća API, ali ih nije moguće postaviti.

Comment Text Structure

Komentari se pišu u FastComments varijanti markdown-a, što je u suštini markdown plus tradicionalne bbcode oznake za slike, poput [img]path[/img].

Tekst se čuva u dva polja. Tekst koji je korisnik unio čuva se neizmijenjen u polju comment. Ovaj tekst se renduje i sprema u polje commentHTML.

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

Preporučuje se renderovanje HTML-a, pošto je to vrlo mali podskup HTML-a i izgradnja renderer-a je prilično jednostavna. Postoji više biblioteka za React Native i Flutter, na primjer, koje u tome pomažu

Možete izabrati da renderujete nenormalizovanu vrijednost polja comment. An example parser is here..

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

Tagging

Kada su korisnici označeni u komentaru, informacije se čuvaju u listi nazvanoj mentions. Svaki objekat u toj listi has the following structure.

Objekat spominjanja u komentaru
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ID korisnika. Za SSO korisnike, biće prefiksiran vašim tenant ID-jem. **/
4 id: string
5 /** The final @mention tag text, including the @ symbol. **/
6 tag: string
7 /** The original @mention tag text, including the @ symbol. **/
8 rawTag: string
9 /** What type of user was tagged. user = FastComments.com account. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** If the user opts out of notifications, this will still be set to true. **/
12 sent: boolean
13}
14

HashTags

Kada se koriste hashtagovi i uspješno se parsiraju, informacije se čuvaju u listi nazvanoj hashTags. Svaki objekat u toj listi has the following structure. Hashtags can also be manually added to the comment hashTags array for querying, if retain is set.

Objekat hashtag-a komentara
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** The hashtag id. **/
4 id: string
5 /** The final #hashtag tag text, including the # symbol. **/
6 tag: string
7 /** If the hashtag is associated with a custom URL, this will be defined. **/
8 url?: string
9 /** If we should retain the hashtag, even if it does not exist in the comment text, when the comment is updated. Useful for tagging comments without changing comment text. **/
10 retain?: boolean
11}
12

Структура шаблона е-поште Internal Link

An EmailTemplate object represents configuration for a custom email template, for a tenant.

The system will select the email template to use via:

  • Its type identifier, we call this emailTemplateId. These are constants.
  • The domain. We will first try to find a template for the domain that the related object (like a Comment) is tied to, and if a match is not found then we will try to find a template where domain is null or *.

The structure for the EmailTemplate object is as follows:

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 predložak treba biti povezan. **/
14 domain?: string | '*' | null
15 /** Sadržaj email predloška u EJS sintaksi. **/
16 ejs: string
17 /** Mapa zamijenjenih prevodnih ključeva na vrijednosti, za svaki podržani lokal. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Objekt koji predstavlja kontekst renderiranja predloška. **/
20 testData: object
21}
22

Notes

  • You can get the valid emailTemplateId values from the /definitions endpoint.
  • The /definitions endpoint also includes the default translations and test data.
  • Templates will fail to save with invalid structure or test data.

Структура хештега Internal Link


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

The structure for the HashTag object is as follows:

Struktura HashTag-a
Copy Copy
1
2interface HashTag {
3 /** Treba da počinje sa "#" ili željenim znakom. **/
4 tag: string
5 /** Opcionalni URL na koji hashtag može upućivati. Umjesto filtriranja komentara po hashtagu, korisnički interfejs će pri kliku preusmjeriti na ovaj URL. **/
6 url?: string
7 /** SAMO ZA ČITANJE **/
8 createdAt: string
9}
10

Notes:

  • In some API endpoints you will see that the hashtag is used in the URL. Remember to URI-Encoded values. For example, # should instead be represented as %23.
  • Some of these fields are marked READONLY - these are returned by the API but cannot be set.

Структура броја обавештења 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 kreiraju automatski i ne mogu se kreirati putem API-ja. Takođe ističu nakon jedne godine.

Možete obrisati broj nepročitanih obaveštenja korisnika brisanjem njihovog NotificationCount.

Struktura za NotificationCount objekat je sljedeća:

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

Структура обавештења Internal Link


Objekat Notification predstavlja obavještenje za korisnika.

Notification objekti se stvaraju automatski i ne mogu se kreirati putem API-ja. Također ističu nakon jedne godine. Obavještenja ne mogu biti izbrisana. Međutim, mogu se ažurirati da bi se viewed postavio na false, i možete ih pretraživati po viewed.

Korisnik se također može odjaviti od obavještenja za određeni komentar tako što će u obavještenju postaviti optedOut na true. Možete se ponovo prijaviti postavljanjem na false.

Postoje različite vrste obavještenja - provjerite relatedObjectType i type.

Načini na koje se obavještenja kreiraju su prilično fleksibilni i mogu biti pokrenuti u mnogim scenarijima (pogledajte NotificationType).

Trenutno, postojanje Notification zapravo ne implicira da je e-pošta poslana ili da bi trebala biti poslana. Umjesto toga, obavještenja se koriste za feed obavještenja i povezane integracije.

Struktura objekta Notification izgleda ovako:

Struktura obavještenja
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 gdje u niti (čak i potomcima potomaka) niti u kojoj ste komentarisali. **/
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 neko komentarisao vaš profil. **/
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 @spomenuti. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** Sa SSO, user id je u formatu `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Kada radite sa SSO, morate se brinuti samo o `userId`. **/
33 anonUserId?: string
34 /** urlId je skoro uvijek definisan. Opcionalan je samo za notifikacije na nivou tenanta, koje su rijetke. **/
35 urlId?: string
36 /** URL je keširan za brzu navigaciju do izvora obavještenja. **/
37 url?: string
38 /** Naslov stranice je keširan za brzo čitanje izvora obavještenja. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Na primjer, id komentara. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // string datuma
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName i fromUserAvatarSrc su keširani ovdje za brzo prikazivanje obavještenja. Ažuriraju se kada je korisnik ažuriran. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Postavite ovo na true da prestanete primati obavještenja za ovaj objekt. **/
53 optedOut?: boolean
54}
55

Структура странице Internal Link

Објекат Page представља страницу којој може припадати много коментара. Овај однос је дефинисан помоћу urlId.

Page чува информације као што су наслов странице, број коментара и urlId.

Структура за објекат Page је следећа:

Структура странице
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 /** Постављање ове вредности на null значи да сви SSO корисници могу видјети страницу. Празна листа значи да је затворена за све кориснике. **/
11 accessibleByGroupIds?: string[] | null
12 /** Да ли је ова страница затворена за нове коментаре? **/
13 isClosed?: boolean
14}
15

Структура чекајућег вебхук догађаја Internal Link


Објекат PendingWebhookEvent представља webhook догађај који је стављен у ред и чека.

PendingWebhookEvent објекти се аутоматски креирају и не могу се ручно креирати преко API-ја. Такође истичу након једне године. Могу се обрисати чиме се задатак уклања из реда.

Постоје различите врсте догађаја — проверите eventType (OutboundSyncEventType) и type (OutboundSyncType).

Чест случај употребе овог API-ја је имплементација прилагођеног надзора. Можда ћете желети повремено позивати /count ендпоинт да бисте периодично провјеравали број преосталих задатака за одређене филтере.

Структура објекта PendingWebhookEvent је следећа:

Структура PendingWebhookEvent
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** Задатак синхронизације специфичан за WordPress. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** ИД коментара повезан са догађајем. **/
17 commentId: string
18 /** Објекат коментара за догађај у тренутку догађаја. Почели смо да их додајемо у новембру 2023. **/
19 comment: Comment
20 /** Спољни ИД који може бити повезан са коментаром. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Поставља се пре првог покушаја и након сваког неуспеха. **/
26 nextAttemptAt: Date
27 /** Да ли је ово догађај креирања, брисања или ажурирања... **/
28 eventType: OutboundSyncEventType
29 /** Врста синхронизације која ће се извршити (WordPress, позив API-ја, итд). **/
30 type: OutboundSyncType
31 /** Домен који је одговарао коментару. Користимо овај домен да изаберемо API кључ. **/
32 domain: string
33 /** Последња грешка која се десила. Овај тип није типизиран и представља "dump" онога што се десило. Обично садржи објекат са statusCode, body, и мапом headers. **/
34 lastError: object | null
35}
36

Структура SSO корисника Internal Link

FastComments pruža jednostavno za korištenje SSO rješenje. Ažuriranje informacija o korisniku s integracijom zasnovanom na HMAC-u je jednostavno kao da korisnik učita stranicu sa ažuriranim payload-om.

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

SSO User API pruža način za CRUD objekata koje zovemo SSOUsers. Ovi objekti se razlikuju od regularnih Users i čuvaju se odvojeno radi tip-sigurnosti.

Struktura SSOUser objekta 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 ovlašćenje - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od regularnih SSO korisnika)
16 isAdminAdmin?: boolean // Admin ovlašćenje - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od regularnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Moderator ovlašćenje - SSO korisnici sa ovom oznakom se naplaćuju kao SSO moderatori (odvojeno od regularnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa se neće primijeniti na korisnika. Ako je prazan spisak, ovaj korisnik neće moći vidjeti nijednu stranicu niti @mention-ovati druge korisnike. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dozvoljava drugim korisnicima da vide aktivnost ovog korisnika, uključujući komentare, na njegovom profilu. Podrazumijevano je true radi sigurnih profila. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dozvoljava drugim korisnicima da ostavljaju komentare na korisnikovom profilu, niti da vide postojeće komentare na profilu. Podrazumijevano false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dozvoljava drugim korisnicima da šalju direktne poruke ovom korisniku. Podrazumijevano false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Opcionalna konfiguracija za oznake (badges) korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-jeva oznaka koje će biti dodijeljene korisniku. Ograničeno na 30 oznaka. Redoslijed se poštuje. **/
31 badgeIds: string[]
32 /** Ako je true, zamjenjuje sve postojeće prikazane oznake sa navedenim. Ako je false, dodaje se postojećim oznakama. **/
33 override?: boolean
34 /** Ako je true, ažurira prikazne osobine oznaka iz konfiguracije tenanta. **/
35 update?: boolean
36 }
37}
38

Naplata za SSO korisnike

SSO korisnici se naplaćuju različito u zavisnosti od njihovih zastavica ovlašćenja:

  • Regular SSO Users: Korisnici bez admin ili moderator ovlašćenja se naplaćuju kao regularni SSO korisnici
  • SSO Admins: Korisnici sa isAccountOwner ili isAdminAdmin zastavicom se naplaćuju odvojeno kao SSO administratori (ista cijena kao regularni tenant administratori)
  • SSO Moderators: Korisnici sa isCommentModeratorAdmin zastavicom se naplaćuju odvojeno kao SSO moderatori (ista cijena kao regularni moderatori)

Važno: Da bi se spriječilo dvostruko naplaćivanje, sistem automatski uklanja duplikate SSO korisnika u odnosu na regularne tenant korisnike i moderatore koristeći email adresu. Ako SSO korisnik ima istu email adresu kao regularni tenant korisnik ili moderator, neće biti naplaćen dvaput.

Kontrola pristupa

Korisnici se mogu podijeliti u grupe. Za to služi polje groupIds i opcionalno je.

@Mentions

Po zadanoj postavci @mentions će koristiti username za pretragu drugih sso korisnika kada se utipka znak @. Ako se koristi displayName, rezultati koji odgovaraju username biće ignorisani kada postoji podudaranje za displayName, i rezultati pretrage @mention će koristiti displayName.

Pretplate

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

Kod regularnog korisnika, šaljemo im email obavještenja na osnovu njihovih postavki obavijesti.

Kod SSO korisnika, razdvojili smo ovo radi kompatibilnosti unazad. Korisnici će dobiti ova dodatna email obavještenja o pretplatama samo ako postavite optedInSubscriptionNotifications na true.

Oznake

Možete dodijeliti oznake SSO korisnicima koristeći svojstvo badgeConfig. Oznake su vizuelni indikatori koji se pojavljuju pored imena korisnika u komentarima.

  • badgeIds - Niz ID-jeva oznaka koje treba dodijeliti korisniku. Moraju biti važeći ID-jevi oznaka kreirani na vašem FastComments nalogu. Ograničeno na 30 oznaka.
  • override - Ako je true, sve postojeće oznake prikazane u komentarima će biti zamijenjene navedenim. Ako je false ili izostavljeno, navedene oznake će biti dodane postojećim oznakama.
  • update - Ako je true, prikazne osobine oznaka će biti ažurirane iz konfiguracije tenanta svaki put kada se korisnik prijavi.

Структура претплате Internal Link


A Subscription object predstavlja pretplatu za korisnika.

Subscription objekti se kreiraju kada korisnik klikne na zvonce za obavještenja u widgetu za komentare i izabere "Pretplati se na ovu stranicu".

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

Posjedovanje Subscription objekta uzrokuje generisanje Notification objekata i slanje emailova kada se ostave novi komentari na korijenu pridružene stranice za koju je Subscription. Slanje emailova zavisi od tipa korisnika. Za obične korisnike to zavisi od optedInNotifications. Za SSO korisnike to zavisi od optedInSubscriptionNotifications. Imajte na umu da neke aplikacije možda nemaju pojam web-pristupačne stranice, u tom slučaju jednostavno postavite urlId na id stavke na koju se pretplaćujete (istu vrijednost za urlId koju biste proslijedili widgetu za komentare).

Struktura Subscription objekta je sljedeća:

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

Структура дневне употребе тенанта Internal Link

Објекат TenantDailyUsage представља коришћење за закупца на одређени дан. Ако није било активности за одређеног закупца на одређени дан, тај дан неће имати TenantDailyUsage објекат.

Објекат TenantDailyUsage није у реалном времену и може заостајати неколико минута у односу на стварну употребу.

Структура за TenantDailyUsage објекат је следећа:

Структура 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 /** Игнорисано за наплату. **/
19 ignored: boolean
20}
21

Структура тенанта Internal Link

The Tenant дефинише FastComments.com купца. Они се могу креирати преко API-ја од стране тенаната који имају white-label приступ. Тенанти са white-label приступом не могу креирати друге тенанте са white-label (дозвољен је само један ниво угнежђивања).

Структура за објекат Tenant је следећа:

Структура Tenant-а
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Ово се такође може обрадити преко DomainConfig API. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // највероватније ћете желети Unknown
14 logoSrc?: string, // необрађена путања до слике
15 logoSrc100px?: string, // прилагођено за минијатуре
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; // број због "legacy" разлога
45 packageId?: string | null
46 paymentFrequency?: TenantPaymentFrequency
47 billingInfoValid?: boolean
48 billingHandledExternally?: boolean
49 createdBy?: string
50 isSetup?: boolean
51 domainConfiguration: FastCommentsAPITenantDomainConfig[]
52 billingInfo?: FastCommentsAPITenantBillingInfo
53 stripeCustomerId?: string
54 stripeSubscriptionId?: string
55 stripePlanId?: string
56 enableProfanityFilter?: boolean
57 enableSpamFilter?: boolean
58 lastBillingIssueReminderDate?: string
59 removeUnverifiedComments?: boolean
60 unverifiedCommentsTTLms?: number
61 commentsRequireApproval?: boolean
62 autoApproveCommentOnVerification?: boolean
63 sendProfaneToSpam?: boolean
64 /** @readonly - Израчунава се на основу packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Израчунава се на основу packageId. **/
69 hasAuditing?: boolean
70 /** Можете похранити пар кључ-вриједност уз тенанта који можете користити за упит. Кључеви не могу садржати "." или "$", нити бити дужи од 100 знакова. Вриједности не могу бити дужи од 2k знакова. **/
71 meta?: Record<string, string | null>
72}
73

Структура корисника Internal Link

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

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

  • Secure SSO
  • Simple SSO
  • Tenant Users (For example: Administrators)
  • Commenters

Ovaj API je za Commenters i korisnike kreirane putem Simple SSO. U suštini, bilo koji korisnik kreiran kroz vašu stranicu može se pristupiti putem ovog API-ja. Tenant Users se također mogu dohvatiti 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 ažurirati ove tipove korisnika. Oni su kreirali svoj nalog kroz vašu stranicu, pa pružamo osnovni pristup samo za čitanje, ali ne možete praviti izmjene. Ako želite imati ovaj tip toka - morate podesiti Secure SSO.

Struktura za the User object je sljedeća:

Struktura korisnika
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 /** Link do bloga komentatora, na primjer. **/
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

Структура гласа Internal Link

Objekat Vote predstavlja glas koji je ostavio korisnik.

Veza između komentara i glasa je definisana 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

Структура конфигурације питања Internal Link

FastComments пружа начин за конструисање питања и агрегирање њихових резултата. Пример питања (у даљем тексту названо QuestionConfig) може бити оцена у звездицама, клизач или NPS питање (одређено помоћу type).

Подаци о питањима могу се агрегирати појединачно, заједно, током времена, укупно, по страници итд.

Фрејмворк има све могућности потребне за изградњу клијентских видгета (са вашим сервером испред овог API), административних контролних панела и алата за извјештавање.

Прво морамо дефинисати QuestionConfig. Структура је следећа:

Структура 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 /** САМО ЗА ЧИТАЊЕ - увећава се за сваки нови одговор. **/
13 usedCount: number
14 /** Низ датума који означава када је конфигурација последњи пут коришћена (остављен резултат). **/
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

Структура резултата питања Internal Link


Да бисте сачували резултате за питања, креирате QuestionResult. Затим можете агрегирати резултате питања, и такође повезати их са коментарима у сврху извештавања.

Структура 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

Структура значке корисника Internal Link

UserBadge је објекат који представља ознаку додељену кориснику у FastComments систему.

Ознаке могу бити аутоматски додељене корисницима на основу њихове активности (као што су број коментара, време одговора, статус ветерана) или ручно од стране администратора сајта.

Структура објекта UserBadge је следећа:

Структура UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Јединствени идентификатор ове додјеле ознаке кориснику */
4 id: string
5 /** ID корисника којем је ова ознака додељена */
6 userId: string
7 /** ID дефиниције ознаке из каталога ознака тенанта */
8 badgeId: string
9 /** ID тенанта који је креирао/доделио ову ознаку */
10 fromTenantId: string
11 /** Када је ова ознака креирана (милисекунде од епохе) */
12 createdAt?: number
13 /** Када је корисник примио ову ознаку (милисекунде од епохе) */
14 receivedAt?: number
15 /**
16 * Тип ознаке:
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 /** За ознаке засноване на прагу, вредност прага */
25 threshold?: number
26 /** Назив/натпис ознаке */
27 name?: string
28 /** Детаљан опис ознаке */
29 description?: string
30 /** Текст који се приказује на ознаци */
31 displayLabel?: string
32 /** URL до слике која се приказује на ознаци */
33 displaySrc?: string
34 /** Боја позадине ознаке (хекс код) */
35 backgroundColor?: string
36 /** Боја границе ознаке (хекс код) */
37 borderColor?: string
38 /** Боја текста на ознаци (хекс код) */
39 textColor?: string
40 /** Додатна CSS класа за стилизацију */
41 cssClass?: string
42 /** За ветеранске ознаке, временски праг у милисекундама */
43 veteranUserThresholdMillis?: number
44 /** Да ли се ова ознака приказује на корисниковим коментарима */
45 displayedOnComments: boolean
46 /** Редослед приказа ознаке */
47 order?: number
48}
49

Структура напретка значке корисника Internal Link

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

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

Struktura objekta UserBadgeProgress je sledeća:

Struktura UserBadgeProgress
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Jedinstveni identifikator za ovaj zapis o napretku */
4 id: string
5 /** ID tenant-a kojem ovaj zapis o napretku pripada */
6 tenantId: string
7 /** ID korisnika kojeg 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 zasnovan na aktivnosti korisnika */
14 autoTrustFactor?: number
15 /** Ručno postavljen faktor poverenja od strane administratora */
16 manualTrustFactor?: number
17 /** Detaljan objekat napretka sa raznim metrikama, ključevi odgovaraju BadgeType enumu */
18 progress: {
19 /** 0: CommentCount - Broj komentara koje je korisnik ostavio */
20 '0'?: number
21 /** 1: CommentUpVotes - Broj upvota koje je korisnik primio */
22 '1'?: number
23 /** 2: CommentReplies - Broj odgovora koje je korisnik napisao */
24 '2'?: number
25 /** 3: CommentsPinned - Broj zakačenih (pinned) komentara koje korisnik ima */
26 '3'?: number
27 /** 4: Veteran - Starost korisničkog naloga */
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 izbrisanih 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
---

U zaključku

Nadamo se da ste našu API dokumentaciju smatrali sveobuhvatnom i lako razumljivom. Ako primijetite bilo kakve nedostatke, javite nam ispod.