Come integrare la gamification di Discourse con un sistema esterno (riscattare e assegnare 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 molti:

  • Integrazione con programmi di gamification esistenti nelle aziende

  • Capacità di assegnare punti per eventi che avvengono al di fuori di Discourse, come eventi dal vivo (IRL) o online altrove, ad esempio essere un cliente in una community o acquistare un prodotto.

  • La possibilità di permettere agli utenti di riscattare i loro punti per gadget, prodotti o benefici

Oggi, proprio in occasione del primo anniversario del plugin, abbiamo reso tutto ciò possibile grazie a una completa API 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 gli eventi personalizzati precedentemente creati

API

\u003e :warning: I punti assegnati tramite API richiederanno fino a 1 ora per essere riflessi nel punteggio complessivo di un utente per gli eventi creati con la data corrente, e fino a 24 ore per gli eventi creati negli ultimi 10 giorni. Per gli eventi creati con una data precedente a 10 giorni, è possibile utilizzare il pulsante Ricalcola Punteggi nell’interfaccia di amministrazione di Gamification o eseguire il task rake di backfill: rake gamification_scores:backfill_scores_from[YYYY-MM-DD].

Attualmente sono disponibili 3 diversi endpoint API.

Elenco Eventi

Restituisce fino a 100 eventi. È possibile filtrare per id, user_id e/o date.

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

È inoltre possibile elencare eventi specifici per utente o data:

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?user_id=1\u0026date=2023-05-01 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

Crea Evento

curl -X POST https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 13,
  "date": "2023-04-14",
  "points": 15,
  "description": "Partecipante al Karaoke di maggio 2023"
}'

Sintassi alternativa utilizzando jo:

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

Aggiorna Evento

L’endpoint di aggiornamento richiede id e points. È possibile aggiornare opzionalmente description. Nota che user_id e date non possono essere modificati dopo la creazione.

curl -L -X PUT https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "id": 6,
  "points": 25,
  "description": "Partecipante al keynote di maggio 2023"
}'

Sintassi alternativa utilizzando jo:

jo -p id="11" points="25" description="Partecipante al Karaoke di maggio 2023" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
29 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