
Γλώσσα 🇬🇷 Ελληνικά
Εγκατάσταση Val Town
Προσθήκη ζωντανής σχολιασμού στις εφαρμογές Val Town
Val Town εκτελεί TypeScript στο Deno, έτσι ένα val είναι ένας πραγματικός διακομιστής. Αυτό το καθιστά κατάλληλο για το FastComments: το widget είναι μια ετικέτα script στη σελίδα, και οτιδήποτε χρειάζεται ένα μυστικό, όπως Secure SSO ή η επαλήθευση ενός webhook, μπορεί να εκτελεστεί στο διακομιστή στο ίδιο val.
Αυτός ο οδηγός καλύπτει την προσθήκη του widget σχολίων σε ένα HTTP val, την εμφάνιση του αριθμού σχολίων σε μια σελίδα ευρετηρίου, τη σύνδεση χρηστών με τον λογαριασμό Val Town που ήδη έχουν, και τη λήψη webhook σχολίων.
Δεν χρειάζεστε λογαριασμό για να το δοκιμάσετε. Τα παραδείγματα χρησιμοποιούν tenantId: "demo", ένα κοινόχρηστο sandbox, και το Βήμα 2 καλύπτει τη μετάβαση στο δικό σας.
Βήμα 1: Προσθήκη του Widget 
Το widget είναι μια ετικέτα script και ένα στοιχείο container, έτσι ενσωματώνεται σε ό,τι ήδη αποδίδει το val σας. Αυτό το παράδειγμα χρησιμοποιεί Hono JSX, το οποίο είναι αυτό που χρησιμοποιούν τα HTTP templates του Val Town.
Run 
Επιλέξτε ένα urlId πριν το εκδώσετε
urlId καθορίζει σε ποιο νήμα θα τοποθετηθεί ένα σχόλιο. Αν το αφήσετε ακαθορισμένο, προεπιλέγεται μια καθαρισμένη έκδοση του τρέχοντος URL της σελίδας, που είναι ακριβώς το στοιχείο που αλλάζει στο Val Town: ένα val έχει ένα μακρύ hostname *.web.val.run μέχρι να διεκδικήσετε ένα υποτομέα, τα κλαδιά παίρνουν τα δικά τους URL και η μετονομασία μιας σελίδας αλλάζει τη διαδρομή. Κάθε παραλλαγή γίνεται σιωπηρά ένα ξεχωριστό, κενό νήμα, και το σύμπτωμα εμφανίζεται ως «τα σχόλιά μου εξαφανίστηκαν».
Ορίστε το σε κάτι σταθερό που ελέγχετε, όπως το slug της ανάρτησης ή ένα αναγνωριστικό βάσης δεδομένων, όπως παραπάνω. Περνάτε επίσης το url, ώστε τα email ειδοποιήσεων και τα εργαλεία διαχείρισης να μπορούν να συνδέονται πίσω στη πραγματική σελίδα.
Διατήρηση σχολίων χωρίς JavaScript
Το FastComments αποδίδει ένα πλήρες νήμα διακομιστή, το οποίο ένα val μπορεί να ενσωματώσει σε ένα μπλοκ <noscript>:
Run 
Κωδικοποιήστε τις παραμέτρους σε URL. Η έκδοση διακομιστή υποστηρίζει ανώνυμη και συνδεδεμένη σχολιασμό, SSO, και ένθετες απαντήσεις.
Βήμα 2: Χρησιμοποιήστε το δικό σας λογαριασμό 
tenantId: "demo" είναι ένα κοινό δημόσιο sandbox. Λειτουργεί χωρίς εγγραφή, γι' αυτό τα παραδείγματα το χρησιμοποιούν, αλλά όλοι οι άλλοι που δοκιμάζουν το FastComments γράφουν στα ίδια νήματα και οποιοσδήποτε μπορεί να τα συντονίσει. Αλλάξτε το πριν δημοσιεύσετε οτιδήποτε σας ενδιαφέρει.
Το tenant ID σας βρίσκεται στη σελίδα μυστικού API.
Ένα tenant ID είναι δημόσιο και ανήκει στον κώδικα του προγράμματος περιήγησης. Ένα μυστικό API δεν είναι, και τίποτα σε αυτή τη σελίδα δεν χρειάζεται ένα.
Διαβάστε το από μεταβλητή περιβάλλοντος
Τα vals του Val Town είναι δημόσια στην δωρεάν έκδοση, έτσι η πηγή τους είναι αναγνώσιμη από όλους. Κρατήστε οτιδήποτε ευαίσθητο σε μεταβλητές περιβάλλοντος, διαβάζοντας με Deno.env.get:
Run 
Αυτό έχει μεγαλύτερη σημασία από το συνηθισμένο στο Val Town για έναν δεύτερο λόγο: η επανασύνθεση ενός val αντιγράφει τα κλειδιά των μεταβλητών περιβάλλοντος, αλλά όχι τις τιμές τους. Ένα μυστικό που διατηρείται σε μεταβλητή περιβάλλοντος δεν ακολουθεί το val σας σε λογαριασμό κάποιου άλλου. Ένα μυστικό γραμμένο σε αρχείο το κάνει.
Η επιστροφή στην τιμή "demo" διατηρεί το val λειτουργικό για όποιον το επανασυνθέσει πριν ορίσει το δικό του tenant.
EU λογαριασμοί
Ένας λογαριασμός, τα δεδομένα του και τα κλειδιά του ζουν σε μία περιοχή. Αν ο δικός σας δημιουργήθηκε στο eu.fastcomments.com, κάθε ρύθμιση widget χρειάζεται επίσης region: "eu", και τα scripts φορτώνουν από cdn-eu.fastcomments.com. Διαφορετικά αφήστε και τα δύο όπως είναι.
Αριθμοί σχολίων σε σελίδα ευρετηρίου 
Σε μια σελίδα ευρετηρίου, μην αποδίδετε ένα widget καταμέτρησης σχολίων ανά γραμμή. Αυτό σημαίνει ένα αίτημα ανά ανάρτηση. Χρησιμοποιήστε τη μαζική μέτρηση, η οποία απαιτεί ένα μόνο αίτημα για ολόκληρη τη σελίδα.
Σημειώστε κάθε γραμμή με το urlId που χρησιμοποιεί το νήμα της, και στη συνέχεια φορτώστε το μαζικό widget μία φορά:
Run 
Το script εντοπίζει κάθε στοιχείο .fast-comments-count στη σελίδα και γεμίζει τη μέτρησή του.
data-fast-comments-url-id πρέπει να ταιριάζει με το urlId που χρησιμοποιεί το widget σχολίων της ανάρτησης. Εάν το widget χρησιμοποιεί το slug, ο δείκτης χρησιμοποιεί το slug. Μια ασυμφωνία εμφανίζει μηδέν σε ένα νήμα που έχει σχόλια.
Το script ελέγχει περιοδικά το window.FastCommentsBulkCountConfig, επομένως δεν έχει σημασία αν ορίσετε τη διαμόρφωση πριν ή μετά το στοιχείο script.
Ασφαλής SSO με std/oauth 
If your val already knows who the visitor is, Secure SSO hands that identity to the widget so they never see a second login. There are no endpoints to build and nothing to call at runtime: you compute three values server-side and pass them in the widget config.
Val Town ships zero-config login with std/oauth, so the visitor can sign in with the Val Town account they already have. Swap that for whatever your app uses; the FastComments half does not change.
Build the payload on the server
The API secret signs the payload and must never reach browser code. Install the SDK from npm, which works on Val Town's Deno runtime as-is:
Run 
getPayload() returns { userDataJSONBase64, verificationHash, timestamp }. Those three values are all that reach the browser. The secret signs them and is then dropped, so nothing in the page lets a reader forge a different user.
Pass it to the widget
Run 
oauthMiddleware adds GET /auth/login, GET /auth/callback and POST /auth/logout for you. Note that logout is a POST, while the widget navigates to logoutURL with a GET, so point logoutURL at a small route of your own that submits the POST.
When the visitor is logged out, pass sso with only a loginURL. The widget then shows a login prompt instead of an anonymous comment box.
Things that go wrong
timestamp is epoch milliseconds, must not be in the future, and must not be more than two days old. Generate it on the server in the same request that computes the hash. Generating it in the browser is the classic failure: the value differs from the one that was hashed and every comment is rejected.
Never set isAdmin or isModerator from the identity provider. Signing in with a Val Town account says nothing about who should moderate your site.
See the οδηγός SSO for the full field list, group-gated threads, and badges.
Λήψη Webhooks 
A val είναι ένας φυσικός δέκτης webhook: διαθέτει σταθερό URL, μπορεί να επαληθεύσει μια υπογραφή και έχει ενσωματωμένη αποθήκευση SQLite και blob.
FastComments υπογράφει ${timestamp}.${body} με το μυστικό API του λογαριασμού σας και στέλνει δύο κεφαλίδες:
Run 
Η μέθοδος μεταφέρει το γεγονός: PUT για ένα δημιουργημένο ή ενημερωμένο σχόλιο, DELETE για ένα διαγραμμένο.
Run 
Δύο πράγματα που προκαλούν προβλήματα
Επαληθεύστε τα ακατέργαστα byte. Η ανάλυση του JSON και η επανα-σειριοποίησή του αλλάζει τη σειρά των κλειδιών και τα κενά, έτσι το hash διαφέρει και κάθε παράδοση αποτυγχάνει χωρίς προφανή λόγο. Αυτό είναι ο συνηθισμένος λόγος που ένας δέκτης webhook «απλώς δεν λειτουργεί».
Συγκρίνετε σε σταθερό χρόνο. Ένα απλό === στην υπογραφή διαρρέει πόσα byte ταιριάζουν, κάτι που αρκεί για να παραχθεί ένα byte τη φορά.
Διαχείριση συμβάντων
Απαντήστε γρήγορα. Το FastComments κάνει επανεγγραφές σε μη-2xx απαντήσεις, και ένα endpoint που συνεχίζει να αποτυγχάνει απενεργοποιείται αυτόματα μετά από κάποιο χρόνο, επομένως εκτελέστε την πραγματική εργασία μετά την απάντηση αντί εντός της απάντησης.
Κάντε αυτή τη λειτουργία αμετάβλητη (idempotent) με βάση το αναγνωριστικό του σχολίου. Μια επανεγγραφή υπογράφεται ξανά με νέο χρονικό σήμα, και το ίδιο αναγνωριστικό σχολίου φτάνει ξανά σε επεξεργασία και διαγραφή, οπότε δεν υπάρχει κάτι σταθερό για απο-διπλοεγγραφή.
Παραδείγματα Vals 
Four public vals you can remix, each covering one piece of this guide.
Blog with comments (live) είναι ένα blog σε Markdown με νήμα κάτω από κάθε ανάρτηση και συνολικές μετρήσεις σχολίων στον δείκτη. Λειτουργεί τη στιγμή που το επαναχρησιμοποιείτε, και μια μεταβλητή περιβάλλοντος το κατευθύνει στον δικό σας λογαριασμό.
SSO demo (live) συνδέει τον επισκέπτη με τον λογαριασμό του Val Town και παραδίδει αυτή την ταυτότητα στο widget, ώστε να μην υπάρχει δεύτερη σύνδεση.
Webhook receiver (live) επαληθεύει την υπογραφή HMAC σε κάθε παράδοση και αποθηκεύει τα γεγονότα σε SQLite. Διαθέτει ένα κουμπί που υπογράφει ένα δοκιμαστικό payload και το αποστέλλει στον εαυτό του, ώστε να μπορείτε να δείτε την επαλήθευση να πετυχαίνει πριν ρυθμίσετε ένα πραγματικό webhook.
Agent skills (live) είναι μια βιβλιοθήκη δεξιοτήτων πράκτορα FastComments που καλύπτει το widget, το SSO, το REST API, τη διαχείριση και τη μετάβαση από το Disqus. Επαναχρησιμοποιήστε το και ο πράκτορας της Val Town, Townie, αντλεί αυτόματα τις δεξιότητες από το skills/, ώστε ο πράκτοράς σας να ξέρει πώς να ενσωματώνει σχόλια χωρίς να επικολλάτε τεκμηρίωση στη συνομιλία.
Οι ίδιες δεξιότητες εγκαθίστανται οπουδήποτε αλλού με npx skills add fastcomments/skills.
Σφάλματα τομέα 
Μόλις απενεργοποιήσετε τον ενοικιαστή demo, το widget ενδέχεται να αρνηθεί τη φόρτωση με σφάλμα εξουσιοδότησης. Αυτό συμβαίνει επειδή η FastComments δεν γνωρίζει ότι πρέπει να επιτρέπει τη χρήση του λογαριασμού σας σε αυτόν τον τομέα.
Μεταβείτε εδώ για να προσθέσετε τον ιστότοπό σας στον λογαριασμό σας.
Το Val Town αξίζει μια δεύτερη ματιά εδώ, επειδή ένα val μπορεί να είναι προσβάσιμο από περισσότερα από ένα ονόματα κεντρικού υπολογιστή:
- Κάθε HTTP val έχει ένα μακρύ προεπιλεγμένο endpoint,
<org>--<id>.web.val.run. - Η κατοχύρωση ενός προσαρμοσμένου υποτομέα προσθέτει
<name>.val.run. - Ένας προσαρμοσμένος τομέας προσθέτει έναν τρίτο.
- Τα κλαδιά λαμβάνουν τις δικές τους διευθύνσεις URL.
Προσθέστε τα ονόματα κεντρικού υπολογιστή από τα οποία εξυπηρετείτε πραγματικά το widget. Εάν καταχωρήσετε έναν υποτομέα μετά τη ρύθμιση, προσθέστε και αυτόν, διαφορετικά το widget θα λειτουργεί στη παλιά διεύθυνση URL και θα αποτυγχάνει στη νέα.