FastComments.com

API FastComments

FastComments nudi API za interakcijo z mnogimi viri. Zgradite integracije z našo platformo ali celo ustvarite svoje lastne odjemalce!

V tej dokumentaciji najdete vse vire, ki jih API podpira, dokumentirane z njihovimi tipi zahtevkov in odgovorov.

Za Enterprise naročnike je ves dostop do API zabeležen v revizijskem dnevniku.

Generirani SDK-ji

FastComments sedaj generira API specifikacijo iz naše kode (to še ni popolno, vendar vključuje mnoge API-je).

Imamo tudi SDK-je za priljubljene jezike:

Avtentikacija

API se avtenticira tako, da posredujete svoj API ključ bodisi kot X-API-KEY header ali API_KEY query parameter. Za klice API boste potrebovali tudi svoj tenantId za izvajanje klicev API. To lahko pridobite na isti strani kot svoj API ključ.

Varnostno opozorilo

Te poti so namenjene klicanju z strežnika. NE jih kličite iz brskalnika. S tem boste razkrili svoj API ključ - to bo vsakomur, ki si lahko ogleda izvorno kodo strani, omogočilo popoln dostop do vašega računa!

Authentication Option One - Headers

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

Authentication Option Two - Query Parameters

  • Parameter poizvedbe: API_KEY
  • Parameter poizvedbe: tenantId

Struktura revizijskega dnevnika Internal Link

An AuditLog je objekt, ki predstavlja revidiran dogodek za najemnike, ki imajo dostop do te funkcije.

Struktura objekta AuditLog je naslednja:

Struktura objekta 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 dnevnik je nespremenljiv. Vanj poleg tega ni mogoče pisati ročno. FastComments.com lahko odloča le, kdaj zapisati v revizijski dnevnik. Vendar ga lahko berete prek tega API-ja.

Dogodki v revizijskem dnevniku potečejo po dveh letih.


Struktura komentarja Internal Link

Objekt Comment predstavlja komentar, ki ga je pustil uporabnik.

Razmerje med nadrejenimi in potomskimi komentarji je določeno z parentId.

Struktura objekta Comment je naslednja:

Struktura komentarja
Copy Copy
1
2interface Comment {
3 /** READONLY: Nastavljeno na true, če je protivspamski mehanizem ocenil, da je komentar spam. **/
4 aiDeterminedSpam?: boolean
5 /** Ali je komentar odobren za prikaz. Ob shranjevanju komentarja nastavljeno na true, sicer bo skrit. **/
6 approved?: boolean
7 /** Avatar uporabnika. **/
8 avatarSrc?: string
9 /** Potomski komentarji. V vseh scenarijih niso vedno napolnjeni. Uporablja se, ko je preko API-ja asTree nastavljen na true. **/
10 children: Comment[]
11 /** Izviren komentar avtorja. **/
12 comment: string
13 /** READONLY: Komentar avtorja, pretvorjen v HTML. **/
14 commentHTML?: string
15 /** E-pošta avtorja. Obvezna, če je anonimno komentiranje onemogočeno. **/
16 commenterEmail?: string
17 /** Povezava avtorja (npr. njihov blog). **/
18 commenterLink?: string
19 /** Ime avtorja komentarja. Vedno zahtevano. Če ni na voljo, nastavite nekaj, kot je "Anonymous". **/
20 commenterName: string
21 /** Datum, kdaj je bil komentar objavljen, v UTC epoch obliki. **/
22 date: number
23 /** "Prikazna oznaka" za komentar - na primer "Admin", "Moderator", ali nekaj kot "VIP User". **/
24 displayLabel?: string
25 /** Domena, na kateri je bil komentar objavljen. **/
26 domain?: string
27 /** READONLY: Število krat, ko je bil komentar prijavljen (flag). **/
28 flagCount?: number
29 /** #hashtag-i zapisani v komentarju, ki so bili uspešno razčlenjeni. Hashtage lahko tudi ročno dodate za poizvedovanje, vendar se ti ne bodo samodejno prikazali v besedilu komentarja. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Ali komentar vsebuje slike? **/
32 hasImages?: boolean
33 /** READONLY: Ali komentar vsebuje povezave? **/
34 hasLinks?: boolean
35 /** READONLY: Edinstveni id komentarja. **/
36 id: string
37 /** Samo ob ustvarjanju! To je zgoščeno (hashed) za shranjevanje. **/
38 ip?: string
39 /** READONLY: Ali je trenutni uporabnik blokiral uporabnika, ki je napisal ta komentar? **/
40 isBlocked?: boolean
41 /** READONLY: Ali je komentar avtorjev admin? Samodejno nastavljeno glede na userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Ali je komentar avtorjev moderator? Samodejno nastavljeno glede na userId. **/
44 isByModerator?: boolean
45 /** Nastavljeno na true, če je bil komentar mehko izbrisan (mora ostati priponka zaradi določene konfiguracije). **/
46 isDeleted?: boolean
47 /** Nastavljeno na true, če je bil uporabniški račun izbrisan in je bilo treba komentar obdržati. **/
48 isDeletedUser?: boolean
49 /** READONLY: Ali je komentar prijavljen (flag) s strani trenutno prijavljenega uporabnika (contextUserId)? **/
50 isFlagged?: boolean
51 /** Ali je komentar pripet (pinned)? **/
52 isPinned?: boolean
53 /** Ali je komentar zaklenjen za nove odgovore (moderatorji lahko še vedno odgovarjajo)? **/
54 isLocked?: boolean
55 /** Ali je komentar spam? **/
56 isSpam?: boolean
57 /** READONLY: Ali je komentar za trenutnega uporabnika (contextUserId) ocenjeno navzdol? **/
58 isVotedDown?: boolean
59 /** READONLY: Ali je komentar za trenutnega uporabnika (contextUserId) ocenjeno navzgor? **/
60 isVotedUp?: boolean
61 /** Jeziki komentarja. Če ni podano, bo izpeljano iz HTTP glave language accept. **/
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: @omembe, zapisane v komentarju, ki so bile uspešno razčlenjene. **/
64 mentions?: CommentUserMention[]
65 /** Neobvezni metapodatki povezani s komentarjem. **/
66 meta?: Record<string, string | number | boolean>
67 /** Neobvezni seznam id-jev moderacijskih skupin, povezanih s tem komentarjem. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: Id objekta glasovanja, ki ustreza glasu trenutnega uporabnika (contextUserId) za ta komentar. **/
70 myVoteId?: string
71 /** Ali so bila za ta komentar poslana obvestila komentatorjem. Da preprečite pošiljanje obvestil pri uvozih, nastavite na true. **/
72 notificationSentForParent?: boolean
73 /** Ali so bila za ta komentar poslana obvestila uporabnikom najemnika. Da preprečite pošiljanje obvestil pri uvozih, nastavite na true. **/
74 notificationSentForParentTenant?: boolean
75 /** Naslov strani, na kateri je bil komentar. **/
76 pageTitle?: string
77 /** Če odgovarjamo na komentar, je to ID komentarja, na katerega odgovarjamo. **/
78 parentId?: string|null
79 /** Ali je komentar označen kot pregledan. **/
80 reviewed: boolean
81 /** Id najemnika (tenant), kjer komentar pripada. **/
82 tenantId: string
83 /** Uporabnik, ki je napisal komentar. Ustvarjen samodejno ob shranjevanju komentarja z imenom/e-pošto. **/
84 userId?: string|null
85 /** URL lokacije, kjer je komentar viden, na primer objava na blogu. **/
86 url: string
87 /** "Očiščena" različica urlId, ki ste jo poslali. Pri shranjevanju določite to polje, a ko pridobite komentar nazaj, bo to "očiščeno" in vaša originalna vrednost premaknjena v "urlIdRaw". **/
88 urlId: string
89 /** READONLY: Izvirni urlId, ki ste nam ga poslali. **/
90 urlIdRaw?: string
91 /** Ali sta uporabnik in ta komentar preverjena? **/
92 verified: boolean
93 /** Število glasov za. **/
94 votesUp?: number
95 /** Število glasov proti. **/
96 votesDown?: number
97 /** "Karma" komentarja (= votes up - votes down). **/
98 votes?: number
99}
100

Nekatera od teh polj so označena kot READONLY - ta so vrnjena s strani API-ja, vendar jih ni mogoče nastaviti.

Struktura besedila komentarja

Komentarji so napisani v FastComments različici markdowna, kar je preprosto markdown plus tradicionalne bbcode sloga oznake za slike, na primer [img]path[/img].

Besedilo se shranjuje v dveh poljih. Besedilo, ki ga je uporabnik vnesel, je shranjeno nespremenjeno v polju comment. To se upodobi in shrani v polju commentHTML.

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

Priporočeno je upodabljanje HTML-ja, saj gre za zelo majhen podnabor HTML-ja, zato je izgradnja rendererja precej preprosta. Na voljo je več knjižnic za React Native in Flutter, na primer, ki pri tem pomagajo.

Lahko se odločite tudi za upodabljanje ne-normalizirane vrednosti polja comment. Primer parserja je tukaj..

Primer parserja bi lahko prilagodili tudi za delo s HTML-jem in pretvorbo HTML oznak v pričakovane elemente za upodabljanje na vaši platformi.

Označevanje

Ko so uporabniki označeni v komentarju, je informacija shranjena v seznamu imenovanem mentions. Vsak objekt v tem seznamu ima naslednjo strukturo.

Objekt omemb komentarja
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** Id uporabnika. Pri SSO uporabnikih bo temu predponan vaš tenant id. **/
4 id: string
5 /** Končni @mention tag besedila, vključno z znakom @. **/
6 tag: string
7 /** Izvirni @mention tag besedila, vključno z znakom @. **/
8 rawTag: string
9 /** Kakšen tip uporabnika je bil označen. user = FastComments.com račun. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Če se uporabnik odjavi od obvestil, bo to še vedno nastavljeno na true. **/
12 sent: boolean
13}
14

Hashtagi

Ko so hashtagi uporabljeni in uspešno razčlenjeni, je informacija shranjena v seznamu imenovanem hashTags. Vsak objekt v tem seznamu ima naslednjo strukturo. Hashtage je mogoče tudi ročno dodati v polje hashTags komentarja za poizvedovanje, če je retain nastavljen.

Objekt hash-tagov komentarja
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** Id hashtaga. **/
4 id: string
5 /** Končni #hashtag tag besedila, vključno z znakom #. **/
6 tag: string
7 /** Če je hashtag povezan z lastnim URL-jem, bo to definirano. **/
8 url?: string
9 /** Če naj hashtag obdržimo, tudi če ob posodobitvi komentarja ni prisoten v besedilu. Uporabno za označevanje komentarjev brez spreminjanja besedila komentarja. **/
10 retain?: boolean
11}
12

Struktura e-poštne predloge Internal Link

Objekt EmailTemplate predstavlja konfiguracijo za prilagojen e-poštni predlog za najemnika.

Sistem bo izbral e-poštni predlog na podlagi:

  • Njegovega identifikatorja vrste, imenovanega emailTemplateId. To so konstante.
  • domain. Najprej bomo poskusili najti predlog za domeno, s katero je povezan ustrezni objekt (na primer Comment), in če ujemanja ne najdemo, bomo poiskali predlog, kjer je domain null ali *.

Struktura objekta EmailTemplate je naslednja:

Struktura e-poštnega predloga
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** SAMO ZA BRANJE **/
8 createdAt: string
9 /** SAMO ZA BRANJE **/
10 updatedAt: string
11 /** SAMO ZA BRANJE **/
12 updatedByUserId: string
13 /** Domena, s katero naj bo predlog povezan. **/
14 domain?: string | '*' | null
15 /** Vsebina e-poštnega predloga v sintaksi EJS. **/
16 ejs: string
17 /** Preslikava prepisanih prevodnih ključev na vrednosti za vsako podprto lokalizacijo. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Objekt, ki predstavlja kontekst za izris predloga. **/
20 testData: object
21}
22

Opombe

  • Veljavne vrednosti emailTemplateId lahko pridobite prek končne točke /definitions.
  • Končna točka /definitions vsebuje tudi privzete prevode in testne podatke.
  • Predlogi se ne bodo shranili, če je struktura ali testni podatki neveljavni.

Struktura hashtagov Internal Link

Objekt HashTag predstavlja oznako, ki jo lahko pusti uporabnik. HashTags se lahko uporabijo za povezavo na zunanjo vsebino ali za povezovanje sorodnih komentarjev.

The structure for the HashTag object is as follows:

Struktura HashTag
Copy Copy
1
2interface HashTag {
3 /** Naj se začne z "#" ali želenim znakom. **/
4 tag: string
5 /** Izbiren URL, na katerega lahko kaže hashtag. Namesto filtriranja komentarjev po hashtagu bo uporabniški vmesnik ob kliku preusmeril na ta URL. **/
6 url?: string
7 /** LE ZA BRANJE **/
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 števila obvestil Internal Link

Objekt NotificationCount predstavlja število neprebranih obvestil in metapodatke za uporabnika.

Če ni neprebranih obvestil, za uporabnika ne bo NotificationCount.

Objekti NotificationCount se ustvarijo samodejno in jih ni mogoče ustvariti prek API-ja. Prav tako potečejo po enem letu.

Število neprebranih obvestil uporabnika lahko počistite z izbrisom njihovega NotificationCount.

Struktura objekta NotificationCount je naslednja:

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

Struktura obvestila Internal Link

Objekt Notification predstavlja obvestilo za uporabnika.

Objekti Notification se ustvarijo samodejno in jih ni mogoče ustvariti prek API-ja. Prav tako potečejo po enem letu. Obvestil ni mogoče izbrisati. Lahko pa se posodobijo, tako da nastavite viewed na false, in lahko poizvedujete po viewed.

Uporabnik se lahko tudi odjavi od obvestil za določen komentar tako, da v obvestilu nastavi optedOut na true. Ponovno se lahko prijavite tako, da nastavite optedOut na false.

Obstajajo različne vrste obvestil - preverite relatedObjectType in type.

Načini ustvarjanja obvestil so precej prilagodljivi in jih lahko sprožijo številni scenariji (glejte NotificationType).

Trenutno prisotnost Notification ne pomeni nujno, da je bilo ali bi moralo biti poslano e-poštno sporočilo. Namesto tega se obvestila uporabljajo za feed obvestil in sorodne integracije.

Struktura za objekt Notification je naslednja:

Struktura obvestila
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Če vam je nekdo odgovoril. **/
10 RepliedToMe = 0,
11 /** Če je nekdo odgovoril kjerkoli v niti (tudi otroci otrok) niti, kjer ste komentirali. **/
12 RepliedTransientChild = 1,
13 /** Če je bil vaš komentar podprt z glasom gor (up-voted). **/
14 VotedMyComment = 2,
15 /** Če je na korenu strani, na katero ste naročeni, objavljen nov komentar. **/
16 SubscriptionReplyRoot = 3,
17 /** Če je nekdo komentiral vaš profil. **/
18 CommentedOnProfile = 4,
19 /** Če imate zasebno sporočilo (DM). **/
20 DirectMessage = 5,
21 /** TrialLimits je namenjen samo uporabnikom najemnika. **/
22 TrialLimits = 6,
23 /** Če ste bili omenjeni z @. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** Pri SSO je uporabniški id v formatu `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Pri delu s SSO vas zanima samo `userId`. **/
33 anonUserId?: string
34 /** urlId je skoraj vedno določen. To je opcijsko samo za obvestila na ravni najemnika, ki so redka. **/
35 urlId?: string
36 /** URL je predpomnjen za hitro navigacijo do vira obvestila. **/
37 url?: string
38 /** Naslov strani je predpomnjen za hitro branje vira obvestila. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Na primer, id komentarja. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // niz datuma
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName and fromUserAvatarSrc so tukaj predpomnjena za hitro prikazovanje obvestila. Posodobita se, ko se uporabnik posodobi. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Nastavite to na true, da prenehate prejemati obvestila za ta objekt. **/
53 optedOut?: boolean
54}
55

Struktura strani Internal Link


Objekt Page predstavlja stran, kateremu lahko pripada več komentarjev. Ta povezava je določena z urlId.

Objekt Page hrani informacije, kot so naslov strani, število komentarjev in urlId.

Struktura objekta Page je naslednja:

Struktura strani
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 /** Nastavitev na null pomeni, da lahko stran vidijo vsi SSO uporabniki. Prazen seznam pomeni, da je zaprt za vse uporabnike. **/
11 accessibleByGroupIds?: string[] | null
12 /** Je ta stran zaprta za nove komentarje? **/
13 isClosed?: boolean
14}
15

Struktura čakajočega webhook dogodka Internal Link


Objekt PendingWebhookEvent predstavlja webhook dogodek v čakalni vrsti.

Objekti PendingWebhookEvent se ustvarijo samodejno in jih ni mogoče ročno ustvariti prek API. Potečejo tudi po enem letu. Lahko jih izbrišete, kar odstrani nalogo iz vrste.

Obstajajo različne vrste dogodkov - preverite eventType (OutboundSyncEventType) in type (OutboundSyncType).

Pogost primer uporabe tega API-ja je implementacija prilagojenega nadzora. Morda boste želeli občasno klicati /count končno točko za poizvedovanje o številu nerešenih primerov za določene filtre.

Struktura objekta PendingWebhookEvent je naslednja:

Struktura PendingWebhookEvent
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** Naloga sinhronizacije specifična za WordPress. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** ID komentarja, povezanega z dogodkom. **/
17 commentId: string
18 /** Objekt komentarja za dogodek ob času dogodka. Začeli smo jih dodajati novembra 2023. **/
19 comment: Comment
20 /** Zunanji ID, ki je lahko povezan s komentarjem. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Nastavljeno pred prvim poskusom in po vsaki napaki. **/
26 nextAttemptAt: Date
27 /** Ali gre za dogodek ustvarjanja, brisanja ali posodobitve... **/
28 eventType: OutboundSyncEventType
29 /** Vrsta sinhronizacije, ki jo je treba izvesti (WordPress, klic API, itd.). **/
30 type: OutboundSyncType
31 /** Domena, ki se je ujemala s komentarjem. To domeno uporabimo za izbiro API ključa. **/
32 domain: string
33 /** Zadnja nastala napaka. Ta tip ni tipiziran in je "dump" tega, kar se je zgodilo. Običajno vsebuje objekt s statusCode, body, in mapo headers. **/
34 lastError: object | null
35}
36

Struktura SSO uporabnika Internal Link

FastComments zagotavlja enostavno rešitev SSO. Posodabljanje informacij o uporabniku z integracijo, ki temelji na HMAC, je tako preprosto, kot če uporabnik naloži stran s posodobljenim podatkovnim paketom.

Vendar je včasih zaželeno upravljati z uporabnikom izven tega toka, da izboljšate doslednost vaše aplikacije.

SSO User API omogoča ustvarjanje, branje, posodabljanje in brisanje objektov, ki jim pravimo SSOUsers. Ti objekti se razlikujejo od običajnih Users in so ločeni zaradi tipne varnosti.

The structure for the SSOUser object is as follows:

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 // Skrbniška pravica - SSO uporabniki s to zastavico so zaračunani kot SSO Admini (ločeno od običajnih SSO uporabnikov)
16 isAdminAdmin?: boolean // Skrbniška pravica - SSO uporabniki s to zastavico so zaračunani kot SSO Admini (ločeno od običajnih SSO uporabnikov)
17 isCommentModeratorAdmin?: boolean // Moderatorska pravica - SSO uporabniki s to zastavico so zaračunani kot SSO Moderatorji (ločeno od običajnih SSO uporabnikov)
18 /** Če je null, Access Control ne bo uporabljen za uporabnika. Če je seznam prazen, ta uporabnik ne bo mogel videti nobenih strani ali @omeniti drugih uporabnikov. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dovolite drugim uporabnikom videti dejavnosti tega uporabnika, vključno s komentarji, na njegovem profilu. Privzeto je true, da privzeto zagotavlja varne profile. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dovolite drugim uporabnikom puščati komentarjev na uporabnikovem profilu ali videti obstoječih komentarjev profila. Privzeto false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dovolite drugim uporabnikom pošiljati neposrednih sporočil temu uporabniku. Privzeto false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Neobvezna konfiguracija za značke uporabnika. **/
29 badgeConfig?: {
30 /** Polje ID-jev značk za dodelitev uporabniku. Omejeno na 30 značk. Red je ohranjen. **/
31 badgeIds: string[]
32 /** Če je true, zamenja vse obstoječe prikazane značke s podanimi. Če je false ali izpuščeno, doda podane značke k obstoječim. **/
33 override?: boolean
34 /** Če je true, posodobi lastnosti prikaza značk iz konfiguracije najemnika. **/
35 update?: boolean
36 }
37}
38

Billing for SSO Users

SSO uporabniki se zaračunavajo različno glede na njihove zastavice dovoljenj:

  • Regular SSO Users: Uporabniki brez skrbniških ali moderatorskih dovoljenj se zaračunavajo kot običajni SSO uporabniki
  • SSO Admins: Uporabniki z zastavicami isAccountOwner ali isAdminAdmin se zaračunavajo ločeno kot SSO Admini (enaka stopnja kot običajni najemniški skrbniki)
  • SSO Moderators: Uporabniki z zastavico isCommentModeratorAdmin se zaračunavajo ločeno kot SSO Moderatorji (enaka stopnja kot običajni moderatorji)

Pomembno: Da bi preprečili dvojno zaračunavanje, sistem samodejno odstrani podvojene SSO uporabnike glede na običajne najemniške uporabnike in moderatorje po e-poštnem naslovu. Če ima SSO uporabnik isti e-poštni naslov kot običajni najemniški uporabnik ali moderator, ne bo zaračunan dvakrat.

Access Control

Uporabnike je mogoče razdeliti v skupine. Za to služi polje groupIds in je neobvezno.

@Mentions

Privzeto bodo @mentions uporabili username za iskanje drugih SSO uporabnikov, ko je vnesen znak @. Če se uporablja displayName, bodo rezultati, ki se ujemajo z username, prezrti, kadar obstaja ujemanje za displayName, in rezultati iskanja @omenjanja bodo uporabili displayName.

Subscriptions

Pri FastComments se lahko uporabniki naročijo na stran tako, da kliknejo ikono zvonca v komentarni vtičnik in izberejo Subscribe.

Pri običajnem uporabniku jim pošljemo obvestilna e-poštna sporočila glede na njihove nastavitve obvestil.

Pri SSO uporabnikih to razdelimo zaradi združljivosti nazaj. Uporabniki bodo prejeli ta dodatna obvestilna e-poštna sporočila o naročilih le, če nastavite optedInSubscriptionNotifications na true.

Badges

Značke lahko dodelite SSO uporabnikom z uporabo lastnosti badgeConfig. Značke so vizualni pokazatelji, ki se prikažejo zraven imena uporabnika pri komentarjih.

  • badgeIds - Polje ID-jev značk, ki jih je treba dodeliti uporabniku. Ti morajo biti veljavni ID-ji značk, ustvarjeni v vašem FastComments računu. Omejeno na 30 značk.
  • override - Če je true, bodo vse obstoječe značke, prikazane pri komentarjih, zamenjane s podanimi. Če je false ali izpuščeno, bodo podane značke dodane k obstoječim značkam.
  • update - Če je true, bodo lastnosti prikaza značk posodobljene iz konfiguracije najemnika vsakič, ko se uporabnik prijavi.

Struktura naročnine Internal Link

Objekt Subscription predstavlja naročnino za uporabnika.

Subscription objekti se ustvarijo, ko uporabnik klikne zvonček za obvestila v pripomočku za komentarje in izbere "Naroči se na to stran".

Naročnine je mogoče ustvariti tudi prek API-ja.

Prisotnost objekta Subscription povzroči ustvarjanje objektov Notification in pošiljanje e-poštnih sporočil, ko so na korenu povezane strani za katero je Subscription, objavljeni novi komentarji. Pošiljanje e-pošte je odvisno od tipa uporabnika. Pri običajnih uporabnikih to določa optedInNotifications. Pri SSO uporabnikih to določa optedInSubscriptionNotifications. Upoštevajte, da nekateri programi morda nimajo koncepta spletno dostopne strani, v tem primeru preprosto nastavite urlId na id elementa, na katerega se naročate (isto vrednost za urlId, ki bi jo posredovali v pripomoček za komentarje).

Struktura objekta Subscription je naslednja:

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

Struktura dnevne porabe najemnika Internal Link

Objekt TenantDailyUsage predstavlja porabo za najemnika na določen dan. Če ni bilo dejavnosti za določenega najemnika na določen dan, ta dan ne bo imel objekta TenantDailyUsage.

Objekt TenantDailyUsage ni v realnem času in je lahko za dejansko porabo zamaknjen za nekaj minut.

Struktura objekta TenantDailyUsage je naslednja:

Struktura objekta 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 /** Prezrto pri obračunu. **/
19 ignored: boolean
20}
21

Struktura najemnika Internal Link

Tenant predstavlja stranko FastComments.com. Ustvarijo jih lahko preko API-ja najemniki z dostopom za white-labeling. Najemniki z white-labelingom ne morejo ustvarjati drugih najemnikov z white-labelingom (dovoljena je le ena raven gnezdenja).

Struktura objekta Tenant je naslednja:

Struktura objekta `Tenant`
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** To je mogoče tudi upravljati preko DomainConfig API-ja. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // verjetno želite Unknown
14 logoSrc?: string, // neobdelana pot do slike
15 logoSrc100px?: string, // spremenjeno 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; // number zaradi "legacy" razlogov
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čunano glede na packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Izračunano glede na packageId. **/
69 hasAuditing?: boolean
70 /** Z najemnikom lahko shranite par ključ-vrednost, ki ga lahko uporabite za poizvedovanje. Ključi ne smejo vsebovati "." ali "$", niti biti daljši od 100 znakov. Vrednosti ne smejo biti daljše od 2k znakov. **/
71 meta?: Record<string, string | null>
72}
73

Struktura uporabnika Internal Link

User je objekt, ki predstavlja najpogostejši skupni imenovalec vseh uporabnikov.

Upoštevajte, da imamo pri FastComments več različnih primerov uporabe uporabnikov:

  • Secure SSO
  • Simple SSO
  • Uporabniki najemnika (na primer: skrbniki)
  • Komentatorji

Ta API je namenjen Komentatorjem in uporabnikom, ustvarjenim z Simple SSO. Praktično vsak uporabnik, ustvarjen prek vaše strani, je dostopen preko tega API-ja. Uporabniki najemnika so prav tako dostopni na ta način, vendar boste več informacij dobili pri interakciji z API-jem /tenant-users/.

Za Secure SSO uporabite API /sso-users/.

Te vrste uporabnikov ne morete posodobiti. Ustvarili so svoj račun preko vaše strani, zato nudimo osnovni dostop samo za branje, vendar ne morete narediti sprememb. Če želite imeti takšen potek, morate nastaviti Secure SSO.

Struktura objekta User je naslednja:

Struktura uporabnika
Copy Copy
1
2export interface User {
3 /** To je tudi id, uporabljen kot userId na objektih komentarjev. **/
4 id: string
5 username: string
6 /** Na primer, povezava do bloga komentatorja. **/
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 glasu Internal Link

Objekt Vote predstavlja glas, ki ga je oddal uporabnik.

Razmerje med komentarji in glasovi je določeno preko commentId.

Struktura za objekt Vote je naslednja:

Struktura glasovanja
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 vprašanja Internal Link

FastComments nudi način za sestavljanje vprašanj in združevanje njihovih rezultatov. Primer vprašanja (v nadaljevanju imenovan QuestionConfig) je lahko ocena z zvezdicami, drsnik ali NPS vprašanje (določeno z type).

Podatke o vprašanjih je mogoče združevati posamično, skupaj, skozi čas, na splošno, po strani itd.

Okvir ima vse zmogljivosti, potrebne za izdelavo odjemalskih vtičnikov (z vašim strežnikom pred tem API-jem), nadzornih plošč za skrbnike in orodij za poročanje.

Najprej moramo definirati QuestionConfig. Struktura je naslednja:

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 BRANJE - poveča se za vsak nov odgovor. **/
13 usedCount: number
14 /** Niz datuma, kdaj je bila konfiguracija nazadnje uporabljena (ko je bil oddan 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 vprašanja Internal Link

Da shranite rezultate za vprašanja, ustvarite QuestionResult. Nato lahko združite rezultate vprašanj in jih povežete s komentarji za namene poročanja.

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 uporabniške značke Internal Link

UserBadge je objekt, ki predstavlja značko, dodeljeno uporabniku v sistemu FastComments.

Značke se lahko uporabnikom dodelijo samodejno na podlagi njihove aktivnosti (kot so število komentarjev, čas odgovora, status veterana) ali ročno s strani skrbnikov spletnega mesta.

Struktura objekta UserBadge je naslednja:

Struktura objekta UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Enoličen identifikator te dodelitve uporabniške značke */
4 id: string
5 /** ID uporabnika, kateremu je ta značka dodeljena */
6 userId: string
7 /** ID definicije značke iz kataloga značk najemnika */
8 badgeId: string
9 /** ID najemnika, ki je ustvaril/dodelil to značko */
10 fromTenantId: string
11 /** Kdaj je bila ta značka ustvarjena (milisekunde od epohe) */
12 createdAt?: number
13 /** Kdaj je ta značka prejeta s strani uporabnika (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, ki temeljijo na pragih, vrednost praga */
25 threshold?: number
26 /** Ime/oznaka značke */
27 name?: string
28 /** Podroben opis značke */
29 description?: string
30 /** Besedilo, prikazano na znački */
31 displayLabel?: string
32 /** URL do slike, prikazane na znački */
33 displaySrc?: string
34 /** Barva ozadja značke (heksadecimalna koda) */
35 backgroundColor?: string
36 /** Barva obrobe značke (heksadecimalna koda) */
37 borderColor?: string
38 /** Barva besedila značke (heksadecimalna koda) */
39 textColor?: string
40 /** Dodatna CSS razred za stiliranje */
41 cssClass?: string
42 /** Za veteranske značke, časovni prag v milisekundah */
43 veteranUserThresholdMillis?: number
44 /** Ali se ta značka prikazuje ob uporabnikovih komentarjih */
45 displayedOnComments: boolean
46 /** Vrstni red prikaza značke */
47 order?: number
48}
49

Struktura napredka uporabniške značke Internal Link

UserBadgeProgress je objekt, ki predstavlja napredek uporabnika pri pridobivanju različnih značk v sistemu FastComments.

To sledenje pomaga določiti, kdaj naj uporabniki prejmejo samodejne značke glede na njihovo dejavnost in sodelovanje v vaši skupnosti.

Struktura objekta UserBadgeProgress je naslednja:

Struktura UserBadgeProgress
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Enolični identifikator tega zapisa o napredku */
4 id: string
5 /** ID najemnika, kateremu pripada ta zapis o napredku */
6 tenantId: string
7 /** ID uporabnika, katerega ta zapis o napredku spremlja */
8 userId: string
9 /** ID prvega komentarja uporabnika v sistemu */
10 firstCommentId?: string
11 /** Datum prvega komentarja uporabnika (milisekunde od epohe) */
12 firstCommentDate?: number
13 /** Samodejno izračunan faktor zaupanja na podlagi dejavnosti uporabnika */
14 autoTrustFactor?: number
15 /** Ročno nastavljen faktor zaupanja s strani skrbnikov */
16 manualTrustFactor?: number
17 /** Podroben objekt napredka z različnimi metrikami, ključi ustrezajo BadgeType enum */
18 progress: {
19 /** 0: CommentCount - Število komentarjev, ki jih je uporabnik napisal */
20 '0'?: number
21 /** 1: CommentUpVotes - Število všečkov, ki jih je uporabnik prejel */
22 '1'?: number
23 /** 2: CommentReplies - Število odgovorov, ki jih je uporabnik napisal */
24 '2'?: number
25 /** 3: CommentsPinned - Število pripetih komentarjev, ki jih ima uporabnik */
26 '3'?: number
27 /** 4: Veteran - Starost uporabniškega računa */
28 '4'?: number
29 /** 5: NightOwl - Število objav uporabnika med nočnimi urami */
30 '5'?: number
31 /** 6: FastReplyTime - Povprečni čas odgovora v milisekundah */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Za moderatorjske značke, število izbrisanih komentarjev */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Za moderatorjske značke, število odobrenih komentarjev */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Za moderatorjske značke, število neodobrenih komentarjev */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Za moderatorjske značke, število pregledanih komentarjev */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Za moderatorjske značke, število komentarjev označenih kot spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Za moderatorjske značke, število komentarjev označenih kot ne-spam */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Za vsako stran, število odgovorov */
46 '13'?: Record<string, number>
47 }
48}
49
---

Zaključek

Upamo, da se vam je naša dokumentacija API zdela izčrpna in enostavna za razumevanje. Če opazite kakšne vrzeli, nam jih sporočite spodaj.