FastComments.com

FastComments API

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

U ovoj dokumentaciji pronaći ćete sve podržane resurse koje API dokumentira zajedno s njihovim tipovima zahtjeva i odgovora.

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

Generirani SDK-ovi

FastComments sada generira API Spec iz našeg koda (ovo još nije potpuno dovršeno, ali uključuje mnoge API-je).

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

Autentifikacija

API se autentificira prosljeđivanjem vašeg API ključa kao ili X-API-KEY zaglavlje ili API_KEY query parametar. Također ćete trebati svoj tenantId za pozivanje API-ja. To se može dohvatiti na istoj stranici kao i vaš api ključ.

Sigurnosna napomena

Ove rute namijenjene su pozivanju s poslužitelja. NEMOJTE ih pozivati iz preglednika. To će otkriti vaš API ključ - to će pružiti potpuni pristup vašem računu svima koji mogu pregledati izvorni kod stranice!

Opcija autentifikacije 1 - Zaglavlja

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

Opcija autentifikacije 2 - Parametri upita

  • Parametar upita: API_KEY
  • Parametar upita: tenantId

Struktura zapisnika revizije Internal Link

AuditLog je objekt koji predstavlja revidirani događaj za stanare koji imaju pristup ovoj značajci.

Struktura za AuditLog objekt je sljedeća:

Struktura 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

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

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

Struktura komentara Internal Link

Objekt Comment predstavlja komentar koji je ostavio korisnik.

Odnos između roditeljskih i podređenih komentara definira se putem parentId.

Struktura objekta Comment je sljedeća:

Struktura komentara
Copy Copy
1
2interface Comment {
3 /** READONLY: Postavljeno na true ako je antispam mehanizam utvrdio da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Je li komentar odobren za prikaz. Postaviti na true prilikom spremanja komentara, inače će biti skriven. **/
6 approved?: boolean
7 /** Avatar korisnika. **/
8 avatarSrc?: string
9 /** Podređeni komentari. Nisu popunjeni u svim scenarijima. Koriste se kada je asTree postavljeno na true putem API-ja. **/
10 children: Comment[]
11 /** Izvorni komentar autora. **/
12 comment: string
13 /** READONLY: 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 "Anoniman". **/
20 commenterName: string
21 /** Datum kada je komentar ostavljen, u UTC epoch formatu. **/
22 date: number
23 /** "Prikazna oznaka" komentara - na primjer "Admin", "Moderator", ili nešto poput "VIP User". **/
24 displayLabel?: string
25 /** Domena na kojoj je komentar objavljen. **/
26 domain?: string
27 /** READONLY: Broj puta koliko je komentar prijavljen. **/
28 flagCount?: number
29 /** #hashtagovi napisani u komentaru koji su uspješno parsirani. Također možete ručno dodati hashtagove za pretraživanje, ali oni se neće automatski prikazati u tekstu komentara. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Sadrži li komentar slike? **/
32 hasImages?: boolean
33 /** READONLY: Sadrži li komentar linkove? **/
34 hasLinks?: boolean
35 /** READONLY: Jedinstveni ID komentara. **/
36 id: string
37 /** Samo pri kreiranju! Ovo se hashira za pohranu. **/
38 ip?: string
39 /** READONLY: Je li trenutni korisnik blokirao korisnika koji je napisao ovaj komentar? **/
40 isBlocked?: boolean
41 /** READONLY: Je li komentar od administratora? Automatski postavljeno na temelju userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Je li komentar od moderatora? Automatski postavljeno na temelju userId. **/
44 isByModerator?: boolean
45 /** Postaviti na true ako je komentar privremeno obrisan (morao je biti ostavljen zamjenski zapis zbog neke druge konfiguracije). **/
46 isDeleted?: boolean
47 /** Postaviti na true ako je račun korisnika obrisan, a komentar je morao biti sačuvan. **/
48 isDeletedUser?: boolean
49 /** READONLY: Je li komentar označen od trenutno prijavljenog korisnika (contextUserId)? **/
50 isFlagged?: boolean
51 /** Je li komentar prikvačen? **/
52 isPinned?: boolean
53 /** Je li komentar zaključan za nove odgovore (moderatori još uvijek mogu odgovarati)? **/
54 isLocked?: boolean
55 /** Je li komentar spam? **/
56 isSpam?: boolean
57 /** READONLY: Je li komentar ocijenjen negativno od trenutnog korisnika (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Je li komentar ocijenjen pozitivno od trenutnog korisnika (contextUserId)? **/
60 isVotedUp?: boolean
61 /** Lokalizacija u kojoj je komentar. Ako nije navedeno, 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 /** READONLY: @mentions napisani u komentaru koji su uspješno parsirani. **/
64 mentions?: CommentUserMention[]
65 /** Opcionalni meta-podaci povezani s komentarom. **/
66 meta?: Record<string, string | number | boolean>
67 /** Opcionalna lista ID-eva grupa za moderaciju povezanih s ovim komentarom. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: ID objekta glasovanja koji odgovara glasu trenutnog korisnika (contextUserId) na ovom komentaru. **/
70 myVoteId?: string
71 /** Jesu li za ovaj komentar poslane obavijesti komentatorima. Kako biste spriječili slanje obavijesti prilikom uvoza, postavite ovo na true. **/
72 notificationSentForParent?: boolean
73 /** Jesu li za ovaj komentar poslane obavijesti korisnicima tenanta. Kako biste spriječili slanje obavijesti prilikom uvoza, postavite ovo na true. **/
74 notificationSentForParentTenant?: boolean
75 /** Naslov stranice na kojoj je ovaj komentar bio. **/
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. Automatski se stvara prilikom spremanja 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-a koji ste nam poslali. Prilikom spremanja specificirate ovo polje, ali kada dohvatite komentar nazad, ovo će biti "očišćeno" i vaša originalna vrijednost premještena u "urlIdRaw". **/
88 urlId: string
89 /** READONLY: Izvorni 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 (= pozitivni glasovi - negativni glasovi). **/
98 votes?: number
99}
100

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

Struktura teksta komentara

Komentari su pisani u FastComments varijanti Markdowna, što je običan Markdown uz tradicionalne bbcode stil oznake za slike, poput [img]path[/img].

Tekst se pohranjuje u dva polja. Tekst koji je korisnik unio pohranjuje se neizmijenjen u polje comment. Taj tekst se renderira i pohranjuje 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 renderiranje HTML-a; budući da je riječ o vrlo malom podskupu HTML-a, izrada renderera je relativno jednostavna. Na primjer, postoje više knjižnica za React Native i Flutter koje mogu pomoći s tim

Možete odabrati renderiranje ne-normiranog sadržaja polja comment. Primjer parsera nalazi se ovdje..

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

Označavanje

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

Objekt spominjanja komentara
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ID korisnika. Za SSO korisnike, imat će prefiks vašeg tenant ID-a. **/
4 id: string
5 /** Konačni tekst @mention taga, uključujući simbol @. **/
6 tag: string
7 /** Izvorni tekst @mention taga, uključujući simbol @. **/
8 rawTag: string
9 /** Koji tip korisnika je 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

HashTags

Kada se koriste hashtagovi i uspješno su parsirani, informacija se pohranjuje u listu nazvanu hashTags. Svaki objekt u toj listi ima sljedeću strukturu. Hashtagovi se također mogu ručno dodati u niz hashTags komentara za upite, ako je retain postavljen.

Objekt hashtagova komentara
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ID hashtaga. **/
4 id: string
5 /** Konačni tekst #hashtag taga, uključujući simbol #. **/
6 tag: string
7 /** Ako je hashtag povezan 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 promjene teksta komentara. **/
10 retain?: boolean
11}
12

Struktura predloška 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 hashtagova Internal Link

Objekt HashTag predstavlja oznaku koju može ostaviti korisnik. HashTagovi se mogu koristiti za povezivanje na vanjski sadržaj ili za povezivanje srodnih komentara.

Struktura za objekt HashTag je sljedeća:

Struktura HashTag-a
Copy Copy
1
2interface HashTag {
3 /** Treba počinjati znakom "#" ili željenim znakom. **/
4 tag: string
5 /** Opcionalni URL na koji hashtag može pokazivati. Umjesto filtriranja komentara po hashtag-u, korisničko sučelje će pri kliku preusmjeriti na ovu adresu. **/
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.

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 događaja webhooka na čekanju 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 pruža jednostavno SSO rješenje. Ažuriranje korisničkih podataka s HMAC-integracijom je jednostavno kao da korisnik učita stranicu s ažuriranim payloadom.

Međutim, može biti poželjno upravljati korisnikom izvan tog tijeka, kako biste poboljšali konzistentnost vaše aplikacije.

SSO User API pruža način za CRUD objekata koje nazivamo SSOUsers. Ti su objekti različiti od običnih korisnika i držani su odvojeno radi sigurnosti tipova.

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 // Dozvola administratora - SSO korisnici s ovom oznakom naplaćuju se kao SSO administratori (odvojeno od običnih SSO korisnika)
16 isAdminAdmin?: boolean // Dozvola administratora - SSO korisnici s ovom oznakom naplaćuju se kao SSO administratori (odvojeno od običnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Dozvola moderatora - SSO korisnici s ovom oznakom naplaćuju se kao SSO moderatori (odvojeno od običnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa neće biti primijenjena na korisnika. Ako je prazna lista, ovaj korisnik neće moći vidjeti nijednu stranicu niti spominjati druge korisnike pomoću @. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dopustite drugim korisnicima da vide aktivnost ovog korisnika, uključujući komentare, na njegovom profilu. Zadana vrijednost je true kako bi profili bili sigurni prema zadanim postavkama. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dopuštajte drugim korisnicima da ostavljaju komentare na korisnikov profil niti da vide postojeće komentare na profilu. Zadana vrijednost je false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dozvolite drugim korisnicima da šalju izravne poruke ovom korisniku. Zadana vrijednost je false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Opcionalna konfiguracija znački za korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-eva znački koji će biti dodijeljeni korisniku. Ograničeno na 30 znački. Redoslijed se poštuje. **/
31 badgeIds: string[]
32 /** Ako je true, zamjenjuje sve postojeće prikazane značke s navedenima. Ako je false, dodaje se postojećim značkama. **/
33 override?: boolean
34 /** Ako je true, ažurira svojstva prikaza znački iz konfiguracije tenanta. **/
35 update?: boolean
36 }
37}
38

Naplata za SSO korisnike

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

  • Regular SSO Users: Korisnici bez administratorskih ili moderatorskih dozvola naplaćuju se kao regularni SSO korisnici
  • SSO Admins: Korisnici s oznakama isAccountOwner ili isAdminAdmin naplaćuju se odvojeno kao SSO administratori (ista stopa kao obični administratori tenanta)
  • SSO Moderators: Korisnici s oznakom isCommentModeratorAdmin naplaćuju se odvojeno kao SSO moderatori (ista stopa kao obični moderatori)

Važno: Kako bi se spriječilo dvostruko naplaćivanje, sustav automatski deduplikira SSO korisnike naspram običnih tenant korisnika i moderatora po e-mail adresi. Ako SSO korisnik ima istu e-mail adresu kao običan tenant korisnik ili moderator, neće biti naplaćeni dvaput.

Kontrola pristupa

Korisnici se mogu podijeliti u grupe. To je svrha polja groupIds, i ono je opcionalno.

@Mentions

Po defaultu @mentions će koristiti username za pretraživanje drugih SSO korisnika kada se upiše znak @. Ako se koristi displayName, rezultati koji odgovaraju username će biti zanemareni kada postoji podudaranje za displayName, te će rezultati pretraživanja @mention koristiti displayName.

Pretplate

S FastComments, korisnici se mogu pretplatiti na stranicu klikom na ikonu zvona u widgetu komentara i pritiskom na Pretplati se.

Kod običnog korisnika, šaljemo im obavijesti putem e-pošte na temelju njihovih postavki obavijesti.

Kod SSO korisnika, to razdvajamo radi kompatibilnosti s prethodnim verzijama. Korisnici će dobivati ove dodatne e-poruke o pretplati samo ako postavite optedInSubscriptionNotifications na true.

Značke

Možete dodijeliti značke SSO korisnicima koristeći svojstvo badgeConfig. Značke su vizualni indikatori koji se pojavljuju pored imena korisnika u komentarima.

  • badgeIds - Niz ID-eva znački koje treba dodijeliti korisniku. Moraju biti valjani ID-evi znački kreirani na vašem FastComments računu. Ograničeno na 30 znački.
  • override - Ako je true, sve postojeće značke prikazane u komentarima bit će zamijenjene navedenima. Ako je false ili izostavljeno, navedene značke će se dodati 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.

Subscription objekti se stvaraju kada korisnik klikne ikonu za obavijest u widgetu komentara i klikne "Pretplati se na ovu stranicu".

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

Posjedovanje objekta Subscription uzrokuje generiranje objekata Notification i slanje e-poruka kada se ostave novi komentari na korijenu pridružene stranice na koju se odnosi Subscription. Slanje e-poruka ovisi o tipu 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-pristupačne stranice, u kojem slučaju jednostavno postavite urlId na id stavke na koju se pretplaćujete (ista vrijednost za urlId koju biste proslijedili widgetu komentara).

The structure for the Subscription object is as follows:

Struktura objekta Subscription
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** SSO: korisnički 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 najmoprimca 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 najmoprimca Internal Link

The Tenant definira korisnika FastComments.com. Mogu ih stvarati putem API-ja tenanti s pristupom za white labeling. Tenanti s bijelim označavanjem ne mogu stvarati druge tenante s bijelim označavanjem (dopuštena je samo jedna razina ugnježđivanja).

The structure for the Tenant object is as follows:

Struktura Tenanta
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Ovo se također može obraditi 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 razloga vezanih uz '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 - Izračunava se na temelju packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Izračunava 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 "$", ili 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 sustavu FastComments.

Značke se mogu dodijeliti korisnicima 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 za ovu dodjelu značke korisniku */
4 id: string
5 /** ID korisnika kojem je ova značka dodijeljena */
6 userId: string
7 /** ID definicije značke iz kataloga znački tenant-a */
8 badgeId: string
9 /** ID tenanta 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 ova značka primljena od strane korisnika (milisekunde od epohe) */
14 receivedAt?: number
15 /**
16 * Vrsta 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 bazirane 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čci */
31 displayLabel?: string
32 /** URL slike prikazane na značci */
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 veteranske značke, vremenski prag u milisekundama */
43 veteranUserThresholdMillis?: number
44 /** Prikazuje li se ova značka na korisnikovim komentarima */
45 displayedOnComments: boolean
46 /** Redoslijed prikaza značke */
47 order?: number
48}
49
---

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.