FastComments.com

API платформе FastComments

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

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

За Enterprise кориснике, сав приступ API-ју се бележи у Audit Log.

Generated SDKs

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

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

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

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

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

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

Authentication Option One - Headers

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

Authentication Option Two - Query Parameters

  • Параметар упита: API_KEY
  • Параметар упита: tenantId

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

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

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

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

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

Догађаји у аудит логу истичу након две године.

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

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

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

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

Struktura komentara
Copy Copy
1
2interface Comment {
3 /** READONLY: Поставити на true ако је spam механизам утврдио да је коментар спам. **/
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 epoch формату. **/
22 date: number
23 /** "Приказни ознака" за коментар - на пример "Admin", "Moderator", или нешто као "VIP User". **/
24 displayLabel?: string
25 /** Домен на ком је коментар објављен. **/
26 domain?: string
27 /** READONLY: Број пута колико је коментар пријављен. **/
28 flagCount?: number
29 /** Број #hahtag-ова написаних у коментару који су успешно парсирани. Такође можете ручно додавати хештегове за упите, али они се неће аутоматски приказати у тексту коментара. **/
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 ако је коментар soft obrisan (морао је бити остављен плејсхолдер због неког другог подешавања). **/
46 isDeleted?: boolean
47 /** Поставити на true ако је кориснички налог обрисан, а коментар је морао бити сачуван. **/
48 isDeletedUser?: boolean
49 /** READONLY: Да ли је коментар означен од стране тренутно пријављеног корисника (contextUserId)? **/
50 isFlagged?: boolean
51 /** Да ли је коментар причвршћен (pinned)? **/
52 isPinned?: boolean
53 /** Да ли је коментар закључан за нове одговоре (модератори и даље могу одговорити)? **/
54 isLocked?: boolean
55 /** Да ли је коментар спам? **/
56 isSpam?: boolean
57 /** READONLY: Да ли је коментар негативно гласан за тренутног корисника (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Да ли је коментар позитивно гласан за тренутног корисника (contextUserId)? **/
60 isVotedUp?: boolean
61 /** Локал у којем је коментар. Ако није обезбеђен, изведе се из HTTP header-a за језик (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: @mentions написани у коментару који су успешно парсирани. **/
64 mentions?: CommentUserMention[]
65 /** Опционални метаподатак повезан са коментаром. **/
66 meta?: Record<string, string | number | boolean>
67 /** Опциона листа id-јева модерацијских група повезаних са овим коментаром. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: Ид гласа који одговара гласу од тренутног корисника (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 /** Да ли је коментар означен као прегледан (reviewed). **/
80 reviewed: boolean
81 /** Tenant 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 /** "Карма" коментара (= votes up - votes down). **/
98 votes?: number
99}
100

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

Struktura teksta komentara

Коментари су написани у 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. Пример парсера је овде..

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

Obeležavanje

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

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

Haštagovi

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

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

Структура шаблона имејла Internal Link

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

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

  • Његов идентификатор типа, то називамо 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

Напомене

  • Можете добити важеће вредности emailTemplateId са ендпоинта /definitions.
  • Ендпоинт /definitions такође укључује подразумеване преводе и тест податке.
  • Шаблони неће бити сачувани ако имају неважећу структуру или неважеће тест податке.

Структура хештега 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 endpoint-има ћете видети да се хештег користи у URL-у. Запамтите да вредности треба URI-кодирати. На пример, # би требало да буде представљено као %23.
  • Нека од ових поља су означена као READONLY - она су враћена од стране API-ја али их није могуће подесити.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Структура објекта 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 /** Ако имате директну поруку (DM). **/
20 DirectMessage = 5,
21 /** TrialLimits је само за кориснике тенанта. **/
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` је готово увек дефинисан. Опционо је само за обавештења на нивоу тенанта, што је ретко. **/
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

Структура чекајућег webhook догађаја 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 /** Спољни id који може бити повезан са коментаром. **/
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 /** Последња грешка која се догодила. Овај тип није типизиран и представља „дамп“ онога што се десило. Обично садржи објекат са statusCode, body, и мапом headers. **/
34 lastError: object | null
35}
36

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

FastComments пружа једноставно за коришћење SSO решење. Ажурирање података корисника помоћу интеграције засноване на HMAC-у је једноставно као да корисник учита страницу са ажурираним пакетом података.

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

SSO User API нуди начин за CRUD операције над објектима које називамо SSOUsers. Ови објекти се разликују од редовних Users и држе се одвојено ради типске сигурности.

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

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 // Администраторска дозвола - SSO корисници са овим флагом се наплаћују као SSO администратори (одвојено од редовних SSO корисника)
16 isAdminAdmin?: boolean // Администраторска дозвола - SSO корисници са овим флагом се наплаћују као SSO администратори (одвојено од редовних SSO корисника)
17 isCommentModeratorAdmin?: boolean // Модераторска дозвола - SSO корисници са овим флагом се наплаћују као SSO модератори (одвојено од редовних SSO корисника)
18 /** Ако је null, Контрола приступа неће бити примењена на корисника. Ако је списак празан, овај корисник неће моћи да види ниједну страницу или да @спомиње друге кориснике. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Не дозвољавајте другим корисницима да виде активност овог корисника, укључујући коментаре, на њиховом профилу. Подразумевано је true како би профили подразумевано били безбедни. **/
22 isProfileActivityPrivate?: boolean
23 /** Не дозвољавајте другим корисницима да остављају коментаре на профилу корисника, или да виде постојеће коментаре на профилу. Подразумевано false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Не дозвољавајте другим корисницима да шаљу директне поруке овом кориснику. Подразумевано false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Опционо подешавање за значке корисника. **/
29 badgeConfig?: {
30 /** Низ ИД-ова значки које се додељују кориснику. Ограничено на 30 значки. Редослед се поштује. **/
31 badgeIds: string[]
32 /** Ако је true, замењује све постојеће приказане значке са наведеним. Ако је false или изостављено, наведене значке ће се додати постојећима. **/
33 override?: boolean
34 /** Ако је true, ажурира приказне особине значки из конфигурације закупца. **/
35 update?: boolean
36 }
37}
38

Наплата за SSO кориснике

SSO корисници се наплаћују различито у зависности од њихових дозвола:

  • Редовни SSO корисници: Корисници без админ или модераторских дозвола се наплаћују као редовни SSO корисници
  • SSO администратори: Корисници са isAccountOwner или isAdminAdmin флаговима се наплаћују посебно као SSO администратори (иста цена као редовни администратори закупца)
  • SSO модератори: Корисници са isCommentModeratorAdmin флагом се наплаћују посебно као SSO модератори (иста цена као редовни модератори)

Важно: Да би се спречило двоструко наплаћивање, систем аутоматски уклања дупликате SSO корисника у односу на редовне tenant кориснике и модераторе по email адреси. Ако SSO корисник има исту email адресу као редовни tenant корисник или модератор, неће бити наплаћени два пута.

Контрола приступа

Корисници се могу груписати у групе. За то служи поље groupIds, и оно је опционo.

@Спомињања

По подразумевaњу, @mentions користе username за претрагу других SSO корисника када се укуца карактер @. Ако је коришћено displayName, резултати који се поклапају са username ће бити занемарени када постоји поклапање за displayName, и резултати претраге за @mention ће користити displayName.

Претплате

У FastComments-у, корисници се могу претплатити на страницу кликом на икону звона у видгету за коментаре и одабиром 'Претплати се'.

Код редовног корисника, шаљемо им мејлове са обавештењима у складу са њиховим подешавањима обавештења.

Код SSO корисника, то је подељено ради назадне компатибилности. Корисници ће добијати додатне мејлове обавештења о претплати само ако поставите optedInSubscriptionNotifications на true.

Значке

Можете доделити значке SSO корисницима користећи својство badgeConfig. Значке су визуелни индикатори који се појављују поред имена корисника у коментарима.

  • badgeIds - Низ ИД-ова значки које се додељују кориснику. То морају бити валидни ИД-ови значки креирани на вашем FastComments налогу. Ограничено на 30 значки.
  • override - Ако је true, све постојеће значке приказане у коментарима ће бити замењене наведеним. Ако је false или изостављено, наведене значке ће бити додате постојећим значкама.
  • update - Ако је true, приказне особине значки биће ажуриране из конфигурације закупца сваки пут када се корисник пријави.

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

Objekat Subscription predstavlja pretplatu za korisnika.

Subscription objekti se kreiraju kada korisnik klikne na zvonce za obaveštenja u widgetu za komentare i klikne "Subscribe to this page".

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

Imanje objekta Subscription uzrokuje kreiranje objekata Notification i slanje emailova kada se ostave novi komentari na korenu povezane stranice za koju je ta 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 koncept web-pristupačne stranice, u kom slučaju jednostavno postavite urlId na id stavke na koju se pretplaćujete (ista vrednost za urlId koju biste prosledili widgetu za komentare).

Struktura za objekat Subscription je sledeća:

Struktura objekta Subscription
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** Sa SSO-om, korisnički id je u formatu `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // string datuma
12}
13

Структура дневне употребе тенанта 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

Tenant дефинише корисника FastComments.com. Они се могу креирати преко API-ја од стране tenant-ова који имају приступ за white labeling. White labeled tenants cannot create other white labeled tenants (only one level of nesting is allowed).

Структура објекта 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 /** Можете да сачувате пару кључ/вредност за tenant који можете користити за упите. Кључеви не смеју да садрже "." или "$", нити да буду дужи од 100 карактера. Вредности не смеју бити дужи од 2000 карактера. **/
71 meta?: Record<string, string | null>
72}
73

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

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

Имајте на уму да у FastComments имамо низ различитих случајева употребе за кориснике:

  • Secure SSO
  • Simple SSO
  • Tenant Users (На пример: Administrators)
  • Commenters

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

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

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

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

Структура објекта 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

Објекат Vote представља глас који је оставио корисник.

Однос између коментара и гласа дефинисан је преко commentId.

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

Структура Vote
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

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

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

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

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

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

Структура QuestionConfig
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** САМО ЗА ЧИТАЊЕ - повећава се за сваки нови одговор. **/
13 usedCount: number
14 /** Стринг који представља датум када је конфигурација последњи пут коришћена (остављен резултат). **/
15 lastUsed?: string
16 type: QuestionConfigType
17 numStars?: number
18 min?: number
19 max?: number
20 defaultValue?: number
21 labelNegative?: string
22 labelPositive?: string
23 subQuestionIds?: string[]
24 alwaysShowSubQuestions?: boolean
25 reportingOrder: number
26}
27

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

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

Структура QuestionResult
Copy Copy
1
2interface QuestionResultMeta {
3 name: string
4 values: string[]
5}
6
7interface QuestionResult {
8 id: string
9 tenantId: string
10 urlId: string
11 anonUserId?: string
12 userId?: string
13 createdAt?: string
14 value: number
15 commentId?: string
16 questionId: string
17 meta?: QuestionResultMeta[]
18}
19

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

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

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

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

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

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

UserBadgeProgress је објекат који представља напредак корисника ка стицању различитих значки у систему FastComments.

Ово праћење помаже у одређивању када корисници треба да добију аутоматске значке на основу своје активности и учешћа у вашој заједници.

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

Структура UserBadgeProgress
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Јединствени идентификатор за овај запис напретка */
4 id: string
5 /** ID тенанта коме припада овај запис напретка */
6 tenantId: string
7 /** ID корисника кога овај запис напретка прати */
8 userId: string
9 /** ID првог коментара корисника у систему */
10 firstCommentId?: string
11 /** Датум првог коментара корисника (милисекунде од епохе) */
12 firstCommentDate?: number
13 /** Аутоматски израчунати фактор поверења на основу активности корисника */
14 autoTrustFactor?: number
15 /** Фактор поверења подешен ручно од стране администратора */
16 manualTrustFactor?: number
17 /** Детаљан објекат напретка са различитим метрикама, кључеви одговарају BadgeType енуму */
18 progress: {
19 /** 0: CommentCount - Број коментара које је корисник написао */
20 '0'?: number
21 /** 1: CommentUpVotes - Број позитивних гласова (upvotes) које је корисник примио */
22 '1'?: number
23 /** 2: CommentReplies - Број одговора које је корисник дао */
24 '2'?: number
25 /** 3: CommentsPinned - Број причвршћених (pinned) коментара које корисник има */
26 '3'?: number
27 /** 4: Veteran - Старост корисничког налога */
28 '4'?: number
29 /** 5: NightOwl - Број пута када је корисник објавио током ноћних сати */
30 '5'?: number
31 /** 6: FastReplyTime - Просечно време одговора у милисекундама */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - За модераторске значке, број избрисаних коментара */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - За модераторске значке, број одобрених коментара */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - За модераторске значке, број неодобрених коментара */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - За модераторске значке, број прегледаних коментара */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - За модераторске значке, број коментара означених као спам */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - За модераторске значке, број коментара означених као да нису спам */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - За сваку страницу, број одговора */
46 '13'?: Record<string, number>
47 }
48}
49
---

У закључку

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