Concedi un badge personalizzato tramite l'API

Le badge personalizzate che hai creato sul tuo forum possono essere assegnate tramite l’API. Questo è un ottimo modo per assegnare badge senza dover utilizzare query SQL personalizzate.

Per assegnare un badge tramite l’API, devi conoscere il nome utente dell’utente a cui desideri assegnare il badge e l’ID (o il nome) del badge da assegnare. Devi anche assicurarti di aver generato una chiave API dalla sezione Amministrazione > API > Chiavi del tuo sito (/admin/api/keys).

Trovare l’ID del badge

Puoi ottenere l’ID del badge dall’URL del badge stesso. Vai alla sezione Amministrazione/Badge e fai clic sul badge che desideri assegnare. L’URL sarà simile a questo: https://forum.example.com/admin/badges/102. L’ultimo numero nell’URL è l’ID del badge.

Effettuare la chiamata API

Per testare una chiamata API, puoi provare ad assegnare un badge utilizzando curl o Postman. Ecco come ho assegnato un badge dal terminale del mio computer con curl.

Per prima cosa, per semplificare le cose, imposta una variabile api_key:

api_key=tuachiaveapi

Poi, per assegnare un badge con ID 102 all’utente bobby:

curl -X POST "https://forum.example.com/user_badges" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "username=bobby" \
-F "badge_id=102" \
-F "reason=https://forum.example.com/t/whats-the-best-photo-youve-ever-taken/160/2"

Invece di badge_id, puoi anche utilizzare badge_name per identificare il badge tramite il suo nome:

-F "badge_name=Il mio badge personalizzato"

Il parametro reason è opzionale. Se lo fornisci, deve essere impostato sull’URL di un argomento o di un post sul tuo sito.

Dovresti ricevere una risposta JSON con i dettagli sul badge e sulla data in cui è stato assegnato.

27 Mi Piace

Has anybody added a badge (or flair) via Zapier to Discourse API like outlined here?

Also, seems like a great candidate for an action via the official integration, @HAWK.

3 Mi Piace

Vedi anche Create a custom badge with an image through the API, che mostra come caricare e ha anche un altro esempio di assegnazione del badge (in python).

1 Mi Piace

Qual è il motivo per cui questo metodo non è descritto nella documentazione API su https://docs.discourse.org/?

Non sono riuscito a trovarlo lì.

2 Mi Piace

Poiché non sembra essere compito di nessuno mantenere aggiornata o completa la documentazione e qualche anima gentile ha pubblicato queste istruzioni qui. In generale, la documentazione per l’API è Reverse engineer the Discourse API e guardando il codice sorgente.

7 Mi Piace

Bello, quindi non c’è modo di automatizzare l’assegnazione di badge tramite API?

Ad esempio, a qualcuno che riceve 5.000 “mi piace” alle proprie risposte viene assegnato un badge.

1 Mi Piace

Se sei self-hosted o su Enterprise, vorrai Abilitare Badge SQL.

2 Mi Piace

Se non è possibile abilitare il badge SQL, sarebbe tecnicamente possibile automatizzare questo processo, ma sarebbe un processo in due fasi. Innanzitutto, effettua una richiesta API per eseguire una query di Data Explorer che restituisca i nomi utente degli utenti che soddisfano i tuoi criteri e a cui non è ancora stato assegnato il badge: Esegui query di Data Explorer con l’API di Discourse. Quindi, utilizza i nomi utente restituiti da tale query per assegnare il badge tramite l’API.

Tuttavia, questo sembra piuttosto inefficiente. Per quanto ne so, non esiste un percorso che possa essere utilizzato per assegnare un badge a più utenti con una singola chiamata API, quindi a seconda di quanti utenti si qualificano per il badge, potresti finire per effettuare molte richieste API.

In definitiva, questo sembra il tipo di cosa che potrebbe essere gestita dal plugin Automation. Potrebbe esserci un trigger ricorrente che esegue una query di Data Explorer con un dato ID di query. In base ai campi restituiti dalla query, i risultati potrebbero essere utilizzati per attivare vari script. Ad esempio, se venisse restituito un campo username dalla query, potrebbe essere utilizzato per eseguire script che assegnano badge, aggiungono utenti a gruppi, ecc.

2 Mi Piace

Non avrà gli stessi problemi che hanno causato la disabilitazione dell’SQL del badge in primo luogo?

1 Mi Piace

Non credo. Le query di Data Explorer vengono eseguite in un blocco di transazione che scade dopo 10 secondi. Penso che il punto sia evitare il tipo di problema che le query dei badge possono innescare. Se le cose non fossero configurate in quel modo, una query inefficiente di Data Explorer potrebbe bloccare il sito.

Pensandoci ora, mi chiedo se le query SQL personalizzate per i badge possano avere lo stesso tipo di protezione.

4 Mi Piace