
Γλώσσα 🇬🇷 Ελληνικά
Επισκόπηση
Υλοποίηση
Πίσω από τα Παρασκήνια
Webhooks
Με το FastComments είναι δυνατό να κληθεί ένα API endpoint κάθε φορά που ένα σχόλιο προστίθεται, ενημερώνεται ή αφαιρείται από το σύστημά μας.
Αυτό το επιτυγχάνουμε με ασύγχρονα webhooks μέσω HTTP/HTTPS.
Τι είναι τα Webhooks 
Ένα Webhook είναι ένας μηχανισμός, ή μια ενσωμάτωση, μεταξύ δύο συστημάτων όπου ο "παραγωγός" (FastComments) πυροδοτεί ένα συμβάν που ο "καταναλωτής" (Εσείς) καταναλώνει μέσω κλήσης API.
Υποστηριζόμενα Γεγονότα και Πόροι 
FastComments υποστηρίζει webhooks μόνο για το resource Comment.
Υποστηρίζουμε webhooks για τη δημιουργία σχολίου, την αφαίρεση και την ενημέρωση.
Κάθε ένα από αυτά θεωρείται ξεχωριστό συμβάν στο σύστημά μας και ως εκ τούτου έχουν διαφορετική σημασιολογία και δομή για τα συμβάντα 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 δευτερόλεπτα για να φτάσουν τα γεγονότα στο μηχάνημά σας.
Ρύθμιση 
Follow the same steps for localhost as you would production. Ensure you have production domains and API Secrets setup.
First, navigate to the διαχειριστικό Webhooks. This is accessible via Διαχείριση Δεδομένων -> Webhooks.
The configuration page appears as follows:
In this page you can specify endpoints for each type of comment event.
For each type of event, be sure to click Send Test Payload to ensure you've set up your integration correctly. See the next section, "Testing", for details.
Δοκιμές 
Στο Webhooks admin υπάρχουν κουμπιά Send Test Payload για κάθε τύπο συμβάντος (Create, Update, Delete). Τα Create και Update συμβάντα στέλνουν ένα dummy αντικείμενο WebhookComment, ενώ η δοκιμή του Delete θα στείλει ένα dummy σώμα αιτήματος με μόνο ένα ID.
Verifying Payloads
Κατά τη δοκιμή της ενσωμάτωσης webhook, επαληθεύστε ότι τα εισερχόμενα αιτήματα περιλαμβάνουν τις ακόλουθες κεφαλίδες:
token- Το μυστικό API σαςX-FastComments-Timestamp- Unix χρονική σφραγίδα (δευτερόλεπτα)X-FastComments-Signature- HMAC-SHA256 υπογραφή
Χρησιμοποιήστε την επαλήθευση υπογραφής HMAC για να διασφαλίσετε ότι τα payloads είναι γνήσια.
Testing Tools
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως webhook.site ή ngrok για να εξετάσετε τα εισερχόμενα payloads webhook κατά την ανάπτυξη.
Event Types
- Create Event: Προκαλείται όταν δημιουργείται ένα νέο σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Update Event: Προκαλείται όταν επεξεργάζεται ένα σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Delete Event: Προκαλείται όταν διαγράφεται ένα σχόλιο. Προεπιλεγμένη μέθοδος: DELETE
Κάθε συμβάν περιλαμβάνει τα πλήρη δεδομένα του σχολίου στο σώμα του αιτήματος (βλέπε Data Structures για τη μορφή του payload).
Δομές δεδομένων 
Η μόνη δομή που αποστέλλεται μέσω webhooks είναι το αντικείμενο WebhookComment, περιγραφόμενο σε TypeScript παρακάτω.
Δομή του αντικειμένου WebhookComment
Δομή του συμβάντος "Create"
Το σώμα του αιτήματος για το συμβάν "create" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "Update"
Το σώμα του αιτήματος για το συμβάν "update" είναι ένα αντικείμενο WebhookComment.
Δομή του συμβάντος "Delete"
Το σώμα του αιτήματος για το συμβάν "delete" είναι ένα αντικείμενο WebhookComment.
Αλλαγή από 14 Νοεμβρίου 2023
Προηγουμένως το σώμα του αιτήματος για το συμβάν "delete" περιείχε μόνο το id του σχολίου. Τώρα περιέχει ολόκληρο το σχόλιο κατά τη στιγμή της διαγραφής.
Run 
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.
Run 
Μέθοδοι HTTP
Μπορείτε να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο συμβάντος webhook στο admin panel:
- Create Event: POST ή PUT (προεπιλογή: PUT)
- Update Event: POST ή PUT (προεπιλογή: PUT)
- Delete Event: DELETE, POST ή PUT (προεπιλογή: DELETE)
Εφόσον όλα τα αιτήματα περιέχουν ένα ID, οι λειτουργίες Create και Update είναι idempotent από προεπιλογή (PUT). Η επανάληψη του ίδιου αιτήματος Create ή Update δεν θα πρέπει να δημιουργεί διπλότυπα αντικείμενα στην πλευρά σας.
Κεφαλίδες Αιτήματος
Κάθε αίτημα webhook περιλαμβάνει τις ακόλουθες κεφαλίδες:
| Κεφαλίδα | Περιγραφή |
|---|---|
Content-Type | application/json |
token | Το API Secret σας |
X-FastComments-Timestamp | Unix χρονοσφραγίδα (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
X-FastComments-Signature | Υπογραφή HMAC-SHA256 (sha256=<hex>) |
Δείτε Security & API Tokens για πληροφορίες σχετικά με την επαλήθευση της υπογραφής HMAC.
Ασφάλεια και Διακριτικά API 
Τα αιτήματα webhook του FastComments περιλαμβάνουν πολλούς μηχανισμούς πιστοποίησης για λόγους ασφάλειας.
Κεφαλίδες που αποστέλλονται
| Κεφαλίδα | Περιγραφή |
|---|---|
token | Το API Secret σας (για συμβατότητα προς τα πίσω) |
X-FastComments-Timestamp | Unix timestamp (δευτερόλεπτα) όταν υπογράφηκε το αίτημα |
X-FastComments-Signature | HMAC-SHA256 υπογραφή του payload |
Επαλήθευση Υπογραφής HMAC (Συνιστάται)
Συνιστούμε θερμά την επαλήθευση της υπογραφής HMAC για να διασφαλίσετε ότι τα payloads των webhook είναι αυθεντικά και δεν έχουν παραποιηθεί.
Signature Format: sha256=<hex-encoded-signature>
Πώς υπολογίζεται η υπογραφή:
- Concatenate:
timestamp + "." + JSON_payload_body - Compute HMAC-SHA256 using your API Secret as the key
- Hex-encode the result
Παράδειγμα Επαλήθευσης (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;
}
// Επαλήθευση ότι το timestamp είναι πρόσφατο (εντός 5 λεπτών)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Πρόληψη επίθεσης επανάληψης
}
// Επαλήθευση υπογραφής
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
# Επαλήθευση ότι το timestamp είναι πρόσφατο
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}"
Παράδειγμα Επαλήθευσης (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Επαλήθευση ότι το timestamp είναι πρόσφατο (εντός 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);
}
Παλιός Τρόπος Πιστοποίησης
Η κεφαλίδα token που περιέχει το API Secret σας εξακολουθεί να αποστέλλεται για συμβατότητα προς τα πίσω. Ωστόσο, συνιστούμε τη μετάβαση στην επαλήθευση HMAC για βελτιωμένη ασφάλεια καθώς προστατεύει από επιθέσεις επανάληψης.
Πώς λειτουργεί και χειρισμός επαναπροσπαθειών 
Όλες οι αλλαγές στο αντικείμενο Comment στο σύστημα πυροδοτούν ένα συμβάν που καταλήγει σε μια ουρά.
Το αρχικό συμβάν webhook αποστέλλεται συνήθως εντός έξι δευτερολέπτων από τη στιγμή που συμβαίνει η πηγή του συμβάντος.
Μπορείτε να παρακολουθήσετε αυτήν την ουρά στη διαχείριση Webhooks σε περίπτωση που το API σας διακοπεί.
Εάν ένα αίτημα προς το API σας αποτύχει, θα το επανατοποθετήσουμε στην ουρά σύμφωνα με ένα χρονοδιάγραμμα.
Αυτό το χρονοδιάγραμμα είναι 1 Minute * the retry count. Εάν η κλήση αποτύχει μία φορά, θα προσπαθήσει ξανά σε
ένα λεπτό. Εάν αποτύχει δύο φορές, τότε θα περιμένει δύο λεπτά, και ούτω καθεξής. Αυτό γίνεται ώστε να
μην υπερφορτώσουμε το API σας σε περίπτωση που παρουσιάζει προβλήματα λόγω φόρτου.
Τα Webhooks μπορούν να ακυρωθούν από τη σελίδα καταγραφών.
Συμπερασματικά
Με αυτό ολοκληρώνεται η τεκμηρίωση των Webhooks.
Ελπίζουμε να βρείτε την ενσωμάτωση Webhook του FastComments εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Εάν πιστεύετε ότι έχετε εντοπίσει κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.