FastComments.com

De FastComments API

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

In deze documentatie vindt u alle door de API ondersteunde resources, gedocumenteerd met hun request- en response-typen.

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

Gegenereerde SDK's

FastComments genereert nu een API-specificatie uit onze code (dit is nog niet compleet, maar bevat veel API's).

We hebben nu ook SDK's voor populaire talen:

Authenticatie

De API wordt geauthenticeerd door uw API-sleutel als X-API-KEY header of API_KEY queryparameter mee te sturen. U heeft ook uw tenantId nodig om API-aanroepen te doen. Deze kan worden opgehaald vanaf dezelfde pagina als uw API-sleutel.

Beveiligingsnotitie

Deze routes zijn bedoeld om vanaf een server te worden aangeroepen. ROEP ZE NIET vanuit een browser. Als u dat doet, maakt u uw API-sleutel openbaar - dit geeft volledige toegang tot uw 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

Auditlogstructuur 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 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

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

Gebeurtenissen in het auditlogboek vervallen na twee jaar.

Reactiestructuur Internal Link

Een Comment object stelt een opmerking voor die door een gebruiker is achtergelaten.

De relatie tussen ouder- en kindreacties wordt gedefinieerd via parentId.

De structuur van het Comment-object is als volgt:

Structuur van het Comment-object
Copy Copy
1
2interface Comment {
3 /** READONLY: Zet op true als de spam-engine heeft vastgesteld dat het commentaar spam is. **/
4 aiDeterminedSpam?: boolean
5 /** Of het commentaar is goedgekeurd om te tonen. Zet op true bij het opslaan van het commentaar, anders wordt het verborgen. **/
6 approved?: boolean
7 /** De avatar van de gebruiker. **/
8 avatarSrc?: string
9 /** Kindreacties. Niet in alle scenario's gevuld. Gebruikt wanneer asTree via de API op true is gezet. **/
10 children: Comment[]
11 /** De onbewerkte opmerking van de schrijver. **/
12 comment: string
13 /** READONLY: De opmerking van de schrijver geparseerd naar HTML. **/
14 commentHTML?: string
15 /** Het e-mailadres van de schrijver. Vereist als anoniem reageren is uitgeschakeld. **/
16 commenterEmail?: string
17 /** De link van de schrijver (bijv. hun blog). **/
18 commenterLink?: string
19 /** De naam van de schrijver. Altijd vereist. Als niet beschikbaar, zet iets als "Anoniem". **/
20 commenterName: string
21 /** De datum waarop de opmerking is geplaatst, in UTC epoch. **/
22 date: number
23 /** Het "weergavelabel" voor het commentaar - bijvoorbeeld "Admin", "Moderator", of iets als "VIP User". **/
24 displayLabel?: string
25 /** Het domein waarop de opmerking is geplaatst. **/
26 domain?: string
27 /** READONLY: Het aantal keer dat het commentaar is gemarkeerd. **/
28 flagCount?: number
29 /** De #hashtags die in de opmerking zijn geschreven en succesvol zijn geparseerd. Je kunt ook hashtags handmatig toevoegen voor query's, maar deze worden niet automatisch in de opmerkingstekst weergegeven. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Bevat de opmerking afbeeldingen? **/
32 hasImages?: boolean
33 /** READONLY: Bevat de opmerking links? **/
34 hasLinks?: boolean
35 /** READONLY: De unieke id van het commentaar. **/
36 id: string
37 /** Alleen bij aanmaak! Dit wordt gehasht voor opslag. **/
38 ip?: string
39 /** READONLY: Heeft de huidige gebruiker de auteur van dit commentaar geblokkeerd? **/
40 isBlocked?: boolean
41 /** READONLY: Is het commentaar door een admin geschreven? Automatisch ingesteld op basis van userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Is het commentaar door een moderator geschreven? Automatisch ingesteld op basis van userId. **/
44 isByModerator?: boolean
45 /** Zet op true als het commentaar zacht verwijderd is (er moest een placeholder blijven vanwege een andere configuratie). **/
46 isDeleted?: boolean
47 /** Zet op true als het account van de gebruiker is verwijderd en het commentaar moest worden behouden. **/
48 isDeletedUser?: boolean
49 /** READONLY: Is het gemarkeerd door de momenteel ingelogde gebruiker (contextUserId)? **/
50 isFlagged?: boolean
51 /** Is het commentaar vastgezet? **/
52 isPinned?: boolean
53 /** Is het commentaar vergrendeld voor nieuwe reacties (moderators kunnen nog steeds reageren)? **/
54 isLocked?: boolean
55 /** Is het commentaar spam? **/
56 isSpam?: boolean
57 /** READONLY: Is het commentaar naar beneden gestemd voor de huidige gebruiker (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Is het commentaar omhoog gestemd voor de huidige gebruiker (contextUserId)? **/
60 isVotedUp?: boolean
61 /** De locale van het commentaar. Indien niet opgegeven, wordt deze afgeleid van de Accept-Language HTTP-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 in het commentaar die succesvol zijn geparseerd. **/
64 mentions?: CommentUserMention[]
65 /** Optionele metadata geassocieerd met het commentaar. **/
66 meta?: Record<string, string | number | boolean>
67 /** De optionele lijst met moderation group ids die aan dit commentaar zijn gekoppeld. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: De id van het stemobject dat overeenkomt met de stem van de huidige gebruiker (contextUserId) op dit commentaar. **/
70 myVoteId?: string
71 /** Of er meldingen zijn verzonden voor dit commentaar naar reageerders. Om te voorkomen dat meldingen worden verzonden bij imports, zet dit op true. **/
72 notificationSentForParent?: boolean
73 /** Of er meldingen zijn verzonden voor dit commentaar naar tenant-gebruikers. Om te voorkomen dat meldingen worden verzonden bij imports, zet dit op true. **/
74 notificationSentForParentTenant?: boolean
75 /** De titel van de pagina waarop dit commentaar stond. **/
76 pageTitle?: string
77 /** Als we op een opmerking reageren, is dit de ID waarop we reageren. **/
78 parentId?: string|null
79 /** Of het commentaar als beoordeeld is gemarkeerd. **/
80 reviewed: boolean
81 /** De tenant-id waartoe het commentaar behoort. **/
82 tenantId: string
83 /** De gebruiker die het commentaar heeft geschreven. Automatisch aangemaakt bij het opslaan van een commentaar met een naam/e-mail. **/
84 userId?: string|null
85 /** De URL naar de locatie waarop dit commentaar zichtbaar is, zoals een blogpost. **/
86 url: string
87 /** Een "opgeschoonde" versie van de urlId die je aan ons doorgeeft. Bij opslaan geef je dit veld op, maar bij ophalen wordt dit "opgeschoond" en wordt je oorspronkelijke waarde verplaatst naar "urlIdRaw". **/
88 urlId: string
89 /** READONLY: De oorspronkelijke urlId die je ons hebt gegeven. **/
90 urlIdRaw?: string
91 /** Is de gebruiker en dit commentaar geverifieerd? **/
92 verified: boolean
93 /** Aantal stemmen omhoog. **/
94 votesUp?: number
95 /** Aantal stemmen omlaag. **/
96 votesDown?: number
97 /** De "karma" van het commentaar (= stemmen omhoog - stemmen omlaag). **/
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 opmerkingstekst

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

Tekst wordt in twee velden opgeslagen. De tekst die de gebruiker invoerde wordt ongewijzigd opgeslagen in het veld comment. Dit wordt gerenderd en opgeslagen in het veld commentHTML.

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

Het wordt aangeraden 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 libraries voor React Native en Flutter die hierbij kunnen helpen.

Je kunt ervoor kiezen de niet-genormaliseerde waarde van het veld comment te renderen. Een voorbeeldparser vind je hier..

De voorbeeldparser kan ook aangepast worden om met HTML te werken en de HTML-tags om te zetten naar de verwachte elementen voor rendering op jouw platform.

Tagging

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

Het Comment Vermeldingen-object
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** De gebruikers-id. Voor SSO-gebruikers wordt hier je tenant-id als prefix toegevoegd. **/
4 id: string
5 /** De uiteindelijke @mention tekst, inclusief het @-symbool. **/
6 tag: string
7 /** De oorspronkelijke @mention tekst, 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 gezet. **/
12 sent: boolean
13}
14

HashTags

Wanneer hashtags worden gebruikt en succesvol geparseerd, wordt de informatie opgeslagen in een lijst genaamd hashTags. Elk object in die lijst heeft de volgende structuur. Hashtags kunnen ook handmatig aan de hashTags-array van een opmerking worden toegevoegd voor query-doeleinden, 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 tekst, inclusief het #-symbool. **/
6 tag: string
7 /** Als de hashtag is gekoppeld aan een aangepaste URL, wordt deze hier gedefinieerd. **/
8 url?: string
9 /** Of we de hashtag moeten behouden, ook als deze niet in de opmerkingstekst voorkomt, wanneer de opmerking wordt bijgewerkt. Handig om opmerkingen te taggen zonder de tekst te wijzigen. **/
10 retain?: boolean
11}
12

E-mailsjabloonstructuur 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.

Hashtagstructuur 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.

Structuur aantal meldingen 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

Notificatiestructuur 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

Structuur wachtende webhook-gebeurtenis 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

Structuur SSO-gebruiker Internal Link

FastComments biedt een eenvoudig te gebruiken SSO-oplossing. Het bijwerken van de informatie 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 dat proces 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 // Bevoegdheid voor beheerder - SSO-gebruikers met deze vlag worden gefactureerd als SSO-beheerders (apart van reguliere SSO-gebruikers)
16 isAdminAdmin?: boolean // Bevoegdheid voor beheerder - SSO-gebruikers met deze vlag worden gefactureerd als SSO-beheerders (apart van reguliere SSO-gebruikers)
17 isCommentModeratorAdmin?: boolean // Bevoegdheid voor moderator - SSO-gebruikers met deze vlag worden gefactureerd als SSO-moderators (apart van reguliere SSO-gebruikers)
18 /** Als null wordt Access Control niet op de gebruiker toegepast. 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 /** Voorkom dat andere gebruikers de activiteit van deze gebruiker, inclusief reacties, op zijn/haar profiel zien. Standaard is true om standaard veilige profielen te bieden. **/
22 isProfileActivityPrivate?: boolean
23 /** Voorkom dat andere gebruikers reacties plaatsen op het profiel van de gebruiker, of bestaande profielreacties zien. Standaard false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Voorkom dat andere gebruikers directe berichten naar deze gebruiker sturen. Standaard false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Optionele configuratie voor gebruikersbadges. **/
29 badgeConfig?: {
30 /** Array met badge-IDs om aan de gebruiker toe te wijzen. Beperkt tot 30 badges. Volgorde wordt gerespecteerd. **/
31 badgeIds: string[]
32 /** Als true vervangt dit alle bestaande weergegeven badges door de opgegeven. Als false, worden ze toegevoegd aan bestaande badges. **/
33 override?: boolean
34 /** Als true werkt dit de weergave-eigenschappen van badges bij vanuit de tenantconfiguratie. **/
35 update?: boolean
36 }
37}
38

Facturering voor SSO-gebruikers

SSO-gebruikers worden anders gefactureerd afhankelijk van hun permissievlaggen:

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

Belangrijk: Om dubbele facturatie te voorkomen, dedupliceert het systeem automatisch SSO-gebruikers ten opzichte van reguliere tenantgebruikers en moderators op basis van e-mailadres. Als een SSO-gebruiker hetzelfde e-mailadres heeft als een reguliere tenantgebruiker of moderator, zullen ze niet twee keer gefactureerd worden.

Toegangscontrole

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

@Vermeldingen

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

Abonnementen

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

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

Bij SSO-gebruikers hebben we dit opgesplitst voor achterwaartse compatibiliteit. Gebruikers zullen deze extra abonnementsmeldingen alleen ontvangen als u optedInSubscriptionNotifications op true zet.

Badges

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

  • badgeIds - Een array met badge-IDs om aan de gebruiker toe te wijzen. Deze moeten geldige badge-IDs zijn die in uw FastComments-account zijn aangemaakt. Beperkt tot 30 badges.
  • override - Als true worden alle bestaande badges die bij reacties worden weergegeven vervangen door de opgegeven badges. 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

Structuur dagelijks gebruik tenant Internal Link

Een TenantDailyUsage object represents the usage for a tenant on a given day. If there was no activity for a given tenant on a given day, that day will not have a TenantDailyUsage object.

The TenantDailyUsage object is not real time and may be minutes behind actual usage.

The structure for the TenantDailyUsage object is as follows:

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

Tenantstructuur 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

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

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

Structuur gebruikersbadge 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, veteranenstatus) of handmatig door sitebeheerders.

De structuur van het UserBadge-object is als volgt:

Structuur van UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Unieke identificatie voor deze gebruikersbadge-toewijzing */
4 id: string
5 /** ID van de gebruiker waaraan deze badge is toegewezen */
6 userId: string
7 /** ID van de badge-definitie uit de catalogus 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 drempelgebaseerde 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 weergegeven */
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 /** Aanvullende CSS-klasse voor opmaak */
41 cssClass?: string
42 /** Voor veteranenbadges, 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}
49
---

Structuur voortgang gebruikersbadge 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.