FastComments.com

ממשק ה-API של FastComments

FastComments מספקת ממשק API לאינטראקציה עם משאבים רבים. צרו אינטגרציות עם הפלטפורמה שלנו, או אפילו צרו לקוחות משלכם!

בתיעוד זה תמצאו את כל המשאבים הנתמכים על ידי ה-API שתועדו עם סוגי הבקשה והתשובה שלהם.

ללקוחות Enterprise, כל הגישה ל-API נרשמת ביומן ביקורת.

SDKs שנוצרו

FastComments מייצרת כעת מפרט API מתוך הקוד שלנו (זה עדיין לא שלם, אך כולל ממשקי API רבים).

יש לנו גם SDKs לשפות נפוצות:

אימות

ה-API מאומת על ידי העברת מפתח ה-API שלך ככותרת X-API-KEY או כפרמטר שאילתה API_KEY. תזדקקו גם ל-tenantId כדי לבצע קריאות ל-API. ניתן לקבל אותו מאותה עמוד שבו נמצא מפתח ה-API שלכם.

הערת אבטחה

ניתובים אלה מיועדים להיקרא משרת. אסור לקרוא להם מדפדפן. פעולה כזו תחשוף את מפתח ה-API שלכם — וזה ייתן גישה מלאה לחשבון שלכם לכל מי שיכול לצפות בקוד המקור של דף!

אפשרות אימות אחת - כותרות

  • כותרת: X-API-KEY
  • כותרת: X-TENANT-ID

אפשרות אימות שנייה - פרמטרי שאילתה

  • פרמטר שאילתה: API_KEY
  • פרמטר שאילתה: tenantId

קריאה של הכתיבות שלך

FastComments מספקת זמינות Active-Active. בקשות ממרכז הנתונים שלכם מנותבות אל נקודת הנוכחות הקרובה אליכם. זה אוטומטי, ובדרך כלל תוכלו להבחין בסמנטיקה של קריאה אחרי כתיבה. אם ברצונכם להיות בטוחים שנקרא את הכתיבות שלכם, תוכלו לקבע את הבקשות לאזור מסוים על ידי שימוש באזור זה כ-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

שימו לב שאם תעשו זאת ייתכן שתרצו להגדיר נקודת גיבוי, שכן בעבר הסרנו צמתים של נקודות כניסה והשתמשנו בשמות חדשים בעת המעבר.

מבנה יומן ביקורת Internal Link

אובייקט AuditLog מייצג אירוע מבוקר עבור שוכרים שיש להם גישה לתכונה זו.

המבנה עבור אובייקט AuditLog הוא כדלקמן:

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

יומן הביקורת הוא בלתי ניתן לשינוי. גם לא ניתן לכתוב אליו ידנית. FastComments.com עשוי להחליט מתי לכתוב ליומן הביקורת. עם זאת, אתה יכול לקרוא ממנו דרך API זה.

אירועים ביומן הביקורת פגים לאחר שנתיים.

מבנה תגובה Internal Link

אובייקט Comment מייצג תגובה שהשאיר משתמש.

הקשר בין תגובות אב וצאצא מוגדר באמצעות parentId.

המבנה של אובייקט Comment הוא כדלקמן:

מבנה תגובה
Copy Copy
1
2interface Comment {
3 /** לקריאה בלבד: יוגדר ל-true אם מנוע הספאם קבע שהתגובה היא ספאם. **/
4 aiDeterminedSpam?: boolean
5 /** האם התגובה מאושרת להצגה. תוגדר ל-true בעת שמירת התגובה; אחרת היא תוסתר. **/
6 approved?: boolean
7 /** האווטאר של המשתמש. **/
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 /** הטקסט הגולמי של התגובה. **/
12 comment: string
13 /** לקריאה בלבד: הטקסט של התגובה לאחר פירוס ל-HTML. **/
14 commentHTML?: string
15 /** האימייל של הכותב. נדרש אם תגובות אנונימיות כבויות. **/
16 commenterEmail?: string
17 /** הקישור של הכותב (למשל הבלוג שלו). **/
18 commenterLink?: string
19 /** השם של הכותב. תמיד נדרש. אם לא זמין, קבע ערך כמו "Anonymous". **/
20 commenterName: string
21 /** התאריך שבו נכתבה התגובה, ביחידת זמן epoch UTC. **/
22 date: number
23 /** התווית לתצוגה של התגובה - לדוגמה "Admin", "Moderator", או משהו כמו "VIP User". **/
24 displayLabel?: string
25 /** הדומיין שבו פורסמה התגובה. **/
26 domain?: string
27 /** לקריאה בלבד: מספר הפעמים שהתגובה סומנה. **/
28 flagCount?: number
29 /** ההאשטאגים (#) שנכתבו בתגובה ופוענחו בהצלחה. ניתן גם להוסיף האשטאגים ידנית לצורך שאילתות, אך הם לא יוצגו אוטומטית בטקסט התגובה. **/
30 hashTags?: CommentHashTag[]
31 /** לקריאה בלבד: האם התגובה מכילה תמונות? **/
32 hasImages?: boolean
33 /** לקריאה בלבד: האם התגובה מכילה קישורים? **/
34 hasLinks?: boolean
35 /** לקריאה בלבד: המזהה הייחודי של התגובה. **/
36 id: string
37 /** רק בעת יצירה! ערך זה מעובד ב-hash לצורך אחסון. **/
38 ip?: string
39 /** לקריאה בלבד: האם המשתמש הנוכחי חסם את מי שכתב את התגובה? **/
40 isBlocked?: boolean
41 /** לקריאה בלבד: האם התגובה נכתבה על ידי אדמין? מוגדר אוטומטית על בסיס userId. **/
42 isByAdmin?: boolean
43 /** לקריאה בלבד: האם התגובה נכתבה על ידי מודראטור? מוגדר אוטומטית על בסיס userId. **/
44 isByModerator?: boolean
45 /** יוגדר ל-true אם התגובה נמחקה באופן רך (soft deleted) — הושאר ממלא מקום בשל קונפיגורציה אחרת. **/
46 isDeleted?: boolean
47 /** יוגדר ל-true אם חשבון המשתמש נמחק והתגובה נדרשה להישאר. **/
48 isDeletedUser?: boolean
49 /** לקריאה בלבד: האם התגובה סומנה על ידי המשתמש המחובר כרגע (contextUserId)? **/
50 isFlagged?: boolean
51 /** האם התגובה מוצמדת (pinned)? **/
52 isPinned?: boolean
53 /** האם התגובה נעולה? כאשר true, אף אחד (כולל מודראטורים) לא יכול להשיב, לערוך או למחוק אותה עד שתיפתח. **/
54 isLocked?: boolean
55 /** האם התגובה היא ספאם? **/
56 isSpam?: boolean
57 /** לקריאה בלבד: האם המשתמש הנוכחי (contextUserId) הצביע נגד התגובה? **/
58 isVotedDown?: boolean
59 /** לקריאה בלבד: האם המשתמש הנוכחי (contextUserId) הצביע בעד התגובה? **/
60 isVotedUp?: boolean
61 /** השפה/לוקל של התגובה. אם לא סופק, היא נגזרת מכותרת ה-HTTP שמציינת את שפות ההעדפה. **/
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 /** מטה-נתונים אופציונליים המשויכים לתגובה. **/
66 meta?: Record<string, string | number | boolean>
67 /** The optional list of moderation group ids associated with this comment. **/
68 moderationGroupIds?: string[]|null
69 /** לקריאה בלבד: המזהה של אובייקט ההצבעה המתאים להצבעת המשתמש הנוכחי (contextUserId) על תגובה זו. **/
70 myVoteId?: string
71 /** האם נשלחו התראות על תגובה זו למגיבים. כדי למנוע שליחת התראות בייבוא, קבע ערך זה ל-true. **/
72 notificationSentForParent?: boolean
73 /** האם נשלחו התראות על תגובה זו למשתמשי ה-tenant. כדי למנוע שליחת התראות בייבוא, קבע ל-true. **/
74 notificationSentForParentTenant?: boolean
75 /** הכותרת של העמוד שבו הופיעה התגובה. **/
76 pageTitle?: string
77 /** אם אנו משיבים לתגובה, זהו המזהה שאליו משיבים. **/
78 parentId?: string|null
79 /** האם התגובה מסומנת כנגועה בבדיקה (reviewed). **/
80 reviewed: boolean
81 /** מזהה ה-tenant שאליו שייכת התגובה. **/
82 tenantId: string
83 /** המשתמש שכתב את התגובה. נוצר אוטומטית כאשר שומרים תגובה שכוללת שם/אימייל. **/
84 userId?: string|null
85 /** ה-URL למיקום שבו התגובה נראית, לדוגמה פוסט בבלוג. **/
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 /** "הקרמה" של התגובה (= votes up - votes down). **/
98 votes?: number
99}
100

חלק מהשדות הללו מסומנים כ-READONLY - אלה מוחזרים על ידי ה-API אך לא יכולים להיות מוגדרים.

Comment Text Structure

תגובות נכתבות בגירסה של Markdown שמותאמת ל-FastComments, שהיא Markdown בתוספת תגים בסגנון bbcode עבור תמונות, כמו [img]path[/img].

הטקסט נשמר בשני שדות. הטקסט שהמשתמש הזין נשמר ללא שינוי בשדה comment. זה מורנדר ונשמר בשדה commentHTML.

תגי ה-HTML המותרים הם b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

מומלץ להציג את ה-HTML, מכיוון שמדובר בתת-קבוצה מאוד קטנה של HTML, ובניית מנרדרר היא יחסית פשוטה. קיימות ספריות רבות עבור React Native ו-Flutter, למשל, שעוזרות בכך.

אתה רשאי לבחור להציג את הערך הלא-נורמליזציוני של השדה comment. An example parser is here..

ניתן גם להתאים את מפענח הדוגמה לעבודה עם HTML, ולהמיר את תווי ה-HTML לאלמנטים הצפויים להצגה בפלטפורמה שלך.

Tagging

כאשר משתמשים מסומנים בתגובה, המידע מאוחסן ברשימה שנקראת mentions. כל אובייקט ברשימה זו יש את המבנה הבא.

אובייקט אזכורי התגובה
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** מזהה המשתמש. עבור משתמשי SSO, יהיה עם קידומת של מזהה ה-tenant שלכם. **/
4 id: string
5 /** הטקסט הסופי של תגית ה-@mention, כולל הסימן @. **/
6 tag: string
7 /** הטקסט המקורי של ה-@mention, כולל הסימן @. **/
8 rawTag: string
9 /** סוג המשתמש שהוזכר. user = FastComments.com account. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** גם אם המשתמש מבטל קבלת התראות, ערך זה עדיין יהיה true. **/
12 sent: boolean
13}
14

HashTags

כאשר משתמשים בהאשטאגים והם פוענחו בהצלחה, המידע מאוחסן ברשימה שנקראת hashTags. כל אובייקט ברשימה זו יש את המבנה הבא. ניתן גם להוסיף האשטאגים ידנית למערך hashTags של התגובה לצורך שאילתות, אם retain מוגדר.

אובייקט האשטאג של התגובה
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** המזהה של ההאשטאג. **/
4 id: string
5 /** הטקסט הסופי של תגית ה-#hashtag, כולל הסימן #. **/
6 tag: string
7 /** אם לאשטאג מקושר ל-URL מותאם אישית, זה יהיה מוגדר. **/
8 url?: string
9 /** האם לשמור את ההאשטאג גם אם הוא לא קיים בטקסט התגובה כאשר התגובה מעודכנת. שימושי לתיוג תגובות מבלי לשנות את טקסט התגובה. **/
10 retain?: boolean
11}
12

מבנה תבנית דוא״ל Internal Link

אובייקט EmailTemplate מייצג קונפיגורציה לתבנית אימייל מותאמת אישית, עבור שוכר.

המערכת תבחר את תבנית האימייל לשימוש באמצעות:

  • מזהה הסוג שלה, אנחנו קוראים לזה emailTemplateId. אלה קבועים.
  • ה-domain. אנחנו קודם ננסה למצוא תבנית עבור הדומיין שהאובייקט הקשור (כמו Comment) קשור אליו, ואם לא נמצאה התאמה אז ננסה למצוא תבנית שבה domain הוא null או *.

המבנה עבור אובייקט EmailTemplate הוא כדלקמן:

מבנה תבנית אימייל
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** 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 החוקיים מנקודת הקצה /definitions.
  • נקודת הקצה /definitions כוללת גם את התרגומים ברירת המחדל ונתוני הבדיקה.
  • תבניות ייכשלו בשמירה עם מבנה או נתוני בדיקה לא חוקיים.

מבנה תגית Internal Link

אובייקט 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 תראה שההאשטאג משמש ב-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 לא באמת מרמז שאימייל נשלח או צריך להישלח. במקום זאת, ההתראות משמשות לפיד ההתראות ואינטגרציות קשורות.

המבנה עבור אובייקט 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 זה הוא ליישם ניטור מותאם אישית. ייתכן שתרצה לקרוא לנקודת הקצה /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 הוא פשוט כמו לגרום למשתמש לטעון את הדף עם מטען מעודכן.

עם זאת, ייתכן ותרצו לנהל משתמש מחוץ לזרימה זו, כדי לשפר את העקביות של היישום שלכם.

ממשק ה-SSO User API מספק דרך לבצע CRUD על אובייקטים שאנו קוראים להם SSOUsers. אובייקטים אלה שונים ממשתמשים רגילים ונשמרים בנפרד למען בטיחות טיפוסים.

המבנה של אובייקט 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 Admins (נפרדים ממשתמשי SSO רגילים)
16 isAdminAdmin?: boolean // הרשאת מנהל - משתמשי SSO עם דגל זה יחויבו כ-SSO Admins (נפרדים ממשתמשי SSO רגילים)
17 isCommentModeratorAdmin?: boolean // הרשאת מודרציה - משתמשי SSO עם דגל זה יחויבו כ-SSO Moderators (נפרדים ממשתמשי 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 /** מערך מזהי סמלים שיוקצו למשתמש. מוגבל ל-30 סמלים. הסדר נשמר. אלו סמלים גלובליים הנראים בכל הדפים. **/
31 badgeIds: string[]
32 /** מערך מזהי סמלים המוגדרים לדף הנוכחי (urlId). סמלים אלו מוצגים רק בעמוד שבו הוקצו. **/
33 pageBadgeIds?: string[]
34 /** אם true, מחליף את כל הסמלים המוצגים הקיימים באלו שסופקו. סמלים גלובליים וסמלים ספציפיים לדף מוחלפים באופן עצמאי. אם false, מוסיף לסמלים הקיימים. **/
35 override?: boolean
36 /** אם true, מעדכן תכונות תצוגת הסמל מתצורת השוכר. **/
37 update?: boolean
38 }
39}
40

חיוב עבור משתמשי SSO

משתמשי SSO מחוייבים באופן שונה בהתאם לדגלי ההרשאה שלהם:

  • משתמשי SSO רגילים: משתמשים ללא הרשאות מנהל או מודרציה מחוייבים כמשתמשי SSO רגילים
  • מנהלי SSO: משתמשים עם הדגלים isAccountOwner או isAdminAdmin מחוייבים בנפרד כ-מנהלי SSO (אותו שיעור כמו מנהלי שוכר רגילים)
  • מודרטורים של SSO: משתמשים עם הדגל isCommentModeratorAdmin מחוייבים בנפרד כ-מודרטורים של SSO (אותו שיעור כמו מודרטורים רגילים)

חשוב: כדי למנוע חיוב כפול, המערכת מבטלת כפילויות אוטומטית בין משתמשי SSO לבין משתמשי שוכר רגילים ומודרטורים על בסיס כתובת אימייל. אם למשתמש SSO יש את אותה כתובת אימייל כמו משתמש שוכר רגיל או מודרטור, הוא לא יחויב פעמיים.

בקרת גישה

משתמשים יכולים להיות מחולקים לקבוצות. לזה מיועד השדה groupIds, והוא אופציונלי.

@אזכורים

ברירת המחדל @mentions ישתמש ב-username כדי לחפש משתמשי SSO אחרים כאשר מקלידים את התו @. אם משתמשים ב-displayName, אז תוצאות התואמות ל-username יידחו כאשר יש התאמה ל-displayName, ותוצאות החיפוש של ה-@mention ישתמשו ב-displayName.

מנויים

ב-FastComments, משתמשים יכולים להירשם לדף על ידי לחיצה על סמל הפעמון בווידג'ט התגובות ולחיצה על הרשמה.

עם משתמש רגיל, אנו שולחים לו אימיילי התראות על בסיס הגדרות ההתראות שלו.

עם משתמשי SSO, אנו מפצלים זאת לתאימות לאחור. משתמשים יקבלו הודעות אימייל נוספות אלה רק אם תגדירו את optedInSubscriptionNotifications ל-true.

סמלים

ניתן להקצות סמלים למשתמשי SSO באמצעות השדה badgeConfig. סמלים הם אינדיקטורים ויזואליים המופיעים לצד שם המשתמש בתגובות.

  • badgeIds - מערך מזהי סמלים שיוקצו למשתמש. אלה סמלים גלובליים הנראים בכל הדפים. חייבים להיות מזהי סמלים תקפים שנוצרו בחשבון FastComments שלך. מוגבלים ל-30 סמלים.
  • pageBadgeIds - מערך מזהי סמלים אופציונלי המוגדר לדף הנוכחי (urlId). סמלים אלה מוצגים רק בדף שבו הוקצו. דפים שונים יכולים להכיל סמלים ספציפיים לדף שונים עבור אותו משתמש.
  • override - אם true, כל הסמלים המוצגים הקיימים יוחלפו באלו שסופקו. סמלים גלובליים וספציפיים לדף מוחלפים באופן עצמאי — החלפה של סמלים גלובליים לא משפיעה על סמלים ספציפיים לדף, ולהפך. אם false או לא צויין, הסמלים שסופקו יתווספו לסמלים הקיימים.
  • update - אם true, תכונות תצוגת הסמל יעודכנו מתוך תצורת השוכר כל פעם שהמשתמש ייכנס.

מבנה מנוי Internal Link

אובייקט Subscription מייצג מנוי עבור משתמש.

אובייקטי Subscription נוצרים כאשר משתמש לוחץ על פעמון ההתראות בווידג'ט התגובות ולוחץ על "הירשם לעמוד זה".

ניתן גם ליצור מנויים דרך ה-API.

קיום אובייקט Subscription גורם ליצירת אובייקטי Notification, ושליחת אימיילים, כאשר תגובות חדשות נשארות בשורש העמוד המשויך שה-Subscription הוא עבורו. שליחת אימיילים תלויה בסוג המשתמש. למשתמשים רגילים זה תלוי ב-optedInNotifications. למשתמשי SSO זה תלוי ב-optedInSubscriptionNotifications. שים לב שלחלק מהאפליקציות אולי אין את הרעיון של עמוד נגיש לאינטרנט, במקרה זה פשוט הגדר את urlId ל- מזהה הפריט שאתה נרשם אליו (אותו ערך עבור urlId שהיית מעביר לווידג'ט התגובות).

המבנה עבור אובייקט 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 הוא כדלקמן:

מבנה שוכר
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 יש לנו מספר מקרי שימוש שונים למשתמשים:

  • SSO מאובטח
  • SSO פשוט
  • משתמשי שוכר (לדוגמה: מנהלים)
  • מגיבים

API זה מיועד למגיבים ולמשתמשים שנוצרו דרך SSO פשוט. בעצם, כל משתמש שנוצר דרך האתר שלך ניתן לגישה דרך API זה. ניתן לאחזר גם משתמשי שוכר בדרך זו, אך תקבל מידע נוסף על ידי אינטראקציה עם ה-API /tenant-users/.

עבור SSO מאובטח אנא השתמש ב-API /sso-users/.

לא ניתן לעדכן סוגים אלה של משתמשים. הם יצרו את החשבון שלהם דרך האתר שלך, אז אנו מספקים גישה בסיסית לקריאה בלבד, אבל לא ניתן לבצע שינויים. אם אתה רוצה לקבל זרימה כזו - אתה צריך להגדיר 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 הוא כדלקמן:

מבנה הצבעה
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

מבנה הגדרות שאלה Internal Link

FastComments מספק דרך לבנות שאלות ולאגור את תוצאותיהן. דוגמה לשאלה (להלן נקראת QuestionConfig) יכולה להיות דירוג כוכבים, מחוון, או שאלת NPS (נקבע באמצעות type).

ניתן לאגור נתוני שאלות בנפרד, יחד, לאורך זמן, באופן כולל, לפי עמוד, וכן הלאה.

למסגרת יש את כל היכולות הנדרשות לבניית ווידג'טים בצד הלקוח (עם השרת שלך מול API זה), דשבורדים למנהלים, וכלי דיווח.

ראשית, עלינו להגדיר QuestionConfig. המבנה הוא כדלקמן:

מבנה QuestionConfig
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** 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 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 * סוג התג:
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 /** If set, this badge is only displayed on the page with the matching urlId. Null for global badges. */
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 שלנו מקיף וקל להבנה. אם מצאתם פערים, אנא עדכנו אותנו למטה.