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 numerosi:

  • Integrare con programmi di gamification esistenti nelle aziende

  • Possibilità di assegnare punti per eventi che si verificano 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 loro punti per merchandising, 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 negativo, per tenere conto di riscatti o eventi di penalità

  • Aggiornare ed elencare eventi personalizzati creati in precedenza

API

:warning: I punti assegnati tramite API richiederanno fino a 10 minuti per riflettersi sul 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 antecedente agli ultimi 10 giorni è necessario eseguire il task rake di backfill.

Attualmente ci sono 3 endpoint API diversi.

Elenca Eventi

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'

È anche 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 Karaoke Maggio 2023"
}'

Sintassi alternativa utilizzando jo:

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

Aggiorna Evento

curl -L -X PUT https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?id=6 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 11,
  "date": "2023-04-15",
  "points": 25,
  "description": "Partecipante keynote Maggio 2023"
}'

Sintassi alternativa utilizzando jo:

jo -p id="11" points="25" description="Partecipante Karaoke 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