
Γλώσσα 🇨🇾 Ελληνικά (Κύπρος)
Επισκόπηση
Υλοποίηση
Πίσω από τα παρασκήνια
Με το FastComments είναι δυνατή η κλήση ενός API endpoint όποτε ένα σχόλιο προστίθεται, ενημερώνεται ή αφαιρείται από το σύστημά μας.
Αυτό το πετυχαίνουμε με ασύγχρονα webhooks μέσω HTTP/HTTPS.
Τι είναι τα Webhooks 
Ένα Webhook είναι ένας μηχανισμός, ή μια ενσωμάτωση, μεταξύ δύο συστημάτων όπου ο "παραγωγός" (FastComments) ενεργοποιεί ένα συμβάν το οποίο ο "καταναλωτής" (Εσείς) καταναλώνει μέσω κλήσης API.
Υποστηριζόμενα συμβάντα και πόροι 
FastComments υποστηρίζει webhooks μόνο για τον πόρο Comment.
Υποστηρίζουμε webhooks για τη δημιουργία σχολίων, τη διαγραφή και κατά την ενημέρωση.
Κάθε μία από αυτές θεωρείται ξεχωριστό γεγονός στο σύστημά μας και ως εκ τούτου έχουν διαφορετική σημασιολογία και δομή για τα γεγονότα webhook.
Ρύθμιση τοπικής ανάπτυξης 
Για τοπική ανάπτυξη, χρησιμοποιήστε ένα εργαλείο όπως το ngrok.
Για να απλοποιηθεί η διατήρηση της ασφάλειας του συστήματος, η τοπική ανάπτυξη ακολουθεί την ίδια διαδικασία με τη ρύθμιση και την ασφάλιση άλλων περιβαλλόντων.
Βήμα 1: Προσθέστε το "localhost" στους τομείς του λογαριασμού σας.
Προσθέστε το "localhost" ως domain εδώ.
Βήμα 2: Επιλέξτε ένα API Key
Θα προσθέσουμε διαμόρφωση webhook για τον τομέα σας, οπότε θα χρειαστούμε ένα API key. Μπορείτε να το κάνετε εδώ.
Στο "Associate with domain" - επιλέξτε τον "localhost" τομέα σας.
ΣΗΜΕΙΩΣΗ: Εναλλακτικά, μπορείτε να χρησιμοποιήσετε ένα API Secret για όλη τη δραστηριότητα δοκιμών και τα staging περιβάλλοντα. Απλώς προσθέστε ένα API Secret για "All Domains", και δώστε του ένα όνομα όπως "test".
Βεβαιωθείτε ότι έχετε ορίσει ένα API Secret για τους production τομείς σας. Τα γεγονότα για όλους τους άλλους τομείς θα χρησιμοποιούν το wildcard (testing) secret.
Βήμα 3: Προσθέστε το Webhook σας
Ενώ τρέχετε το ngrok ή παρόμοιο εργαλείο, ορίστε την τιμή για το "localhost" εδώ.
Όταν κάνετε κλικ στο Send Test Payload, θα στείλουμε δύο δοκιμαστικά γεγονότα για να ελέγξουμε ότι επικυρώνετε το API key.
Μόλις επικυρωθεί, πατήστε Save.
Βήμα 4: Προσθέστε ένα Σχόλιο
Τώρα μπορείτε να προσθέσετε, επεξεργαστείτε ή διαγράψετε σχόλια και θα πρέπει να δείτε το σύστημά μας να καλεί το τοπικό σας μηχάνημα ανάπτυξης με τα γεγονότα, χρησιμοποιώντας το testing API key σας. Μπορεί να υπάρξει καθυστέρηση μέχρι 30 δευτερόλεπτα για να φτάσουν τα γεγονότα στο μηχάνημά σας.
Ρύθμιση 
Ακολούθησε τα ίδια βήματα για το localhost όπως θα έκανες για το περιβάλλον παραγωγής. Βεβαιώσου ότι έχεις ρυθμίσει domains παραγωγής και τα API Secrets.
Πρώτα, πλοηγήσου στο Webhooks admin. Αυτό είναι προσβάσιμο μέσω Manage Data -> Webhooks.
Η σελίδα ρύθμισης εμφανίζεται ως εξής:
Σε αυτή τη σελίδα μπορείς να καθορίσεις endpoints για κάθε τύπο συμβάντος σχολίου.
Για κάθε τύπο συμβάντος, φρόντισε να πατήσεις Send Test Payload για να επιβεβαιώσεις ότι έχεις ρυθμίσει σωστά την ενσωμάτωσή σου. Δες την επόμενη ενότητα, "Testing", για λεπτομέρειες.
Δοκιμές 
Στο Webhooks admin υπάρχουν τα κουμπιά Send Test Payload για κάθε τύπο συμβάντος (Create, Update, Delete). Τα Create και Update συμβάντα στέλνουν ένα δοκιμαστικό αντικείμενο WebhookComment, ενώ το δοκιμαστικό για το Delete θα στείλει ένα δοκιμαστικό σώμα αιτήματος με μόνο ένα ID.
Επαλήθευση φορτίων
Κατά τον έλεγχο της ενσωμάτωσης 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" περιείχε μόνο το id του σχολίου. Τώρα περιέχει ολόκληρο το σχόλιο κατά τη στιγμή της διαγραφής.
Run 
Όταν οι χρήστες ετικετοποιούνται σε ένα σχόλιο, οι πληροφορίες αποθηκεύονται σε μια λίστα που ονομάζεται mentions. Κάθε αντικείμενο σε αυτή τη λίστα έχει την ακόλουθη δομή.
Run 
Μέθοδοι HTTP
Μπορείτε να ρυθμίσετε τη μέθοδο HTTP για κάθε τύπο γεγονότος webhook στο πάνελ διαχείρισης:
- 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 |
Your API Secret |
X-FastComments-Timestamp |
Unix timestamp (δευτερόλεπτα) όταν υπογράφτηκε το αίτημα |
X-FastComments-Signature |
HMAC-SHA256 υπογραφή (sha256=<hex>) |
Δείτε Ασφάλεια & API Tokens για πληροφορίες σχετικά με την επαλήθευση της υπογραφής HMAC.
Ασφάλεια και διακριτικά API 
Τα αιτήματα webhook του FastComments περιλαμβάνουν πολλαπλούς μηχανισμούς αυθεντικοποίησης για λόγους ασφάλειας.
Αποστελλόμενες κεφαλίδες
| Κεφαλίδα | Περιγραφή |
|---|---|
token |
Το API Secret σας (για συμβατότητα προς τα πίσω) |
X-FastComments-Timestamp |
Unix χρονοσφραγίδα (σε δευτερόλεπτα) όταν το αίτημα υπογράφηκε |
X-FastComments-Signature |
HMAC-SHA256 υπογραφή του payload |
Επαλήθευση HMAC Υπογραφής (Συνιστάται)
Συνιστούμε έντονα να επαληθεύετε την HMAC υπογραφή για να διασφαλίσετε ότι τα payload των webhooks είναι αυθεντικά και δεν έχουν παραποιηθεί.
Μορφή Υπογραφής: 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);
}
Παρωχημένη Αυθεντικοποίηση
Η κεφαλίδα token που περιέχει το API Secret σας εξακολουθεί να αποστέλλεται για συμβατότητα με παλαιότερες εκδόσεις. Ωστόσο, προτείνουμε τη μετάβαση στην επαλήθευση HMAC για βελτιωμένη ασφάλεια καθώς προστατεύει από επιθέσεις επανάληψης.
Πώς λειτουργεί και διαχείριση επαναπροσπαθειών 
Όλες οι αλλαγές στο αντικείμενο Comment στο σύστημα ενεργοποιούν ένα συμβάν που καταλήγει σε μια ουρά.
Το αρχικό webhook συμβάν συνήθως αποστέλλεται εντός έξι δευτερολέπτων από τη στιγμή που συμβαίνει η πηγή του συμβάντος.
Μπορείτε να παρακολουθείτε αυτήν την ουρά στο Webhooks admin σε περίπτωση που το API σας πέσει.
Αν ένα αίτημα προς το API σας αποτύχει, θα το επανατοποθετήσουμε στην ουρά σύμφωνα με ένα πρόγραμμα.
Αυτό το πρόγραμμα είναι 1 Minute * the retry count. Αν η κλήση αποτύχει μία φορά, θα προσπαθήσει ξανά σε
ένα λεπτό. Αν αποτύχει δύο φορές, τότε θα περιμένει δύο λεπτά, και ούτω καθεξής. Αυτό γίνεται ώστε να
μην υπερφορτώσουμε το API σας εάν παρουσιάζει προβλήματα λόγω φόρτου.
Τα Webhooks μπορούν να ακυρωθούν από τη σελίδα καταγραφών.
Συμπερασματικά
Αυτό ολοκληρώνει την τεκμηρίωση των Webhooks μας.
Ελπίζουμε να βρείτε την ενσωμάτωση Webhook του FastComments εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Αν θεωρείτε ότι εντοπίσατε κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.