Benachrichtigungen über die API erhalten

Wenn Sie bereits eine Website oder Anwendung haben und Diskussionen in Ihrem Discourse-Forum fördern möchten, kann es hilfreich sein, Discourse-Benachrichtigungen innerhalb Ihrer Anwendung anzuzeigen. Diese Anleitung zeigt Ihnen, wie Sie die Discourse API verwenden, um Benachrichtigungen für einen Benutzer abzurufen und sie als gelesen zu markieren.

Die empfohlene Vorgehensweise bei der Nutzung der API ist, dass Ihre Anwendung Backend-Anfragen an Discourse sendet und diese Daten dann an die Frontend-/Präsentationsschicht Ihrer Anwendung weitergibt.

Lesen Sie die API-Dokumentation für Informationen zur Verwendung der Discourse API.

Benachrichtigungen für einen Benutzer abrufen

Um Benachrichtigungen über die API zu erhalten, können Sie eine authentifizierte GET-Anfrage an den Endpunkt /notifications stellen. Sie können entweder den Benutzernamen, für den Sie Benachrichtigungen abrufen, im Header Api-Username oder als Abfrageparameter angeben: /notifications?username=<username>.

Optionale Abfrageparameter

Parameter Beschreibung
username Der Benutzername, für den Benachrichtigungen abgerufen werden sollen
filter Filtern nach Lesestatus: read oder unread
filter_by_types Durch Kommata getrennte Liste von Benachrichtigungstypnamen zum Filtern (z. B. mentioned,replied)
offset Offset für die Paginierung
limit Anzahl der zurückzugebenden Benachrichtigungen (maximal 60)

Beispielanfrage

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

Dies gibt die folgende JSON-Antwort zurück:

{
  "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"
}

Dies gibt ein Benachrichtigungs-Array zurück. Wenn Sie nur ungelesene Benachrichtigungen anzeigen möchten, können Sie den Abfrageparameter filter=unread übergeben, damit der Server nur ungelesene Benachrichtigungen zurückgibt. Zum Beispiel:

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

Sie können diese Seite für eine Liste der Benachrichtigungstypen besuchen. Zum Beispiel entspricht der Benachrichtigungstyp 12 „granted_badge“ (Auszeichnung verliehen).

Benachrichtigungen als gelesen markieren

Nachdem Sie die Benachrichtigungen eines Benutzers abgerufen haben, können Sie diese als gelesen markieren, indem Sie eine PUT-Anfrage an /notifications/mark-read senden, wobei die id der Benachrichtigung im Anfragetext enthalten ist und der Benutzername im Anforderungs-Header angegeben wird.

Beispielanfrage

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

Sie können auch die Benachrichtigungs-ID weglassen, dann werden alle Benachrichtigungen für diesen Benutzer als gelesen markiert.

Dies gibt eine einfache „OK“-JSON-Antwort zurück:

{
  "success": "OK"
}
11 „Gefällt mir“

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 Ich habe die gleiche Frage. Ich möchte den Benachrichtigungs-Badge-Zähler, der in Discourse angezeigt wird, auf meiner eigenen Website spiegeln – auf diese Weise kann der Benutzer sehen, wann es neue Benachrichtigungen gibt, zu Discourse weitergeleitet werden und dort weitermachen. Der Badge-Zähler in Discourse ist jedoch keine Zählung ungelesener Benachrichtigungen. Wenn Sie auf den Badge klicken, verschwindet der Zähler, auch wenn noch ungelesene Benachrichtigungen vorhanden sind.

Wie kann ich die Zahl im hellblauen Discourse-Benachrichtigungs-Badge-Zähler ermitteln und ob sie über die API sichtbar ist?

  1. Ich habe auf einen Beitrag von Konto A reagiert, ich erhalte Benachrichtigungsdaten in der Benachrichtigungs-API für diese Benachrichtigung. Dann, als ich mit Konto B auf denselben Beitrag reagiert habe, erhalte ich keine Daten in der Benachrichtigungs-API. Aber wenn ich meine Reaktion von Konto A entferne, kommen die Benachrichtigungsdaten von Konto B in der Benachrichtigungs-API an. Dann reagiere ich erneut auf den Beitrag mit Konto A, Benachrichtigungsdaten kommen in der API an, dann entferne ich die Benachrichtigung von Konto B, dann kommen die Benachrichtigungsdaten von Konto A an.

    Ich habe dieses Problem mit Benachrichtigungsdaten.