Έκδοση Open Badges από το WordPress (Χωρίς Βαρύ Plugin)

Εκδώστε Open Badges από οποιοδήποτε plugin μαθήματος/LMS του WordPress (LearnDash, LifterLMS, Tutor) καλώντας το API του Badges Ninja κατά την ολοκλήρωση — χωρίς ξεχωριστό plugin σημάτων για εγκατάσταση.

Nacho Coll Από Ενημερώθηκε 13 λεπτά ανάγνωσης
Εκδώστε Open Badges από οποιοδήποτε plugin μαθήματος/LMS του WordPress (LearnDash, LifterLMS, Tutor) καλώντας το API του Badges Ninja κατά την ολοκλήρωση — χωρίς ξεχωριστό plugin σημάτων για εγκατάσταση.

Αν τρέχετε μαθήματα σε WordPress, ήδη γνωρίζετε τη διαδικασία: κάποιος ολοκληρώνει μια ενότητα στο LearnDash, στο LifterLMS ή στο Tutor LMS, το LMS τον σημειώνει ως «ολοκληρωμένο», και μετά… τίποτα επαληθεύσιμο δεν συμβαίνει. Ίσως στέλνετε ένα PDF με email. Ίσως εγκαθιστάτε ένα αποκλειστικό plugin σημάτων για WordPress που προσθέτει δικούς του πίνακες βάσης δεδομένων, δική του βιβλιοθήκη εικόνων και δική του αντίληψη για το τι είναι ένα «σήμα» — μια αντίληψη που κανείς εκτός του site σας δεν μπορεί να επαληθεύσει.

Υπάρχει ένας απλούστερος δρόμος. Τα plugins μαθημάτων του WordPress ήδη ενεργοποιούν ένα action hook τη στιγμή που κάποιος ολοκληρώνει ένα μάθημα. Μπορείτε να «πιάσετε» αυτό το hook και να κάνετε μία κλήση HTTP στο API του Badges Ninja. Χωρίς επιπλέον plugin, χωρίς επιπλέον φιλοξενία, χωρίς ιδιόκτητη μορφή σήματος — απλώς ένα διαπιστευτήριο Open Badge v2.0 συμβατό με πρότυπα, το οποίο ο αποδέκτης σας μπορεί να επαληθεύσει οπουδήποτε, να προσθέσει στο LinkedIn και να κατεβάσει ως PDF.

Αυτό το άρθρο περιγράφει το μοτίβο μία φορά και στη συνέχεια δείχνει το συγκεκριμένο hook για το LearnDash, το LifterLMS και το Tutor LMS.

Γιατί όχι απλώς ένα plugin σημάτων για WordPress;

Τα αποκλειστικά plugins σημάτων για WordPress λύνουν ένα στενότερο πρόβλημα από αυτό που φαίνεται ότι λύνουν. Είναι καλά στο να αποδίδουν μια εικόνα σε μια σελίδα «τα επιτεύγματά μου» μέσα στο site σας. Είναι συνήθως πολύ πιο αδύναμα στα πράγματα που πραγματικά έχουν σημασία για ένα διαπιστευτήριο:

  • Φορητότητα. Ένα σήμα που υπάρχει μόνο ως shortcode στο site σας WordPress δεν είναι διαπιστευτήριο — είναι διακόσμηση. Τη στιγμή που ο αποδέκτης αλλάζει δουλειά, αλλάζει το inbox του, ή το site σας πέφτει, η «απόδειξη» χάνεται μαζί του.
  • Επαλήθευση. Ο καθένας θα πρέπει να μπορεί να ελέγξει ότι ένα διαπιστευτήριο είναι πραγματικό χωρίς να συνδεθεί στο διαχειριστικό σας WordPress. Το Open Badge v2.0 σάς δίνει, εκ σχεδιασμού, μια δημόσια διεύθυνση επαλήθευσης URL και αναγνώσιμο από μηχανές JSON-LD.
  • Επιφάνεια συντήρησης. Κάθε plugin WordPress είναι ένα ακόμη πράγμα προς επιδιόρθωση, ένας ακόμη πίνακας βάσης δεδομένων προς αντίγραφο ασφαλείας, ένα ακόμη σημείο αστοχίας κατά τη διάρκεια μιας βασικής ενημέρωσης.

Η κλήση εξωτερικού API κατά την ολοκλήρωση μαθήματος παρακάμπτει και τα τρία αυτά. Το WordPress παραμένει υπεύθυνο για ό,τι κάνει καλά — παράδοση περιεχομένου και παρακολούθηση προόδου — και το ίδιο το διαπιστευτήριο ζει σε ένα σύστημα σχεδιασμένο ειδικά για την έκδοση, την επαλήθευση και την κοινοποίησή του.

Το μοτίβο: ένα hook, μία κλήση HTTP

Κάθε σημαντικό plugin LMS για WordPress ενεργοποιεί μια ενέργεια όταν ένας χρήστης ολοκληρώνει ένα μάθημα. Η ενσωμάτωση είναι πάντα τα ίδια τρία βήματα:

  1. Συνδεθείτε στην ενέργεια ολοκλήρωσης για το συγκεκριμένο σας LMS.
  2. Αναζητήστε (ή δημιουργήστε) την ταυτότητα του αποδέκτη — συνήθως απλώς το email και το εμφανιζόμενο όνομα του λογαριασμού WordPress του.
  3. Καλέστε POST /awards στο API του Badges Ninja με wp_remote_post(), περνώντας το badge ID και τα στοιχεία του αποδέκτη.

Θα χρειαστείτε πρώτα ένα API key. Δημιουργήστε ένα από το dashboard σας, κάτω από API Keys — δείτε τον οδηγό API keys για την πλήρη περιγραφή. Τα κλειδιά εμφανίζονται μία φορά κατά τη δημιουργία, γι’ αυτό αποθηκεύστε το στο wp-config.php ως σταθερά αντί στη βάση δεδομένων:

define( 'BADGES_NINJA_API_KEY', 'bws_your_32_hex_key_here' );
define( 'BADGES_NINJA_BADGE_ID', 'your-badge-id' );

Newly created key revealed once

Κρατήστε αυτό το κλειδί στην πλευρά του server. Όλα σε αυτόν τον οδηγό τρέχουν σε PHP στον server σας WordPress — η wp_remote_post() είναι μια κλήση από την πλευρά του server, και το wp-config.php ποτέ δεν στέλνεται στον browser. Αυτό ακριβώς θέλετε: το κλειδί ταξιδεύει server-προς-server μέσω HTTPS, και κανένας επισκέπτης του site δεν μπορεί να το διαβάσει. Ποτέ μην μετακινήσετε αυτή την κλήση σε client-side JavaScript — μια fetch() από τον browser με το κλειδί ενσωματωμένο θα το εξέθετε σε οποιονδήποτε μέσω των εργαλείων ανάπτυξης του browser του. Δύο συνήθειες αξίζει να κρατήσετε: βεβαιωθείτε ότι ο host σας εξυπηρετεί το wp-config.php ως εκτελούμενη PHP (ποτέ ως απλό κείμενο, και μην αφήνετε αντίγραφο wp-config.php.bak στο webroot), και δημιουργήστε ένα αποκλειστικό API key για αυτή την ενσωμάτωση, ώστε να μπορείτε να το ανακαλέσετε ανεξάρτητα αν παραβιαστεί ποτέ — χωρίς να χαλάσετε τα άλλα εργαλεία σας.

Μια κοινόχρηστη βοηθητική συνάρτηση κρατά κάθε LMS hook λεπτό:

function badges_ninja_issue_award( $recipient_email, $recipient_name, $badge_id ) {
	$response = wp_remote_post( 'https://api.badges.ninja/awards', array(
		'headers' => array(
			'X-Api-Key'    => BADGES_NINJA_API_KEY,
			'Content-Type' => 'application/json',
		),
		'body' => wp_json_encode( array(
			'badgeId'   => $badge_id,
			'recipient' => array(
				'name'  => $recipient_name,  // must be at least 5 characters
				'email' => $recipient_email,
			),
			'issuedOn'  => round( microtime( true ) * 1000 ), // epoch milliseconds
		) ),
		'timeout' => 15,
	) );
	if ( is_wp_error( $response ) ) {
		error_log( 'Badges Ninja award failed: ' . $response->get_error_message() );
		return false;
	}
	$code = wp_remote_retrieve_response_code( $response );
	if ( $code >= 400 ) {
		error_log( 'Badges Ninja award failed with HTTP ' . $code . ': ' . wp_remote_retrieve_body( $response ) );
		return false;
	}
	return json_decode( wp_remote_retrieve_body( $response ), true );
}

Το email του αποδέκτη κατακερματίζεται με SHA-256 στην πλευρά του server μόλις φτάσει στο Badges Ninja, και το payload απάντησης περιλαμβάνει τη διεύθυνση επαλήθευσης του βραβείου — χρήσιμο αν θέλετε να εμφανίσετε έναν σύνδεσμο «δείτε το διαπιστευτήριό σας» εκεί ακριβώς στο WordPress μετά την επιτυχή κλήση.

LearnDash

Το LearnDash ενεργοποιεί το learndash_course_completed με ένα μοναδικό όρισμα πίνακα που περιέχει user και course:

add_action( 'learndash_course_completed', function( $data ) {
	$user   = $data['user'];
	$course = $data['course'];
	// Map LearnDash course ID → your Badges Ninja badge ID.
	// A simple approach: store the badge ID in a course custom field.
	$badge_id = get_post_meta( $course->ID, 'badges_ninja_badge_id', true );
	if ( ! $badge_id ) {
		return; // no badge configured for this course
	}
	badges_ninja_issue_award( $user->user_email, $user->display_name, $badge_id );
} );

Η αποθήκευση του badge ID ως meta μαθήματος (αντί για μια ενιαία καθολική σταθερά BADGES_NINJA_BADGE_ID) είναι η σωστή επιλογή μόλις έχετε περισσότερα από ένα μαθήματα — κάθε μάθημα αντιστοιχεί στο δικό του σχέδιο σήματος.

LifterLMS

Το LifterLMS ενεργοποιεί το lifterlms_course_completed με $user_id και $course_id:

add_action( 'lifterlms_course_completed', function( $user_id, $course_id ) {
	$user     = get_userdata( $user_id );
	$badge_id = get_post_meta( $course_id, 'badges_ninja_badge_id', true );
	if ( ! $user || ! $badge_id ) {
		return;
	}
	badges_ninja_issue_award( $user->user_email, $user->display_name, $badge_id );
}, 10, 2 );

Tutor LMS

Το Tutor LMS ενεργοποιεί το tutor_course_complete_after με το course ID, και εσείς λαμβάνετε τον τρέχοντα χρήστη από τη συνεδρία:

add_action( 'tutor_course_complete_after', function( $course_id ) {
	$user_id  = get_current_user_id();
	$user     = get_userdata( $user_id );
	$badge_id = get_post_meta( $course_id, 'badges_ninja_badge_id', true );
	if ( ! $user || ! $badge_id ) {
		return;
	}
	badges_ninja_issue_award( $user->user_email, $user->display_name, $badge_id );
} );

Αν η ρύθμιση του Tutor LMS σας ενεργοποιεί την ολοκλήρωση από μια διεργασία παρασκηνίου (π.χ. μέσω αυτόματης βαθμολόγησης quiz), αντικαταστήστε το get_current_user_id() με το user ID που παρέχει το συγκεκριμένο σας hook — ελέγξτε το payload με error_log( print_r( func_get_args(), true ) ) μία φορά κατά τη ρύθμιση για να επιβεβαιώσετε τα ορίσματα.

Σχεδιάζοντας το σήμα πριν συνδέσετε το hook

Πριν συμβεί οτιδήποτε από αυτά, χρειάζεστε ένα σήμα για να απονείμετε. Ο οπτικός σχεδιαστής καλύπτει αυτό χωρίς να χρειάζεστε σχεδιαστή στο προσωπικό σας — 80+ πρότυπα σχημάτων, προσαρμοσμένα χρώματα, βιβλιοθήκη εικονιδίων και ανέβασμα λογότυπου, όλα με snap-to-grid. Αν είστε νέοι στον σχεδιαστή, το Σχεδιάζοντας το Πρώτο σας Επαληθεύσιμο Ψηφιακό Πιστοποιητικό περιγράφει την επιλογή ενός προτύπου και την παράδοση κάτι που οι αποδέκτες όντως θα θέλουν να μοιραστούν.

Μόλις υπάρχει το σήμα, πάρτε το ID του από το dashboard (ή μέσω GET /badges) και βάλτε το στο custom field του μαθήματός σας.

Τι λαμβάνει πραγματικά ο αποδέκτης

Αυτό είναι το κομμάτι που ένα «σπιτικό» plugin σημάτων WordPress δεν μπορεί να αναπαραγάγει. Όταν το POST /awards πετύχει, ο αποδέκτης λαμβάνει:

  • Ένα μοναδικό URL επαλήθευσης που ο καθένας μπορεί να ανοίξει — χωρίς να απαιτείται σύνδεση στο WordPress — που δείχνει ότι το διαπιστευτήριο είναι πραγματικό, ποιος το εξέδωσε και πότε.
  • Έναν κωδικό QR και ένα πιστοποιητικό PDF μεγέθους A4, που δημιουργούνται αυτόματα.
  • Ένα κουμπί «Προσθήκη στο προφίλ LinkedIn», αν ο εκδότης σας έχει ορίσει ID οργανισμού LinkedIn — δείτε το Προσθέστε ένα κουμπί «Add to Profile» LinkedIn για τη ρύθμιση μίας φοράς.
  • Πρόσβαση στο δικό του portal αποδέκτη στο badges.ninja/me, μέσω σύνδεσης με magic-link — χωρίς κωδικό πρόσβασης να ξεχνάει, χωρίς ξεχωριστό λογαριασμό προς διαχείριση στο site σας WordPress.
  • Συμβατό με πρότυπα Open Badge v2.0 JSON-LD, ώστε οποιοσδήποτε επαληθευτής με γνώση OB (όχι μόνο το Badges Ninja) να μπορεί να το επικυρώσει.

Τίποτα από αυτά δεν είναι δουλειά του WordPress να το χτίσει, και τίποτα από αυτά δεν θα πρέπει να ζει μόνο μέσα στη βάση δεδομένων σας WordPress.

Χειρισμός αποτυχιών με χάρη

Τα hooks ολοκλήρωσης μαθήματος ενεργοποιούνται κατά τη διάρκεια ενός ζωντανού αιτήματος σελίδας, και μια αργή ή αποτυχημένη κλήση API δεν θα πρέπει να μπλοκάρει την οθόνη «συγχαρητήρια» του εκπαιδευόμενου. Δύο πρακτικές προσαρμογές μόλις προχωρήσετε πέρα από μια απόδειξη ιδέας:

Μην αφήνετε ένα αποτυχημένο βραβείο να μπλοκάρει το UI. Η βοηθητική συνάρτηση παραπάνω ήδη καταγράφει και επιστρέφει false αντί να πετάει σφάλμα — το LearnDash, το LifterLMS και το Tutor συνεχίζουν όλα την κανονική τους ροή ολοκλήρωσης ανεξάρτητα από το τι επιστρέφει η badges_ninja_issue_award().

Βάλτε το σε ουρά αντί να το καλείτε inline, σε κλίμακα. Αν τρέχετε μεγάλες ομάδες μέσα από ένα μόνο μάθημα ταυτόχρονα (μια ημερομηνία έναρξης cohort, ξεκλείδωμα επανάληψης webinar), ενεργοποιήστε ένα προγραμματισμένο συμβάν WP-Cron από το hook αντί να καλείτε το API συγχρονισμένα:

add_action( 'learndash_course_completed', function( $data ) {
	wp_schedule_single_event( time() + 30, 'badges_ninja_deferred_award', array(
		$data['user']->user_email,
		$data['user']->display_name,
		get_post_meta( $data['course']->ID, 'badges_ninja_badge_id', true ),
	) );
} );
add_action( 'badges_ninja_deferred_award', 'badges_ninja_issue_award', 10, 3 );

Αυτό κατανέμει το φόρτο και εμποδίζει ένα μεμονωμένο αργό αίτημα να γίνει πρόβλημα του εκπαιδευόμενου. Για γνήσια μεγάλες παρτίδες (μια ολόκληρη προηγούμενη cohort, μεταφερμένη σε μία κίνηση), παρακάμψτε εντελώς τη διαδρομή hook του WordPress και χρησιμοποιήστε μαζικά βραβεία μέσω CSV — ανεβάστε μία φορά, και η πλατφόρμα σελιδοποιεί την έκδοση από την πλευρά του server με παύση/συνέχιση ενσωματωμένα.

Μια σημείωση για την ιδεμπόσια (idempotency)

Αν το LMS σας ενεργοποιεί ποτέ το hook ολοκλήρωσής του περισσότερες από μία φορά για τον ίδιο χρήστη (μια συνηθισμένη οριακή περίπτωση του LearnDash με επαναλήψεις quiz, ή μια επανασυγχρονισμός Tutor LMS), δεν θέλετε να απονείμετε το ίδιο σήμα δύο φορές. Η απλούστερη προστασία είναι μια σημαία user-meta του WordPress που ορίζετε αμέσως μετά από μια επιτυχημένη κλήση:

if ( get_user_meta( $user_id, 'badges_ninja_awarded_' . $course_id, true ) ) {
	return; // already issued
}
$result = badges_ninja_issue_award( $user->user_email, $user->display_name, $badge_id );
if ( $result ) {
	update_user_meta( $user_id, 'badges_ninja_awarded_' . $course_id, true );
}

Αν εκδίδετε σε πραγματικό όγκο και θέλετε αυτό να διαχειρίζεται κεντρικά αντί ανά site, δείτε τον χειρισμό συμβάντων μέσω webhook ή τον πλήρη οδηγό γρήγορης εκκίνησης API για τις μορφές αιτήματος/απάντησης σε κάθε endpoint.

Όταν αυτό το μοτίβο ξεπερνά ένα μόνο μάθημα

Τα παραδείγματα παραπάνω υποθέτουν ένα σήμα ανά μάθημα. Μόλις τρέχετε στοιβαζόμενα διαπιστευτήρια — ένα σήμα διαδρομής που ξεκλειδώνει μετά από αρκετά σήματα μαθημάτων, ή ένα τελικό επίτευγμα που εξαρτάται από πολλαπλές προϋποθέσεις — μετακινήστε την αντιστοίχιση «ποιο σήμα, για ποια ολοκλήρωση» έξω από το post meta και σε έναν μικρό πίνακα αναζήτησης, ή οδηγήστε την από έναν αυτοματισμό υποστηριζόμενο από υπολογιστικό φύλλο (Airtable ή Google Sheets) που ενεργοποιεί την ίδια κλήση POST /awards. Η ίδια η κλήση API δεν αλλάζει· μόνο αυτό που αποφασίζει πότε να την κάνει αλλάζει.

Αντιμετώπιση προβλημάτων της ενσωμάτωσης

Μια χούφτα ζητήματα ευθύνονται για τη μεγαλύτερη τριβή που συναντούν οι άνθρωποι όταν συνδέουν αυτό για πρώτη φορά:

Το hook δεν ενεργοποιείται ποτέ. Επιβεβαιώστε ότι συνδέεστε στη σωστή ενέργεια για την πραγματική έκδοση του plugin σας — το LearnDash ειδικότερα έχει αλλάξει ονόματα hooks ολοκλήρωσης σε μεγάλες εκδόσεις (παλαιότερες εγκαταστάσεις μερικές φορές ακόμη βασίζονται στο learndash_course_completed να ενεργοποιείται από διαφορετικό μονοπάτι κώδικα σε σχέση με τις νεότερες). Προσθέστε ένα προσωρινό error_log() στην κορυφή του callback σας και παρακολουθήστε το wp-content/debug.log ενώ ολοκληρώνετε ένα δοκιμαστικό μάθημα ως προσωρινός χρήστης.

Η wp_remote_post() λήγει (timeout). Περιβάλλοντα κοινόχρηστης φιλοξενίας μερικές φορές μπλοκάρουν εξερχόμενο HTTPS προς άγνωστους hosts, ή περιορίζουν τα χρονικά όρια αιτημάτων κάτω από τα 15 δευτερόλεπτα που ορίστηκαν παραπάνω. Αν οι κλήσεις λήγουν συνεχώς, ελέγξτε με τον host σας αν επιτρέπονται εξερχόμενες συνδέσεις προς το api.badges.ninja, και επιβεβαιώστε ότι η επέκταση PHP curl σας έχει ενημερωμένα πιστοποιητικά CA — ένα παρωχημένο πακέτο πιστοποιητικών είναι μια συνηθισμένη σιωπηλή αποτυχία σε παλαιότερα στοιβάγματα κοινόχρηστης φιλοξενίας.

400 Bad Request. Το payload λείπει ένα απαιτούμενο πεδίο ή έχει λάθος μορφή. Το POST /awards περιμένει badgeId, ένα ένθετο αντικείμενο recipient με name και email, και μια χρονική σήμανση issuedOn — η βοηθητική συνάρτηση παραπάνω στέλνει ακριβώς αυτό. Το πιο συνηθισμένο «σκόνταμμα» είναι το όνομα του αποδέκτη: πρέπει να είναι τουλάχιστον 5 χαρακτήρες, οπότε ένα εμφανιζόμενο όνομα WordPress όπως «Jo» απορρίπτεται. Επιστρέψτε στο πλήρες όνομα του λογαριασμού (ή στο τμήμα πριν το @ του email) όταν το εμφανιζόμενο όνομα είναι πολύ σύντομο.

401 Unauthorized. Η σταθερά του API key δεν φορτώνεται, ή αναδημιουργήθηκε αφού ορίστηκε η σταθερά. Τα κλειδιά εμφανίζονται μία φορά κατά τη δημιουργία και δεν μπορούν να ανακτηθούν ξανά — αν έχετε χάσει το ίχνος του ποιο κλειδί είναι ενεργό, διαγράψτε το παλιό και εκδώστε ένα καινούργιο αντί να μαντεύετε.

Το σήμα εκδόθηκε, αλλά με λάθος σχεδιασμό σήματος. Αυτό είναι σχεδόν πάντα μια παρωχημένη τιμή post-meta badges_ninja_badge_id που έμεινε από δοκιμές. Επειδή η αντιστοίχιση ζει στο post του μαθήματος, είναι εύκολο να ξεχάσετε ότι την αλλάξατε αφού κλωνοποιήσατε ένα μάθημα για μια νέα cohort — αξίζει έναν γρήγορο έλεγχο κάθε φορά που κλωνοποιείτε ένα μάθημα.

Διπλά βραβεία για το ίδιο άτομο. Καλύφθηκε παραπάνω με την προστασία user-meta, αλλά αξίζει να επαναληφθεί: τα hooks ολοκλήρωσης LMS δεν είναι εγγυημένο ότι ενεργοποιούνται ακριβώς μία φορά. Αντιμετωπίστε το «ήδη απονεμήθηκε» ως μια κανονική περίπτωση προς έλεγχο, όχι ως οριακή περίπτωση προς αγνόηση.

Συχνές ερωτήσεις

Λειτουργεί αυτό με πακέτα μαθημάτων WooCommerce; Ναι — αν μια αγορά πακέτου θα πρέπει να ενεργοποιεί ένα σήμα ανεξάρτητα από την ολοκλήρωση μαθήματος (π.χ. ένα σήμα «πιστοποιημένο μέλος» για όποιον αγοράζει ένα συγκεκριμένο πακέτο), συνδέστε το woocommerce_order_status_completed αντί για μια ενέργεια ολοκλήρωσης LMS, και αναζητήστε το badge ID από το meta του προϊόντος αντί από ένα μάθημα.

Μπορούν οι αποδέκτες να λάβουν το σήμα χωρίς λογαριασμό WordPress; Ναι, και αυτό είναι το θέμα. Το βραβείο συνδέεται με τη διεύθυνση email τους στο Badges Ninja, όχι με μια εγγραφή χρήστη WordPress. Αν το site σας επιτρέπει ολοκλήρωση αγοράς ως επισκέπτης ή ανώνυμη ολοκλήρωση quiz, απλώς βεβαιωθείτε ότι καταγράφετε μια πραγματική διεύθυνση email για να την περάσετε στο badges_ninja_issue_award().

Τι γίνεται αν θέλω να ελέγξω τα βραβεία πριν σταλούν; Παραλείψτε την ενεργοποίηση της κλήσης απευθείας από το hook ολοκλήρωσης. Αντ’ αυτού, γράψτε το εκκρεμές βραβείο (χρήστης, μάθημα, χρονική σήμανση) σε έναν προσαρμοσμένο πίνακα ή τύπο εγγραφής, και εκδώστε το από μια προγραμματισμένη εργασία ή ένα κουμπί διαχειριστή «Έγκριση & Απονομή» που καλεί την ίδια βοηθητική συνάρτηση κατ’ αίτημα.

Χρειάζομαι ξεχωριστό σήμα ανά μάθημα, ή μπορεί ένα σήμα να καλύπτει πολλά; Και τα δύο λειτουργούν. Κάποιοι εκδότες δημιουργούν ένα σήμα ανά μάθημα για λεπτομέρεια· άλλοι δημιουργούν ένα ενιαίο σήμα «ολοκλήρωση προγράμματος» και το απονέμουν μόνο μόλις ολοκληρωθεί κάθε απαιτούμενο μάθημα, ελέγχοντας την ολοκλήρωση προϋποθέσεων μέσα στο hook πριν καλέσουν το API.


Έτοιμοι να εκδώσετε το πρώτο σας επαληθεύσιμο διαπιστευτήριο; Ξεκινήστε δωρεάν στο badges.ninja — οπτικός σχεδιαστής, δημόσια σελίδα επαλήθευσης, πιστοποιητικό PDF, έξοδος Open Badge v2.0. Δεν απαιτείται πιστωτική κάρτα.

Nacho Coll

Σχετικά με τον συγγραφέα

Founder & Engineer at Badges Ninja

Nacho founded Badges Ninja to make issuing verifiable digital credentials as simple as a single API call — Open Badge v2.0 badges and certificates, minted, hosted, and verifiable without standing up your own issuer infrastructure. Writes about the Open Badges spec, credential verification, and running a credentialing platform serverless on AWS, from the operator side of the wire.

Πίσω στο Blog

Σχετικά άρθρα