FastComments.com

FastComments API

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

U ovoj dokumentaciji naći ćete sve podržane resurse API-ja dokumentovane sa njihovim tipovima zahteva i odgovora.

Za Enterprise korisnike, sav pristup API-ju se beleži u Dnevniku audita.

Generisani SDK-ovi

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

We also now have SDKs for popular languages:

Autentifikacija

API se autentifikuje prosleđivanjem vašeg API ključa kao ili X-API-KEY zaglavlje ili API_KEY parametar upita. Takođe će vam trebati vaš tenantId za pozive API-ju. Možete ga pronaći na istoj stranici kao i vaš API ključ.

Sigurnosna napomena

Ove rute su namenjene da se pozivaju sa servera. NE POZIVAJTE ih iz pregledača. To će otkriti vaš API ključ — to će omogućiti potpun pristup vašem nalogu svima koji mogu videti 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

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

AuditLog je objekat koji predstavlja revizirani događaj za tenantima koji imaju pristup ovoj funkciji.

Struktura AuditLog objekta je sljedeća:

Struktura AuditLog objekta
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

Dnevnik revizije je nepromjenjiv. Ne može se ručno upisivati. FastComments.com jedino može odlučiti kada će unijeti zapise u dnevnik revizije. Međutim, možete ga čitati putem ovog API-ja.

Događaji u dnevniku revizije ističu nakon dvije godine.

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

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

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

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

Структура коментара
Copy Copy
1
2interface Comment {
3 /** READONLY: Поставити на 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 /** READONLY: Коментар аутора парсиран у 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 /** READONLY: Број пута колико је коментар пријављен. **/
28 flagCount?: number
29 /** Хештегови написани у коментару који су успешно парсирани. Можете и ручно додати хештегове, за упите, али они се неће аутоматски приказати у тексту коментара. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Да ли коментар садржи слике? **/
32 hasImages?: boolean
33 /** READONLY: Да ли коментар садржи линкове? **/
34 hasLinks?: boolean
35 /** READONLY: Јединствени id коментара. **/
36 id: string
37 /** Само приликом креирања! Ово се хешира за похрану. **/
38 ip?: string
39 /** READONLY: Да ли је тренутни корисник блокирао корисника који је написао овај коментар? **/
40 isBlocked?: boolean
41 /** READONLY: Да ли је коментар од администратора? Аутоматски се поставља на основу userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Да ли је коментар од модератора? Аутоматски се поставља на основу userId. **/
44 isByModerator?: boolean
45 /** Поставити на true ако је коментар делимично обрисан (морао је остати плейсхолдер због неке друге конфигурације). **/
46 isDeleted?: boolean
47 /** Поставити на true ако је кориснички налог обрисан, а коментар је морао бити сачуван. **/
48 isDeletedUser?: boolean
49 /** READONLY: Да ли је коментар пријавио тренутно пријављени корисник (contextUserId)? **/
50 isFlagged?: boolean
51 /** Да ли је коментар прикачен? **/
52 isPinned?: boolean
53 /** Да ли је коментар закључан за нове одговоре (модератори и даље могу одговарати)? **/
54 isLocked?: boolean
55 /** Да ли је коментар спам? **/
56 isSpam?: boolean
57 /** READONLY: Да ли је коментар означен негативним гласом од стране тренутног корисника (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Да ли је коментар означен позитивним гласом од стране тренутног корисника (contextUserId)? **/
60 isVotedUp?: boolean
61 /** Локал у којем је коментар. Ако није наведен, биће изведено из Accept-Language HTTP заглавља. **/
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: @помене написане у коментару које су успешно парсиране. **/
64 mentions?: CommentUserMention[]
65 /** Опционални метаподаци повезани са коментаром. **/
66 meta?: Record<string, string | number | boolean>
67 /** Опционална листа модерацијских група id-јева повезаних са овим коментаром. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: ID објекта гласа који одговара гласу тренутног корисника (contextUserId) за овај коментар. **/
70 myVoteId?: string
71 /** Да ли су обавештења послата за овај коментар коментаторима. Да бисте спречили слање обавештења при увозу, поставите ово на true. **/
72 notificationSentForParent?: boolean
73 /** Да ли су обавештења послата за овај коментар tenant корисницима. Да бисте спречили слање обавештења при увозу, поставите ово на true. **/
74 notificationSentForParentTenant?: boolean
75 /** Наслов странице на којој је овај коментар. **/
76 pageTitle?: string
77 /** Ако одговарамо на коментар, ово је ID на који одговарамо. **/
78 parentId?: string|null
79 /** Да ли је коментар означен као прегледан. **/
80 reviewed: boolean
81 /** ID тенанта коме коментар припада. **/
82 tenantId: string
83 /** Корисник који је написао коментар. Аутоматски се креира када се коментар сачува са именом/е-поштом. **/
84 userId?: string|null
85 /** URL локације на којој је овај коментар видљив, као на пример блог пост. **/
86 url: string
87 /** "Очишћена" верзија urlId коју сте нам проследили. При чувању специфичирате ово поље, али када вратите коментар ово ће бити "очишћено" и ваша оригинална вредност премештена у "urlIdRaw". **/
88 urlId: string
89 /** READONLY: Оригинални 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-а, прављење renderer-а је прилично једноставно. Постоји више библиотека за React Native и Flutter, на пример, које могу помоћи у томе

Можете изабрати да рендерујете ненормализовану вредност поља comment. Пример parser-а је овде..

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

Ознаке (Tagging)

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

Објекат помена у коментару
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ID корисника. За 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

Хештегови

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

Објекат хештега коментара
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ID хештега. **/
4 id: string
5 /** Коначни #hashtag текст тега, укључујући # симбол. **/
6 tag: string
7 /** Ако је хештег повезан са прилагођеним URL-ом, ово ће бити дефинисано. **/
8 url?: string
9 /** Ако треба задржати хештег, чак и ако не постоји у тексту коментара приликом ажурирања. Корисно за означавање коментара без мењања текста коментара. **/
10 retain?: boolean
11}
12

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

Објекат EmailTemplate представља конфигурацију за прилагођени имејл шаблон, за tenant.

Систем ће одабрати имејл шаблон који ће се користити путем:

  • Његовог идентификатора типа, називамо га emailTemplateId. Ово су константе.
  • domain. Прво ћемо покушати пронаћи шаблон за домен уз који је повезан релевантни објекат (попут Comment), а ако се поклапање не пронађе онда ћемо покушати пронаћи шаблон где је domain null или *.

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

Структура имејл шаблона
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** САМО ЗА ЧИТАЊЕ **/
8 createdAt: string
9 /** САМО ЗА ЧИТАЊЕ **/
10 updatedAt: string
11 /** САМО ЗА ЧИТАЊЕ **/
12 updatedByUserId: string
13 /** Домен са којим шаблон треба бити повезан. **/
14 domain?: string | '*' | null
15 /** Садржај имејл шаблона у EJS синтакси. **/
16 ejs: string
17 /** Мапа преписаних кључева превода у вредности за сваки подржани локал. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Објекат који представља контекст рендеровања шаблона. **/
20 testData: object
21}
22

Напомене

  • You can get the valid emailTemplateId values from the /definitions endpoint.
  • The /definitions endpoint also includes the default translations and test data.
  • Шаблони неће бити сачувани ако структура или тестни подаци нису валидни.

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

Објекат HashTag представља ознаку коју може оставити корисник. HashTags се могу користити за повезивање са спољним садржајем или за повезивање повезаних коментара.

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

Структура објекта HashTag
Copy Copy
1
2interface HashTag {
3 /** Треба да почиње са "#" или жељеним знаком. **/
4 tag: string
5 /** Опциони URL на који хаштег може да упућује. Уместо филтрирања коментара по хаштегу, UI ће при клику преусмерити на овај URL. **/
6 url?: string
7 /** САМО ЗА ЧИТАЊЕ **/
8 createdAt: string
9}
10

Напомене:

  • У неким API endpoints видећете да се хаштег користи у URL-у. Запамтите да вредности буду URI-Encoded. На пример, # треба да буде представљен као %23.
  • Нека од ових поља су означена као READONLY - враћа их API, али се не могу поставити.

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

A NotificationCount object predstavlja број непрочитаних обавјештења и метаподатке за корисника.

Ако нема непрочитаних обавјештења, за корисника неће постојати NotificationCount.

NotificationCount објекти се креирају аутоматски и не могу се креирати преко API-ја. Такођер истичу након једне године.

Можете очистити број непрочитаних обавјештења корисника брисањем његовог NotificationCount.

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

Структура NotificationCount
Copy Copy
1
2interface NotificationCount {
3 id: string // ид корисника
4 count: number
5 createdAt: string // датум у облику низа
6 expireAt: string // датум у облику низа
7}
8

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

Објекат Notification представља обавјештење за корисника.

Notification објекти се креирају аутоматски и не могу се креирати преко API-ja. Они такође истичу након једне године. Обавјештења не могу бити обрисана. Међутим, могу се ажурирати тако да се viewed постави на false, и можете да правите упит по viewed.

Корисник такође може да се одкаже од обавјештења за одређени коментар постављањем optedOut у обавјештењу на true. Можете се поново пријавити постављањем на false.

Постоје различити типови обавјештења - погледајте relatedObjectType и type.

Начини на које се обавјештења креирају су прилично флексибилни и могу бити покренути у многим сценаријама (погледајте NotificationType).

У данашње вријеме, постојање Notification објекта не имплицира да је е-порука послата или да би требало да буде послата. Умјесто тога, обавјештења се користе за фид обавјештења и повезане интеграције.

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

Структура обавјештења
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Ако вам је неко одговорио. **/
10 RepliedToMe = 0,
11 /** Ако је неко одговорио било гдје у нити (укључујући потомке више нивоа) на којој сте коментарисали. **/
12 RepliedTransientChild = 1,
13 /** Ако је ваш коментар добио позитиван глас. **/
14 VotedMyComment = 2,
15 /** Ако је нови коментар остављен на корјену странице на коју сте претплаћени. **/
16 SubscriptionReplyRoot = 3,
17 /** Ако је неко коментарисао на вашем профилу. **/
18 CommentedOnProfile = 4,
19 /** Ако имате директну поруку. **/
20 DirectMessage = 5,
21 /** TrialLimits is for tenant users only. **/
22 TrialLimits = 6,
23 /** Ако сте били @поменути. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** Са SSO-ом, user id је у формату `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Када радите са SSO-ом, морате да бринете само о `userId`. **/
33 anonUserId?: string
34 /** urlId је готово увијек дефинисан. Он је опционалан само за обавјештења на нивоу tenant, што је ријетко. **/
35 urlId?: string
36 /** URL је кеширан за брзу навигацију до извора обавјештења. **/
37 url?: string
38 /** Наслов странице је кеширан за брзо читање извора обавјештења. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** На примјер, id коментара. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // низ датума
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName и fromUserAvatarSrc су кеширани овдје ради брзог приказивања обавјештења. Ажурирају се када се корисник ажурира. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Поставите ово на true да бисте престали примати обавјештења за овај објекат. **/
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 представља ставку вебхук догађаја у реду која је на чекању.

Објекти 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 lako za korišćenje SSO rešenje. Ažuriranje informacija o korisniku pomoću HMAC-bazirane integracije je jednostavno kao učitavanje stranice od strane korisnika sa ažuriranim payload-om.

Međutim, može biti poželjno upravljati korisnikom izvan tog toka, kako bi se poboljšala konzistentnost vaše aplikacije.

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

Struktura SSOUser objekta je sledeć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 // Administratorska dozvola - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od regularnih SSO korisnika)
16 isAdminAdmin?: boolean // Administratorska dozvola - SSO korisnici sa ovom oznakom se naplaćuju kao SSO administratori (odvojeno od regularnih SSO korisnika)
17 isCommentModeratorAdmin?: boolean // Moderator dozvola - SSO korisnici sa ovom oznakom se naplaćuju kao SSO moderatori (odvojeno od regularnih SSO korisnika)
18 /** Ako je null, Kontrola pristupa se neće primjenjivati na korisnika. Ako je prazan spisak, ovaj korisnik neće moći vidjeti nijednu stranicu niti @pomenuti druge korisnike. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Ne dozvoljava drugim korisnicima da vide aktivnost ovog korisnika, uključujući komentare, na profilu. Podrazumevana vrednost je true da bi profili bili sigurni. **/
22 isProfileActivityPrivate?: boolean
23 /** Ne dozvoljava drugim korisnicima da ostavljaju komentare na korisnikovom profilu, niti da vide postojeće komentare na profilu. Podrazumevano false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Ne dozvoljava drugim korisnicima da šalju direktne poruke ovom korisniku. Podrazumevano false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Opcionalna konfiguracija za bedževe korisnika. **/
29 badgeConfig?: {
30 /** Niz ID-jeva bedževa koji se dodeljuju korisniku. Ograničeno na 30 bedževa. Redosled se poštuje. **/
31 badgeIds: string[]
32 /** Ako je true, zamenjuje sve postojeće prikazane bedževe sa ovim. Ako je false, dodaje ih postojećim bedževima. **/
33 override?: boolean
34 /** Ako je true, ažurira osobine prikaza bedževa iz konfiguracije tenanta. **/
35 update?: boolean
36 }
37}
38

Naplata za SSO korisnike

SSO korisnici se naplaćuju drugačije na osnovu njihovih dozvola:

  • Regular SSO Users: Korisnici bez administrativnih ili moderatorskih dozvola se naplaćuju kao regularni SSO korisnici
  • SSO Admins: Korisnici sa isAccountOwner ili isAdminAdmin oznakama se naplaćuju odvojeno kao SSO administratori (ista tarifa kao regularni administratori tenanta)
  • SSO Moderators: Korisnici sa isCommentModeratorAdmin oznakom se naplaćuju odvojeno kao SSO moderatori (ista tarifa kao regularni moderatori)

Važno: Da bi se izbegla dupla naplata, sistem automatski deduplikuje SSO korisnike naspram regularnih korisnika tenanta i moderatora po email adresi. Ako SSO korisnik ima isti email kao regularni korisnik tenanta ili moderator, neće biti naplaćen dvaput.

Kontrola pristupa

Korisnici mogu biti razvrstani u grupe. Za to služi polje groupIds, i opcionalno je.

@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 ignorisani 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 regularnog korisnika, šaljemo im email obaveštenja na osnovu njihovih podešavanja obaveštenja.

Kod SSO korisnika, razdvajamo ovo radi kompatibilnosti unazad. Korisnici će dobijati ova dodatna email obaveštenja o pretplati samo ako postavite optedInSubscriptionNotifications na true.

Bedževi

Možete dodeljivati bedževe SSO korisnicima koristeći svojstvo badgeConfig. Bedževi su vizuelni indikatori koji se pojavljuju pored imena korisnika u komentarima.

  • badgeIds - Niz ID-jeva bedževa koji se dodeljuju korisniku. Oni moraju biti validni ID-jevi bedževa kreirani na vašem FastComments nalogu. Ograničeno na 30 bedževa.
  • override - Ako je true, svi postojeći bedževi prikazani na komentarima biće zamenjeni sa navedenim. Ako je false ili izostavljeno, navedeni bedževi će biti dodati postojećim bedževima.
  • update - Ako je true, osobine prikaza bedževa će biti ažurirane iz konfiguracije tenanta kad god se korisnik prijavi.

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

Објекат Subscription представља претплату за корисника.

Subscription објекти се креирају када корисник кликне на звоно обавештења у видгету за коментаре и изабере "Претплати се на ову страницу".

Претплате се такође могу креирати путем API-ја.

Поседовање објекта Subscription узрокује да се генеришу Notification објекти и да се шаљу мејлови када се оставе нови коментари на корену повезане странице за коју та Subscription важи. Слање мејлова зависи од типа корисника. За обичне кориснике то зависи од optedInNotifications. За SSO кориснике то зависи од optedInSubscriptionNotifications. Имајте у виду да неке апликације можда немају концепт веб-приступачне странице, у ком случају једноставно поставите urlId на id ставке на коју се претплаћујете (иста вредност за urlId коју бисте проследили видгету за коментаре).

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

Структура Subscription
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** За SSO, кориснички id је у формату `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // стринг датума
12}
13

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

Објекат TenantDailyUsage представља употребу за тeнанта за одређени дан. Ако није било активности за одређеног тeнанта на одређеном дану, тај дан неће имати 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-ја од стране tenants који имају приступ за white labeling. White labeled tenants cannot create other white labeled tenants (only one level of nesting is allowed).

The structure for the Tenant object is as follows:

Структура 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 /** You can store a key value pair with the tenant which you can use to query. Keys cannot contain "." or "$", or be longer than 100 chars. Values may not be longer than 2k chars. **/
71 meta?: Record<string, string | null>
72}
73

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

User је објекат који представља најчешћи заједнички именитељ свих корисника.

Имајте на уму да у FastComments имамо неколико различитих сценарија коришћења за кориснике:

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

Овај API је за Commenters и кориснике креиране преко Simple SSO. У основи, сваки корисник креиран преко вашег сајта може се приступити преко овог API-ја. Tenant Users се такође могу дохватити на овај начин, али ћете добити више информација интеракцијом са /tenant-users/ API-јем.

За Secure SSO користите /sso-users/ API.

Немате могућност да ажурирате ову врсту корисника. Они су креирали налог преко вашег сајта, па пружамо само основни приступ само за читање, али не можете правити измене. Ако желите да имате овакав ток - морате да подесите Secure SSO.

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

Структура корисника
Copy Copy
1
2export interface User {
3 /** Ово је такође id који се користи као userId на comment објектима. **/
4 id: string
5 username: string
6 /** Линк до блога коментатора, на пример. **/
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.

Odnos između komentara i glasa je definisan 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 pruža način za konstruisanje pitanja i agregiranje njihovih rezultata. Primjer pitanja (u daljem tekstu nazvan QuestionConfig) može biti ocjena sa zvjezdicama, klizač, ili NPS pitanje (određeno putem type).

Podaci o pitanjima mogu se agregirati pojedinačno, zajedno, tokom vremena, ukupno, po stranici, i tako dalje.

Okvir ima sve mogućnosti potrebne za izgradnju klijentskih vidžeta (sa vašim serverom ispred ovog API-ja), administratorskih kontrolnih tabli i alata za izvještavanje.

Prvo, moramo definisati 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 /** String datuma koji označava kada je konfiguracija posljednji put korišćena (ostavljen 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

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

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

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

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

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

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

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

Структура UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Јединствени идентификатор за ово додељивање значке кориснику */
4 id: string
5 /** ID корисника коме је ова значка додељена */
6 userId: string
7 /** ID дефиниције значке из каталога значки тенанта */
8 badgeId: string
9 /** ID тенанта који је креирао/доделио ову значку */
10 fromTenantId: string
11 /** Када је ова значка креирана (милисекунде од епохе) */
12 createdAt?: number
13 /** Када је корисник примио ову значку (милисекунде од епохе) */
14 receivedAt?: number
15 /**
16 * Тип значке:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** За значке засноване на прагу, вредност прага */
25 threshold?: number
26 /** Назив/ознака значке */
27 name?: string
28 /** Детаљан опис значке */
29 description?: string
30 /** Текст који се приказује на значки */
31 displayLabel?: string
32 /** URL до слике која се приказује на значки */
33 displaySrc?: string
34 /** Боја позадине за значку (hex код) */
35 backgroundColor?: string
36 /** Боја ивице значке (hex код) */
37 borderColor?: string
38 /** Боја текста значке (hex код) */
39 textColor?: string
40 /** Додатна CSS класа за стиловање */
41 cssClass?: string
42 /** За veteran значке, праг времена у милисекундама */
43 veteranUserThresholdMillis?: number
44 /** Да ли се ова значка приказује на корисниковим коментарима */
45 displayedOnComments: boolean
46 /** Редослед приказа значке */
47 order?: number
48}
49
---

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

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

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

Struktura UserBadgeProgress objekta je sljedeća:

Struktura UserBadgeProgress objekta
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Jedinstveni identifikator ovog zapisa o napretku */
4 id: string
5 /** ID tenant-a kome 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 Unix epohe) */
12 firstCommentDate?: number
13 /** Automatski izračunat faktor povjerenja zasnovan na aktivnosti korisnika */
14 autoTrustFactor?: number
15 /** Faktor povjerenja ručno postavljen od strane administratora */
16 manualTrustFactor?: number
17 /** Detaljan objekat napretka sa raznim metrikama, ključevi odgovaraju BadgeType enumeraciji */
18 progress: {
19 /** 0: CommentCount - Broj komentara koje je korisnik ostavio */
20 '0'?: number
21 /** 1: CommentUpVotes - Broj upvota koje je korisnik dobio */
22 '1'?: number
23 /** 2: CommentReplies - Broj odgovora koje je korisnik dao */
24 '2'?: number
25 /** 3: CommentsPinned - Broj pinovanih 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 - Prosječno vrijeme odgovora u milisekundama */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Za moderatorne značke, broj izbrisanih komentara */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Za moderatorne značke, broj odobrenih komentara */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Za moderatorne značke, broj neodobrenih komentara */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Za moderatorne značke, broj pregledanih komentara */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Za moderatorne značke, broj komentara označenih kao spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Za moderatorne značke, broj komentara označenih kao 'nije spam' */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Za svaku stranicu, broj odgovora */
46 '13'?: Record<string, number>
47 }
48}
49

У закључку

Надамо се да сте нашу API документацију сматрали исцрпном и лаком за разумевање. Ако уочите било какве пропусте, јавите нам испод.