FastComments.com

Live Reactie-API's

De FastComments API

FastComments biedt een API voor interactie met veel resources. Bouw integraties met ons platform, of bouw zelfs je eigen clients!

In deze documentatie vind je alle door de API ondersteunde resources, gedocumenteerd met hun aanvraag- en responsetype.

Voor Enterprise-klanten wordt alle API-toegang vastgelegd in het auditlog.

Gegenereerde SDK's

FastComments genereert nu een API Spec vanuit onze code (dit is nog niet volledig, maar bevat veel API's).

We hebben nu ook SDK's voor populaire talen:

Authenticatie

De API wordt geauthenticeerd door je api key mee te geven als een X-API-KEY header of API_KEY query‑parameter. Je hebt ook je tenantId nodig voor het doen van API‑aanroepen. Deze kan worden opgehaald op dezelfde pagina als je api‑key.

Beveiligingsopmerking

Deze routes zijn bedoeld om aangeroepen te worden vanaf een server. ROEP ZE NIET aan vanuit een browser. Dit zal je API‑key blootleggen – dit geeft volledige toegang tot je account aan iedereen die de broncode van een pagina kan bekijken!

Authenticatieoptie één - Headers

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

Authenticatieoptie twee - Query‑parameters

  • Query Param: API_KEY
  • Query Param: tenantId

Authenticatieoptie drie - OAuth Bearer Token

  • Header: Authorization: Bearer fcat_...

Derde‑partij applicaties zoals Zapier en clients van de MCP server verkrijgen een token via OAuth in plaats van een API‑key. Dat token werkt op elk endpoint hier. De tenant wordt geïmpliceerd door het token, dus tenantId is optioneel, maar moet overeenkomen met het token wanneer opgegeven. GET‑verzoeken hebben de read‑scope nodig en elke andere methode de write‑scope. De volledige flow, inclusief clientregistratie, PKCE, vernieuwing en intrekking, is gedocumenteerd onder OAuth Authorization. Ontdekking start op https://fastcomments.com/.well-known/oauth-authorization-server.

Je Eigen Writes Lezen

FastComments biedt Active‑Active beschikbaarheid. Verzoeken vanuit je datacenter worden gerouteerd naar het dichtstbijzijnde point of presence van jou. Dit gebeurt automatisch, en normaal kun je read‑your‑write‑semantiek waarnemen. Als je er zeker van wilt zijn dat je je eigen writes leest, kun je je verzoeken vastzetten op een bepaalde regio door die regio als API‑host te gebruiken (hoewel dit meestal niet nodig is voor de meeste integraties):

  • 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

Let op dat je, als je dit doet, mogelijk een fallback wilt definiëren, aangezien we in het verleden verouderde entrypoint‑nodes hebben en nieuwe namen gebruiken voor de overschakeling.

Auditlog-structuur Internal Link

Een AuditLog is een object dat een geaudit evenement vertegenwoordigt voor huurders die toegang hebben tot deze functie.

De structuur voor het AuditLog-object is als volgt:

AuditLog Structuur
Copy Copy
1
2interface AuditLog {
3 id: string;
4 /** Who performed the event. **/
5 userId?: string;
6 username?: string;
7 resourceName: string;
8 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
9 from: string;
10 url?: string;
11 ip?: string;
12 /** The browser that performed the event, when it came from one. **/
13 ua?: string;
14 /** A hash of the session the event came from, for correlating one person's actions. Never the session itself. **/
15 sIdHashed?: string;
16 when: string;
17 description?: string;
18 serverStartDate: string;
19 /** The id of the object the event was performed on, as opposed to who performed it. **/
20 targetId?: string;
21 /** A human-readable label for that object, e.g. "jsmith (jsmith@example.com)". **/
22 targetLabel?: string;
23 objectDetails?: object;
24}
25

targetId en targetLabel beschrijven waarop het evenement werd uitgevoerd; userId en username beschrijven wie het heeft uitgevoerd. Voor updates bevat objectDetails.changes een {field: {from, to}} kaart van wat daadwerkelijk is veranderd.

Het auditlogboek is onveranderlijk. Het kan ook niet handmatig worden geschreven. FastComments.com mag alleen beslissen wanneer er naar het auditlogboek wordt geschreven. U kunt er echter via deze API uit lezen.

Evenementen in het auditlogboek verlopen na twee jaar.

Batchjob-structuur Internal Link

Een BatchJob is een langdurige taak, zoals een import, een export, of een pagina-migratie. Taken worden in de wachtrij geplaatst, vervolgens opgepakt en op de achtergrond uitgevoerd.

processedCount en totalCount tonen de voortgang. Hun eenheid hangt af van het type:

  • migrate-pages: voltooide migraties, van de aangevraagde migraties.
  • undo-page-migration: records hersteld. Er is geen totalCount.
  • import, export en andere taken: verwerkte rijen.

De structuur voor het BatchJob-object is als volgt:

BatchJob-structuur
Copy Copy
1
2interface BatchJob {
3 id: string
4 /** Bijvoorbeeld migrate-pages, undo-page-migration, migrate-domains, import, export, users-export of copy-comments. **/
5 type: string
6 status: 'requested' | 'running' | 'success' | 'failed'
7 createdAt: string
8 completedAt?: string
9 processedCount: number
10 /** Totale hoeveelheid werk, wanneer deze van tevoren bekend is. **/
11 totalCount?: number
12 /** migrate-pages: één entry per voltooide migratie, in volgorde van verzoek. **/
13 pageMigrationResults?: Array<PageMigrationSuccess | PageMigrationFailure>
14 /**
15 * migrate-pages: wordt ingesteld zodra de taak is voltooid (succes of mislukt). Verstuur naar POST /api/v1/pages/migrations/:undoId/undo binnen 90 dagen.
16 * undo-page-migration: de migratie die ongedaan wordt gemaakt.
17 */
18 undoId?: string
19 /** undo-page-migration: wordt ingesteld zodra de taak is voltooid. **/
20 pageMigrationUndoResult?: PageMigrationUndoResult
21}
22
23interface PageMigrationSuccess {
24 from: string
25 to: string
26 type: 'urlId' | 'domain'
27 status: 'success'
28 commentsMigrated: number
29}
30
31interface PageMigrationFailure {
32 from: string
33 to: string
34 type: 'urlId' | 'domain'
35 status: 'failed'
36 code: string
37 reason: string
38}
39
40interface PageMigrationUndoResult {
41 /** Records teruggezet naar hun waarden van vóór de migratie. **/
42 restored: number
43 /** Records ongemoeid gelaten omdat ze na de migratie zijn gewijzigd, of niet meer bestaan. **/
44 skipped: number
45 /** Records van de migratie die zijn verwijderd tijdens het samenvoegen van pagina's. Deze kunnen niet worden teruggehaald. **/
46 notRestorable: number
47}
48

Retries

Als de server die een pagina-migratietaak uitvoert opnieuw wordt opgestart, wordt de taak terug in de wachtrij geplaatst en hervat na de laatste voltooide migratie. Een taak wordt tot 3 keer geprobeerd, waarna de status failed is.

Reactiestructuur Internal Link

Een Comment object vertegenwoordigt een reactie die door een gebruiker is achtergelaten.

De relatie tussen bovenliggende en onderliggende reacties wordt gedefinieerd via parentId.

De structuur van het Comment object is als volgt:

Comment Structuur
Copy Copy
1
2interface Comment {
3 /** READONLY: Ingesteld op true als de spam-engine heeft bepaald dat de reactie spam was. **/
4 aiDeterminedSpam?: boolean
5 /** Of de reactie is goedgekeurd om te tonen. Ingesteld op true bij het opslaan van de reactie, anders wordt deze verborgen. **/
6 approved?: boolean
7 /** De avatar van de gebruiker. **/
8 avatarSrc?: string
9 /** Onderliggende reacties. Niet in alle scenario's gevuld. Gebruikt wanneer asTree via de API op true is ingesteld. **/
10 children: Comment[]
11 /** De ruwe reactie van de reageerder. **/
12 comment: string
13 /** READONLY: De reactie van de reageerder, geparseerd naar HTML. **/
14 commentHTML?: string
15 /** Het e-mailadres van de reageerder. Verplicht als anoniem reageren is uitgeschakeld. **/
16 commenterEmail?: string
17 /** De link van de reageerder (bijvoorbeeld zijn of haar blog). **/
18 commenterLink?: string
19 /** De naam van de reageerder. Altijd verplicht. Indien niet beschikbaar, stel dan iets in als "Anoniem". **/
20 commenterName: string
21 /** De datum waarop de reactie is achtergelaten, in UTC epoch. **/
22 date: number
23 /** Het "weergavelabel" voor de reactie - bijvoorbeeld "Admin", "Moderator", of iets als "VIP-gebruiker". **/
24 displayLabel?: string
25 /** Het domein waarop de reactie is geplaatst. **/
26 domain?: string
27 /** READONLY: Het aantal keren dat de reactie is gemarkeerd (gevlagd). **/
28 flagCount?: number
29 /** De #hashtags die in de reactie zijn geschreven en succesvol zijn geparseerd. Je kunt ook handmatig hashtags toevoegen, bijvoorbeeld voor het opvragen van reacties, maar deze worden niet automatisch in de reactietekst weergegeven. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Bevat de reactie afbeeldingen? **/
32 hasImages?: boolean
33 /** READONLY: Bevat de reactie links? **/
34 hasLinks?: boolean
35 /** READONLY: De unieke reactie-id. **/
36 id: string
37 /** Alleen bij aanmaken! Deze wordt gehasht voor opslag. **/
38 ip?: string
39 /** READONLY: Heeft de huidige gebruiker de gebruiker die deze reactie heeft geschreven geblokkeerd? **/
40 isBlocked?: boolean
41 /** READONLY: Is de reactie van een admin? Automatisch ingesteld op basis van userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Is de reactie van een moderator? Automatisch ingesteld op basis van userId. **/
44 isByModerator?: boolean
45 /** Ingesteld op true als de reactie soft is verwijderd (er moest een placeholder achterblijven vanwege een andere configuratie). **/
46 isDeleted?: boolean
47 /** Ingesteld op true als het account van de gebruiker is verwijderd en de reactie behouden moest blijven. **/
48 isDeletedUser?: boolean
49 /** READONLY: Is de reactie gemarkeerd door de momenteel ingelogde gebruiker (contextUserId)? **/
50 isFlagged?: boolean
51 /** Is de reactie vastgepind? **/
52 isPinned?: boolean
53 /** Is de reactie vergrendeld? Indien true, kan niemand (inclusief moderators) erop reageren, deze bewerken of verwijderen totdat deze is ontgrendeld. **/
54 isLocked?: boolean
55 /** Is de reactie spam? **/
56 isSpam?: boolean
57 /** READONLY: Is de reactie negatief gestemd door de huidige gebruiker (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Is de reactie positief gestemd door de huidige gebruiker (contextUserId)? **/
60 isVotedUp?: boolean
61 /** De taalinstelling (locale) van de reactie. Indien niet opgegeven, wordt deze afgeleid uit de HTTP Accept-Language header. **/
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: De @mentions die in de reactie zijn geschreven en succesvol zijn geparseerd. **/
64 mentions?: CommentUserMention[]
65 /** Optionele metadata gekoppeld aan de reactie. **/
66 meta?: Record<string, string | number | boolean>
67 /** De optionele lijst met moderatiegroep-id's die aan deze reactie zijn gekoppeld. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: De id van het stemobject dat hoort bij de stem van de huidige gebruiker (contextUserId) op deze reactie. **/
70 myVoteId?: string
71 /** Of er meldingen zijn verstuurd voor deze reactie naar reageerders. Om te voorkomen dat er meldingen worden verstuurd bij imports, stel dit in op true. **/
72 notificationSentForParent?: boolean
73 /** Of er meldingen zijn verstuurd voor deze reactie naar tenant-gebruikers. Om te voorkomen dat er meldingen worden verstuurd bij imports, stel dit in op true. **/
74 notificationSentForParentTenant?: boolean
75 /** De titel van de pagina waarop deze reactie stond. **/
76 pageTitle?: string
77 /** Als we op een reactie antwoorden, is dit de ID waarop we antwoorden. **/
78 parentId?: string|null
79 /** Of de reactie als beoordeeld is gemarkeerd. **/
80 reviewed: boolean
81 /** De tenant-id waartoe de reactie behoort. **/
82 tenantId: string
83 /** De gebruiker die de reactie heeft geschreven. Wordt automatisch aangemaakt bij het opslaan van een reactie met een naam/e-mailadres. **/
84 userId?: string|null
85 /** De URL naar de locatie waar deze reactie zichtbaar is, zoals een blogpost. **/
86 url: string
87 /** Een "opgeschoonde" versie van de urlId die je ons hebt doorgegeven. Bij het opslaan geef je dit veld op, maar wanneer je de reactie weer ophaalt is deze "opgeschoond" en is je oorspronkelijke waarde verplaatst naar "urlIdRaw". **/
88 urlId: string
89 /** READONLY: De oorspronkelijke urlId die je ons hebt doorgegeven. **/
90 urlIdRaw?: string
91 /** Is de gebruiker en deze reactie geverifieerd? **/
92 verified: boolean
93 /** Aantal positieve stemmen. **/
94 votesUp?: number
95 /** Aantal negatieve stemmen. **/
96 votesDown?: number
97 /** De "karma" van de reactie (= positieve stemmen - negatieve stemmen). **/
98 votes?: number
99}
100

Sommige van deze velden zijn gemarkeerd als READONLY - deze worden door de API geretourneerd maar kunnen niet worden ingesteld.

Structuur van de reactietekst

Reacties worden geschreven in een FastComments-variant van markdown, wat gewoon markdown is plus traditionele bbcode-stijl tags voor afbeeldingen, zoals [img]path[/img].

De tekst wordt in twee velden opgeslagen. De tekst die de gebruiker heeft ingevoerd wordt ongewijzigd opgeslagen in het comment-veld. Deze wordt gerenderd en opgeslagen in het commentHTML-veld.

De toegestane HTML-tags zijn b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

Het wordt aanbevolen om de HTML te renderen, aangezien het een zeer kleine subset van HTML is; het bouwen van een renderer is vrij eenvoudig. Er zijn bijvoorbeeld meerdere bibliotheken voor React Native en Flutter die hierbij kunnen helpen.

Je kunt er ook voor kiezen om de niet-genormaliseerde waarde van het comment-veld te renderen. Een voorbeeld-parser is hier te vinden..

De voorbeeld-parser kan ook worden aangepast om met HTML te werken, en de HTML-tags om te zetten naar de verwachte elementen om te renderen op jouw platform.

Taggen

Wanneer gebruikers in een reactie worden getagd, wordt de informatie opgeslagen in een lijst genaamd mentions. Elk object in die lijst heeft de volgende structuur.

Het Comment Mentions Object
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** De gebruikers-id. Voor SSO-gebruikers wordt hier je tenant-id aan voorafgegaan. **/
4 id: string
5 /** De uiteindelijke @mention-tagtekst, inclusief het @-symbool. **/
6 tag: string
7 /** De oorspronkelijke @mention-tagtekst, inclusief het @-symbool. **/
8 rawTag: string
9 /** Welk type gebruiker is getagd. user = FastComments.com-account. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Als de gebruiker zich afmeldt voor meldingen, wordt dit nog steeds op true ingesteld. **/
12 sent: boolean
13}
14

HashTags

Wanneer hashtags worden gebruikt en succesvol zijn geparseerd, wordt de informatie opgeslagen in een lijst genaamd hashTags. Elk object in die lijst heeft de volgende structuur. Hashtags kunnen ook handmatig worden toegevoegd aan de hashTags-array van de reactie, bijvoorbeeld voor het opvragen van reacties, als retain is ingesteld.

Het Comment HashTag Object
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** De hashtag-id. **/
4 id: string
5 /** De uiteindelijke #hashtag-tagtekst, inclusief het #-symbool. **/
6 tag: string
7 /** Als de hashtag is gekoppeld aan een aangepaste URL, wordt deze gedefinieerd. **/
8 url?: string
9 /** Als we de hashtag moeten behouden, zelfs als deze niet in de reactietekst voorkomt, wanneer de reactie wordt bijgewerkt. Handig voor het taggen van reacties zonder de reactietekst te wijzigen. **/
10 retain?: boolean
11}
12

E-mailsjabloon-structuur Internal Link

Een EmailTemplate-object vertegenwoordigt de configuratie voor een aangepast e-mailsjabloon voor een tenant.

Het systeem selecteert het e-mailsjabloon dat gebruikt wordt via:

  • Het type-identifier, dit noemen we emailTemplateId. Dit zijn constanten.
  • De domain. We proberen eerst een sjabloon te vinden voor de domain waaraan het gerelateerde object (zoals een Comment) is gekoppeld, en als er geen overeenkomst wordt gevonden zullen we proberen een sjabloon te vinden waarbij domain null of * is.

De structuur van het EmailTemplate-object is als volgt:

Structuur van het EmailTemplate
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** ALLEEN LEZEN **/
8 createdAt: string
9 /** ALLEEN LEZEN **/
10 updatedAt: string
11 /** ALLEEN LEZEN **/
12 updatedByUserId: string
13 /** De domain waaraan het sjabloon gekoppeld moet worden. **/
14 domain?: string | '*' | null
15 /** De inhoud van het e-mailsjabloon in EJS-syntaxis. **/
16 ejs: string
17 /** Een map van overschreven vertaalingssleutels naar waarden, voor elke ondersteunde locale. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Een object dat de rendercontext van het sjabloon vertegenwoordigt. **/
20 testData: object
21}
22

Opmerkingen

  • Je kunt de geldige emailTemplateId-waarden verkrijgen via het /definitions-endpoint.
  • Het /definitions-endpoint bevat ook de standaardvertalingen en testgegevens.
  • Sjablonen slaan niet op als de structuur of testgegevens ongeldig zijn.

Feedpost-structuur Internal Link

Een FeedPost-object vertegenwoordigt een bericht in een FastComments-feed. Een feed is een stroom van berichten met hun eigen commentaarthreads, gerenderd door de Feed-widget. Elk bericht heeft een auteur, optionele rich content, media en links, en kan worden getagd zodat een feed kan worden gefilterd.

De structuur van het FeedPost-object is als volgt:

FeedPost Structuur
Copy Copy
1
2interface FeedPost {
3 /** READONLY **/
4 _id: string
5 /** READONLY **/
6 tenantId: string
7 title?: string
8 /** The id of the FastComments or SSO user that authored the post. **/
9 fromUserId?: string
10 /** Filled from the user when not set. **/
11 fromUserDisplayName?: string | null
12 /** READONLY. Filled from the user. **/
13 fromUserAvatar?: string | null
14 /** Used to filter a feed. **/
15 tags?: string[]
16 /** Sort weight within a feed. Higher values sort first. **/
17 weight?: number
18 /** Free-form key/value pairs for your own use. **/
19 meta?: Record<string, string>
20 /** Sanitized HTML. **/
21 contentHTML?: string
22 media?: FeedPostMediaItem[]
23 links?: FeedPostLink[]
24 /** READONLY **/
25 createdAt: string
26 /** READONLY. Reaction type to count. **/
27 reacts?: Record<string, number>
28 /** READONLY **/
29 commentCount?: number | null
30}
31
32interface FeedPostMediaItem {
33 title?: string
34 /** Where the media item links to when clicked. **/
35 linkUrl?: string
36 /** One entry per rendition. The widget picks the best fit. **/
37 sizes: FeedPostMediaItemAsset[]
38}
39
40interface FeedPostMediaItemAsset {
41 w: number
42 h: number
43 src: string
44}
45
46interface FeedPostLink {
47 /** The link text, like "Sign up now". **/
48 text?: string
49 /** A heading shown with the link. **/
50 title?: string
51 /** A description shown with the link. **/
52 description?: string
53 url?: string
54}
55

Opmerkingen:

  • Sommige van deze velden zijn gemarkeerd als READONLY - deze worden door de API geretourneerd maar kunnen niet worden ingesteld.
  • De comments op een bericht zijn gewone comments waarvan de urlId post: is gevolgd door de _id van het bericht. Gebruik die waarde met de Comment API om comments op een bericht te lezen of aan te maken.

Hashtag-structuur Internal Link

Een HashTag object vertegenwoordigt een tag die door een gebruiker kan worden achtergelaten. HashTags kunnen worden gebruikt om naar een extern stuk inhoud te linken of om gerelateerde opmerkingen met elkaar te verbinden.

De structuur van het HashTag object is als volgt:

HashTag-structuur
Copy Copy
1
2interface HashTag {
3 /** Moet beginnen met de "#" of het gewenste teken. **/
4 tag: string
5 /** Een optionele URL waar de hashtag naartoe kan verwijzen. In plaats van opmerkingen te filteren op hashtag, zal de UI hiernaartoe doorverwijzen bij een klik. **/
6 url?: string
7 /** ALLEEN-LEZEN **/
8 createdAt: string
9}
10

Opmerkingen:

  • In sommige API endpoints zie je dat de hashtag in de URL wordt gebruikt. Vergeet niet waarden te URI-encoderen. Bijvoorbeeld, # moet in plaats daarvan worden weergegeven als %23.
  • Sommige van deze velden zijn gemarkeerd als READONLY - deze worden door de API geretourneerd maar kunnen niet worden ingesteld.

Meldingsaantal-structuur Internal Link

Een NotificationCount object vertegenwoordigt het aantal ongelezen meldingen en metadata voor een gebruiker.

Als er geen ongelezen meldingen zijn, bestaat er geen NotificationCount voor de gebruiker.

NotificationCount-objecten worden automatisch aangemaakt en kunnen niet via de API worden gemaakt. Ze verlopen ook na één jaar.

U kunt het aantal ongelezen meldingen van een gebruiker wissen door hun NotificationCount te verwijderen.

De structuur van het NotificationCount-object is als volgt:

NotificationCount-structuur
Copy Copy
1
2interface NotificationCount {
3 id: string // gebruikers-id
4 count: number
5 createdAt: string // datumstring
6 expireAt: string // datumstring
7}
8

Meldingsstructuur Internal Link

Een Notification object vertegenwoordigt een notificatie voor een gebruiker.

Notification objects worden automatisch aangemaakt en kunnen niet via de API worden aangemaakt. Ze verlopen ook na één jaar. Notificaties kunnen niet worden verwijderd. Ze kunnen echter wel worden bijgewerkt om viewed op false te zetten, en je kunt zoeken op viewed.

Een gebruiker kan zich ook afmelden voor notificaties voor een specifiek comment door optedOut in de notificatie op true te zetten. Je kunt je weer aanmelden door het op false te zetten.

Er zijn verschillende notificatie-types - controleer relatedObjectType en type.

De manieren waarop notificaties worden aangemaakt zijn vrij flexibel en kunnen door veel scenario's worden getriggerd (zie NotificationType).

Op dit moment impliceert het bestaan van een Notification niet noodzakelijk dat er een e-mail is of zou moeten worden verzonden. In plaats daarvan worden de notificaties gebruikt voor de notificatiefeed en gerelateerde integraties.

De structuur voor het Notification object is als volgt:

Notification-structuur
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Als iemand op jou heeft geantwoord. **/
10 RepliedToMe = 0,
11 /** Als iemand ergens in een thread heeft geantwoord (zelfs kinderen van kinderen) van een thread waarop je hebt gereageerd. **/
12 RepliedTransientChild = 1,
13 /** Als je comment werd omhoog gestemd. **/
14 VotedMyComment = 2,
15 /** Als er een nieuw comment wordt achtergelaten op de root van een pagina waarop je bent geabonneerd. **/
16 SubscriptionReplyRoot = 3,
17 /** Als iemand een reactie op je profiel heeft geplaatst. **/
18 CommentedOnProfile = 4,
19 /** Als je een privébericht hebt. **/
20 DirectMessage = 5,
21 /** TrialLimits is alleen voor tenant-gebruikers. **/
22 TrialLimits = 6,
23 /** Als je met @ genoemd bent. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** Bij SSO heeft de user id het formaat `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Bij gebruik van SSO hoef je je alleen zorgen te maken over `userId`. **/
33 anonUserId?: string
34 /** urlId is bijna altijd gedefinieerd. Het is alleen optioneel voor notificaties op tenantniveau, die zeldzaam zijn. **/
35 urlId?: string
36 /** URL wordt gecached voor snelle navigatie naar de bron van de notificatie. **/
37 url?: string
38 /** Paginatitel wordt gecached voor snelle leesbaarheid van de notificatiebron. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Bijvoorbeeld, comment id. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // datumstring
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName en fromUserAvatarSrc worden hier gecached voor snelle weergave van de notificatie. Ze worden bijgewerkt wanneer de gebruiker wordt bijgewerkt. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Zet dit op true om te stoppen met het ontvangen van notificaties voor dit object. **/
53 optedOut?: boolean
54}
55

Pagina-structuur Internal Link

Een Page-object vertegenwoordigt de pagina waartoe veel opmerkingen kunnen behoren. Deze relatie wordt gedefinieerd door urlId.

Een Page slaat informatie op zoals de paginatitel, het aantal opmerkingen en urlId.

De structuur voor het Page-object is als volgt:

Pagina-structuur
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 /** Als dit op null wordt gezet, betekent dit dat alle SSO-gebruikers de pagina kunnen zien. Een lege lijst betekent dat het gesloten is voor alle gebruikers. **/
11 accessibleByGroupIds?: string[] | null
12 /** Is deze pagina gesloten voor nieuwe opmerkingen? **/
13 isClosed?: boolean
14}
15

Enquête-structuur Internal Link

Een Poll is gekoppeld aan een comment, in plaats van dat het een zelfstandig object is. Het wordt aangemaakt samen met de comment (zie POST /api/v1/comments), of later toegevoegd aan een bestaande comment via PUT /api/v1/polls/:commentId.

De stemaantallen worden bijgehouden op de poll zelf, dus het lezen van een poll geeft je de resultaten zonder dat je iets hoeft op te tellen. De individuele stemmen achter die aantallen zijn PollVote-objecten.

Elke optie heeft een id die wordt gegenereerd wanneer de poll wordt aangemaakt. Dat id gebruik je om een stem uit te brengen, om een optie te hernoemen, en om een optie (en de stemmen erop) te behouden wanneer je de poll PUT met toegevoegde of verwijderde opties. Het is de enige veilige manier om naar een optie te verwijzen - nooit naar de positie in de lijst.

Poll Structuur
Copy Copy
1
2interface CommentPollOption {
3 id: string
4 label: string
5 votes: number
6}
7
8interface CommentPoll {
9 question: string
10 options: CommentPollOption[]
11 totalVotes: number
12 /** Wanneer ingesteld en in het verleden, is de poll gesloten en worden er geen stemmen meer geaccepteerd. **/
13 closesAt?: string | null
14 /** 0 anoniem (de standaard), 1 admins en moderators, 2 iedereen. Afwezig betekent anoniem. **/
15 privacy?: 0 | 1 | 2 | null
16 /** Wanneer true, zijn de aantallen verborgen voor iedereen die nog niet heeft gestemd. Afwezig betekent false. **/
17 requireVoteToSeeResults?: boolean | null
18}
19

Limieten

  • Een vraag is verplicht en heeft maximaal 200 tekens.
  • Een poll heeft tussen de 2 en 10 opties.
  • Een optielabel is verplicht, heeft maximaal 100 tekens en moet uniek zijn binnen de poll (hoofdlettergevoeligheid genegeerd).
  • closesAt moet in de toekomst liggen wanneer de poll wordt aangemaakt. Om een poll direct te sluiten, doe je een PATCH met een datum in het verleden.

Site-instellingen

Polls volgen je siteconfiguratie, die je kunt aanpassen onder Customize Widget:

  • Polls moeten ingeschakeld zijn voordat een poll kan worden aangemaakt, anders reageert de API met polls-disabled.
  • Stemmen kan worden beperkt tot ingelogde gebruikers, in welk geval een stem die alleen met een anonUserId wordt verstuurd wordt afgewezen met poll-login-required.

Pollstem-structuur Internal Link

Een PollVote is het antwoord van één persoon op een poll. De aantallen die op de poll zelf worden getoond worden synchroon gehouden met deze, dus je hebt deze alleen nodig als je wilt weten wie op wat heeft gestemd, in plaats van de totalen.

Een stemmer heeft maximaal één stem per poll. Als er opnieuw gestemd wordt, wordt de bestaande stem verplaatst naar de nieuwe optie in plaats van dat er een tweede wordt toegevoegd, en updatedAt registreert wanneer dat gebeurde.

voterId is de userId wanneer de stemmer was ingelogd, en anders de anonUserId.

PollVote Structuur
Copy Copy
1
2interface PollVote {
3 id: string
4 tenantId: string
5 commentId: string
6 urlId: string
7 /** De userId wanneer de stemmer was ingelogd, anders de anonUserId. **/
8 voterId: string
9 optionId: string
10 createdAt: string
11 /** Wanneer de stemmer zijn of haar stem voor het laatst naar een andere optie heeft verplaatst. **/
12 updatedAt?: string
13}
14

Privacy

De privacy-instelling van de poll geldt voor deze API op dezelfde manier als in de comment-widget:

  • Anoniem (de standaardinstelling): niemand kan zien hoe iemand heeft gestemd, dus de stemmen kunnen niet worden uitgelezen. GET /api/v1/poll-votes en GET /api/v1/poll-votes/:id reageren met poll-anonymous. De aantallen van de poll zijn nog steeds beschikbaar via GET /api/v1/polls/:commentId.
  • Admins en moderatoren: je API-sleutel behoort toe aan de admin van je site, dus deze kan de stemmen uitlezen.
  • Iedereen: de stemmen kunnen worden uitgelezen.

De privacy van een poll kan worden versmald, maar niet worden verruimd zodra er stemmen zijn.

In afwachting webhookgebeurtenis-structuur Internal Link

Een PendingWebhookEvent-object vertegenwoordigt een webhook-event in de wachtrij dat nog in behandeling is.

PendingWebhookEvent-objecten worden automatisch aangemaakt en kunnen niet handmatig via de API worden aangemaakt. Ze verlopen ook na één jaar. Ze kunnen worden verwijderd, wat de taak uit de wachtrij verwijdert.

Er zijn verschillende eventtypes - controleer eventType (OutboundSyncEventType) en type (OutboundSyncType).

Een veelvoorkomend gebruik van deze API is het implementeren van aangepaste monitoring. U wilt mogelijk periodiek het /count-endpoint aanroepen om het openstaande aantal voor bepaalde filters op te vragen.

De structuur van het PendingWebhookEvent-object is als volgt:

PendingWebhookEvent-structuur
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** WordPress-specifieke synchronisatietaak. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** De comment id die aan het event is gekoppeld. **/
17 commentId: string
18 /** Het comment-object voor het event op het moment van het event. We zijn begonnen deze toe te voegen in nov 2023. **/
19 comment: Comment
20 /** Een externe id die mogelijk aan de comment is gekoppeld. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Ingesteld vóór de eerste poging en na elke mislukking. **/
26 nextAttemptAt: Date
27 /** Of dit een aanmaak-, verwijder- of update-event is... **/
28 eventType: OutboundSyncEventType
29 /** Het type synchronisatie dat moet worden uitgevoerd (WordPress, API-aanroep, enz.). **/
30 type: OutboundSyncType
31 /** Het domein dat overeenkwam met de comment. We gebruiken dit domein om de API-sleutel te kiezen. **/
32 domain: string
33 /** De laatste fout die optrad. Dit type is niet-getypeerd en is een "dump" van wat er ook is gebeurd. Gewoonlijk bevat het een object met statusCode, body, en een headers-map. **/
34 lastError: object | null
35}
36

SSO-gebruikersstructuur Internal Link

FastComments biedt een gebruiksvriendelijke SSO-oplossing. Het bijwerken van de gegevens van een gebruiker met de HMAC-gebaseerde integratie is zo eenvoudig als de gebruiker de pagina laten laden met een bijgewerkte payload.

Het kan echter wenselijk zijn om een gebruiker buiten die flow te beheren, om de consistentie van uw applicatie te verbeteren.

De SSO User API biedt een manier om CRUD-bewerkingen uit te voeren op objecten die we SSOUsers noemen. Deze objecten verschillen van reguliere Users en worden apart gehouden voor typeveiligheid.

De structuur van het SSOUser-object is als volgt:

SSOUser-structuur
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 // Admin-permissie - SSO-gebruikers met deze vlag worden gefactureerd als SSO Admins (apart van reguliere SSO-gebruikers)
16 isAdminAdmin?: boolean // Admin-permissie - SSO-gebruikers met deze vlag worden gefactureerd als SSO Admins (apart van reguliere SSO-gebruikers)
17 isCommentModeratorAdmin?: boolean // Moderator-permissie - SSO-gebruikers met deze vlag worden gefactureerd als SSO Moderators (apart van reguliere SSO-gebruikers)
18 /** Als null is, wordt Toegangscontrole niet toegepast op de gebruiker. Als het een lege lijst is, kan deze gebruiker geen pagina's zien of andere gebruikers @mentionen. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Laat andere gebruikers de activiteit van deze gebruiker, inclusief reacties, niet zien op zijn profiel. Standaard is true om profielen standaard veilig te houden. **/
22 isProfileActivityPrivate?: boolean
23 /** Laat andere gebruikers geen opmerkingen achterlaten op het profiel van de gebruiker, of bestaande profielreacties zien. Standaard false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Laat andere gebruikers geen privéberichten naar deze gebruiker sturen. Standaard false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Optionele configuratie voor gebruikersbadges. **/
29 badgeConfig?: {
30 /** Array met badge-ID's om aan de gebruiker toe te wijzen. Beperkt tot 30 badges. Volgorde wordt gerespecteerd. Dit zijn globale badges zichtbaar op alle pagina's. **/
31 badgeIds: string[]
32 /** Array met badge-ID's die zijn gescopeerd naar de huidige pagina (urlId). Deze badges worden alleen weergegeven op de pagina waar ze zijn toegewezen. **/
33 pageBadgeIds?: string[]
34 /** Als true, vervangt dit alle bestaande weergegeven badges door de opgegeven. Globale en pagina-gescopeerde badges worden onafhankelijk overschreven. Als false, worden ze toegevoegd aan bestaande badges. **/
35 override?: boolean
36 /** Als true, worden de weergave-eigenschappen van badges bijgewerkt vanuit de tenantconfiguratie. **/
37 update?: boolean
38 }
39}
40

Facturering voor SSO-gebruikers

SSO-gebruikers worden verschillend gefactureerd op basis van hun permissievlaggen:

  • Regular SSO Users: Gebruikers zonder admin- of moderatorrechten worden gefactureerd als reguliere SSO-gebruikers
  • SSO Admins: Gebruikers met isAccountOwner of isAdminAdmin vlaggen worden apart gefactureerd als SSO Admins (zelfde tarief als reguliere tenant-beheerders)
  • SSO Moderators: Gebruikers met de isCommentModeratorAdmin vlag worden apart gefactureerd als SSO Moderators (zelfde tarief als reguliere moderators)

Belangrijk: Om dubbele facturering te voorkomen, dedupliceert het systeem automatisch SSO-gebruikers ten opzichte van reguliere tenant-gebruikers en moderators op basis van e-mailadres. Als een SSO-gebruiker hetzelfde e-mailadres heeft als een reguliere tenant-gebruiker of moderator, wordt er niet twee keer gefactureerd.

Toegangscontrole

Gebruikers kunnen in groepen worden verdeeld. Hiervoor is het veld groupIds bedoeld, en het is optioneel.

@Mentions

Standaard zullen @mentions username gebruiken om andere sso-gebruikers te doorzoeken wanneer het @ teken wordt getypt. Als displayName wordt gebruikt, worden resultaten die overeenkomen met username genegeerd wanneer er een overeenkomst is voor displayName, en zullen de @mention-zoekresultaten displayName gebruiken.

Abonnementen

Met FastComments kunnen gebruikers zich op een pagina abonneren door op het belpictogram in de reactie-widget te klikken en op Abonneren te klikken.

Bij een reguliere gebruiker sturen we notificatie-e-mails op basis van hun notificatie-instellingen.

Bij SSO-gebruikers splitsen we dit om achterwaartse compatibiliteit te behouden. Gebruikers krijgen deze aanvullende abonnementsmeldings-e-mails alleen als u optedInSubscriptionNotifications op true zet.

Badges

U kunt badges toewijzen aan SSO-gebruikers met behulp van de badgeConfig-eigenschap. Badges zijn visuele indicaties die naast de naam van een gebruiker in reacties verschijnen.

  • badgeIds - Een array met badge-ID's om aan de gebruiker toe te wijzen. Dit zijn globale badges zichtbaar op alle pagina's. Moeten geldige badge-IDs zijn die in uw FastComments-account zijn gemaakt. Beperkt tot 30 badges.
  • pageBadgeIds - Een optionele array met badge-ID's die zijn gescopeerd naar de huidige pagina (urlId). Deze badges worden alleen weergegeven op de pagina waar ze zijn toegewezen. Verschillende pagina's kunnen verschillende pagina-gescopeerde badges hebben voor dezelfde gebruiker.
  • override - Als true, worden alle bestaande weergegeven badges vervangen door de opgegeven. Globale en pagina-gescopeerde badges worden onafhankelijk overschreven — het overschrijven van globale badges heeft geen effect op pagina-gescopeerde badges, en omgekeerd. Als false of weggelaten, worden de opgegeven badges toegevoegd aan eventuele bestaande badges.
  • update - Als true, worden de weergave-eigenschappen van badges bij elke login van de gebruiker bijgewerkt vanuit de tenantconfiguratie.

Abonnementsstructuur Internal Link

Een Subscription-object vertegenwoordigt een abonnement voor een gebruiker.

Subscription-objecten worden aangemaakt wanneer een gebruiker op de meldingsbel in de reactie-widget klikt en op "Abonneer op deze pagina" klikt.

Abonnementen kunnen ook via de API worden aangemaakt.

Het hebben van een Subscription-object zorgt ervoor dat er Notification-objecten worden gegenereerd en e-mails worden verzonden wanneer er nieuwe reacties worden geplaatst op de root van de bijbehorende pagina waarvoor de Subscription geldt. Het verzenden van e-mails hangt af van het type gebruiker. Voor reguliere gebruikers is dit afhankelijk van optedInNotifications. Voor SSO-gebruikers is dit afhankelijk van optedInSubscriptionNotifications. Let op dat sommige applicaties mogelijk niet het concept van een via het web toegankelijke pagina hebben; in dat geval stelt u eenvoudig urlId in op de id van het item waarop u zich abonneert (dezelfde waarde voor urlId die u aan de reactie-widget zou doorgeven).

De structuur van het Subscription-object is als volgt:

Structuur van Subscription
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** Bij SSO is de gebruikers-id in het formaat `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // datumstring
12}
13

TenantDagelijksGebruik-structuur Internal Link

Een TenantDailyUsage object vertegenwoordigt het gebruik voor een tenant op een bepaalde dag. Als er geen activiteit was voor een bepaalde tenant op een bepaalde dag, zal die dag geen TenantDailyUsage object hebben.

Het TenantDailyUsage object is niet real-time en kan enkele minuten achterlopen op het werkelijke gebruik.

De structuur van het TenantDailyUsage object is als volgt:

TenantDailyUsage Structuur
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 /** Genegeerd voor facturering. **/
19 ignored: boolean
20}
21

Tenant-structuur Internal Link

De Tenant definieert een FastComments.com-klant. Ze kunnen via de API worden aangemaakt door tenants met white-labeling toegang. White-labeled tenants kunnen geen andere white-labeled tenants aanmaken (er is slechts één niveau van nesting toegestaan).

De structuur voor het Tenant-object is als volgt:

Tenant-structuur
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Dit kan ook via de DomainConfig API worden afgehandeld. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // je wilt waarschijnlijk Unknown
14 logoSrc?: string, // pad naar ruwe afbeelding
15 logoSrc100px?: string, // verkleind voor miniaturen
16 footerUnsubscribeURL?: string,
17 emailHeaders?: Record<string, string>,
18 disableUnsubscribeLinks?: boolean,
19 dkim?: {
20 domainName: string,
21 keySelector: string,
22 privateKey: string
23 }
24}
25
26export interface TenantBillingInfo {
27 name: string
28 address: string
29 city: string
30 state: string
31 zip: string
32 country: string
33}
34
35export enum TenantPaymentFrequency {
36 Monthly = 0,
37 Annually = 1
38}
39
40export interface Tenant {
41 id: string
42 name: string
43 email?: string
44 signUpDate: number; // number vanwege "legacy" redenen
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 - Wordt berekend op basis van packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Wordt berekend op basis van packageId. **/
69 hasAuditing?: boolean
70 /** Je kunt een sleutel-waarde-paar opslaan bij de tenant dat je kunt gebruiken om te zoeken. Sleutels mogen geen "." of "$" bevatten, of langer zijn dan 100 tekens. Waarden mogen niet langer zijn dan 2k tekens. **/
71 meta?: Record<string, string | null>
72}
73

Gebruikersstructuur Internal Link

User is een object dat het meest voorkomende gemeenschappelijke kenmerk van alle gebruikers vertegenwoordigt.

Houd er rekening mee dat we bij FastComments verschillende gebruikssituaties voor gebruikers hebben:

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

Deze API is voor Commenters en gebruikers die via Simple SSO zijn aangemaakt. In feite kan elke gebruiker die via uw site is aangemaakt via deze API worden benaderd. Tenant Users kunnen ook op deze manier worden opgehaald, maar u krijgt meer informatie door te werken met de /tenant-users/ API.

Gebruik voor Secure SSO de /sso-users/ API.

U kunt deze soorten gebruikers niet bijwerken. Ze hebben hun account via uw site aangemaakt, dus we bieden beperkte alleen-lezen toegang, maar u kunt geen wijzigingen aanbrengen. Als u dit soort flow wilt hebben, moet u Secure SSO instellen.

De structuur van het User-object is als volgt:

Structuur van User
Copy Copy
1
2export interface User {
3 /** Dit is tevens de id die als userId wordt gebruikt op commentaarobjecten. **/
4 id: string
5 username: string
6 /** Een link naar bijvoorbeeld de blog van de commenter. **/
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

Stemstructuur Internal Link

Een Vote-object vertegenwoordigt een door een gebruiker achtergelaten stem.

De relatie tussen reacties en stemmen wordt gedefinieerd via commentId.

De structuur voor het Vote-object is als volgt:

Structuur van 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

Vraagconfiguratie-structuur Internal Link

FastComments biedt een manier om vragen te maken en de resultaten ervan te aggregeren. Een voorbeeld van een vraag (hierna aangeduid als QuestionConfig) kan een sterrenbeoordeling, een schuifregelaar of een NPS-vraag zijn (bepaald via type).

Vraaggegevens kunnen individueel, gezamenlijk, over de tijd, in totaal, per pagina, enzovoort worden geaggregeerd.

Het framework bevat alle mogelijkheden die nodig zijn om client-side widgets (met uw server voor deze API), beheerdersdashboards en rapportagetools te bouwen.

Eerst moeten we een QuestionConfig definiëren. De structuur is als volgt:

Structuur van 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 /** ALLEEN LEZEN - wordt verhoogd voor elk nieuw antwoord. **/
13 usedCount: number
14 /** Een datumstring die aangeeft wanneer de configuratie voor het laatst is gebruikt (wanneer er een resultaat is achtergelaten). **/
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

Vraagresultaat-structuur Internal Link

Om resultaten voor vragen op te slaan, maakt u een QuestionResult. U kunt vervolgens vraagresultaten aggregeren, en ook ze aan opmerkingen koppelen voor rapportagedoeleinden.

Structuur van 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

Gebruikersbadge-structuur Internal Link

UserBadge is een object dat een badge voorstelt die aan een gebruiker is toegewezen in het FastComments-systeem.

Badges kunnen automatisch aan gebruikers worden toegekend op basis van hun activiteit (zoals aantal reacties, reactietijd, Veteran-status) of handmatig door sitebeheerders.

De structuur van het UserBadge-object is als volgt:

UserBadge-structuur
Copy Copy
1
2export interface UserBadge {
3 /** Unieke identificatie voor deze gebruikersbadge-toewijzing */
4 id: string
5 /** ID van de gebruiker aan wie deze badge is toegewezen */
6 userId: string
7 /** ID van de badge-definitie uit de badgecatalogus van de tenant */
8 badgeId: string
9 /** ID van de tenant die deze badge heeft gemaakt/toegewezen */
10 fromTenantId: string
11 /** Wanneer deze badge is gemaakt (milliseconden sinds epoch) */
12 createdAt?: number
13 /** Wanneer deze badge door de gebruiker is ontvangen (milliseconden sinds epoch) */
14 receivedAt?: number
15 /**
16 * Het badgetype:
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 /** Voor op drempel gebaseerde badges, de drempelwaarde */
25 threshold?: number
26 /** De naam/label van de badge */
27 name?: string
28 /** Gedetailleerde beschrijving van de badge */
29 description?: string
30 /** De tekst die op de badge wordt weergegeven */
31 displayLabel?: string
32 /** URL naar een afbeelding die op de badge wordt getoond */
33 displaySrc?: string
34 /** Achtergrondkleur voor de badge (hex-code) */
35 backgroundColor?: string
36 /** Randkleur voor de badge (hex-code) */
37 borderColor?: string
38 /** Tekstkleur voor de badge (hex-code) */
39 textColor?: string
40 /** Extra CSS-klasse voor styling */
41 cssClass?: string
42 /** Voor Veteran-badges, de tijdsdrempel in milliseconden */
43 veteranUserThresholdMillis?: number
44 /** Of deze badge wordt weergegeven bij de reacties van de gebruiker */
45 displayedOnComments: boolean
46 /** De weergavevolgorde van de badge */
47 order?: number
48 /** Als ingesteld, wordt deze badge alleen weergegeven op de pagina met de overeenkomende urlId. Null voor globale badges. */
49 urlId?: string | null
50}
51

Gebruikersbadgevoortgang-structuur Internal Link

UserBadgeProgress is een object dat de voortgang van een gebruiker bijhoudt naar het verdienen van verschillende badges in het FastComments-systeem.

Deze bijhouding helpt bepalen wanneer gebruikers automatisch badges moeten ontvangen op basis van hun activiteit en deelname in uw community.

De structuur van het UserBadgeProgress-object is als volgt:

Structuur van UserBadgeProgress
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Unieke identificatie voor dit voortgangsrecord */
4 id: string
5 /** ID van de tenant waartoe dit voortgangsrecord behoort */
6 tenantId: string
7 /** ID van de gebruiker die door dit voortgangsrecord wordt gevolgd */
8 userId: string
9 /** ID van de eerste reactie van de gebruiker in het systeem */
10 firstCommentId?: string
11 /** Datum van de eerste reactie van de gebruiker (milliseconden sinds epoch) */
12 firstCommentDate?: number
13 /** Automatisch berekende vertrouwensfactor op basis van gebruikersactiviteit */
14 autoTrustFactor?: number
15 /** Handmatig ingestelde vertrouwensfactor door beheerders */
16 manualTrustFactor?: number
17 /** Gedetailleerd voortgangsobject met verschillende statistieken, keys komen overeen met de BadgeType-enum */
18 progress: {
19 /** 0: CommentCount - Aantal reacties dat de gebruiker heeft geplaatst */
20 '0'?: number
21 /** 1: CommentUpVotes - Aantal upvotes die de gebruiker heeft ontvangen */
22 '1'?: number
23 /** 2: CommentReplies - Aantal reacties (replies) die de gebruiker heeft geplaatst */
24 '2'?: number
25 /** 3: CommentsPinned - Aantal vastgezette reacties die de gebruiker heeft */
26 '3'?: number
27 /** 4: Veteran - Accountleeftijd van de gebruiker */
28 '4'?: number
29 /** 5: NightOwl - Aantal keer dat de gebruiker heeft gepost tijdens nachtelijke uren */
30 '5'?: number
31 /** 6: FastReplyTime - Gemiddelde reactietijd in milliseconden */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Voor moderatorbadges, aantal verwijderde reacties */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Voor moderatorbadges, aantal goedgekeurde reacties */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Voor moderatorbadges, aantal niet-goedgekeurde reacties */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Voor moderatorbadges, aantal beoordeelde reacties */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Voor moderatorbadges, aantal reacties gemarkeerd als spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Voor moderatorbadges, aantal reacties gemarkeerd als geen spam */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Voor elke pagina, aantal antwoorden */
46 '13'?: Record<string, number>
47 }
48}
49

Tot slot

We hopen dat je onze API-documentatie grondig en gemakkelijk te begrijpen hebt gevonden. Als je hiaten vindt, laat het ons hieronder weten.