Come integrare la Gamification di Discourse con un sistema esterno (riscuoti e assegna punti)

Da quando abbiamo lanciato Discourse Gamification un anno fa, una delle funzionalità più richieste dalla nostra roadmap è stata la possibilità di integrare Discourse Gamification con sistemi di gamification esterni. Gli esempi sono numerosi:

  • Integrazione con programmi di gamification esistenti nelle aziende

  • Possibilità di assegnare punti per eventi che accadono al di fuori di Discourse, come eventi IRL, o altrove online, come essere un cliente in una community, o acquistare un prodotto.

  • La possibilità di consentire agli utenti di riscattare i propri punti per gadget, prodotti o vantaggi

Oggi, giusto in tempo per il primo anniversario del plugin, abbiamo reso possibile tutto ciò con una API completa per gestire eventi di punteggio personalizzati :tada:.

Questo nuovo sistema consente agli amministratori di:

  • Assegnare agli utenti un evento di punteggio personalizzato

  • Assegnare agli utenti eventi di punteggio negativi, per gestire eventi di riscatto o penalità

  • Aggiornare ed elencare eventi personalizzati creati in precedenza

API

:warning: I punti assegnati tramite API impiegheranno fino a 10 minuti per riflettersi sul punteggio complessivo di un utente per gli eventi creati con la data odierna, e fino a 24 ore per gli eventi creati negli ultimi 10 giorni. Per gli eventi creati con una data antecedente agli ultimi 10 giorni è necessario eseguire il rake task di backfill.

Attualmente ci sono 3 endpoint API diversi.

Elenca Eventi

curl http://example/admin/plugins/gamification/score_events.json -H "Api-Key: apikeyhere" -H "Api-Username: system"

Puoi anche elencare eventi specifici per utente o per data:

curl http://example/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 -H "Api-Key: apikeyhere" -H "Api-Username: system"

Crea Evento

jo -p user_id="13" date="2023-04-14" points="15" description="May 2023 Karaoke atendee" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

Aggiorna Evento

jo -p id="1" points="25" description="May 2023 Karaoke atendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
27 Mi Piace

Ci sarà/c’è un modo per farlo tramite l’interfaccia utente?

9 Mi Piace

Lo prenderei in considerazione se un cliente Enterprise volesse sponsorizzarlo.

10 Mi Piace

Questo è incredibile. Siamo appena all’inizio e stiamo pilotando un programma di ambasciatori/campioni, e abbiamo utilizzato Airtable per monitorare i webhook dalle nostre diverse fonti (Discourse, GitHub, Ghost) e aggregare lì il nostro programma di campioni. Sono entusiasta di dare un’occhiata e vedere se potrebbe essere utilizzato da noi per gestire/monitorare il nostro programma e i nostri contributi.

Sarebbe fantastico se poteste assegnare punti a un gruppo di utenti invece che a un singolo utente. Il caso d’uso per noi come cliente enterprise sarebbe che essenzialmente vogliamo assegnare punti all’azienda per cui lavorano gli utenti e aggregare i loro punti per ciascuna azienda. Qual è la fattibilità di qualcosa del genere?

9 Mi Piace

Non so come usarlo :smiling_face_with_tear:
Stiamo utilizzando un piano aziendale.

Vorrei che potessimo gestirlo tramite l’interfaccia utente.

Ma comunque, grazie per aver creato questo team! Continuate così.

5 Mi Piace

Potrebbe aiutare a fornire punti una tantum all’interno di Discourse con il plugin Automation?

1 Mi Piace

Come funziona il riscatto dei punti? Vedo che c’è un evento di aggiornamento che potrebbe essere utilizzato per sottrarre punti da singoli eventi, ma questo sembra un modo inefficiente per riscattare i punti.

Inoltre, quando tento di elencare gli eventi nella mia istanza di discourse, ottengo un 404.

GET https://developer.sailpoint.com/discuss/admin/plugins/gamification/score_events.json

404 Not Found
“L’URL o la risorsa richiesta non è stata trovata.”

Ho abilitato il plugin e posso configurarlo tramite l’interfaccia utente. Mi manca qualcosa per abilitare l’API del sistema esterno?

1 Mi Piace

Potrebbe essere la mia decade di esperienza lavorando in banche, ma il modo in cui immagino di riscattare i punti è emettere eventi personalizzati di valore negativo.

Ad esempio, supponiamo che tu abbia un utente che desidera riscattare punti per una maglietta e quella maglietta costa 10.000 punti. Il flusso sul tuo sistema di riscatto sarebbe:

  1. Controlla se l’utente ha abbastanza punti:

    curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
    
  2. Emetti un evento di “prelievo punti”

    jo -p user_id="13" date="2023-04-14" points="-10000" description="T-Shirt Redeem - order #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
    

Dovrai racchiudere questo in un qualche tipo di semaforo, poiché questo è l’esempio da manuale di utilizzo di questi, ma questo è il succo del flusso di lavoro proposto.

Questa è una funzionalità molto recente, quindi fammi sapere se il flusso di lavoro proposto non funziona correttamente.

Per me funziona bene, sia nel browser che tramite API. È un endpoint di amministrazione, quindi devi essere un amministratore connesso tramite browser o passare le chiavi API come spiegato nell’OP.

3 Mi Piace

Ok, ecco cosa mi mancava. Non mi ero reso conto che si potessero emettere punti negativi. Dovrebbe funzionare perfettamente allora.

:man_facepalming: Stavo usando credenziali scadute. Grazie per aver confermato comunque.

2 Mi Piace

@Falco

Ci sono piani per aggiungere scope a questa API? Sembra che l’unico modo per creare o aggiornare punteggi sia avere una chiave API di amministratore con accesso globale. Mi piacerebbe avere uno scope che limiti una chiave alla sola possibilità di aggiornare i punteggi. Questo mi darebbe maggiore fiducia nell’utilizzare questa API negli strumenti di automazione poiché non avrei una chiave di amministratore che può fare molto più che aggiornare i punteggi.

3 Mi Piace

È una buona idea, ma personalmente non ho la larghezza di banda per lavorarci nel prossimo futuro.

Se sei interessato a sponsorizzare questa funzionalità, ti preghiamo di contattare il nostro canale di supporto in modo da poterti fornire un preventivo.

3 Mi Piace

Sto riscontrando lo stesso problema:

{"errors":["L'URL o la risorsa richiesta non è stata trovata."],"error_type":"not_found"}

Quell’errore è stato causato da

Quindi vuoi controllare le tue :wink:

1 Mi Piace

Grazie, aggiornerò anche all’ultima versione per sicurezza

L’aggiornamento all’ultima versione ha funzionato! grazie

1 Mi Piace

Ho testato un po’ oggi. Vedo gli eventi che posso tracciare, anche se non sono sicuro se esista una query diretta per visualizzare solo gli eventi per userid. Sto cercando un modo per avere un registro di controllo o per presentare agli utenti come hanno guadagnato/perso punti.

1 Mi Piace

C’è qualcosa registrato nell’interfaccia utente quando la chiamata API ha successo nell’aggiunta di punti?

Fantastico! E ho un altro suggerimento: è possibile aggiungere una funzionalità che consenta agli utenti di riscattare punti per abbonamenti nell’interfaccia utente? E la possibilità di aggiungere un limite al numero di punti che un utente può guadagnare al giorno per un evento (come la creazione di argomenti).

Grazie!

No, la funzionalità è basata al 100% sull’API. Puoi chiamare l’endpoint “List Events” per verificare la presenza di eventi come descritto nell’OP.

3 Mi Piace