
Γλώσσα 🇨🇾 Ελληνικά (Κύπρος)
Επισκόπηση
Υλοποίηση
Πίσω από τα παρασκήνια
Με το 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 υπάρχουν κουμπιά Send Test Payload για κάθε τύπο συμβάντος (Create, Update, Delete). Τα συμβάντα Create και Update στέλνουν ένα δοκιμαστικό αντικείμενο WebhookComment, ενώ ο έλεγχος του Delete θα στείλει ένα δοκιμαστικό σώμα αιτήματος με μόνο ένα ID.
Επαλήθευση Payloads
Όταν δοκιμάζετε την ενσωμάτωση webhook, επαληθεύστε ότι τα εισερχόμενα αιτήματα περιλαμβάνουν τις ακόλουθες κεφαλίδες:
token- Το μυστικό API σαςX-FastComments-Timestamp- Χρονική σφραγίδα Unix (δευτερόλεπτα)X-FastComments-Signature- Υπογραφή HMAC-SHA256
Χρησιμοποιήστε την επαλήθευση υπογραφής HMAC για να διασφαλίσετε ότι τα payloads είναι αυθεντικά.
Εργαλεία Δοκιμής
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως webhook.site ή ngrok για να επιθεωρήσετε τα εισερχόμενα payloads webhook κατά την ανάπτυξη.
Τύποι Συμβάντων
- Συμβάν Δημιουργίας: Εκκινείται όταν δημιουργείται νέο σχόλιο. Προεπιλεγμένη μέθοδος: PUT
- Συμβάν Ενημέρωσης: Εκκινείται όταν ένα σχόλιο επεξεργάζεται. Προεπιλεγμένη μέθοδος: PUT
- Συμβάν Διαγραφής: Εκκινείται όταν ένα σχόλιο διαγράφεται. Προεπιλεγμένη μέθοδος: DELETE
Κάθε συμβάν περιλαμβάνει τα πλήρη δεδομένα του σχολίου στο σώμα του αιτήματος (βλέπε Δομές Δεδομένων για τη μορφή του payload).
Δομές δεδομένων 
Η μόνη δομή που αποστέλλεται μέσω webhooks είναι το αντικείμενο WebhookComment, που περιγράφεται σε TypeScript παρακάτω.
Η Δομή του Αντικειμένου WebhookComment
The "Create" Event Structure
Το σώμα του αιτήματος για το event "create" είναι ένα αντικείμενο WebhookComment.
The "Update" Event Structure
Το σώμα του αιτήματος για το event "update" είναι ένα αντικείμενο WebhookComment.
The "Delete" Event Structure
Το σώμα του αιτήματος για το event "delete" είναι ένα αντικείμενο WebhookComment.
Αλλαγή από 14 Νοεμβρίου 2023
Προηγουμένως, το σώμα του αιτήματος για το event "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 για κάθε τύπο event 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 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 εύκολη στην κατανόηση και γρήγορη στη ρύθμιση.
Αν θεωρείτε ότι εντοπίσατε κενά στην τεκμηρίωσή μας, ενημερώστε μας παρακάτω.