FastComments.com

FastComments API

FastComments tilbyder et API til at interagere med mange ressourcer. Byg integrationer med vores platform, eller byg endda dine egne klienter!

I denne dokumentation finder du alle API'ens understøttede ressourcer dokumenteret med deres request- og response-typer.

For Enterprise-kunder registreres al API-adgang i Audit Log.

Genererede SDK'er

FastComments genererer nu en API Spec fra vores kode (dette er endnu ikke fuldt færdigt, men omfatter mange API'er).

Vi har også nu SDK'er til populære sprog:

Autentificering

API'en autentificeres ved at videregive din API-nøgle enten som en X-API-KEY header eller som forespørgselsparameteren API_KEY. Du får også brug for din tenantId for at foretage API-opkald. Den kan hentes fra samme side som din API-nøgle.

Sikkerhedsnote

Disse ruter er beregnet til at blive kaldt fra en server. KALD IKKE dem fra en browser. Hvis du gør det, vil din API-nøgle blive eksponeret - det vil give fuld adgang til din konto for enhver, der kan se kildeteksten på en side!

Autentificeringsmulighed Én - Headers

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

Autentificeringsmulighed To - Forespørgselsparametre

  • Forespørgselsparameter: API_KEY
  • Forespørgselsparameter: tenantId

API-ressourcer Internal Link

FastComments API indeholder følgende ressourcer:

  • Comment
  • Domain Config
  • Page
  • Moderator
  • Notification
  • Vote
  • SSO User
  • Tenant User
  • User
  • QuestionConfig
  • QuestionResult
  • Subscription
  • Audit Log

Auditlog-struktur Internal Link

Et AuditLog er et objekt, der repræsenterer en revideret hændelse for lejere, der har adgang til denne funktion.

Strukturen for AuditLog-objektet er som følger:

AuditLog-struktur
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

Auditloggen er uforanderlig. Den kan heller ikke skrives til manuelt. FastComments.com beslutter alene, hvornår der skrives til auditloggen. Du kan dog læse fra den via dette API.

Hændelser i auditloggen udløber efter to år.

Kommentarstruktur Internal Link

Et Comment-objekt repræsenterer en kommentar efterladt af en bruger.

Forholdet mellem forældre- og underkommentarer defineres via parentId.

Strukturen for Comment-objektet er som følger:

Kommentarstruktur
Copy Copy
1
2interface Comment {
3 /** READONLY: Set to true if the spam engine determined the comment was spam. **/
4 aiDeterminedSpam?: boolean
5 /** Whether the comment is approved to show. Set to true when saving the comment, else it will be hidden. **/
6 approved?: boolean
7 /** The user's avatar. **/
8 avatarSrc?: string
9 /** Child comments. Not populated in all scenarios. Used when asTree is set to true via the API. **/
10 children: Comment[]
11 /** The commenter's raw comment. **/
12 comment: string
13 /** READONLY: The commenter's comment parsed into HTML. **/
14 commentHTML?: string
15 /** The commenter's email. Required if anonymous commenting is off. **/
16 commenterEmail?: string
17 /** The commenter's link (for example, their blog). **/
18 commenterLink?: string
19 /** The commenter's name. Always required. If not available, set to something like "Anonymous". **/
20 commenterName: string
21 /** The date the comment was left, in UTC epoch. **/
22 date: number
23 /** The "display label" for the comment - for example "Admin", "Moderator", or something like "VIP User". **/
24 displayLabel?: string
25 /** The domain the comment was posted on. **/
26 domain?: string
27 /** READONLY: The number of times the comment was flagged. **/
28 flagCount?: number
29 /** The #hashtags written in the comment that were successfully parsed. You can also manually add hashtags, for querying, but they won't display in the comment text automatically. **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: Does the comment contain images? **/
32 hasImages?: boolean
33 /** READONLY: Does the comment contain links? **/
34 hasLinks?: boolean
35 /** READONLY: The unique comment id. **/
36 id: string
37 /** Only on create! This is hashed for storage. **/
38 ip?: string
39 /** READONLY: Did the current user block the user that wrote this comment? **/
40 isBlocked?: boolean
41 /** READONLY: Is the comment by an admin? Automatically set based on userId. **/
42 isByAdmin?: boolean
43 /** READONLY: Is the comment by a moderator? Automatically set based on userId. **/
44 isByModerator?: boolean
45 /** Set to true if the comment was soft deleted (placeholder had to be left due to some other configuration). **/
46 isDeleted?: boolean
47 /** Set to true if the user's account was deleted and the comment had to be retained. **/
48 isDeletedUser?: boolean
49 /** READONLY: Is the flagged by the currently logged-in user (contextUserId)? **/
50 isFlagged?: boolean
51 /** Is the comment pinned? **/
52 isPinned?: boolean
53 /** Is the comment locked for new replies (moderators still can reply)? **/
54 isLocked?: boolean
55 /** Is the comment spam? **/
56 isSpam?: boolean
57 /** READONLY: Is the comment voted down for the current user (contextUserId)? **/
58 isVotedDown?: boolean
59 /** READONLY: Is the comment voted up for the current user (contextUserId)? **/
60 isVotedUp?: boolean
61 /** The locale the comment is in. If not provided, will be derived from the language accept 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: The @mentions written in the comment that were successfully parsed. **/
64 mentions?: CommentUserMention[]
65 /** Optional metadata associated with the comment. **/
66 meta?: Record<string, string | number | boolean>
67 /** The optional list of moderation group ids associated with this comment. **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: The id of the vote object that corresponds to the vote from the current user (contextUserId) on this comment. **/
70 myVoteId?: string
71 /** Whether notifications were sent for this comment for commenters. To prevent notifications being sent on imports, set this to true. **/
72 notificationSentForParent?: boolean
73 /** Whether notifications were sent for this comment for tenant users. To prevent notifications being sent on imports, set this to true. **/
74 notificationSentForParentTenant?: boolean
75 /** The title of the page this comment was on. **/
76 pageTitle?: string
77 /** If we're replying to a comment, this is the ID that we are replying to. **/
78 parentId?: string|null
79 /** Whether the comment is marked reviewed. **/
80 reviewed: boolean
81 /** The tenant id where the comment belongs. **/
82 tenantId: string
83 /** The user that wrote the comment. Created automatically when saving a comment with a name/email. **/
84 userId?: string|null
85 /** The URL to the location that this comment is visible, like a blog post. **/
86 url: string
87 /** A "cleaned" version of the urlId you passed us. When saving, you specify this field, but when you fetch the comment back this will be "cleaned" and your original value moved to "urlIdRaw". **/
88 urlId: string
89 /** READONLY: The original urlId you passed us. **/
90 urlIdRaw?: string
91 /** Is the user and this comment verified? **/
92 verified: boolean
93 /** Number of votes up. **/
94 votesUp?: number
95 /** Number of votes down. **/
96 votesDown?: number
97 /** The "karma" of the comment (= votes up - votes down). **/
98 votes?: number
99}
100

Some of these fields are marked READONLY - these are returned by the API but cannot be set.

Comment Text Structure

Comments are written in a FastComments flavor of markdown, which is just markdown plus traditional bbcode style tags for images, like [img]path[/img].

Text is stored in two fields. The text the user entered is stored unmodified in the comment field. This is rendered and stored in the commentHTML field.

The allowed HTML tags are b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

It's recommended to render the HTML, since it is a very small subset of HTML, building a renderer is pretty straightforward. There are multiple libraries for React Native and Flutter, for instance, to help with this

You may choose to render the un-normalized value of the comment field. An example parser is here..

The example parser could also be adjusted to work with HTML, and transform the HTML tags into expected elements to render for your platform.

Tagging

When users are tagged in a comment, the information is stored in a list called mentions. Each object in that list has the following structure.

Objektet for kommentaromtaler
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** The user id. For SSO users, this will have your tenant id prefixed. **/
4 id: string
5 /** The final @mention tag text, including the @ symbol. **/
6 tag: string
7 /** The original @mention tag text, including the @ symbol. **/
8 rawTag: string
9 /** What type of user was tagged. user = FastComments.com account. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** If the user opts out of notifications, this will still be set to true. **/
12 sent: boolean
13}
14

HashTags

When hashtags are used and successfully parsed, the information is stored in a list called hashTags. Each object in that list has the following structure. Hashtags can also be manually added to the comment hashTags array for querying, if retain is set.

Objektet for kommentar-hashtags
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** The hashtag id. **/
4 id: string
5 /** The final #hashtag tag text, including the # symbol. **/
6 tag: string
7 /** If the hashtag is associated with a custom URL, this will be defined. **/
8 url?: string
9 /** If we should retain the hashtag, even if it does not exist in the comment text, when the comment is updated. Useful for tagging comments without changing comment text. **/
10 retain?: boolean
11}
12

E-mail-skabelonstruktur Internal Link

Et EmailTemplate-objekt repræsenterer konfiguration for en tilpasset e-mail-skabelon, for en tenant.

Systemet vil vælge e-mail-skabelonen, der skal bruges via:

  • Dens typeidentifikator, vi kalder denne emailTemplateId. Disse er konstanter.
  • domain. Vi vil først forsøge at finde en skabelon for domænet, som det relaterede objekt (såsom en Comment) er knyttet til, og hvis et match ikke findes, vil vi forsøge at finde en skabelon, hvor domain er null eller *.

Strukturen for EmailTemplate-objektet er som følger:

Email Template Struktur
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** READONLY **/
8 createdAt: string
9 /** READONLY **/
10 updatedAt: string
11 /** READONLY **/
12 updatedByUserId: string
13 /** The domain the template should be associated with. **/
14 domain?: string | '*' | null
15 /** The email template content in EJS syntax. **/
16 ejs: string
17 /** A map of overridden translation keys to values, for each supported locale. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** An object that represents the render context of the template. **/
20 testData: object
21}
22

Bemærkninger

  • Du kan få de gyldige emailTemplateId-værdier fra /definitions-endpointet.
  • /definitions-endpointet inkluderer også standardoversættelserne og testdata.
  • Skabeloner vil fejle ved gemning med ugyldig struktur eller testdata.

Hashtag-struktur Internal Link

Et HashTag-objekt repræsenterer et tag, der kan efterlades af en bruger. HashTags kan bruges til at linke til eksternt indhold eller til at knytte relaterede kommentarer sammen.

Strukturen for HashTag-objektet er som følger:

HashTag Struktur
Copy Copy
1
2interface HashTag {
3 /** Should start with the "#" or desired character. **/
4 tag: string
5 /** An optional URL that the hashtag can point to. Instead of filtering comments by hashtag, the UI will redirect to this upon click. **/
6 url?: string
7 /** READONLY **/
8 createdAt: string
9}
10

Bemærkninger:

  • I nogle API-endpoints vil du se, at hashtagget bruges i URL'en. Husk at URI-kode værdier. For eksempel skal # i stedet repræsenteres som %23.
  • Nogle af disse felter er markeret READONLY - disse returneres af API'et, men kan ikke sættes.

Notifikationstællingsstruktur Internal Link

Et NotificationCount-objekt repræsenterer antallet af ulæste notifikationer og metadata for en bruger.

Hvis der ikke er nogen ulæste notifikationer, vil der ikke være en NotificationCount for brugeren.

NotificationCount-objekter oprettes automatisk og kan ikke oprettes via API'et. De udløber også efter et år.

Du kan rydde en brugers antal ulæste notifikationer ved at slette deres NotificationCount.

Strukturen for NotificationCount-objektet er som følger:

NotificationCount Struktur
Copy Copy
1
2interface NotificationCount {
3 id: string // user id
4 count: number
5 createdAt: string // date string
6 expireAt: string // date string
7}
8

Notifikationsstruktur Internal Link

Et Notification-objekt repræsenterer en notifikation for en bruger.

Notification-objekter oprettes automatisk og kan ikke oprettes via API'et. De udløber også efter et år. Notifikationer kan ikke slettes. De kan dog opdateres for at sætte viewed til false, og du kan forespørge efter viewed.

En bruger kan også fravælge notifikationer for en specifik kommentar ved at sætte optedOut i notifikationen til true. Du kan tilvælge igen ved at sætte den til false.

Der er forskellige notifikationstyper - tjek relatedObjectType og type.

Måderne notifikationer oprettes på er ret fleksible og kan udløses af mange scenarier (se NotificationType).

Per dags dato indebærer eksistensen af en Notification faktisk ikke, at en e-mail sendes eller bør sendes. I stedet bruges notifikationerne til notifikationsfeedet og relaterede integrationer.

Strukturen for Notification-objektet er som følger:

Notification Struktur
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** If someone replied to you. **/
10 RepliedToMe = 0,
11 /** If someone replied anywhere in a thread (even children of children) of a thread you commented on. **/
12 RepliedTransientChild = 1,
13 /** If your comment was up-voted. **/
14 VotedMyComment = 2,
15 /** If a new comment is left on the root of a page you're subscribed to. **/
16 SubscriptionReplyRoot = 3,
17 /** If someone commented on your profile. **/
18 CommentedOnProfile = 4,
19 /** If you have a DM. **/
20 DirectMessage = 5,
21 /** TrialLimits is for tenant users only. **/
22 TrialLimits = 6,
23 /** If you were @mentioned. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** With SSO, the user id is in the format `<tenant id>:<user id>`. **/
31 userId?: string
32 /** When working with SSO, you only have to worry about `userId`. **/
33 anonUserId?: string
34 /** urlId is almost always defined. It is only optional for tenant-level notifications, which are infrequent. **/
35 urlId?: string
36 /** URL is cached for quick navigation to the source of the notification. **/
37 url?: string
38 /** Page Title is cached for quick reading of notification source. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** For example, comment id. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // date string
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName and fromUserAvatarSrc are cached here for quick displaying of the notification. They are updated when the user is updated. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Set this to true to stop getting notifications for this object. **/
53 optedOut?: boolean
54}
55

Sidestruktur Internal Link

Et Page-objekt repræsenterer den side, som mange kommentarer kan tilhøre. Dette forhold defineres af urlId.

En Page gemmer information såsom sidetitlen, kommentarantal og urlId.

Strukturen for Page-objektet er som følger:

Page Struktur
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 /** Setting this to null means all SSO users can see the page. An empty list means it is closed to all users. **/
11 accessibleByGroupIds?: string[] | null
12 /** Is this page closed for new comments? **/
13 isClosed?: boolean
14}
15

Ventende webhook-hændelse-struktur Internal Link

Et PendingWebhookEvent-objekt repræsenterer en webhook-begivenhed i kø, der afventer.

PendingWebhookEvent-objekter oprettes automatisk og kan ikke oprettes manuelt via API'et. De udløber også efter et år. De kan slettes, hvilket fjerner opgaven fra køen.

Der er forskellige begivenhedstyper - tjek eventType (OutboundSyncEventType) og type (OutboundSyncType).

Et almindeligt anvendelsestilfælde for dette API er at implementere brugerdefineret overvågning. Du vil måske kalde /count-endpointet periodisk for at polle det udestående antal for givne filtre.

Strukturen for PendingWebhookEvent-objektet er som følger:

PendingWebhookEvent Struktur
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** WordPress-specific sync task. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** The comment id associated with the event. **/
17 commentId: string
18 /** The comment object for the event at the time of the event. We started adding these in Nov 2023. **/
19 comment: Comment
20 /** An external id that may be associated with the comment. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Set before first attempt, and after every failure. **/
26 nextAttemptAt: Date
27 /** Whether this is a creation, deletion, or update event... **/
28 eventType: OutboundSyncEventType
29 /** The type of sync to perform (WordPress, call API, etc). **/
30 type: OutboundSyncType
31 /** The domain that matched the comment. We use this domain to pick the API key. **/
32 domain: string
33 /** The last error that occurred. This type is untyped and is a "dump" of whatever happened. Usually it contains an object with statusCode, body, and a headers map. **/
34 lastError: object | null
35}
36

SSO-brugerstruktur Internal Link

FastComments giver en letanvendelig SSO-løsning. Opdatering af en brugers information med den HMAC-baserede integration er så enkelt som at have brugeren indlæse siden med en opdateret payload.

Det kan dog være ønskeligt at administrere en bruger uden for det flow for at forbedre konsistensen af din applikation.

SSO User API'et giver en måde at CRUD objekter, som vi kalder SSOUsers. Disse objekter er forskellige fra almindelige Users og holdes adskilt for typesikkerhed.

Strukturen for SSOUser-objektet er som følger:

SSOUser Struktur
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 permission - SSO users with this flag are billed as SSO Admins (separate from regular SSO users)
16 isAdminAdmin?: boolean // Admin permission - SSO users with this flag are billed as SSO Admins (separate from regular SSO users)
17 isCommentModeratorAdmin?: boolean // Moderator permission - SSO users with this flag are billed as SSO Moderators (separate from regular SSO users)
18 /** If null, Access Control will not be applied to the user. If an empty list, this user will not be able to see any pages or @mention other users. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Don't let other users see this user's activity, including comments, on their profile. Default is true to provide secure profiles by default. **/
22 isProfileActivityPrivate?: boolean
23 /** Don't let other users leave comments on the user's profile, or see existing profile comments. Default false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Don't let other users send direct messages to this user. Default false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Optional configuration for user badges. **/
29 badgeConfig?: {
30 /** Array of badge IDs to assign to the user. Limited to 30 badges. Order is respected. **/
31 badgeIds: string[]
32 /** If true, replaces all existing displayed badges with the provided ones. If false, adds to existing badges. **/
33 override?: boolean
34 /** If true, updates badge display properties from tenant configuration. **/
35 update?: boolean
36 }
37}
38

Fakturering for SSO-brugere

SSO-brugere faktureres forskelligt baseret på deres tilladelsesflags:

  • Almindelige SSO-brugere: Brugere uden admin- eller moderatortilladelser faktureres som almindelige SSO-brugere
  • SSO-administratorer: Brugere med isAccountOwner eller isAdminAdmin flags faktureres separat som SSO-administratorer (samme sats som almindelige tenant-administratorer)
  • SSO-moderatorer: Brugere med isCommentModeratorAdmin flag faktureres separat som SSO-moderatorer (samme sats som almindelige moderatorer)

Vigtigt: For at forhindre dobbeltfakturering deduplikerer systemet automatisk SSO-brugere mod almindelige tenant-brugere og moderatorer efter e-mailadresse. Hvis en SSO-bruger har samme e-mail som en almindelig tenant-bruger eller moderator, vil de ikke blive faktureret to gange.

Adgangskontrol

Brugere kan opdeles i grupper. Dette er hvad groupIds-feltet er til, og det er valgfrit.

@Omtaler

Som standard vil @mentions bruge username til at søge efter andre sso-brugere, når @-tegnet skrives. Hvis displayName bruges, vil resultater, der matcher username, blive ignoreret, når der er et match for displayName, og @mention søgeresultaterne vil bruge displayName.

Abonnementer

Med FastComments kan brugere abonnere på en side ved at klikke på klokkeikonet i kommentar-widget'en og klikke Abonner.

Med en almindelig bruger sender vi dem notifikations-e-mails baseret på deres notifikationsindstillinger.

Med SSO-brugere opdeler vi dette af hensyn til bagudkompatibilitet. Brugere vil kun få sendt disse yderligere abonnementsnotifikations- e-mails, hvis du sætter optedInSubscriptionNotifications til true.

Badges

Du kan tildele badges til SSO-brugere ved hjælp af badgeConfig-egenskaben. Badges er visuelle indikatorer, der vises ved siden af en brugers navn i kommentarer.

  • badgeIds - Et array af badge-ID'er til at tildele brugeren. Disse skal være gyldige badge-ID'er oprettet i din FastComments-konto. Begrænset til 30 badges.
  • override - Hvis sand, vil alle eksisterende badges, der vises på kommentarer, blive erstattet med de angivne. Hvis falsk eller udeladt, vil de angivne badges blive tilføjet til eventuelle eksisterende badges.
  • update - Hvis sand, vil badge-visningsegenskaber blive opdateret fra tenant-konfigurationen, når brugeren logger ind.

Abonnementsstruktur Internal Link

Et Subscription-objekt repræsenterer et abonnement for en bruger.

Subscription-objekter oprettes, når en bruger klikker på notifikationsklokken i kommentar-widget'en og klikker "Abonner på denne side".

Abonnementer kan også oprettes via API'et.

At have et Subscription-objekt medfører, at Notification-objekter genereres, og e-mails sendes, når nye kommentarer efterlades på roden af den tilknyttede side, som Subscription er for. Afsendelse af e-mails afhænger af brugertypen. For almindelige brugere afhænger dette af optedInNotifications. For SSO-brugere afhænger dette af optedInSubscriptionNotifications. Bemærk at nogle applikationer måske ikke har konceptet om en web-tilgængelig side, i hvilket tilfælde du blot skal sætte urlId til id'et for det element, du abonnerer på (samme værdi for urlId som du ville sende til kommentar-widget'en).

Strukturen for Subscription-objektet er som følger:

Subscription Struktur
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** With SSO, the user id is in the format `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // date string
12}
13

Lejers daglige forbrug - struktur Internal Link

Et TenantDailyUsage-objekt repræsenterer forbruget for en tenant på en given dag. Hvis der ikke var nogen aktivitet for en given tenant på en given dag, vil den dag ikke have et TenantDailyUsage-objekt.

TenantDailyUsage-objektet er ikke realtid og kan være minutter efter det faktiske forbrug.

Strukturen for TenantDailyUsage-objektet er som følger:

TenantDailyUsage Struktur
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 /** Ignored for billing. **/
19 ignored: boolean
20}
21

Lejerstruktur Internal Link

Tenant definerer en FastComments.com-kunde. De kan oprettes via API'et af tenants med white labeling adgang. White labeled tenants kan ikke oprette andre white labeled tenants (kun ét niveau af indlejring er tilladt).

Strukturen for Tenant-objektet er som følger:

Tenant Struktur
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** This can also be handled via the DomainConfig API. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // you probably want Unknown
14 logoSrc?: string, // raw image path
15 logoSrc100px?: string, // resized for thumbnails
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 due to "legacy" reasons
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 - Is calculated based on packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - Is calculated based on packageId. **/
69 hasAuditing?: boolean
70 /** You can store a key value pair with the tenant which you can use to query. Keys cannot contain "." or "$", or be longer than 100 chars. Values may not be longer than 2k chars. **/
71 meta?: Record<string, string | null>
72}
73

Brugerstruktur Internal Link

User er et objekt, der repræsenterer en mest-almindelig-fællesnævner for alle brugere.

Husk at hos FastComments har vi en masse forskellige anvendelsestilfælde for brugere:

  • Sikker SSO
  • Simpel SSO
  • Tenant-brugere (For eksempel: Administratorer)
  • Kommentatorer

Dette API er til Kommentatorer og brugere oprettet via Simpel SSO. Grundlæggende kan enhver bruger oprettet gennem din side tilgås via dette API. Tenant-brugere kan også hentes på denne måde, men du får mere information ved at interagere med /tenant-users/ API'et.

For Sikker SSO brug venligst /sso-users/ API'et.

Du kan ikke opdatere disse typer brugere. De oprettede deres konto gennem din side, så vi giver nogle grundlæggende skrivebeskyttet adgang, men du kan ikke foretage ændringer. Hvis du vil have denne type flow - skal du opsætte Sikker SSO.

Strukturen for User-objektet er som følger:

User Struktur
Copy Copy
1
2export interface User {
3 /** This is also the id used as userId on comment objects. **/
4 id: string
5 username: string
6 /** A link to the commenter's blog, for example. **/
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

Stemmestruktur Internal Link

Et Vote-objekt repræsenterer en stemme afgivet af en bruger.

Forholdet mellem kommentarer og stemme defineres via commentId.

Strukturen for Vote-objektet er som følger:

Vote Struktur
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

Spørgsmålskonfigurationsstruktur Internal Link

FastComments giver en måde at konstruere spørgsmål og aggregere deres resultater. Et eksempel på et spørgsmål (herefter kaldet QuestionConfig) kunne være en stjernebedømmelse, en skyder eller et NPS-spørgsmål (bestemt via type).

Spørgsmålsdata kan aggregeres individuelt, sammen, over tid, samlet, efter side og så videre.

Frameworket har alle de nødvendige funktioner til at bygge klientside-widgets (med din server foran dette API), admin-dashboards og rapporteringsværktøjer.

Først skal vi definere en QuestionConfig. Strukturen er som følger:

QuestionConfig Struktur
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 /** READONLY - incremented for each new response. **/
13 usedCount: number
14 /** A date string for when the configuration was last used (result left). **/
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

Spørgsmålresultatstruktur Internal Link

For at gemme resultater for spørgsmål opretter du et QuestionResult. Du kan derefter aggregere spørgsmålsresultater og også knytte dem til kommentarer til rapporteringsformål.

QuestionResult Struktur
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

Brugerbadge-struktur Internal Link

UserBadge er et objekt, der repræsenterer et badge tildelt til en bruger i FastComments-systemet.

Badges kan tildeles brugere automatisk baseret på deres aktivitet (såsom kommentarantal, svartid, veteranstatus) eller manuelt af side-administratorer.

Strukturen for UserBadge-objektet er som følger:

UserBadge Struktur
Copy Copy
1
2export interface UserBadge {
3 /** Unique identifier for this user badge assignment */
4 id: string
5 /** ID of the user this badge is assigned to */
6 userId: string
7 /** ID of the badge definition from the tenant's badge catalog */
8 badgeId: string
9 /** ID of the tenant that created/assigned this badge */
10 fromTenantId: string
11 /** When this badge was created (milliseconds since epoch) */
12 createdAt?: number
13 /** When this badge was received by the user (milliseconds since epoch) */
14 receivedAt?: number
15 /**
16 * The badge type:
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 /** For threshold-based badges, the threshold value */
25 threshold?: number
26 /** The name/label of the badge */
27 name?: string
28 /** Detailed description of the badge */
29 description?: string
30 /** The text shown on the badge */
31 displayLabel?: string
32 /** URL to an image shown on the badge */
33 displaySrc?: string
34 /** Background color for the badge (hex code) */
35 backgroundColor?: string
36 /** Border color for the badge (hex code) */
37 borderColor?: string
38 /** Text color for the badge (hex code) */
39 textColor?: string
40 /** Additional CSS class for styling */
41 cssClass?: string
42 /** For veteran badges, the time threshold in milliseconds */
43 veteranUserThresholdMillis?: number
44 /** Whether this badge is displayed on the user's comments */
45 displayedOnComments: boolean
46 /** The display order of the badge */
47 order?: number
48}
49

Brugerbadge-fremgangsstruktur Internal Link

UserBadgeProgress er et objekt, der repræsenterer en brugers fremskridt mod at optjene forskellige badges i FastComments-systemet.

Denne sporing hjælper med at bestemme, hvornår brugere skal modtage automatiske badges baseret på deres aktivitet og deltagelse i dit fællesskab.

Strukturen for UserBadgeProgress-objektet er som følger:

UserBadgeProgress Struktur
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Unique identifier for this progress record */
4 id: string
5 /** ID of the tenant this progress record belongs to */
6 tenantId: string
7 /** ID of the user this progress record tracks */
8 userId: string
9 /** ID of the user's first comment in the system */
10 firstCommentId?: string
11 /** Date of the user's first comment (milliseconds since epoch) */
12 firstCommentDate?: number
13 /** Automatically calculated trust factor based on user activity */
14 autoTrustFactor?: number
15 /** Manually set trust factor by administrators */
16 manualTrustFactor?: number
17 /** Detailed progress object with various metrics, keys match BadgeType enum */
18 progress: {
19 /** 0: CommentCount - Count of comments the user has made */
20 '0'?: number
21 /** 1: CommentUpVotes - Count of upvotes the user has received */
22 '1'?: number
23 /** 2: CommentReplies - Count of replies the user has made */
24 '2'?: number
25 /** 3: CommentsPinned - Count of pinned comments the user has */
26 '3'?: number
27 /** 4: Veteran - User's account age */
28 '4'?: number
29 /** 5: NightOwl - Times user has posted during nighttime hours */
30 '5'?: number
31 /** 6: FastReplyTime - Average reply time in milliseconds */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - For moderator badges, comments deleted count */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - For moderator badges, comments approved count */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - For moderator badges, comments unapproved count */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - For moderator badges, comments reviewed count */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - For moderator badges, comments marked as spam count */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - For moderator badges, comments marked as not spam count */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - For each page, count of replies */
46 '13'?: Record<string, number>
47 }
48}
49

Afslutningsvis

Vi håber, at du har fundet vores API-dokumentation grundig og nem at forstå. Hvis du finder nogen mangler, så lad os det vide nedenfor.