Den Zielbenutzer für Benachrichtigungs-Webhook-Ereignisse abrufen

Ich sehe, dass Webhooks jetzt Benachrichtigungen unterstützen – das ist fantastisch und genau das, was wir brauchen. Allerdings fehlt im Payload eine entscheidende Information: der Benutzer, für den die Benachrichtigung bestimmt ist. In diesem Beispiel-Payload können wir zwar den Autor des Beitrags sehen, der die Benachrichtigung ausgelöst hat, aber nicht den Benutzer, der die Benachrichtigung erhalten soll.

{
  "notification": {
    "id": 119,
    "notification_type": 9,
    "read": false,
    "created_at": "2019-09-18T13:42:21.248Z",
    "post_number": 1,
    "topic_id": 75,
    "fancy_title": "Phallguy sollte darüber informiert werden",
    "slug": "phallguy-sollte-darueber-informiert-werden",
    "data": {
      "topic_title": "Phallguy sollte darüber informiert werden",
      "original_post_id": 111,
      "original_post_type": 1,
      "original_username": "Paul_Alexander",
      "revision_number": null,
      "display_username": "Paul_Alexander"
    }
  }
}

Ich habe geprüft, ob es eine API gibt, um über die Benachrichtigungs-ID den Zielbenutzer abzurufen, habe aber keine dokumentierte Lösung gefunden. Gibt es eine Möglichkeit, den Zielbenutzernamen oder die Zielbenutzer-ID direkt im Benachrichtigungs-Payload zu erhalten?

Als Kontext: Wir versuchen, Benachrichtigungen aus mehreren Systemen in eine einheitliche Erfahrung für unsere Benutzer zu konsolidieren.

@Falco oder @blake, habt ihr eine Idee, wie ich herausfinden kann, für welchen Benutzer eine Benachrichtigung ist, wenn sie über den neuen Benachrichtigungs-Webhook eingeht?

Ich habe das kurz überflogen, um zu sehen, ob es eine schnelle Antwort gibt, und du hast recht: Es sieht nicht so aus, als hätten wir einen get-API-Endpunkt, um eine einzelne Benachrichtigung nach ID abzurufen. Außerdem wäre es ohnehin nicht sehr effizient, dies jedes Mal aufzurufen.

Höchstwahrscheinlich erfordert dies eine Codeänderung im Notification-Serializer, um die user_id/username in das Benachrichtigungs-Payload aufzunehmen, sodass keine separate API-Anfrage mehr erforderlich ist.

Wir nutzen derzeit den gehosteten Dienst, sonst würde ich mein eigenes Plugin entwickeln. Würdet ihr in Betracht ziehen, die Benutzer-ID bzw. den Benutzernamen in die Benachrichtigungsnutzlast im Webhook aufzunehmen?

Hast du die Header überprüft?

Ich habe es versucht – in der Hoffnung, einige zusätzliche Metadaten zu finden, aber nichts Benutzerbezogenes entdeckt.

Request URL: https://XXX
Request method: POST
Accept: */*
Connection: close
Content-Length: 420
Content-Type: application/json
Host: XXX
User-Agent: Discourse/2.4.0.beta4
X-Discourse-Instance: https://XXX
X-Discourse-Event-Id: 11
X-Discourse-Event-Type: notification
X-Discourse-Event: notification_created
X-Discourse-Event-Signature: sha256=XXX

Ich wollte mal nachhaken, ob ihr schon Gedanken oder Updates dazu habt. Die Benachrichtigungs-Webhook ohne Zielbenutzer ist nämlich nicht wirklich von großem Nutzen.

Hey Leute, hattet ihr schon die Möglichkeit, das Problem zu prüfen? Gibt es eine Chance, dass wir die Ziel-Benutzer-ID im Benachrichtigungsereignis erhalten können?

Ich habe einen PR erstellt, der die user_id zum JSON-Payload des Benachrichtigungs-Webhooks hinzufügt:

Hi @blake, wäre es möglich, auch die externe Benutzer-ID (external_id) hinzuzufügen? Wir arbeiten mit Discourse SSO und haben die Discourse-Benutzer-IDs in unserem System nicht.

Hallo Albert!

Ich finde das eine gute Idee und habe einen Commit erstellt, der die external_id des Benutzers hinzufügt, falls SSO aktiviert ist.

Hoffentlich hilft das weiter! Es wird beim nächsten Deployment auf deiner Seite hinzugefügt, was irgendwo diese Woche stattfinden sollte.

Wow, das war schnell! Vielen Dank, das wird sehr geschätzt :smiley: Weißt du ungefähr, wann diese Änderungen auf den gehosteten Discourse-Servern verfügbar sein werden?

Ach egal, ich habe den letzten Satz nicht gelesen :sweat_smile:. Nochmals vielen Dank!!