FastComments.com

FastComments API

FastComments пружа API за интеракцију са бројним ресурсима. Направите интеграције са нашом платформом, или чак изградите своје клијенте!

У овој документацији наћи ћете све ресурсе које API подржава, документоване са типовима захтјева и одговора.

За Enterprise купце, сав приступ API-ју се бележи у дневнику ревизије.

Генерисани SDK-ови

FastComments сада генерише API спецификација из нашег кода (ово још није у потпуности завршено, али укључује многе API-је).

Такођер сада имамо SDK-ове за популарне језике:

Аутентификација

API се аутентификује прослеђивањем вашег api key као или X-API-KEY заглавље или API_KEY query параметар. Такођер ће вам требати ваш tenantId за прављење API позива. Ово се може преузети са исте странице као и ваш api key.

Напомена о безбједности

Ове руте су намјењене за позивање са сервера. НЕ ПОВЛАЧИТЕ их из браузера. То ће открити ваш API key - ово ће пружити пун приступ вашем налогу сваком ко може видјети исходни код странице!

Опција аутентификације једна - Заглавља

  • Заглавље: X-API-KEY
  • Заглавље: X-TENANT-ID

Опција аутентификације два - Параметри упита

  • Query Param: API_KEY
  • Query Param: tenantId

Читање сопствених уписа

FastComments обезбјеђује Active-Active доступност. Захтјеви из вашег дата центра усмјеравају се ка најближоj тачки присуства у односу на ваш. Ово је аутоматско, и обично се обезбјеђује семантика да ћете моћи прочитати сопствене уписе. Ако желите бити сигурни да ћете читати своје уписе, можете фиксирати своје захтјеве на одређени регион користећи тај регион као API хост (међутим ово обично није потребно за већину интеграција):

  • gdc-oregon.fastcomments.com
  • gdc-virginia.fastcomments.com
  • gdc-singapore.fastcomments.com
  • gdc-falkenstein2.fastcomments.com
  • gdc-sao-paulo.fastcomments.com
  • eudc-helsinki2.fastcomments.com
  • eudc-limburg.fastcomments.com
  • eudc-france.fastcomments.com

Имајте на уму да, ако то урадите, можда ћете желети дефинисати резервну опцију (fallback), јер смо у прошлости застарили улазне чворове и користили нова имена за пребацивање.

Структура ревизијског дневника 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

Објекат Comment представља коментар који је оставио корисник.

Однос између родитељских и подређених коментара дефинисан је преко parentId.

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

Структура коментара
Copy Copy
1
2interface Comment {
3 /** САМО ЗА ЧИТАЊЕ: Поставити на true ако је спам механизам одредио да је коментар спам. **/
4 aiDeterminedSpam?: boolean
5 /** Да ли је коментар одобрен за приказ. Поставити на true при чувању коментара, иначе ће бити скривен. **/
6 approved?: boolean
7 /** Корисников аватар. **/
8 avatarSrc?: string
9 /** Подређени коментари. Нису попуњени у свим сценаријима. Користи се када је asTree постављено на true преко API-ја. **/
10 children: Comment[]
11 /** Изворни текст коментара. **/
12 comment: string
13 /** САМО ЗА ЧИТАЊЕ: Коментар парсиран у HTML. **/
14 commentHTML?: string
15 /** Е-пошта аутора коментара. Обавезна ако је анонимно коментарисање искључено. **/
16 commenterEmail?: string
17 /** Линк аутора коментара (на пример, њихов блог). **/
18 commenterLink?: string
19 /** Име аутора коментара. Увек је обавезно. Ако није доступно, поставите нешто попут "Anonymous". **/
20 commenterName: string
21 /** Датум када је коментар остављен, у UTC епохи. **/
22 date: number
23 /** Етикета за приказ коментара - на пример "Admin", "Moderator", или нешто као "VIP User". **/
24 displayLabel?: string
25 /** Домен на којем је коментар постављен. **/
26 domain?: string
27 /** САМО ЗА ЧИТАЊЕ: Број пута колико је коментар пријављен. **/
28 flagCount?: number
29 /** #хештегови написани у коментару који су успешно парсирани. Можете и ручно додати хештегове за упите, али се они неће аутоматски приказати у тексту коментара. **/
30 hashTags?: CommentHashTag[]
31 /** САМО ЗА ЧИТАЊЕ: Да ли коментар садржи слике? **/
32 hasImages?: boolean
33 /** САМО ЗА ЧИТАЊЕ: Да ли коментар садржи линкове? **/
34 hasLinks?: boolean
35 /** САМО ЗА ЧИТАЊЕ: Јединствени коментар ид. **/
36 id: string
37 /** Само приликом креирања! Ово је хеширано за складиштење. **/
38 ip?: string
39 /** САМО ЗА ЧИТАЊЕ: Да ли је тренутни корисник блокирао корисника који је написао овај коментар? **/
40 isBlocked?: boolean
41 /** САМО ЗА ЧИТАЊЕ: Да ли је коментар од администратора? Аутоматски се поставља на основу userId. **/
42 isByAdmin?: boolean
43 /** САМО ЗА ЧИТАЊЕ: Да ли је коментар од модератора? Аутоматски се поставља на основу userId. **/
44 isByModerator?: boolean
45 /** Поставити на true ако је коментар меко обрисан (плејсхолдер је морао бити остављен због неке друге конфигурације). **/
46 isDeleted?: boolean
47 /** Поставити на true ако је налог корисника избрисан и коментар је морао бити сачуван. **/
48 isDeletedUser?: boolean
49 /** САМО ЗА ЧИТАЊЕ: Да ли је пријављен од стране тренутно пријављеног корисника (contextUserId)? **/
50 isFlagged?: boolean
51 /** Да ли је коментар причвршћен (pinned)? **/
52 isPinned?: boolean
53 /** Да ли је коментар закључан? Када је true, нико (укључујући модераторе) не може одговорити, уредити или обрисати га док се не откључа. **/
54 isLocked?: boolean
55 /** Да ли је коментар спам? **/
56 isSpam?: boolean
57 /** САМО ЗА ЧИТАЊЕ: Да ли је коментар за овај тренутни корисник (contextUserId) гласан негативно? **/
58 isVotedDown?: boolean
59 /** САМО ЗА ЧИТАЊЕ: Да ли је коментар за овај тренутни корисник (contextUserId) гласан позитивно? **/
60 isVotedUp?: boolean
61 /** Локал у којем је коментар. Ако није наведен, изведен ће бити из HTTP заглавља Accept-Language. **/
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 /** САМО ЗА ЧИТАЊЕ: @помене написане у коментару које су успешно парсиране. **/
64 mentions?: CommentUserMention[]
65 /** Опционални метаподаци повезани са коментаром. **/
66 meta?: Record<string, string | number | boolean>
67 /** Опционална листа id-јева група модерације повезаних са овим коментаром. **/
68 moderationGroupIds?: string[]|null
69 /** САМО ЗА ЧИТАЊЕ: ИД објекта гласа који одговара гласу тренутног корисника (contextUserId) на овом коментару. **/
70 myVoteId?: string
71 /** Да ли су обавијести послате за овај коментар коментаторима. Да бисте спречили слање обавјештења приликом увоза, поставите ово на true. **/
72 notificationSentForParent?: boolean
73 /** Да ли су обавијести послате за овај коментар корисницима тенанта. Да бисте спречили слање обавештења приликом увоза, поставите ово на true. **/
74 notificationSentForParentTenant?: boolean
75 /** Наслов странице на којој се налазио овај коментар. **/
76 pageTitle?: string
77 /** Ако одговарамо на коментар, ово је ID на који одговарамо. **/
78 parentId?: string|null
79 /** Да ли је коментар означен као прегледан. **/
80 reviewed: boolean
81 /** ИД тенанта коме коментар припада. **/
82 tenantId: string
83 /** Корисник који је написао коментар. Креира се аутоматски при чувању коментара са именом/е-поштом. **/
84 userId?: string|null
85 /** URL локације на којој је овај коментар видљив, као што је блог-пост. **/
86 url: string
87 /** "Очишћена" верзија urlId коју сте нам послали. При чувању, ви назначите ово поље, али када повучете коментар назад ово ће бити "очишћено" и ваша оригинална вриједност премјештена у "urlIdRaw". **/
88 urlId: string
89 /** САМО ЗА ЧИТАЊЕ: Оригинални urlId који сте нам послали. **/
90 urlIdRaw?: string
91 /** Да ли је корисник и овај коментар верификован? **/
92 verified: boolean
93 /** Број позитивних гласова. **/
94 votesUp?: number
95 /** Број негативних гласова. **/
96 votesDown?: number
97 /** "Карма" коментара (= позитивни гласови - негативни гласови). **/
98 votes?: number
99}
100

Нека поља су означена као READONLY - она се враћају од стране API-ја али се не могу поставити.

Структура текста коментара

Коментари су написани у FastComments варијанти markdown-а, који је само markdown плус традиционалне bbcode стилске тагове за слике, као што су [img]path[/img].

Текст се чува у два поља. Текст који је корисник унео чува се непромијењен у пољу comment. Ово се рендерује и чува у пољу commentHTML.

Дозвољени HTML тагови су b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

Препоручује се рендеровање HTML-а, јер је то веома мали подскуп HTML-а, тако да је израда рендера прилично једноставна. Постоји више библиотека за React Native и Flutter, на примјер, које могу помоћи у томе

Можете изабрати да рендерујете ненормализовану вриједност поља comment. An example parser is here..

Пример парсера се такође може прилагодити да ради са HTML-ом и трансформише HTML тагове у очекиване елементе за рендеровање на вашој платформи.

Означавање

Када су корисници означени у коментару, информација се чува у листи званој mentions. Сваки објекат у тој листи има сљедећу структуру.

Структура помена у коментару
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ИД корисника. За SSO кориснике, ово ће имати ваш tenant id као префикс. **/
4 id: string
5 /** Коначни @mention текст тега, укључујући @ симбол. **/
6 tag: string
7 /** Оригинални @mention текст тега, укључујући @ симбол. **/
8 rawTag: string
9 /** Који тип корисника је означен. user = FastComments.com налог. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Ако се корисник одјави са обавијести, ово ће и даље бити постављено на true. **/
12 sent: boolean
13}
14

Хештегови

Када се хештегови користе и успјешно парсирају, информација се чува у листи званој hashTags. Сваки објекат у тој листи има сљедећу структуру. Хештегови се такође могу ручно додати у hashTags низ коментара за упите, ако је retain постављен.

Структура хештега коментара
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ИД хештега. **/
4 id: string
5 /** Коначни #hashtag текст тега, укључујући # симбол. **/
6 tag: string
7 /** Ако је хештег повезан са прилагођеним URL-ом, ово ће бити дефинисано. **/
8 url?: string
9 /** Да ли треба задржати хештег, чак и ако не постоји у тексту коментара, када се коментар ажурира. Корисно за означавање коментара без мијењања текста коментара. **/
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 SSO rješenje. Ažuriranje informacija o korisniku koristeći HMAC-baziranu integraciju je jednako 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 poboljšanja konzistentnosti vaše aplikacije.

SSO User API pruža način za CRUD objekata koje nazivamo SSOUsers. Ovi objekti se razlikuju od običnih Users i drže se odvojeno radi tip-sigurnosti.

Struktura objekta SSOUser je sljedeća:

Struktura SSOUser
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // Dozvola administratora - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od običnih SSO korisnika)
16 isAdminAdmin?: boolean // Dozvola administratora - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od običnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Dozvola moderatora - SSO korisnici sa ovom oznakom se naplaćuju kao SSO moderatori (odvojeno od običnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa se neće primjenjivati na korisnika. Ako je prazna lista, ovaj korisnik neće moći vidjeti nikakve stranice niti @mention-ovati druge korisnike. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dozvolite drugim korisnicima da vide aktivnost ovog korisnika, uključujući komentare, na njihovom profilu. Podrazumijevano je true kako bi profili bili sigurni po defaultu. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dozvolite drugim korisnicima da ostavljaju komentare na korisnikovom profilu, niti da vide postojeće komentare profila. Podrazumijevano false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dozvolite drugim korisnicima da šalju direktne poruke ovom korisniku. Podrazumijevano false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Opcionalna konfiguracija za značke korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-eva znački koje se dodjeljuju korisniku. Ograničeno na 30 znački. Redoslijed se poštuje. Ovo su globalne značke vidljive na svim stranicama. **/
31 badgeIds: string[]
32 /** Niz ID-eva znački ograničenih na trenutnu stranicu (urlId). Ove značke se prikazuju samo na stranici na kojoj su dodijeljene. **/
33 pageBadgeIds?: string[]
34 /** Ako je true, zamjenjuje sve postojeće prikazane značke sa datim. Globalne i značke ograničene na stranicu se nezavisno prepisuju. Ako je false, dodaje se na postojeće značke. **/
35 override?: boolean
36 /** Ako je true, ažurira prikazne osobine znački iz konfiguracije tenant-a. **/
37 update?: boolean
38 }
39}
40

Naplata za SSO korisnike

SSO korisnici se naplaćuju različito na osnovu njihovih dozvola:

  • Obični SSO korisnici: Korisnici bez administratorskih ili moderatorskih dozvola se naplaćuju kao obični SSO korisnici
  • SSO administratori: Korisnici sa oznakama isAccountOwner ili isAdminAdmin se naplaćuju odvojeno kao SSO administratori (ista stopa kao obični tenant administratori)
  • SSO moderatori: Korisnici sa oznakom isCommentModeratorAdmin se naplaćuju odvojeno kao SSO moderatori (ista stopa kao obični moderatori)

Važno: Da bi se spriječilo dvostruko naplaćivanje, sistem automatski deduplikira SSO korisnike u odnosu na obične tenant korisnike i moderatore po email adresi. Ako SSO korisnik ima isti email kao obični tenant korisnik ili moderator, neće biti naplaćeni dvaput.

Kontrola pristupa

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

@Mentions

Po defaultu @mentions će koristiti username za pretragu drugih sso korisnika kada se unese karakter @. Ako se koristi displayName, tada će rezultati koji odgovaraju username biti zanemareni kada postoji podudaranje za displayName, i rezultati pretrage za @mention će koristiti displayName.

Pretplate

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

Kod običnog korisnika, šaljemo im obavijesne emailove u skladu sa njihovim podešavanjima obavijesti.

Kod SSO korisnika, ovo smo razdvojili radi kompatibilnosti unazad. Korisnici će biti poslani ovi dodatni emailovi za obavijesti o pretplati samo ako postavite optedInSubscriptionNotifications na true.

Značke

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

  • badgeIds - Niz ID-eva znački koje se dodjeljuju korisniku. Ovo su globalne značke vidljive na svim stranicama. Moraju biti važeći ID-evi znački kreirani na vašem FastComments nalogu. Ograničeno na 30 znački.
  • pageBadgeIds - Opcionalni niz ID-eva znački ograničenih na trenutnu stranicu (urlId). Ove značke se prikazuju samo na stranici na kojoj su dodijeljene. Različite stranice mogu imati različite značke ograničene na stranicu za istog korisnika.
  • override - Ako je true, sve postojeće prikazane značke će biti zamijenjene sa datim. Globalne i značke ograničene na stranicu se nezavisno prepisuju — prepisivanje globalnih znački ne utiče na značke ograničene na stranicu, i obrnuto. Ako je false ili izostavljeno, date značke će biti dodate postojećim značkama.
  • update - Ako je true, prikazne osobine znački će biti ažurirane iz konfiguracije tenant-a 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 je objekat koji predstavlja značku dodijeljenu korisniku u FastComments sistemu.

Značke se mogu automatski dodijeliti korisnicima na osnovu njihove aktivnosti (takve kao broj komentara, vrijeme odgovora, status veterana) ili ručno od strane administratora sajta.

Struktura za UserBadge objekat je sljedeća:

Struktura objekta 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 tenanta */
8 badgeId: string
9 /** ID tenanta koji je kreirao/dodijelio ovu značku */
10 fromTenantId: string
11 /** Kada je ova značka kreirana (milisekunde od epohe) */
12 createdAt?: number
13 /** Kada je ova značka primljena od strane korisnika (milisekunde od epohe) */
14 receivedAt?: number
15 /**
16 * Tip značke:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** Za značke zasnovane na pragu, vrijednost praga */
25 threshold?: number
26 /** Naziv/oznaka značke */
27 name?: string
28 /** Detaljan opis značke */
29 description?: string
30 /** Tekst koji se prikazuje na znački */
31 displayLabel?: string
32 /** URL slike prikazane na znački */
33 displaySrc?: string
34 /** Boja pozadine značke (hex kod) */
35 backgroundColor?: string
36 /** Boja okvira značke (hex kod) */
37 borderColor?: string
38 /** Boja teksta značke (hex kod) */
39 textColor?: string
40 /** Dodatna CSS klasa za stilizovanje */
41 cssClass?: string
42 /** Za veteranske značke, vremenski prag u milisekundama */
43 veteranUserThresholdMillis?: number
44 /** Da li se ova značka prikazuje na korisnikovim komentarima */
45 displayedOnComments: boolean
46 /** Redoslijed prikaza značke */
47 order?: number
48 /** Ako je postavljeno, ova značka se prikazuje samo na stranici sa odgovarajućim urlId. Null za globalne značke. */
49 urlId?: string | null
50}
51

Структура напретка значке корисника 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.