Questa sezione copre il modello badge completo: lifecycle della configurazione, collegamento alla sorgente di progresso, integrazione con le reward rule e il record badge lato utente. È rilevante per chiunque configuri badge tramite il dashboard o li integri via API. Per una panoramica di alto livello, consultare i Fondamenti di Gamification. Per l'integrazione con le reward rule (come vengono assegnati i badge), consultare il Dominio Reward e Currency.
BadgeConfiguration (il template: cos'è il badge e cosa ne guida l'assegnamento)
│
└──▶ Badge (record per utente: istanze guadagnate con storico degli assegnamenti)
│
└──▶ BadgeLog (record immutabile di ogni singolo assegnamento)| Campo | Tipo | Descrizione |
|---|---|---|
badgeConfigurationId | nanoid | Identificatore univoco |
name | string | Nome di riferimento leggibile (es. "Completatore Learning Path") |
image | URL | Immagine del badge — obbligatoria |
origin | CATALOG | CUSTOM | Se il badge proviene dal catalogo AWorld o è stato creato dal cliente |
catalogBadgeConfigurationId | nanoid? | Riferimento alla sorgente del catalogo quando origin è CATALOG |
syncWithCatalog | boolean? | Se true, il badge si aggiorna automaticamente quando cambia la sorgente nel catalogo |
progressSourceEntityType | MissionConfiguration | LearningPath | Il tipo di entità il cui completamento guida l'assegnamento del badge |
progressSourceEntityId | nanoid | La Mission Configuration o il Learning Path specifico che innesca l'assegnamento |
defaultLang | lang | Codice lingua predefinito per le traduzioni |
langs | lang[] | Tutti i codici lingua supportati (1–10) |
accountId | string | Account a cui appartiene il badge |
workspaceId | string | Workspace a cui appartiene il badge |
createdAt | ISO datetime | Timestamp di creazione |
updatedAt | ISO datetime | Timestamp dell'ultimo aggiornamento |
translations. Ogni traduzione contiene:| Campo | Tipo | Descrizione |
|---|---|---|
lang | lang | Codice lingua (es. en, it, ar) |
label | string | Nome del badge in questa lingua |
description | string | Spiegazione di come guadagnare il badge |
| Campo | Tipo | Descrizione |
|---|---|---|
tagId | nanoid | Il tag assegnato a questa configurazione |
priority | number | Ordine di visualizzazione quando sono assegnati più tag |
DRAFT ──▶ PUBLISHED ──▶ ARCHIVED
│
└──▶ DRAFT (unarchive)progressSourceEntityType e progressSourceEntityId definiscono cosa deve realizzare l'utente per guadagnare il badge:MissionConfiguration: il badge è collegato a un template di missione specifico. Quando la reward rule si attiva al completamento della missione, il badge viene assegnato.LearningPath: il badge è collegato a un learning path specifico. Il completamento del learning path innesca l'assegnamento tramite una reward rule.RewardRule (rewardType: BADGE, badgeConfigurationId: ...)
│
├── matchEntity: Mission | LearningPath | Activity | ...
├── matchCondition: { isCompleted: true } (solo al completamento)
└──▶ BadgeConfiguration assegnata all'utente → record Badge creatoisCompleted nel suo matchCondition per evitare attivazioni premature.BADGE.| Campo | Tipo | Descrizione |
|---|---|---|
badgeConfigurationId | nanoid | Riferimento alla Badge Configuration |
userId | nanoid | L'utente che ha guadagnato il badge |
count | number | Numero totale di volte in cui il badge è stato assegnato a questo utente |
firstAssignedAt | ISO datetime | Quando l'utente ha guadagnato il badge per la prima volta |
lastAssignedAt | ISO datetime | Quando l'utente ha guadagnato il badge più di recente |
defaultLang | lang | Lingua predefinita per la visualizzazione |
translation | object | Label e descrizione localizzate per la lingua dell'utente che fa la richiesta |
badgeLogs | BadgeLog[] | Storico completo degli assegnamenti individuali |
createdAt | ISO datetime | Timestamp di creazione del record |
updatedAt | ISO datetime | Timestamp dell'ultimo aggiornamento |
count riflette quante volte il badge è stato assegnato all'utente. I badge possono essere guadagnati più volte se la condizione che li innesca si ripete — ad esempio, completando la stessa missione ricorrente ogni mese. Ogni assegnamento crea una nuova voce BadgeLog.count pari a 1 significa che il badge è stato guadagnato esattamente una volta. Un valore più alto indica un traguardo ricorrente.| Campo | Tipo | Descrizione |
|---|---|---|
sourceEntityType | string | Il tipo di entità che ha innescato l'assegnamento (es. Mission, LearningPath) |
sourceEntityId | nanoid | L'istanza specifica dell'entità che ha innescato l'assegnamento |
rewardRuleId | nanoid | La reward rule che ha elaborato l'assegnamento |
assignedAt | ISO datetime | Quando si è verificato questo specifico assegnamento |
sourceEntityType e sourceEntityId identifica esattamente quale completamento di missione o learning path ha innescato il badge. Il rewardRuleId traccia quale regola ha valutato l'evento.{
"badgeConfigurationId": "bc-lp-onboarding",
"name": "Completatore Onboarding",
"image": "https://cdn.example.com/badges/onboarding.png",
"origin": "CUSTOM",
"progressSourceEntityType": "LearningPath",
"progressSourceEntityId": "lp-onboarding-2025",
"defaultLang": "it",
"langs": ["en", "it"],
"translations": [
{ "lang": "en", "label": "Onboarding Completer", "description": "Awarded for completing the onboarding learning path." },
{ "lang": "it", "label": "Completamento Onboarding", "description": "Assegnato al completamento del percorso di onboarding." }
]
}POST /badge-configurations/{badgeConfigurationId}/publish{
"ruleType": "INSTANCE",
"matchEntity": "LearningPath",
"matchEntityId": "lp-onboarding-2025",
"matchCondition": { "===": [{ "var": "event.progress" }, "COMPLETE"] },
"applicationMode": "ALWAYS",
"rewards": [
{
"rewardType": "BADGE",
"badgeConfigurationId": "bc-lp-onboarding"
}
]
}LearningPathLog viene pubblicato con progress: COMPLETE.matchCondition della regola — supera il controllo.bc-lp-onboarding viene creato (o il count viene incrementato se l'aveva già guadagnato in precedenza).sourceEntityType: LearningPath, sourceEntityId: lp-onboarding-2025 e il rewardRuleId.GET /badges/bc-lp-onboardingcount: 1, firstAssignedAt e l'array badgeLogs con il singolo evento di assegnamento.| Concetto | Scopo |
|---|---|
| BadgeConfiguration | Template che definisce cos'è il badge, la sua immagine, le traduzioni e la sorgente di progresso |
| progressSourceEntityType | Collega il badge a una MissionConfiguration o Learning Path per la visualizzazione del progresso nel frontend |
| Lifecycle | DRAFT → PUBLISHED → ARCHIVED controlla quando un badge può essere assegnato |
| Reward Rule (tipo BADGE) | Il meccanismo che assegna effettivamente il badge — non serve expression né redemption mode |
| Badge | Record aggregato per utente: count, date del primo/ultimo assegnamento, storico completo |
| BadgeLog | Record immutabile di ogni assegnamento individuale con tracciabilità dell'entità sorgente e della regola |
| count | Quante volte il badge è stato guadagnato — supporta scenari di traguardo ricorrente |
rewardType: BADGE è il meccanismo che innesca l'assegnamento del badge. Comprendere la risoluzione ALWAYS/FALLBACK e le match condition è essenziale per la configurazione dei badge.progressSourceEntityType: MissionConfiguration collega un badge a un template di missione specifico.progressSourceEntityType: LearningPath collega un badge a un learning path specifico.