Benachrichtigungen

So folgen Sie diesem Kapitel

Eingaben: Vorhandene SUPERADMIN-Zugangsdaten und die von Ihnen kontrollierte Callback-URL.

Schritte und erwartetes Ergebnis: Erstellen oder bestimmen Sie den administrativen Empfänger und senden Sie die vollständige gewünschte Benachrichtigungsauswahl. Hier bezeichnet adminUserId den Empfänger; sie ist von userId im Kundenablauf getrennt.

Alternativen und spätere Aktionen: Dies ist eine optionale administrative Integration. Subscribe ersetzt die Auswahl; führen Sie alle weiterhin gewünschten Ereignisse mit auf.

DTO-Quellcode: AdminOutputModel, SystemOccurrenceOutputModel, SystemOccurrencePreferenceInputModel

In früheren Codeblöcken zugewiesene Variablen werden später wiederverwendet. Kundeneingaben stammen aus Ihrer Oberfläche. Bewahren Sie IDs und Referenzwerte im Kontext des jeweiligen Kunden auf; legen Sie nicht für jeden Schritt einen neuen Kontext an.

Die Beispiele verwenden gemeinsame Hilfsklassen. Lesen Sie Gemeinsame Hilfsklassen: vollständiger C#- und Java-Quellcode bevor Sie ein Beispiel übernehmen.
Voraussetzungen: Ein eingerichteter HTTP-Client und vorhandene SUPERADMIN-Zugangsdaten zum Anlegen des Empfängers. Setzen Sie callbackUrl auf Ihre kontrollierte Adresse. Name, Nachname, E-Mail-Adresse und Telefonangaben gehören zum administrativen Empfänger.
Für den nächsten Schritt aufbewahren: Die Benachrichtigungseinstellungen für adminUserId. Das Anlegen eines Administrators liefert keinen administrativen Access-Token.
Der WMS2-Benachrichtigungsdienst kann Systemereignisse wie Portfolioeröffnung, Strategieänderung und Kundendatenänderung melden.
Benachrichtigungen können zugestellt werden als:
  • E-Mail
  • SMS
  • HTTP-Callback
Diese Benachrichtigungen richten sich an Benutzer mit den Rollen SELLER, ADMIN oder SUPERADMIN.

Abonnement

Im Beispiel legt ein vorhandener SUPERADMIN einen ADMIN-Empfänger an und richtet dessen Benachrichtigung PORTFOLIO-ORDER-SUBMISSION-DELIVERED ein. Beide Verwaltungsanfragen verwenden den vorhandenen SUPERADMIN-Token. Der Empfänger erhält durch das Anlegen keinen neuen Access-Token.
Dieses Beispiel verwendet einen HTTP-Callback, auch Webhook genannt, für Systemereignisse.
Die Webhook-Adresse wird pro Benutzer gespeichert, ebenso wie dessen E-Mail-Adresse und Mobilnummer. Jeder Benutzer hat eine eigene HTTP-Callback-URL.
Die vollständige Liste der Systemereigniscodes finden Sie unter api/v1/system-occurrence.
Für einen isolierten Test mit fiktiven Daten können Sie webhook.siteverwenden. Dort wird eine eindeutige URL angezeigt, die Sie für den Callback einsetzen:
Fundstelle der Test-Callback-URL
Legen Sie anschliessend einen ADMIN-Benutzer an und setzen Sie dessen Eigenschaft URL auf die von webhook.siteerzeugte HTTP-Adresse. Zum Anlegen eines ADMIN-Benutzers benötigen Sie einen SUPERADMIN-Token:
								
var createAdminPayload = new
{
    Name = name,
    Surname = surname,
    Email = email,
    PhoneNumberPrefix = phoneNumberPrefix,
    PhoneNumberNumber = phoneNumberNumber,
    Url = callbackUrl,
    GenderId = genderId,
    LanguageId = languageId
};
// Creating an ADMIN user requires an existing SUPERADMIN token.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", superAdminToken);
using var response = await httpClient.PostAsync("api/v1/users/admins",
    new StringContent(JsonConvert.SerializeObject(createAdminPayload), Encoding.UTF8, "application/json"));
response.EnsureSuccessStatusCode();
var admin = JsonConvert.DeserializeObject<AdminOutputModel>(await response.Content.ReadAsStringAsync());
var adminUserId = admin.Id;

									
								
JsonObject payload = new JsonObject();
payload.addProperty("Name", name);
payload.addProperty("Surname", surname);
payload.addProperty("Email", email);
payload.addProperty("PhoneNumberPrefix", phoneNumberPrefix);
payload.addProperty("PhoneNumberNumber", phoneNumberNumber);
payload.addProperty("Url", callbackUrl);
payload.addProperty("GenderId", genderId);
payload.addProperty("LanguageId", languageId);
HttpRequest request = HttpRequest.newBuilder()
    .uri(Settings.wmsUri("users/admins"))
    .timeout(Duration.ofMinutes(1))
    .header("Authorization", "Bearer " + Settings.SUPERADMIN_TOKEN)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(payload.toString())).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
AdminOutputModel admin = new Gson().fromJson(response.body(), AdminOutputModel.class);
var adminUserId = admin.Id;

Der nächste Schritt setzt die Benachrichtigungseinstellungen für adminUserId. Der Aufrufer muss diesen Empfänger verwalten dürfen. Hier wählen Sie eine HTTP-Callback-Benachrichtigung:
								
// Use a token authorized to manage adminUserId, such as superAdminToken.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", superAdminToken);
var systemOccurrences = await httpClient.GetFromJsonAsync<List<SystemOccurrenceOutputModel>>("api/v1/system-occurrence");

  // Get PORTFOLIO-ORDER-SUBMISSION-DELIVERED system notification ID
  var systemOccurrenceId = systemOccurrences.First(x => x.Code == "PORTFOLIO-ORDER-SUBMISSION-DELIVERED").Id;

  var selectedSystemNotifications = new List<SystemOccurrencePreferenceInputModel>();
  selectedSystemNotifications.Add(new SystemOccurrencePreferenceInputModel
  {
	Id = systemOccurrenceId,
	IsEmailEnabled = false,
	IsHttpEnabled = true,	// HTTP callback
	IsSmsEnabled = false
  });

  var payLoadAsString = JsonConvert.SerializeObject(selectedSystemNotifications);
  using var response = await httpClient.PostAsync($"api/v1/system-occurrence/user/{adminUserId}",
    new StringContent(payLoadAsString, Encoding.UTF8, "application/json"));
response.EnsureSuccessStatusCode();

									
								
HttpRequest eventsRequest = HttpRequest.newBuilder()
    .uri(Settings.wmsUri("system-occurrence"))
    .timeout(Duration.ofMinutes(1))
    .header("Authorization", "Bearer " + Settings.SUPERADMIN_TOKEN).GET().build();
var eventsResponse = httpClient.send(eventsRequest, BodyHandlers.ofString());
Api.requireSuccess(eventsResponse);
Type eventListType = new TypeToken<List<SystemOccurrenceOutputModel>>() {}.getType();
List<SystemOccurrenceOutputModel> events = new Gson().fromJson(eventsResponse.body(), eventListType);
var event = events.stream()
    .filter(x -> "PORTFOLIO-ORDER-SUBMISSION-DELIVERED".equals(x.Code))
    .findFirst().orElseThrow(() -> new IllegalStateException("Event unavailable in this environment"));
JsonObject preference = new JsonObject();
preference.addProperty("Id", event.Id);
preference.addProperty("IsEmailEnabled", false);
preference.addProperty("IsSmsEnabled", false);
preference.addProperty("IsHttpEnabled", true);
JsonArray preferences = new JsonArray();
preferences.add(preference);
HttpRequest subscriptionRequest = HttpRequest.newBuilder()
    .uri(Settings.wmsUri("system-occurrence/user/" + adminUserId))
    .timeout(Duration.ofMinutes(1))
    .header("Authorization", "Bearer " + Settings.SUPERADMIN_TOKEN)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(preferences.toString())).build();
var subscriptionResponse = httpClient.send(subscriptionRequest, BodyHandlers.ofString());
Api.requireSuccess(subscriptionResponse);

Die Einstellungen ersetzen die gesamte bisherige Auswahl; ausgelassene Ereignisse werden deaktiviert. Lesen Sie bestehende Einstellungen aus und führen Sie die weiterhin gewünschten Einträge mit auf. Eine leere Liste deaktiviert alle Ereignisbenachrichtigungen. Das Beispiel abonniert die erfolgreiche Zustellung des Portfolioauftrags. Die Zustellung an die Depotbank erfolgt später als die Annahme der API-Anfrage. Verfügbare Ereignisse und Kanäle hängen vom installierten Benachrichtigungsdienst und der Umgebung ab.
Zum Testen registrieren Sie einen neuen Kunden über Kundenregistrierung und senden anschliessend einen Eröffnungsauftrag. Die Abbildung zeigt einen Callback nach dem abonnierten Ereignis:
Beispiel einer über den Callback empfangenen Benachrichtigung