FastComments.com

Το FastComments API

Το FastComments παρέχει ένα API για αλληλεπίδραση με πολλούς πόρους. Δημιουργήστε ενσωματώσεις με την πλατφόρμα μας ή ακόμη και τους δικούς σας clients!

Σε αυτήν την τεκμηρίωση, θα βρείτε όλους τους πόρους που υποστηρίζονται από το API τεκμηριωμένους με τους τύπους αιτήματος και απόκρισης.

Για πελάτες Enterprise, όλη η πρόσβαση στο API καταγράφεται στο Αρχείο Ελέγχου.

Παραγόμενα SDKs

Το FastComments πλέον δημιουργεί μια προδιαγραφή API από τον κώδικά μας (αυτό δεν είναι ακόμα πλήρες, αλλά περιλαμβάνει πολλά API).

Επίσης τώρα έχουμε SDKs για δημοφιλείς γλώσσες:

Αυθεντικοποίηση

Το API αυθεντικοποιείται περνώντας το api key είτε ως header X-API-KEY είτε ως query parameter API_KEY. Θα χρειαστείτε επίσης το tenantId για να πραγματοποιήσετε κλήσεις στο API. Αυτό μπορεί να ληφθεί από την ίδια σελίδα με το api key.

Σημείωση Ασφαλείας

Αυτές οι διαδρομές προορίζονται να κληθούν από έναν server. ΜΗΝ τις καλείτε από ένα πρόγραμμα περιήγησης. Το να το κάνετε αυτό θα εκθέσει το API key σας — αυτό θα παρέχει πλήρη πρόσβαση στον λογαριασμό σας σε οποιονδήποτε μπορεί να δει τον πηγαίο κώδικα μίας σελίδας!

Authentication Option One - Headers

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

Authentication Option Two - Query Parameters

  • Query Param: API_KEY
  • Query Param: tenantId

Ανάγνωση των δικών σας εγγραφών

Το FastComments παρέχει Active-Active διαθεσιμότητα. Τα αιτήματα από το datacenter σας δρομολογούνται στο κοντινότερο σημείο παρουσίας σε σχέση με εσάς. Αυτό γίνεται αυτόματα, και κανονικά μπορείτε να παρατηρήσετε συμπεριφορά τύπου "read-your-write". Αν θέλετε να βεβαιωθείτε ότι θα διαβάσετε τις δικές σας εγγραφές, μπορείτε να καθορίσετε τις αιτήσεις σας να χρησιμοποιούν συγκεκριμένη περιοχή ως host του API (παρόλα αυτά αυτό συνήθως δεν απαιτείται για τις περισσότερες ενσωματώσεις):

  • 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

Σημειώστε ότι αν το κάνετε αυτό ίσως θέλετε να ορίσετε μια εναλλακτική επιλογή (fallback), καθώς στο παρελθόν έχουμε αποσύρει κόμβους εισόδου και έχουμε χρησιμοποιήσει νέα ονόματα για την αλλαγή.

Δομή Αρχείου Ελέγχου Internal Link

Ένα AuditLog είναι ένα αντικείμενο που αντιπροσωπεύει ένα ελεγμένο συμβάν για tenants που έχουν πρόσβαση σε αυτή τη δυνατότητα.

Η δομή του αντικειμένου AuditLog είναι η ακόλουθη:

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

Το audit log είναι αμετάβλητο. Επίσης δεν μπορεί να γραφτεί χειροκίνητα. Μόνο το FastComments.com μπορεί να αποφασίσει πότε θα γράψει στο audit log. Ωστόσο, μπορείτε να το διαβάσετε μέσω αυτού του API.

Τα συμβάντα στο audit log λήγουν μετά από δύο χρόνια.

Δομή Σχολίου Internal Link

A Comment object represents a comment left by a user.

The relationship between parent and child comments is defined via parentId.

The structure for the Comment object is as follows:

Δομή του Comment
Copy Copy
1
2interface Comment {
3 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Ορισμένο σε true εάν η μηχανή spam προσδιόρισε ότι το σχόλιο ήταν spam. **/
4 aiDeterminedSpam?: boolean
5 /** Εάν το σχόλιο είναι εγκεκριμένο για εμφάνιση. Ορίζεται σε true κατά την αποθήκευση του σχολίου, διαφορετικά θα είναι κρυφό. **/
6 approved?: boolean
7 /** Το avatar του χρήστη. **/
8 avatarSrc?: string
9 /** Παιδικά σχόλια. Δεν συμπληρώνεται σε όλες τις περιπτώσεις. Χρησιμοποιείται όταν asTree οριστεί σε true μέσω του API. **/
10 children: Comment[]
11 /** Το ακατέργαστο σχόλιο του σχολιαστή. **/
12 comment: string
13 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο του σχολιαστή αναλυμένο σε HTML. **/
14 commentHTML?: string
15 /** Το email του σχολιαστή. Απαιτείται εάν τα ανώνυμα σχόλια είναι απενεργοποιημένα. **/
16 commenterEmail?: string
17 /** Ο σύνδεσμος του σχολιαστή (π.χ. το blog του). **/
18 commenterLink?: string
19 /** Το όνομα του σχολιαστή. Πάντα απαιτείται. Αν δεν υπάρχει, ορίστε κάτι σαν "Ανώνυμος". **/
20 commenterName: string
21 /** Η ημερομηνία που το σχόλιο καταχώρηθηκε, σε UTC epoch. **/
22 date: number
23 /** Η "ετικέτα εμφάνισης" για το σχόλιο - για παράδειγμα "Admin", "Moderator", ή κάτι σαν "VIP User". **/
24 displayLabel?: string
25 /** Το domain όπου δημοσιεύτηκε το σχόλιο. **/
26 domain?: string
27 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Ο αριθμός φορών που το σχόλιο επισημάνθηκε. **/
28 flagCount?: number
29 /** Τα #hashtags που γράφτηκαν στο σχόλιο και αναλύθηκαν επιτυχώς. Μπορείτε επίσης να προσθέσετε χειροκίνητα hashtags, για ερωτήματα, αλλά δεν θα εμφανιστούν αυτόματα στο κείμενο του σχολίου. **/
30 hashTags?: CommentHashTag[]
31 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο περιέχει εικόνες; **/
32 hasImages?: boolean
33 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο περιέχει συνδέσμους; **/
34 hasLinks?: boolean
35 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το μοναδικό id του σχολίου. **/
36 id: string
37 /** Μόνο κατά τη δημιουργία! Αυτό κατακερματίζεται (hashed) για αποθήκευση. **/
38 ip?: string
39 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Ο τρέχων χρήστης απέκλεισε το χρήστη που έγραψε αυτό το σχόλιο; **/
40 isBlocked?: boolean
41 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο είναι από admin; Ορίζεται αυτόματα με βάση το userId. **/
42 isByAdmin?: boolean
43 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο είναι από moderator; Ορίζεται αυτόματα με βάση το userId. **/
44 isByModerator?: boolean
45 /** Ορίζεται σε true αν το σχόλιο διαγράφηκε μαλακά (soft deleted) (έπρεπε να μείνει placeholder λόγω κάποιας άλλης ρύθμισης). **/
46 isDeleted?: boolean
47 /** Ορίζεται σε true αν ο λογαριασμός του χρήστη διαγράφηκε και το σχόλιο έπρεπε να διατηρηθεί. **/
48 isDeletedUser?: boolean
49 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Έχει γίνει flag από τον τρέχοντα συνδεδεμένο χρήστη (contextUserId); **/
50 isFlagged?: boolean
51 /** Είναι το σχόλιο καρφιτσωμένο (pinned); **/
52 isPinned?: boolean
53 /** Είναι το σχόλιο κλειδωμένο; Όταν είναι true, κανείς (συμπεριλαμβανομένων των moderators) δεν μπορεί να απαντήσει, να επεξεργαστεί ή να διαγράψει μέχρι να ξεκλειδωθεί. **/
54 isLocked?: boolean
55 /** Είναι το σχόλιο spam; **/
56 isSpam?: boolean
57 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο έχει ψηφιστεί αρνητικά από τον τρέχοντα χρήστη (contextUserId); **/
58 isVotedDown?: boolean
59 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το σχόλιο έχει ψηφιστεί θετικά από τον τρέχοντα χρήστη (contextUserId); **/
60 isVotedUp?: boolean
61 /** Η τοπική ρύθμιση (locale) του σχολίου. Αν δεν παρέχεται, θα προέλθει από το 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 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Τα @mentions που γράφτηκαν στο σχόλιο και αναλύθηκαν επιτυχώς. **/
64 mentions?: CommentUserMention[]
65 /** Προαιρετικά metadata που σχετίζονται με το σχόλιο. **/
66 meta?: Record<string, string | number | boolean>
67 /** Η προαιρετική λίστα με τα ids ομάδων moderation που σχετίζονται με αυτό το σχόλιο. **/
68 moderationGroupIds?: string[]|null
69 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το id του αντικειμένου ψήφου που αντιστοιχεί στην ψήφο του τρέχοντος χρήστη (contextUserId) για αυτό το σχόλιο. **/
70 myVoteId?: string
71 /** Εάν εστάλησαν ειδοποιήσεις για αυτό το σχόλιο προς τους σχολιαστές. Για να αποτρέψετε την αποστολή ειδοποιήσεων κατά τις εισαγωγές, ορίστε αυτό σε true. **/
72 notificationSentForParent?: boolean
73 /** Εάν εστάλησαν ειδοποιήσεις για αυτό το σχόλιο προς χρήστες του tenant. Για να αποτρέψετε την αποστολή ειδοποιήσεων κατά τις εισαγωγές, ορίστε αυτό σε true. **/
74 notificationSentForParentTenant?: boolean
75 /** Ο τίτλος της σελίδας στην οποία ήταν αυτό το σχόλιο. **/
76 pageTitle?: string
77 /** Εάν απαντάμε σε σχόλιο, αυτό είναι το ID στο οποίο απαντάμε. **/
78 parentId?: string|null
79 /** Εάν το σχόλιο έχει σημειωθεί ως ελεγμένο (reviewed). **/
80 reviewed: boolean
81 /** Το tenant id στο οποίο ανήκει το σχόλιο. **/
82 tenantId: string
83 /** Ο χρήστης που έγραψε το σχόλιο. Δημιουργείται αυτόματα όταν αποθηκεύεται ένα σχόλιο με όνομα/email. **/
84 userId?: string|null
85 /** Το URL στη θέση όπου είναι ορατό αυτό το σχόλιο, όπως μια ανάρτηση blog. **/
86 url: string
87 /** Μια "καθαρισμένη" έκδοση του urlId που μας δώσατε. Κατά την αποθήκευση, προσδιορίζετε αυτό το πεδίο, αλλά όταν ανακτάτε το σχόλιο πίσω αυτό θα "καθαριστεί" και η αρχική σας τιμή θα μετακινηθεί σε "urlIdRaw". **/
88 urlId: string
89 /** ΜΟΝΟ ΑΝΑΓΝΩΣΗ: Το αρχικό urlId που μας δώσατε. **/
90 urlIdRaw?: string
91 /** Είναι ο χρήστης και αυτό το σχόλιο επαληθευμένα; **/
92 verified: boolean
93 /** Αριθμός θετικών ψήφων. **/
94 votesUp?: number
95 /** Αριθμός αρνητικών ψήφων. **/
96 votesDown?: number
97 /** Η "karma" του σχολίου (= ψήφοι υπέρ - ψήφοι κατά). **/
98 votes?: number
99}
100

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

Δομή Κειμένου Σχολίου

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.

Επισήμανση

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.

Το αντικείμενο Comment Mentions
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** Το id του χρήστη. Για χρήστες SSO, αυτό θα έχει ως πρόθεμα το tenant id σας. **/
4 id: string
5 /** Το τελικό @mention tag text, συμπεριλαμβανομένου του συμβόλου @. **/
6 tag: string
7 /** Το αρχικό @mention tag text, συμπεριλαμβανομένου του συμβόλου @. **/
8 rawTag: string
9 /** Τι τύπος χρήστη επισημάνθηκε. user = FastComments.com account. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Ακόμα και αν ο χρήστης εξαιρεθεί από τις ειδοποιήσεις, αυτό θα εξακολουθεί να ορίζεται σε 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.

Το αντικείμενο Comment HashTag
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** Το id του hashtag. **/
4 id: string
5 /** Το τελικό #hashtag tag text, συμπεριλαμβανομένου του συμβόλου #. **/
6 tag: string
7 /** Εάν το hashtag συνδέεται με ένα προσαρμοσμένο URL, αυτό θα οριστεί. **/
8 url?: string
9 /** Εάν πρέπει να διατηρήσουμε το hashtag, ακόμη κι αν δεν υπάρχει στο κείμενο του σχολίου, όταν το σχόλιο ενημερώνεται. Χρήσιμο για επισημάνσεις σχολίων χωρίς να αλλάζει το κείμενο του σχολίου. **/
10 retain?: boolean
11}
12

Δομή Προτύπου Email Internal Link

Ένα αντικείμενο EmailTemplate αντιπροσωπεύει τη διαμόρφωση για ένα προσαρμοσμένο πρότυπο email, για έναν ενοικιαστή.

Το σύστημα θα επιλέξει το πρότυπο email προς χρήση μέσω:

  • Του αναγνωριστικού τύπου, το ονομάζουμε emailTemplateId. Αυτές είναι σταθερές.
  • Το domain. Πρώτα θα προσπαθήσουμε να βρούμε ένα πρότυπο για το domain στο οποίο σχετίζεται το αντικείμενο (όπως ένα Comment), και αν δεν βρεθεί αντιστοιχία τότε θα προσπαθήσουμε να βρούμε ένα πρότυπο όπου το domain είναι null ή *.

Η δομή για το αντικείμενο EmailTemplate είναι η ακόλουθη:

Δομή Προτύπου Email
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

Σημειώσεις

  • Μπορείτε να λάβετε τις έγκυρες τιμές emailTemplateId από το endpoint /definitions.
  • Το endpoint /definitions περιλαμβάνει επίσης τις προεπιλεγμένες μεταφράσεις και δεδομένα δοκιμής.
  • Τα πρότυπα θα αποτύχουν να αποθηκευτούν με μη έγκυρη δομή ή δεδομένα δοκιμής.

Δομή Ετικέτας Internal Link

Ένα αντικείμενο HashTag αντιπροσωπεύει ένα tag που μπορεί να αφεθεί από έναν χρήστη. Τα HashTags μπορούν να χρησιμοποιηθούν για σύνδεση με εξωτερικό περιεχόμενο ή για σύνδεση σχετικών σχολίων μεταξύ τους.

Η δομή για το αντικείμενο HashTag είναι η ακόλουθη:

Δομή HashTag
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

Σημειώσεις:

  • Σε ορισμένα API endpoints θα δείτε ότι το hashtag χρησιμοποιείται στο URL. Θυμηθείτε να κωδικοποιήσετε τις τιμές URI. Για παράδειγμα, το # θα πρέπει αντ' αυτού να αναπαρίσταται ως %23.
  • Ορισμένα από αυτά τα πεδία είναι επισημασμένα ως READONLY - αυτά επιστρέφονται από το API αλλά δεν μπορούν να οριστούν.

Δομή Πλήθους Ειδοποιήσεων Internal Link

Ένα αντικείμενο NotificationCount αντιπροσωπεύει τον αριθμό μη αναγνωσμένων ειδοποιήσεων και τα μεταδεδομένα για έναν χρήστη.

Αν δεν υπάρχουν μη αναγνωσμένες ειδοποιήσεις, δεν θα υπάρχει NotificationCount για τον χρήστη.

Τα αντικείμενα NotificationCount δημιουργούνται αυτόματα και δεν μπορούν να δημιουργηθούν μέσω του API. Επίσης λήγουν μετά από ένα έτος.

Μπορείτε να καθαρίσετε τον αριθμό μη αναγνωσμένων ειδοποιήσεων ενός χρήστη διαγράφοντας το NotificationCount του.

Η δομή για το αντικείμενο NotificationCount είναι η ακόλουθη:

Δομή NotificationCount
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

Δομή Ειδοποίησης Internal Link

Ένα αντικείμενο Notification αντιπροσωπεύει μια ειδοποίηση για έναν χρήστη.

Τα αντικείμενα Notification δημιουργούνται αυτόματα και δεν μπορούν να δημιουργηθούν μέσω του API. Επίσης λήγουν μετά από ένα έτος. Οι ειδοποιήσεις δεν μπορούν να διαγραφούν. Μπορούν όμως να ενημερωθούν για να ορίσουν το viewed σε false, και μπορείτε να κάνετε ερώτημα με βάση το viewed.

Ένας χρήστης μπορεί επίσης να εξαιρεθεί από τις ειδοποιήσεις για ένα συγκεκριμένο σχόλιο ορίζοντας το optedOut στην ειδοποίηση σε true. Μπορείτε να συμμετάσχετε ξανά ορίζοντάς το σε false.

Υπάρχουν διαφορετικοί τύποι ειδοποιήσεων - ελέγξτε τα relatedObjectType και type.

Οι τρόποι δημιουργίας ειδοποιήσεων είναι αρκετά ευέλικτοι και μπορούν να ενεργοποιηθούν από πολλά σενάρια (δείτε NotificationType).

Μέχρι σήμερα, η ύπαρξη μιας Notification δεν συνεπάγεται πραγματικά ότι αποστέλλεται ή πρέπει να αποσταλεί email. Αντίθετα, οι ειδοποιήσεις χρησιμοποιούνται για τη ροή ειδοποιήσεων και τις σχετικές ενσωματώσεις.

Η δομή για το αντικείμενο Notification είναι η ακόλουθη:

Δομή Ειδοποίησης
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

Δομή Σελίδας Internal Link

Ένα αντικείμενο Page αντιπροσωπεύει τη σελίδα στην οποία μπορούν να ανήκουν πολλά σχόλια. Αυτή η σχέση ορίζεται από το urlId.

Μια Page αποθηκεύει πληροφορίες όπως ο τίτλος σελίδας, ο αριθμός σχολίων και το urlId.

Η δομή για το αντικείμενο Page είναι η ακόλουθη:

Δομή Σελίδας
Copy Copy
1
2interface Page {
3 id: string
4 urlId: string
5 url: string
6 title?: string
7 createdAt: string
8 commentCount: number
9 rootCommentCount: number
10 /** 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

Δομή Εκκρεμούς Γεγονότος Webhook Internal Link

Ένα αντικείμενο PendingWebhookEvent αντιπροσωπεύει ένα γεγονός webhook στην ουρά που εκκρεμεί.

Τα αντικείμενα PendingWebhookEvent δημιουργούνται αυτόματα και δεν μπορούν να δημιουργηθούν χειροκίνητα μέσω του API. Επίσης λήγουν μετά από ένα έτος. Μπορούν να διαγραφούν, πράγμα που αφαιρεί την εργασία από την ουρά.

Υπάρχουν διαφορετικοί τύποι γεγονότων - ελέγξτε τα eventType (OutboundSyncEventType) και type (OutboundSyncType).

Μια συνήθης περίπτωση χρήσης για αυτό το API είναι η υλοποίηση προσαρμοσμένης παρακολούθησης. Μπορεί να θέλετε να καλείτε το endpoint /count περιοδικά για να ελέγχετε τον εκκρεμή αριθμό για δεδομένα φίλτρα.

Η δομή για το αντικείμενο PendingWebhookEvent είναι η ακόλουθη:

Δομή PendingWebhookEvent
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 Internal Link

FastComments παρέχει μια εύχρηστη λύση SSO. Η ενημέρωση των πληροφοριών ενός χρήστη με την ενσωμάτωση βασισμένη σε HMAC είναι τόσο απλή όσο το να φορτώσει ο χρήστης τη σελίδα με ένα ενημερωμένο payload.

Ωστόσο, μπορεί να είναι επιθυμητό να διαχειρίζεστε έναν χρήστη έξω από αυτή τη ροή, για να βελτιώσετε τη συνέπεια της εφαρμογής σας.

Το SSO User API παρέχει έναν τρόπο για CRUD αντικειμένων που ονομάζουμε SSOUsers. Αυτά τα αντικείμενα είναι διαφορετικά από τους κανονικούς Users και τηρούνται ξεχωριστά για ασφάλεια τύπων (type safety).

Η δομή για το αντικείμενο SSOUser είναι η εξής:

Δομή SSOUser
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // Δικαίωμα διαχειριστή - οι SSO χρήστες με αυτή τη σημαία χρεώνονται ως SSO Διαχειριστές (διαφορετικά από τους κανονικούς SSO χρήστες)
16 isAdminAdmin?: boolean // Δικαίωμα διαχειριστή - οι SSO χρήστες με αυτή τη σημαία χρεώνονται ως SSO Διαχειριστές (διαφορετικά από τους κανονικούς SSO χρήστες)
17 isCommentModeratorAdmin?: boolean // Δικαίωμα συντονιστή - οι SSO χρήστες με αυτή τη σημαία χρεώνονται ως SSO Συντονιστές (διαφορετικά από τους κανονικούς SSO χρήστες)
18 /** Αν είναι null, ο Έλεγχος Πρόσβασης δεν θα εφαρμοστεί στον χρήστη. Αν είναι κενή λίστα, αυτός ο χρήστης δεν θα μπορεί να δει καμία σελίδα ή να αναφέρει (@mention) άλλους χρήστες. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Μην επιτρέπεις σε άλλους χρήστες να βλέπουν τη δραστηριότητα αυτού του χρήστη, συμπεριλαμβανομένων των σχολίων, στο προφίλ του. Η προεπιλογή είναι true για να παρέχονται ασφαλή προφίλ από προεπιλογή. **/
22 isProfileActivityPrivate?: boolean
23 /** Μην επιτρέπεις σε άλλους χρήστες να αφήνουν σχόλια στο προφίλ του χρήστη, ούτε να βλέπουν υπάρχοντα σχόλια προφίλ. Η προεπιλογή false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Μην επιτρέπεις σε άλλους χρήστες να στέλνουν άμεσα μηνύματα σε αυτόν τον χρήστη. Η προεπιλογή false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Προαιρετική ρύθμιση για τα σήματα χρήστη. **/
29 badgeConfig?: {
30 /** Πίνακας με IDs σημάτων που θα ανατεθούν στον χρήστη. Περιορίζεται σε 30 σήματα. Η σειρά τηρείται. Αυτά είναι παγκόσμια σήματα ορατά σε όλες τις σελίδες. **/
31 badgeIds: string[]
32 /** Πίνακας με IDs σημάτων περιορισμένος στην τρέχουσα σελίδα (urlId). Αυτά τα σήματα εμφανίζονται μόνο στη σελίδα όπου ανατέθηκαν. **/
33 pageBadgeIds?: string[]
34 /** Αν true, αντικαθιστά όλα τα υπάρχοντα εμφανιζόμενα σήματα με τα παρεχόμενα. Τα παγκόσμια και σελίδας-περιορισμένα σήματα αντικαθίστανται ανεξάρτητα το ένα από το άλλο. Αν false, προσθέτει στα υπάρχοντα σήματα. **/
35 override?: boolean
36 /** Αν true, ενημερώνει τις ιδιότητες εμφάνισης των σημάτων από τη ρύθμιση του tenant. **/
37 update?: boolean
38 }
39}
40

Billing for SSO Users

Οι SSO χρήστες χρεώνονται διαφορετικά με βάση τις σημαίες δικαιωμάτων τους:

  • Regular SSO Users: Χρήστες χωρίς δικαιώματα διαχειριστή ή συντονιστή χρεώνονται ως κανονικοί SSO χρήστες
  • SSO Admins: Χρήστες με τις σημαίες isAccountOwner ή isAdminAdmin χρεώνονται ξεχωριστά ως SSO Admins (ίδιο ποσοστό με τους κανονικούς tenant admins)
  • SSO Moderators: Χρήστες με τη σημαία isCommentModeratorAdmin χρεώνονται ξεχωριστά ως SSO Moderators (ίδιο ποσοστό με τους κανονικούς moderators)

Σημαντικό: Για να αποφευχθεί η διπλή χρέωση, το σύστημα αφαιρεί αυτόματα τα διπλότυπα SSO χρηστών συγκρινόμενα με τους κανονικούς tenant users και moderators βάσει διεύθυνσης email. Αν ένας SSO χρήστης έχει την ίδια διεύθυνση email με έναν κανονικό tenant χρήστη ή moderator, δεν θα χρεωθεί δύο φορές.

Access Control

Οι χρήστες μπορούν να χωριστούν σε ομάδες. Γι' αυτό υπάρχει το πεδίο groupIds, και είναι προαιρετικό.

@Mentions

Από προεπιλογή τα @mentions θα χρησιμοποιούν το username για να αναζητήσουν άλλους sso χρήστες όταν πληκτρολογείται ο χαρακτήρας @. Αν χρησιμοποιηθεί το displayName, τότε τα αποτελέσματα που ταιριάζουν με το username θα αγνοηθούν όταν υπάρχει αντιστοιχία για το displayName, και τα αποτελέσματα αναζήτησης @mention θα χρησιμοποιούν το displayName.

Subscriptions

Με το FastComments, οι χρήστες μπορούν να εγγραφούν σε μια σελίδα κάνοντας κλικ στο εικονίδιο του κουδουνιού στο widget σχολίων και επιλέγοντας Subscribe.

Με έναν κανονικό χρήστη, του στέλνουμε email ειδοποιήσεων βάσει των ρυθμίσεων ειδοποιήσεών του.

Με τους SSO Users, το χωρίζουμε αυτό για συμβατότητα προς τα πίσω. Οι χρήστες θα λάβουν αυτά τα επιπλέον email ειδοποιήσεων συνδρομής μόνο αν ορίσετε το optedInSubscriptionNotifications σε true.

Badges

Μπορείτε να εκχωρήσετε σήματα σε SSO χρήστες χρησιμοποιώντας την ιδιότητα badgeConfig. Τα σήματα είναι οπτικοί δείκτες που εμφανίζονται δίπλα στο όνομα του χρήστη στα σχόλια.

  • badgeIds - Ένας πίνακας με IDs σημάτων για ανάθεση στον χρήστη. Αυτά είναι παγκόσμια σήματα ορατά σε όλες τις σελίδες. Πρέπει να είναι έγκυρα IDs σημάτων που δημιουργήθηκαν στον λογαριασμό σας στο FastComments. Περιορίζεται σε 30 σήματα.
  • pageBadgeIds - Ένας προαιρετικός πίνακας με IDs σημάτων περιορισμένος στην τρέχουσα σελίδα (urlId). Αυτά τα σήματα εμφανίζονται μόνο στη σελίδα όπου ανατέθηκαν. Διαφορετικές σελίδες μπορούν να έχουν διαφορετικά σελίδας-περιορισμένα σήματα για τον ίδιο χρήστη.
  • override - Αν true, όλα τα υπάρχοντα εμφανιζόμενα σήματα θα αντικατασταθούν με τα παρεχόμενα. Τα παγκόσμια και σελίδας-περιορισμένα σήματα αντικαθίστανται ανεξάρτητα — η αντικατάσταση των παγκόσμιων σημάτων δεν επηρεάζει τα σελίδας-περιορισμένα, και το αντίστροφο. Αν false ή παραλειφθεί, τα παρεχόμενα σήματα θα προστεθούν σε οποιαδήποτε υπάρχοντα σήματα.
  • update - Αν true, οι ιδιότητες εμφάνισης των σημάτων θα ενημερώνονται από τη ρύθμιση του tenant κάθε φορά που ο χρήστης συνδέεται.

Δομή Συνδρομής Internal Link

Ένα αντικείμενο Subscription αντιπροσωπεύει μια συνδρομή για έναν χρήστη.

Τα αντικείμενα Subscription δημιουργούνται όταν ένας χρήστης κάνει κλικ στο καμπανάκι ειδοποίησης στο widget σχολίων και κάνει κλικ στο "Εγγραφή σε αυτή τη σελίδα".

Οι συνδρομές μπορούν επίσης να δημιουργηθούν μέσω του API.

Η ύπαρξη ενός αντικειμένου Subscription προκαλεί τη δημιουργία αντικειμένων Notification, και την αποστολή emails, όταν νέα σχόλια αφήνονται στη ρίζα της σχετικής σελίδας για την οποία είναι η Subscription. Η αποστολή emails εξαρτάται από τον τύπο του χρήστη. Για κανονικούς χρήστες αυτό εξαρτάται από το optedInNotifications. Για Χρήστες SSO αυτό εξαρτάται από το optedInSubscriptionNotifications. Σημειώστε ότι ορισμένες εφαρμογές μπορεί να μην έχουν την έννοια μιας σελίδας προσβάσιμης από το web, οπότε απλά ορίστε το urlId στο id του στοιχείου στο οποίο εγγράφεστε (ίδια τιμή για το urlId που θα περνούσατε στο widget σχολίων).

Η δομή για το αντικείμενο Subscription είναι η ακόλουθη:

Δομή Συνδρομής
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

Δομή Καθημερινής Χρήσης Ενοικιαστή Internal Link

Ένα αντικείμενο TenantDailyUsage αντιπροσωπεύει τη χρήση για έναν ενοικιαστή σε μια δεδομένη ημέρα. Αν δεν υπήρξε δραστηριότητα για έναν δεδομένο ενοικιαστή σε μια δεδομένη ημέρα, αυτή η ημέρα δεν θα έχει αντικείμενο TenantDailyUsage.

Το αντικείμενο TenantDailyUsage δεν είναι σε πραγματικό χρόνο και μπορεί να υστερεί κατά λεπτά από την πραγματική χρήση.

Η δομή για το αντικείμενο TenantDailyUsage είναι η ακόλουθη:

Δομή TenantDailyUsage
Copy Copy
1
2export interface TenantDailyUsage {
3 yearNumber: number
4 monthNumber: number
5 dayNumber: number
6 commentFetchCount?: number
7 commentCreateCount?: number
8 conversationCreateCount?: number
9 voteCount?: number
10 accountCreatedCount?: number
11 userMentionSearch?: number
12 hashTagSearch?: number
13 gifSearchTrending?: number
14 gifSearch?: number
15 apiCreditsUsed?: number
16 createdAt: string
17 billed: boolean
18 /** Ignored for billing. **/
19 ignored: boolean
20}
21

Δομή Ενοικιαστή Internal Link

Ο Tenant ορίζει έναν πελάτη του FastComments.com. Μπορούν να δημιουργηθούν μέσω του API από ενοικιαστές με πρόσβαση white labeling. Οι white labeled ενοικιαστές δεν μπορούν να δημιουργήσουν άλλους white labeled ενοικιαστές (επιτρέπεται μόνο ένα επίπεδο ένθεσης).

Η δομή για το αντικείμενο Tenant είναι η ακόλουθη:

Δομή Tenant
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

Δομή Χρήστη Internal Link

Ο User είναι ένα αντικείμενο που αντιπροσωπεύει τον πιο κοινό παρονομαστή όλων των χρηστών.

Λάβετε υπόψη ότι στο FastComments έχουμε πολλές διαφορετικές περιπτώσεις χρήσης για χρήστες:

  • Secure SSO
  • Simple SSO
  • Χρήστες Ενοικιαστή (Για παράδειγμα: Διαχειριστές)
  • Σχολιαστές

Αυτό το API είναι για Σχολιαστές και χρήστες που δημιουργήθηκαν μέσω Simple SSO. Βασικά, οποιοσδήποτε χρήστης που δημιουργήθηκε μέσω του ιστότοπού σας μπορεί να προσπελαστεί μέσω αυτού του API. Οι Χρήστες Ενοικιαστή μπορούν επίσης να ανακτηθούν με αυτόν τον τρόπο, αλλά θα λάβετε περισσότερες πληροφορίες αλληλεπιδρώντας με το API /tenant-users/.

Για Secure SSO παρακαλώ χρησιμοποιήστε το API /sso-users/.

Δεν μπορείτε να ενημερώσετε αυτούς τους τύπους χρηστών. Δημιούργησαν τον λογαριασμό τους μέσω του ιστότοπού σας, οπότε παρέχουμε κάποια βασική πρόσβαση μόνο για ανάγνωση, αλλά δεν μπορείτε να κάνετε αλλαγές. Αν θέλετε να έχετε αυτόν τον τύπο ροής - πρέπει να ρυθμίσετε το Secure SSO.

Η δομή για το αντικείμενο User είναι η ακόλουθη:

Δομή User
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

Δομή Ψήφου Internal Link

Ένα αντικείμενο Vote αντιπροσωπεύει μια ψήφο που αφέθηκε από έναν χρήστη.

Η σχέση μεταξύ σχολίων και ψήφων ορίζεται μέσω του commentId.

Η δομή για το αντικείμενο Vote είναι η ακόλουθη:

Δομή Vote
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

Δομή Ρυθμίσεων Ερώτησης Internal Link

Το FastComments παρέχει έναν τρόπο κατασκευής ερωτήσεων και συγκέντρωσης των αποτελεσμάτων τους. Ένα παράδειγμα ερώτησης (εφεξής QuestionConfig) μπορεί να είναι μια βαθμολογία με αστέρια, ένας ολισθητής ή μια ερώτηση NPS (καθορίζεται μέσω του type).

Τα δεδομένα ερωτήσεων μπορούν να συγκεντρωθούν μεμονωμένα, μαζί, με την πάροδο του χρόνου, συνολικά, ανά σελίδα και ούτω καθεξής.

Το πλαίσιο έχει όλες τις δυνατότητες που χρειάζονται για την κατασκευή widgets πλευράς πελάτη (με τον διακομιστή σας μπροστά από αυτό το API), πίνακες ελέγχου διαχείρισης και εργαλεία αναφοράς.

Πρώτα, πρέπει να ορίσουμε ένα QuestionConfig. Η δομή είναι η ακόλουθη:

Δομή QuestionConfig
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** 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

Δομή Αποτελέσματος Ερώτησης Internal Link

Για να αποθηκεύσετε αποτελέσματα για ερωτήσεις, δημιουργείτε ένα QuestionResult. Μπορείτε στη συνέχεια να συγκεντρώσετε τα αποτελέσματα ερωτήσεων, και επίσης να τα συνδέσετε με σχόλια για σκοπούς αναφοράς.

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

Δομή Διάκρισης Χρήστη Internal Link

UserBadge είναι ένα αντικείμενο που αντιπροσωπεύει ένα σήμα που έχει ανατεθεί σε έναν χρήστη στο σύστημα FastComments.

Τα σήματα μπορούν να ανατεθούν σε χρήστες αυτόματα με βάση τη δραστηριότητά τους (όπως αριθμός σχολίων, χρόνος απάντησης, κατάσταση βετεράνου) ή χειροκίνητα από τους διαχειριστές του ιστότοπου.

Η δομή του αντικειμένου UserBadge έχει ως εξής:

Δομή UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Μοναδικό αναγνωριστικό για αυτήν την ανάθεση σήματος χρήστη */
4 id: string
5 /** Το ID του χρήστη στον οποίο έχει ανατεθεί αυτό το σήμα */
6 userId: string
7 /** Το ID του ορισμού σήματος από τον κατάλογο σημάτων του tenant */
8 badgeId: string
9 /** Το ID του tenant που δημιούργησε/ανέθεσε αυτό το σήμα */
10 fromTenantId: string
11 /** Πότε δημιουργήθηκε αυτό το σήμα (χιλιοστά του δευτερολέπτου από την epoch) */
12 createdAt?: number
13 /** Πότε λήφθηκε αυτό το σήμα από τον χρήστη (χιλιοστά του δευτερολέπτου από την epoch) */
14 receivedAt?: number
15 /**
16 * Ο τύπος του σήματος:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** Για σήματα βάσει ορίου, η τιμή του ορίου */
25 threshold?: number
26 /** Το όνομα/ετικέτα του σήματος */
27 name?: string
28 /** Λεπτομερής περιγραφή του σήματος */
29 description?: string
30 /** Το κείμενο που εμφανίζεται στο σήμα */
31 displayLabel?: string
32 /** URL προς μια εικόνα που εμφανίζεται στο σήμα */
33 displaySrc?: string
34 /** Χρώμα φόντου για το σήμα (κωδικός hex) */
35 backgroundColor?: string
36 /** Χρώμα περιγράμματος για το σήμα (κωδικός hex) */
37 borderColor?: string
38 /** Χρώμα κειμένου για το σήμα (κωδικός hex) */
39 textColor?: string
40 /** Πρόσθετη κλάση CSS για στυλιζάρισμα */
41 cssClass?: string
42 /** Για σήματα βετεράνου, το χρονικό όριο σε χιλιοστά του δευτερολέπτου */
43 veteranUserThresholdMillis?: number
44 /** Εάν αυτό το σήμα εμφανίζεται στα σχόλια του χρήστη */
45 displayedOnComments: boolean
46 /** Η σειρά εμφάνισης του σήματος */
47 order?: number
48 /** Εάν οριστεί, αυτό το σήμα εμφανίζεται μόνο στη σελίδα με το αντίστοιχο urlId. Null για παγκόσμια σήματα. */
49 urlId?: string | null
50}
51
---

Δομή Προόδου Διάκρισης Χρήστη Internal Link

Το UserBadgeProgress είναι ένα αντικείμενο που αντιπροσωπεύει την πρόοδο ενός χρήστη προς την απόκτηση διαφόρων σημάτων στο σύστημα FastComments.

Αυτή η παρακολούθηση βοηθά να καθοριστεί πότε οι χρήστες πρέπει να λάβουν αυτόματα σήματα με βάση τη δραστηριότητά τους και τη συμμετοχή τους στην κοινότητά σας.

Η δομή για το αντικείμενο UserBadgeProgress είναι η ακόλουθη:

Δομή UserBadgeProgress
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

Εν κατακλείδι

Ελπίζουμε ότι βρήκατε την τεκμηρίωση του API μας εκτενή και εύκολη στην κατανόηση. Αν βρείτε οποιαδήποτε κενά, ενημερώστε μας παρακάτω.