
שפה 🇮🇱 עברית
סקירה כללית
יישום
מאחורי הקלעים
עם FastComments ניתן לקרוא לנקודת קצה של API בכל פעם שתגובה מתווספת, מתעדכנת או נמחקת מהמערכת שלנו.
אנו מממשים זאת באמצעות webhooks אסינכרוניים על גבי HTTP/HTTPS.
מה הם ווב־הוקים 
Webhook הוא מנגנון, או אינטגרציה, בין שתי מערכות שבה ה"מפיק" (FastComments) שולח אירוע שה"צרכן" (אתה) צורך באמצעות קריאת API.
אירועים ומשאבים נתמכים 
FastComments תומכת ב-webhooks רק במשאב Comment.
אנו תומכים ב-webhooks עבור יצירת Comment, הסרה ועד עדכון.
כל אחד מהם נחשב לאירוע נפרד במערכת שלנו ולכן יש לו סמנטיקה שונה ומבנים שונים עבור אירועי webhook.
הגדרות פיתוח מקומי 
For Local development, use a tool like ngrok.
In order to simplify keeping the system secure, local development follows the same process as setting up and securing other environments.
שלב 1: הוסף "localhost" לדומיינים בחשבונך.
Add "localhost" as a domain here.
שלב 2: בחר מפתח API
We're going to be adding webhook configuration for your domain, so we'll need an API key. You can do that here.
Under "Associate with domain" - select your "localhost" domain.
NOTE: Alternatively, you can use one API Secret for all testing activity and staging environments. Simply add an API Secret for "All Domains", and give it a name like "test".
Ensure you have an API Secret defined for your production domain(s). Events for all other domains will use the wildcard (testing) secret.
שלב 3: הוסף את ה-Webhook שלך
While running ngrok or similar tool, set the value for "localhost" here.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
שלב 4: הוסף תגובה
Now you can add, edit, or delete comments and should see us call your local development machine with the events, using your testing API key. There may be up to 30 seconds delay for the events to reach your machine.
הגדרה 
עקוב אחר אותם שלבים עבור localhost כפי שתעשה ב-production. ודא שיש לך production domains ו-API Secrets מוגדרים.
ראשית, נווט אל ה-Webhooks admin. ניתן לגשת לכך דרך Manage Data -> Webhooks.
דף התצורה נראה כך:
בעמוד זה ניתן לציין endpoints עבור כל סוג של אירוע תגובה.
עבור כל סוג אירוע, הקפד ללחוץ על Send Test Payload כדי לוודא שהאינטגרציה הוגדרה כראוי. ראה את הסעיף הבא, "Testing", לפרטים.
בדיקות 
בממשק הניהול של Webhooks יש כפתורי Send Test Payload עבור כל סוג אירוע (Create, Update, Delete). אירועי Create ו-Update שולחים אובייקט WebhookComment מדומה, בעוד שבדיקת Delete תשלח גוף בקשה מדומה עם מזהה בלבד.
אימות המטענים
בעת בדיקת אינטגרציית ה-webhook, וודא שהבקשות הנכנסות כוללות את הכותרות הבאות:
token- סוד ה-API שלךX-FastComments-Timestamp- חותמת זמן Unix (בשניות)X-FastComments-Signature- חתימת HMAC-SHA256
יש להשתמש באימות חתימת HMAC כדי לוודא שהמטענים אותנטיים.
כלי בדיקה
ניתן להשתמש בכלים כמו webhook.site או ngrok כדי לבדוק את מטעני ה-webhook הנכנסים בזמן פיתוח.
סוגי אירועים
- Create Event: מופעל כאשר נוצרת תגובה חדשה. שיטת ברירת המחדל: PUT
- Update Event: מופעל כאשר תגובה נערכת. שיטת ברירת המחדל: PUT
- Delete Event: מופעל כאשר תגובה נמחקת. שיטת ברירת המחדל: DELETE
כל אירוע כולל את כל נתוני התגובה בגוף הבקשה (ראה מבני נתונים עבור פורמט המטען).
מבני נתונים 
המבנה היחיד שנשלח דרך webhooks הוא האובייקט WebhookComment, המתואר ב-TypeScript למטה.
מבנה אובייקט WebhookComment
מבנה האירוע "create"
גוף הבקשה של אירוע "create" הוא אובייקט WebhookComment.
מבנה האירוע "update"
גוף הבקשה של אירוע "update" הוא אובייקט WebhookComment.
מבנה האירוע "delete"
גוף הבקשה של אירוע "delete" הוא אובייקט WebhookComment.
שינוי מתאריך 14 בנובמבר 2023
בעבר גוף הבקשה של אירוע "delete" הכיל רק את מזהה ההערה. כעת הוא מכיל את ההערה המלאה בזמן המחיקה.
Run 
כאשר משתמשים מתוייגים בהערה, המידע מאוחסן ברשימה שנקראת mentions. כל אובייקט ברשימה זו
יש את המבנה הבא.
Run 
שיטות HTTP
אתה יכול להגדיר את שיטת ה-HTTP לכל סוג אירוע webhook בלוח הניהול:
- Create Event: POST או PUT (ברירת מחדל: PUT)
- Update Event: POST או PUT (ברירת מחדל: PUT)
- Delete Event: DELETE, POST, או PUT (ברירת מחדל: DELETE)
מכיוון שכל הבקשות מכילות מזהה, פעולות Create ו-Update הן אידמופטנטיות כברירת מחדל (PUT). חזרה על אותה בקשת Create או Update לא אמורה ליצור עצמים כפולים אצלכם.
כותרות בקשה
כל בקשת webhook כוללת את הכותרות הבאות:
| Header | תיאור |
|---|---|
Content-Type | application/json |
token | סוד ה-API שלך |
X-FastComments-Timestamp | חותמת זמן של Unix (שניות) כאשר הבקשה נחתמה |
X-FastComments-Signature | חתימת HMAC-SHA256 (sha256=<hex>) |
ראו אבטחה וטוקנים של API למידע על אימות חתימת HMAC.
אבטחה ואסימוני API 
FastComments webhook requests include multiple authentication mechanisms for security.
Headers Sent
| Header | Description |
|---|---|
token | Your API Secret (for backwards compatibility) |
X-FastComments-Timestamp | Unix timestamp (seconds) when the request was signed |
X-FastComments-Signature | HMAC-SHA256 signature of the payload |
HMAC Signature Verification (Recommended)
We strongly recommend verifying the HMAC signature to ensure webhook payloads are authentic and haven't been tampered with.
Signature Format: sha256=<hex-encoded-signature>
How the signature is computed:
- Concatenate:
timestamp + "." + JSON_payload_body - Compute HMAC-SHA256 using your API Secret as the key
- Hex-encode the result
Example Verification (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(req, apiSecret) {
const timestamp = req.headers['x-fastcomments-timestamp'];
const signature = req.headers['x-fastcomments-signature'];
if (!timestamp || !signature) {
return false;
}
// וידא שחותמת הזמן עדכנית (בתוך 5 דקות)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // מניעת התקפת replay
}
// אמת את החתימה
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Example Verification (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# אמת שחותמת הזמן עדכנית
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# אמת את החתימה
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
Example Verification (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// וידא שחותמת הזמן עדכנית (בתוך 5 דקות)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// אמת את החתימה
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Legacy Authentication
The token header containing your API Secret is still sent for backwards compatibility. However, we recommend migrating to HMAC verification for improved security as it protects against replay attacks.
כיצד זה עובד וטיפול בניסיונות חוזרים 
כל השינויים לאובייקט Comment במערכת מפעילים אירוע שמסתיים בתור.
אירוע ה-webhook הראשוני נשלח בדרך כלל בתוך שישה שניות מהתרחשות מקור האירוע.
ניתן לנטר את התור הזה בממשק הניהול של Webhooks למקרה שה-API שלך יורד.
אם בקשה ל-API שלך נכשלת, נכניס אותה מחדש לתור על פי לוח זמנים.
לוח הזמנים הוא 1 Minute * the retry count. אם הקריאה נכשלה פעם אחת, היא תנסה שוב בעוד דקה. אם היא תיכשל פעמיים, היא תחכה אז שתי דקות, וכן הלאה. זה כדי שלא נעמיס על ה-API שלך אם הוא יורד מסיבות הקשורות לעומס.
ניתן לבטל את ה-Webhooks מתוך דף היומנים.
לסיכום
זה מסיים את תיעוד ה-Webhooks שלנו.
אנו מקווים שתמצאו את אינטגרציית ה-Webhook של FastComments קלה להבנה ומהירה להקמה.
אם אתם מרגישים שזיהיתם חוסרים בתיעוד שלנו, הודיעו לנו למטה.