Ricevi notifiche tramite l'API

Se disponi di un sito web o di un’applicazione esistente e desideri incoraggiare la discussione sul tuo forum Discourse, può essere utile visualizzare le notifiche di Discourse all’interno della tua applicazione. Questa guida ti mostrerà come utilizzare l’API di Discourse per recuperare le notifiche per un utente e come contrassegnarle come lette.

Il modo consigliato per utilizzare l’API è far sì che la tua applicazione effettui richieste di back-end a Discourse e quindi passi tali dati allo strato di front-end/presentazione della tua applicazione.

Consulta la Documentazione API per informazioni su come utilizzare l’API di Discourse.

Recupero delle notifiche per un utente

Per ottenere le notifiche tramite l’API, puoi effettuare una richiesta GET autenticata all’endpoint /notifications. Puoi specificare il nome utente per il quale stai recuperando le notifiche nell’header Api-Username o come parametro di query: /notifications?username=<username>.

Parametri di query facoltativi

Parametro Descrizione
username Il nome utente per cui recuperare le notifiche
filter Filtra per stato di lettura: read o unread
filter_by_types Elenco separato da virgole dei nomi dei tipi di notifica per cui filtrare (es. mentioned,replied)
offset Offset per la paginazione
limit Numero di notifiche da restituire (massimo 60)

Esempio di richiesta

curl -X GET "http://localhost:8080/notifications.json?username=blake.erickson" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: system"

Questo restituirà la seguente risposta JSON

{
  "notifications": [
    {
      "id": 3,
      "user_id": 5,
      "external_id": null,
      "notification_type": 12,
      "read": true,
      "high_priority": false,
      "created_at": "2019-06-17T20:26:05.670Z",
      "post_number": null,
      "topic_id": null,
      "slug": null,
      "data": {
        "badge_id": 41,
        "badge_name": "First Emoji",
        "badge_slug": "first-emoji",
        "badge_title": false,
        "username": "blake"
      }
    },
    {
      "id": 2,
      "user_id": 5,
      "external_id": null,
      "notification_type": 6,
      "read": true,
      "high_priority": true,
      "created_at": "2019-06-17T20:26:04.305Z",
      "post_number": 1,
      "topic_id": 10,
      "fancy_title": "Greetings!",
      "slug": "greetings",
      "data": {
        "topic_title": "Greetings!",
        "original_post_id": 14,
        "original_post_type": 1,
        "original_username": "discobot",
        "revision_number": null,
        "display_username": "discobot"
      }
    }
  ],
  "total_rows_notifications": 2,
  "seen_notification_id": 3,
  "load_more_notifications": "/notifications?offset=60&username=blake"
}

Questo restituisce un array di notifiche. Se sei interessato a mostrare solo le notifiche non lette, puoi passare il parametro di query filter=unread per far sì che il server restituisca solo le notifiche non lette. Per esempio:

curl -X GET "http://localhost:8080/notifications.json?username=blake.erickson&filter=unread" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: system"

Puoi visitare questa pagina per un elenco dei tipi di notifica. Ad esempio, il tipo di notifica 12 corrisponde a “granted_badge”.

Contrrassegnare le notifiche come lette

Ora che hai recuperato le notifiche di un utente, puoi contrassegnarle come lette inviando una richiesta PUT a /notifications/mark-read con l’id della notifica nel corpo della richiesta e specificando il nome utente nell’header della richiesta.

Esempio di richiesta

curl -X PUT "http://localhost:8080/notifications/mark-read" \
-H "Api-Key: e81c4022f148c872a98fb38dac1d9619c7f5b245b42ba98fa467968bbed7551e" \
-H "Api-Username: blake.erickson" \
-F "id=4"

Puoi anche omettere l’ID della notifica e verranno contrassegnate come lette tutte le notifiche per quell’utente.

Questo restituirà una semplice risposta JSON “OK”:

{
  "success": "OK"
}
11 Mi Piace

HI @blake
Thank you for the great instruction!
One question, there is a light blue bubble notifications on avatar when I get notification_type NOT 6… after I clicked on avatar, the bubble disappeard… and notifications.json has no change. How can I tell from notifications.js which one is not in light blue bubble anymore ?

Regards,
siyuan

Oh that will be useful to play with Discourse topics and Gitlab issues / commits / merge requests / etc.

@blake Ho la stessa domanda. Voglio replicare il contatore del badge di notifica che viene visualizzato in Discourse sul mio sito, in modo che l’utente possa vedere quando ci sono nuove notifiche, fare clic su Discourse e poi continuare lì. Tuttavia, il contatore del badge in Discourse non è un conteggio delle notifiche non lette. Se fai clic sul badge, il contatore scompare, anche se ci sono ancora notifiche non lette.

Come posso determinare il numero nel contatore del badge di notifica di Discourse azzurro e se è visibile tramite l’API?

  1. Ho reagito a un post dall’account A, ricevo i dati della notifica nell’API delle notifiche per quella notifica, quindi quando ho reagito allo stesso post con l’Account B non ricevo i dati nell’API delle notifiche. Ma quando rimuovo la mia reazione dall’Account A, i dati della notifica dell’Account B arrivano nell’API delle notifiche. Quindi reagisco di nuovo al post con l’Account A, i dati della notifica arrivano nell’API, quindi rimuovo la notifica dall’Account B, i dati della notifica dell’Account A arrivano.

    Sto riscontrando questo problema nei dati delle notifiche