
Γλώσσα 🇬🇷 Ελληνικά
Επισκόπηση
Υλοποίηση
Πίσω από τη Σκηνή
Webhooks
Με το FastComments είναι δυνατό να κληθεί ένα API endpoint κάθε φορά που ένα σχόλιο προστίθεται, ενημερώνεται ή αφαιρείται από το σύστημά μας.
Αυτό το επιτυγχάνουμε με ασύγχρονα webhooks μέσω HTTP/HTTPS.
Τι είναι τα Webhooks 
Ένα Webhook είναι ένας μηχανισμός, ή μια ενσωμάτωση, μεταξύ δύο συστημάτων όπου ο "παραγωγός" (FastComments) πυροδοτεί ένα συμβάν που ο "καταναλωτής" (Εσείς) καταναλώνει μέσω κλήσης API.
Υποστηριζόμενα Γεγονότα & Πόροι 
Το FastComments υποστηρίζει webhooks μόνο για τον πόρο Comment.
Υποστηρίζουμε webhooks για τη δημιουργία, την αφαίρεση και την ενημέρωση σχολίων.
Κάθε ένα από αυτά θεωρείται ξεχωριστό γεγονός στο σύστημά μας και ως εκ τούτου έχει διαφορετική σημασιολογία και δομή για τα γεγονότα webhook.
Οποιοσδήποτε αριθμός τελικών σημείων μπορεί να εγγραφεί στο ίδιο γεγονός, είτε από τον πίνακα ελέγχου είτε μέσω του API (δείτε τη Διαχείριση Webhooks μέσω του API). Κάθε webhook παραδίδεται ανεξάρτητα.
Ρύθμιση Τοπικής Ανάπτυξης 
Για τοπική ανάπτυξη, χρησιμοποιήστε ένα εργαλείο όπως το ngrok.
Για να απλοποιηθεί η διατήρηση του συστήματος ασφαλούς, η τοπική ανάπτυξη ακολουθεί την ίδια διαδικασία με τη ρύθμιση και την ασφάλιση άλλων περιβαλλόντων.
Βήμα 1: Προσθέστε το "localhost" στα domains στον λογαριασμό σας.
Προσθέστε το "localhost" ως domain εδώ.
Βήμα 2: Επιλέξτε ένα API Key
Θα προσθέσουμε ρύθμιση webhook για το domain σας, οπότε θα χρειαστούμε ένα API key. Μπορείτε να το κάνετε εδώ.
Στην ενότητα "Associate with domain" - επιλέξτε το domain "localhost" σας.
ΣΗΜΕΙΩΣΗ: Εναλλακτικά, μπορείτε να χρησιμοποιήσετε ένα API Secret για όλες τις δοκιμαστικές δραστηριότητες και τα περιβάλλοντα staging. Απλώς προσθέστε ένα API Secret για "All Domains" και δώστε του ένα όνομα όπως "test".
Βεβαιωθείτε ότι έχετε ορίσει ένα API Secret για τα production domain(s) σας. Τα γεγονότα για όλα τα άλλα domains θα χρησιμοποιούν το wildcard (testing) secret.
Βήμα 3: Προσθέστε το Webhook Σας
Κατά τη λειτουργία του ngrok ή παρόμοιου εργαλείου, ορίστε την τιμή για το "localhost" εδώ.
Κατά το κλικ στο Send Test Payload, θα στείλουμε δύο δοκιμαστικά γεγονότα για να ελέγξουμε ότι επικυρώνετε το API key.
Μόλις επικυρωθεί, πατήστε Save.
Βήμα 4: Προσθέστε ένα Σχόλιο
Τώρα μπορείτε να προσθέσετε, επεξεργαστείτε ή διαγράψετε σχόλια και θα πρέπει να δείτε το σύστημα να καλεί το τοπικό σας μηχάνημα ανάπτυξης με τα γεγονότα, χρησιμοποιώντας το testing API key σας. Μπορεί να υπάρξει καθυστέρηση έως 30 δευτερόλεπτα για να φτάσουν τα γεγονότα στο μηχάνημά σας.
Ρύθμιση 
Ακολουθήστε τα ίδια βήματα για το localhost όπως θα κάνατε στην παραγωγή. Βεβαιωθείτε ότι έχετε ρυθμίσει τα production domains και τα API Secrets.
Πρώτα, μεταβείτε στο Webhooks admin. Αυτό είναι προσβάσιμο μέσω Manage Data -> Webhooks.
Η σελίδα εμφανίζει κάθε webhook στον λογαριασμό σας:
Κάντε κλικ στο New Webhook για να προσθέσετε ένα. Κάθε webhook έχει ένα URL, ένα γεγονός σχολίου (δημιουργήθηκε, ενημερώθηκε ή διαγράφηκε), ένα domain και μια μέθοδο HTTP:
Κάθε webhook παραδίδεται ανεξάρτητα. Μπορείτε να στείλετε το ίδιο γεγονός σε πολλαπλά endpoints, και ένα webhook που περιορίζεται σε All Domains λαμβάνει σχόλια από κάθε domain ακόμη και όταν υπάρχει ένα domain-specific webhook για το ίδιο γεγονός. Το ίδιο URL, γεγονός και domain δεν μπορούν να προστεθούν δύο φορές.
Πριν αποθηκεύσετε, κάντε κλικ στο Send Test Payload για να ελέγξετε αν το endpoint δέχεται μια υπογεγραμμένη αίτηση. Δείτε την επόμενη ενότητα, "Testing", για λεπτομέρειες.
Από τη λίστα μπορείτε να επεξεργαστείτε, να απενεργοποιήσετε, να ενεργοποιήσετε ξανά ή να διαγράψετε ένα webhook. Η απενεργοποίηση διατηρεί τα γεγονότα στην ουρά μέχρι το webhook να ενεργοποιηθεί ξανά· η διαγραφή τα απορρίπτει.
Τα Webhooks μπορούν επίσης να δημιουργηθούν μέσω του API, για παράδειγμα από το Zapier. Αυτά εμφανίζονται στην ίδια λίστα με την πηγή API. Δείτε τη διαχείριση Webhooks μέσω του API.
Δοκιμή 
Οι νέες και οι σελίδες επεξεργασίας webhook διαθέτουν ένα κουμπί Send Test Payload που στέλνει ένα αίτημα στη διεύθυνση URL που βρίσκεται αυτή τη στιγμή στη φόρμα, ανεξάρτητα από το αν έχει αποθηκευτεί. Τα γεγονότα Create και Update στέλνουν ένα ψεύτικο αντικείμενο WebhookComment, ενώ η δοκιμή Delete θα στείλει ένα ψεύτικο σώμα αιτήματος με μόνο ένα ID.
Επαλήθευση Φορτίων
Κατά τη δοκιμή της ενσωμάτωσης webhook, επαληθεύστε ότι τα εισερχόμενα αιτήματα περιλαμβάνουν τις ακόλουθες κεφαλίδες:
X-FastComments-Timestamp- Χρονική σήμανση Unix (δευτερόλεπτα)X-FastComments-Signature- Υπογραφή HMAC-SHA256
Τα webhooks που δημιουργήθηκαν πριν εισαχθεί το σχήμα υπογραφής λαμβάνουν επίσης μια κεφαλίδα token που περιέχει το API Secret σας. Τα νέα webhooks δεν το κάνουν.
Χρησιμοποιήστε την επαλήθευση υπογραφής HMAC για να διασφαλίσετε ότι τα φορτία είναι αυθεντικά.
Εργαλεία Δοκιμής
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το webhook.site ή το ngrok για να ελέγξετε τα εισερχόμενα φορτία webhook κατά την ανάπτυξη.
Τύποι Συμβάντων
- Create Event: Ενεργοποιείται όταν δημιουργείται ένα νέο σχόλιο.
- Update Event: Ενεργοποιείται όταν ένα σχόλιο επεξεργάζεται.
- Delete Event: Ενεργοποιείται όταν ένα σχόλιο διαγράφεται.
Κάθε webhook συνδέεται με ένα γεγονός και μία μέθοδο HTTP (POST, PUT ή DELETE). Κάθε γεγονός περιλαμβάνει τα πλήρη δεδομένα του σχολίου στο σώμα του αιτήματος (δείτε το Data Structures για τη μορφή του φορτίου).
Δομές Δεδομένων 
Η μόνη δομή που αποστέλλεται μέσω webhooks είναι το αντικείμενο WebhookComment, περιγραφόμενο παρακάτω σε TypeScript.
Η Δομή του Αντικειμένου WebhookComment
Η Δομή του Γεγονότος "Create"
Το σώμα του αιτήματος του γεγονότος "create" είναι ένα αντικείμενο WebhookComment.
Η Δομή του Γεγονότος "Update"
Το σώμα του αιτήματος του γεγονότος "update" είναι ένα αντικείμενο WebhookComment.
Η Δομή του Γεγονότος "Delete"
Το σώμα του αιτήματος του γεγονότος "delete" είναι ένα αντικείμενο WebhookComment.
Αλλαγή από 14 Νοεμβρίου 2023
Πριν, το σώμα του αιτήματος του γεγονότος "delete" περιείχε μόνο το αναγνωριστικό του σχολίου. Τώρα περιλαμβάνει ολόκληρο το σχόλιο τη στιγμή της διαγραφής.
Κάθε κλειδί είναι πάντα παρόν στο σώμα. Όταν το σχόλιο δεν έχει τιμή για ένα πεδίο, το σώμα μεταφέρει null
(ή false για boolean και [] για λίστες), ώστε η δομή μιας παράδοσης να μην διαφέρει ποτέ από σχόλιο σε σχόλιο.
Run 
Όταν οι χρήστες επισημαίνονται σε ένα σχόλιο, οι πληροφορίες αποθηκεύονται σε μια λίστα που ονομάζεται mentions. Κάθε αντικείμενο σε αυτή τη λίστα
έχει την ακόλουθη δομή.
Run 
Κάθε καταχώρηση στη λίστα badges έχει την ακόλουθη δομή. Δείτε τον οδηγό Badges guide για τους τύπους σήματος.
Run 
Μέθοδοι HTTP
Μπορείτε να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο γεγονότος webhook στον πίνακα διαχείρισης:
- Create Event: POST ή PUT (προεπιλογή: PUT)
- Update Event: POST ή PUT (προεπιλογή: PUT)
- Delete Event: DELETE, POST ή PUT (προεπιλογή: DELETE)
Δεδομένου ότι όλα τα αιτήματα περιέχουν ένα ID, οι λειτουργίες Create και Update είναι ιδεομετρικές από προεπιλογή (PUT). Η επανάληψη του ίδιου αιτήματος Create ή Update δεν πρέπει να δημιουργεί διπλότυπα αντικείμενα στην πλευρά σας.
Κεφαλίδες Αιτήματος
Κάθε αίτημα webhook περιλαμβάνει τις ακόλουθες κεφαλίδες:
| Κεφαλίδα | Περιγραφή |
|---|---|
Content-Type | application/json |
token | Το μυστικό API σας |
X-FastComments-Timestamp | Χρονική σήμανση Unix (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
X-FastComments-Signature | Υπογραφή HMAC-SHA256 (sha256=<hex>) |
Δείτε την ενότητα Security & API Tokens για πληροφορίες σχετικά με την επαλήθευση της υπογραφής HMAC.
Ασφάλεια & Διακριτικά API 
Τα αιτήματα webhook του FastComments περιλαμβάνουν πολλαπλούς μηχανισμούς ελέγχου ταυτότητας για λόγους ασφαλείας.
Headers που Αποστέλλονται
| Header | Περιγραφή |
|---|---|
token | Το API Secret σας (για συμβατότητα με παλαιότερες εκδόσεις) |
X-FastComments-Timestamp | Unix timestamp (δευτερόλεπτα) κατά τη στιγμή της υπογραφής του αιτήματος |
X-FastComments-Signature | Υπογραφή HMAC-SHA256 του payload |
Επαλήθευση Υπογραφής HMAC (Συνιστάται)
Συνιστούμε ανεπιφύλακτα την επαλήθευση της υπογραφής HMAC για να διασφαλίσετε ότι τα payloads του webhook είναι γνήσια και δεν έχουν παραποιηθεί.
Μορφή Υπογραφής: sha256=<hex-encoded-signature>
Πώς υπολογίζεται η υπογραφή:
- Συνένωση:
timestamp + "." + JSON_payload_body - Υπολογισμός HMAC-SHA256 χρησιμοποιώντας το API Secret σας ως κλειδί
- Κωδικοποίηση του αποτελέσματος σε hex
Παράδειγμα Επαλήθευσης (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;
}
// Verify timestamp is recent (within 5 minutes)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Replay attack prevention
}
// Verify signature
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Παράδειγμα Επαλήθευσης (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
# Verify timestamp is recent
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Verify signature
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}"
Παράδειγμα Επαλήθευσης (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Verify timestamp is recent (within 5 minutes)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Verify signature
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Παλαιού Τύπου Ελέγχος Ταυτότητας
Το header token που περιέχει το API Secret σας εξακολουθεί να αποστέλλεται για συμβατότητα με παλαιότερες εκδόσεις. Ωστόσο, συνιστούμε τη μετάβαση στην επαλήθευση HMAC για βελτιωμένη ασφάλεια, καθώς προστατεύει από επιθέσεις replay.
Διαχείριση Webhooks μέσω του API 
Τα Webhooks μπορούν επίσης να διαχειριστούν μέσω του REST API. Έτσι γίνονται συνδρομές σε συμβάντα σχολίων από ενσωματώσεις όπως το Zapier χωρίς να αγγίζεται το dashboard, και ακολουθεί το μοτίβο REST Hooks: συνδρομή, λήψη συμβάντων, κατάργηση συνδρομής.
Οι συνδρομές μέσω API συνυπάρχουν με τα webhooks που ρυθμίζονται στο dashboard. Ένα συμβάν σχολίου παραδίδεται σε κάθε webhook που ταιριάζει με το domain του, το καθένα ως ξεχωριστή παράδοση, ανεξάρτητα από το πώς δημιουργήθηκε το webhook.
Πιστοποίηση
Κάθε αίτημα απαιτεί το API Key σας στην επικεφαλίδα x-api-key (ή την παράμετρο API_KEY στο query string) και το tenant ID σας στην παράμετρο tenantId του query string. Και τα δύο εμφανίζονται στη σελίδα API Secret στο dashboard.
Συνδρομή
POST https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
x-api-key: YOUR_API_KEY
Content-Type: application/json
{
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created"
}| Πεδίο | Απαραίτητο | Περιγραφή |
|---|---|---|
url | Ναι | Ένα απόλυτο URL http ή https. |
event | Ναι | comment-created, comment-updated ή comment-deleted. |
domain | Όχι | Ένα domain από τη ρύθμιση του λογαριασμού σας. Προεπιλογή είναι το *, το οποίο λαμβάνει συμβάντα για κάθε domain. |
method | Όχι | POST (προεπιλογή), PUT ή DELETE. |
Η απάντηση περιέχει τη συνδρομή:
{
"status": "success",
"webhook": {
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created",
"domain": "*",
"method": "POST",
"source": "api",
"enabled": true,
"createdAt": "2026-09-08T12:00:00.000Z"
}
}
Η επανάληψη συνδρομής του ίδιου URL στο ίδιο συμβάν και domain επιστρέφει την υπάρχουσα συνδρομή αντί να δημιουργήσει διπλότυπο, ώστε ένας client να μπορεί να επαναλάβει το αίτημα με ασφάλεια. Κάθε tenant μπορεί να έχει έως 50 συνδρομές μέσω API.
Λίστα
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Επιστρέφει κάθε webhook για τον tenant, συμπεριλαμβανομένων εκείνων που διαχειρίζονται στο dashboard ("source": "dashboard"). Φιλτράρετε με event, domain ή source.
Κατάργηση συνδρομής
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Η διαγραφή μιας συνδρομής απορρίπτει επίσης τυχόν συμβάντα που βρίσκονται ακόμα σε ουρά για αυτήν. Μόνο συνδρομές που δημιουργήθηκαν μέσω API μπορούν να διαγραφούν με αυτόν τον τρόπο· ένα webhook του dashboard, ή ένα id που δεν υπάρχει στον λογαριασμό σας, απαντά με 404 και κωδικό not-found. Τα webhooks του dashboard επεξεργάζονται στη σελίδα Webhooks.
Payloads και υπογραφή
Οι παραδόσεις χρησιμοποιούν το ίδιο payload με τα webhooks του dashboard (βλ. Data Structures) και υπογράφονται με το ίδιο σχήμα HMAC (βλ. Security & API Tokens). Οι συνδρομές μέσω API δεν λαμβάνουν ποτέ την παλαιά επικεφαλίδα token, οπότε επαληθεύστε την επικεφαλίδα X-FastComments-Signature αντί αυτής.
Δείγματα payloads
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Επιστρέφει τα πιο πρόσφατα σχόλια του λογαριασμού ακριβώς στη μορφή που φέρει μια παράδοση, ώστε μια ενσωμάτωση να μπορεί να εμφανίσει πραγματικά δείγματα δεδομένων πριν φτάσει το πρώτο συμβάν. Το event είναι προαιρετικό και απλώς επικυρώνεται, αφού κάθε συμβάν παραδίδει το ίδιο αντικείμενο σχολίου. Το limit έχει προεπιλογή το 3 και δέχεται τιμές από 1 έως 10. Κοστίζει 2 API credits.
{
"status": "success",
"payloads": [
{
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"urlId": "https://example.com/blog/hello-world",
"commenterName": "Jane Reader",
"comment": "Great article!",
"date": "2026-09-08T12:00:00.000Z",
"approved": true
}
]
}
Απάντηση με 410 Gone
Αν το endpoint μιας συνδρομής μέσω API απαντήσει με HTTP 410 Gone, το FastComments το ερμηνεύει ως κατάργηση συνδρομής: η συνδρομή διαγράφεται μαζί με τα συμβάντα της σε ουρά και δεν γίνονται περαιτέρω προσπάθειες παράδοσης. Τα webhooks που ρυθμίζονται στο dashboard δεν διαγράφονται ποτέ αυτόματα· για αυτά ένα 410 είναι μια συνηθισμένη αποτυχία. Κάθε άλλη κατάσταση αποτυχίας επαναλαμβάνεται και τελικά απενεργοποιεί το webhook, όπως περιγράφεται στο How it Works & Handling Retries.
Dashboard
Οι συνδρομές μέσω API εμφανίζονται στη λίστα Webhooks με πηγή API, όπου ένας διαχειριστής μπορεί να τις επεξεργαστεί, να τις απενεργοποιήσει, να τις επανενεργοποιήσει ή να τις διαγράψει.
Πώς Λειτουργεί & Διαχείριση Επανάληψης 
Όλες οι αλλαγές στο αντικείμενο Comment στο σύστημα πυροδοτούν ένα συμβάν που καταλήγει σε μια ουρά.
Το αρχικό συμβάν webhook αποστέλλεται συνήθως εντός έξι δευτερολέπτων από τη στιγμή που συμβαίνει η πηγή του συμβάντος.
Μπορείτε να παρακολουθήσετε αυτήν την ουρά στη διαχείριση Webhooks σε περίπτωση που το API σας διακοπεί.
Εάν ένα αίτημα προς το API σας αποτύχει, θα το επανατοποθετήσουμε στην ουρά σύμφωνα με ένα χρονοδιάγραμμα.
Αυτό το χρονοδιάγραμμα είναι 1 Minute * the retry count. Εάν η κλήση αποτύχει μία φορά, θα προσπαθήσει ξανά σε
ένα λεπτό. Εάν αποτύχει δύο φορές, τότε θα περιμένει δύο λεπτά, και ούτω καθεξής. Αυτό γίνεται ώστε να
μην υπερφορτώσουμε το API σας σε περίπτωση που παρουσιάζει προβλήματα λόγω φόρτου.
Τα Webhooks μπορούν να ακυρωθούν από τη σελίδα καταγραφών.
Συμπερασματικά
Με αυτό ολοκληρώνεται η τεκμηρίωση των Webhooks.
Ελπίζουμε να βρείτε την ενσωμάτωση Webhook του FastComments εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Εάν πιστεύετε ότι έχετε εντοπίσει κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.