Benachrichtigungen über die API erstellen

Hallo, eine kurze Frage: Kann man Benachrichtigungen an Nutzer über die API senden (oder auf andere Weise)?
In der Dokumentation habe ich gefunden, wie man Benachrichtigungen eines Nutzers abruft und als gelesen markiert, aber nicht, wie man welche erstellt (POST). Falls das nicht möglich ist, gibt es natürlich immer noch die Möglichkeit, private Nachrichten zu verwenden.
Ich wäre für jede Rückmeldung dankbar. Vielen Dank.

2 „Gefällt mir“

Ich denke, dafür wäre ein Plugin nötig. Welche Art von Benachrichtigung möchtest du? Kannst du deinen Anwendungsfall beschreiben?

2 „Gefällt mir“

Typischerweise geht es darum, die E-Mail-Benachrichtigungen eines externen Dienstes durch Discourse-Benachrichtigungen zu ersetzen. Der Dienst würde den Mitgliedern kostenlos angeboten werden (*). Dies würde es ermöglichen, alles auf Discourse zu zentralisieren und einen Anreiz zu schaffen, sich regelmäßig im Forum einzuloggen. Das war meine Idee. Ich bin mir nicht sicher, ob das Sinn ergibt oder ob es Fehler in der Argumentation gibt. Ich stehe jeder Anregung oder Kritik offen gegenüber.

[ (*): Mitglieder = Forumsteilnehmer. Mindestens Personen, die im Forum registriert sind. Es bleibt abzuwarten, ob ein Mindestmaß an Beteiligung oder Vertrauensniveau erforderlich ist oder ob eine Registrierung ausreicht. ]

Erhält das Plugin die Informationen und löst Benachrichtigungen in Discourse aus? Können Benachrichtigungen (leichter) über ein Plugin realisiert werden?

2 „Gefällt mir“

Ich kann mir vorstellen, dass es ein Plugin gibt, das eine Route hinzufügt, über die man eine Last mit der Benutzer-ID (oder E-Mail-Adresse), einer URL und einem Titel senden kann, um eine Benachrichtigung zu erstellen. Ich glaube nicht, dass dies ohne ein Plugin möglich ist, aber ich habe den Code nicht genauer untersucht.

Ich habe erst gestern darüber nachgedacht, Benachrichtigungen zu einem Plugin hinzuzufügen, das ich entwickle, daher bin ich mit der Funktionsweise noch nicht so vertraut.

3 „Gefällt mir“

Ich plane selbst ein ähnliches Plugin, bei dem die nicht-E-Mail-Benachrichtigungen meiner Website auf Discourse basieren. Diese können dann über MessageBus abonniert und zentral konfiguriert werden.

Mein Plan ist es, einfach einen benutzerdefinierten Endpunkt zum Erstellen eigener Benachrichtigungen einzurichten. Nach dem Ansehen dieser Code-Schnipsel halte ich das für machbar.

Zum Erstellen einer benutzerdefinierten Benachrichtigung:

Zum Anpassen der Darstellung des Benachrichtigungselements in der Benachrichtigungsliste:
https://github.com/discourse/discourse-code-review/blob/master/assets/javascripts/discourse/widgets/code-review-commit-approved-notification-item.js.es6

Wäre eine Core-API zum Erstellen von Benachrichtigungen vorhanden, könnte dieses Benachrichtigungselement-Widget meiner Meinung nach über eine Theme-Komponente realisiert werden, was noch einfacher wäre.

4 „Gefällt mir“

Ich weiß nicht, wie viel komplizierter es potenziell sein könnte, aber wäre es nicht sinnvoll, die Erstellung von Benachrichtigungen direkt in die API zu integrieren? Vielleicht wäre das Team dafür offen oder offen für einen PR (wenn jemand dazu in der Lage und bereit ist, dies zu tun)?

2 „Gefällt mir“

Es ist noch nicht dokumentiert, aber es gibt einen API-Endpunkt zum Erstellen von Benachrichtigungen:

 POST /notifications(.:format) notifications#create {:format=>/(json|html|\*\/\*)/}

Sie könnten möglicherweise den custom-Benachrichtigungstyp verwenden, anstatt einen eigenen zu erstellen.

5 „Gefällt mir“

Das ist großartig! Vielen Dank.

Also, wenn ich es richtig verstehe: Wenn am Endpoint DefaultNotificationItem überschrieben werden muss, wäre dafür weiterhin ein Plugin erforderlich, um den zusätzlichen Benachrichtigungstyp für eine benutzerdefinierte Widget-Verwendung zu registrieren?

Notification.types[:following] = 800

(von discourse-follow/plugin.rb at main · discourse/discourse-follow · GitHub)

Beim custom-Typ wird die Darstellung über https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/widgets/custom-notification-item.js erfolgen. Ist es also weiterhin erforderlich, ein benutzerdefiniertes Widget zu erstellen, um die Ziel-url zu überschreiben?

Ich habe gesehen, dass ein Plugin in einem ähnlichen Szenario [„custom-notification-item

2 „Gefällt mir“

Danke, @renato!

Hier ist, was ich habe.

Notification.create!(
  notification_type: Notification.types[:custom],
  user_id: 1,
  topic_id: nil,
  post_number: nil,
  high_priority: true,
  data: {
    message: 'pfaffmanager.title',
    display_username: 'pfaffman',
    topic_title: 'my title'
  }.to_json
)

Ich sehe die Benachrichtigung, aber, wie zu erwarten, passiert beim Klicken NICHTS. Außerdem (was mir erst klar wurde, als ich es ausprobiert habe), ist die message eine I18n-Übersetzung und kein beliebiger String. . . ). Was ich möchte, ist die Möglichkeit, die URL des Modells anzugeben, das die Benachrichtigung ausgelöst hat.

2 „Gefällt mir“

Ich nehme an, du meintest „nichts

2 „Gefällt mir“

Das DefaultNotificationItem erstellt automatisch eine url, wenn du data.badge_id, topic_id oder data.group_id ausfüllst.

Ich habe diesen Ansatz getestet und er funktioniert. Fülle einfach data.url aus und verwende dies in einer Theme-Komponente:

  api.reopenWidget("custom-notification-item", {
      url(data) {
          return data.url || this._super(data);
      }
  })
4 „Gefällt mir“

Ich bekomme das nicht zum Laufen…

POST https://XXX/notifications
Api-Key:XXX
Api-Username:system
Content-Type:application/json
Accept:application/json

{
    "notification_type":9,
    "user_id": 123,
    "post_number": 1,
    "topic_id": 956,
    "data": {
        "topic_title": "Test",
        "original_post_id": 2222,
        "original_post_type": 1,
        "original_username": "User.Name",
        "revision_number": 1,
        "display_username": "Text"
            }

}

Ich erhalte als Antwort:


{
  "errors": [
    "Data can't be blank"
  ],
  "error_type": "record_invalid"
}

Formatierungsfehler, Missverständnis? Oder fehlt mir etwas in data?

Ich kann das nicht wirklich aus dem Web zurückentwickeln - Oder wird diese API irgendwo aufgerufen?

1 „Gefällt mir“

Sie müssen den data-Wert kodieren.

z. B.:

"data": "{\"topic_title\":\"Test\",\"original_post_id\":2222,\"original_post_type\":1,\"original_username\":\"User.Name\",\"revision_number\":1,\"display_username\":\"Text\"}"
4 „Gefällt mir“