KI-Übersetzungshinweis
Diese Dokumentation wurde automatisch von KI übersetzt.
Erweiterung von Benachrichtigungskanal-Typen
NocoBase ermöglicht es Ihnen, Benachrichtigungskanal-Typen bei Bedarf zu erweitern, zum Beispiel für SMS-Benachrichtigungen oder App-Push-Benachrichtigungen.
Client
Registrierung von Kanal-Typen
Die Konfigurationsschnittstellen für Client-Kanäle und Nachrichten werden über die registerChannelType-Methode registriert, die vom Client des Benachrichtigungsmanagement-Plugins bereitgestellt wird:
import PluginNotificationManagerClient from '@nocobase/plugin-notification-manager/client';
class PluginNotificationExampleClient extends Plugin {
async afterAdd() {}
async beforeLoad() {}
async load() {
const notification = this.pm.get(PluginNotificationManagerClient);
notification.registerChannelType({
title: 'Example SMS', // Kanal-Typ-Name
type: 'example-sms', // Kanal-Typ-Bezeichner
components: {
ChannelConfigForm, // Kanal-Konfigurationsformular
MessageConfigForm, // Nachrichten-Konfigurationsformular
},
});
}
}
export default PluginNotificationExampleClient;
Server
Abstrakte Klasse erweitern
Der Kern der Server-Entwicklung besteht darin, die abstrakte Klasse BaseNotificationChannel zu erweitern und die send-Methode zu implementieren. Diese send-Methode enthält die Geschäftslogik für das Senden von Benachrichtigungen über das erweiterte Plugin.
import { BaseNotificationChannel } from '@nocobase/plugin-notification-manager';
export class ExampleSever extends BaseNotificationChannel {
async send(args): Promise<any> {
console.log('ExampleSever send', args);
return { status: 'success', message: args.message };
}
}
Server-Registrierung
Als Nächstes müssen Sie die registerChannelType-Methode des Benachrichtigungs-Server-Kerns aufrufen, um die entwickelte Server-Implementierungsklasse im Kern zu registrieren:
import PluginNotificationManagerServer from '@nocobase/plugin-notification-manager';
import { Plugin } from '@nocobase/server';
import { ExampleSever } from './example-server';
export class PluginNotificationExampleServer extends Plugin {
async load() {
const notificationServer = this.pm.get(PluginNotificationManagerServer) as PluginNotificationManagerServer;
notificationServer.registerChannelType({ type: 'example-sms', Channel: ExampleSever });
}
}
export default PluginNotificationExampleServer;
Vollständiges Beispiel
Im Folgenden wird anhand eines Beispiel-Plugins für Benachrichtigungserweiterungen detailliert beschrieben, wie Sie ein solches Erweiterungs-Plugin entwickeln können.
Angenommen, wir möchten NocoBase um eine SMS-Benachrichtigungsfunktion erweitern, indem wir ein SMS-Gateway einer bestimmten Plattform nutzen.
Plugin-Erstellung
- Führen Sie den Befehl zur Plugin-Erstellung aus:
yarn pm add @nocobase/plugin-notification-example
Client-Entwicklung
Für den Client müssen wir zwei Formular-Komponenten entwickeln: ChannelConfigForm (Kanal-Konfigurationsformular) und MessageConfigForm (Nachrichten-Konfigurationsformular).
Um SMS-Nachrichten über eine bestimmte Plattform zu versenden, sind ein API-Schlüssel und ein Secret erforderlich. Daher umfasst unser Kanal-Formular hauptsächlich diese beiden Felder. Erstellen Sie eine neue Datei namens ChannelConfigForm.tsx im Verzeichnis src/client. Der Dateiinhalt sieht wie folgt aus:
import React from 'react';
import { SchemaComponent } from '@nocobase/client';
import useLocalTranslation from './useLocalTranslation';
const ChannelConfigForm = () => {
const t = useLocalTranslation();
return (
<SchemaComponent
scope={{ t }}
schema={{
type: 'object',
properties: {
apiKey: {
'x-decorator': 'FormItem',
type: 'string',
title: '{{t("Transport")}}',
'x-component': 'Input',
},
secret: {
'x-decorator': 'FormItem',
type: 'string',
title: '{{t("Transport")}}',
'x-component': 'Input',
},
},
}}
/>
);
};
export default ChannelConfigForm;
Das Nachrichten-Konfigurationsformular beinhaltet hauptsächlich die Konfiguration für Empfänger (receivers) und den Nachrichteninhalt (content). Erstellen Sie eine neue Datei namens MessageConfigForm.tsx im Verzeichnis src/client. Die Komponente empfängt variableOptions als Variablenparameter. Das Inhaltsformular wird derzeit im Workflow-Knoten konfiguriert und muss in der Regel Workflow-Knotenvariablen verarbeiten. Der spezifische Dateiinhalt sieht wie folgt aus:
import React from 'react';
import { SchemaComponent } from '@nocobase/client';
import useLocalTranslation from './useLocalTranslation';
const MessageConfigForm = ({ variableOptions }) => {
const { t } = useLocalTranslation();
return (
<SchemaComponent
scope={{ t }}
schema={{
type: 'object',
properties: {
to: {
type: 'array',
required: true,
title: `{{t("Receivers")}}`,
'x-decorator': 'FormItem',
'x-component': 'ArrayItems',
items: {
type: 'void',
'x-component': 'Space',
properties: {
sort: {
type: 'void',
'x-decorator': 'FormItem',
'x-component': 'ArrayItems.SortHandle',
},
input: {
type: 'string',
'x-decorator': 'FormItem',
'x-component': 'Variable.Input',
'x-component-props': {
scope: variableOptions,
useTypedConstant: ['string'],
placeholder: `{{t("Phone number")}}`,
},
},
remove: {
type: 'void',
'x-decorator': 'FormItem',
'x-component': 'ArrayItems.Remove',
},
},
},
properties: {
add: {
type: 'void',
title: `{{t("Add phone number")}}`,
'x-component': 'ArrayItems.Addition',
},
},
},
content: {
type: 'string',
required: true,
title: `{{t("Content")}}`,
'x-decorator': 'FormItem',
'x-component': 'Variable.RawTextArea',
'x-component-props': {
scope: variableOptions,
placeholder: 'Hi,',
autoSize: {
minRows: 10,
},
},
},
},
}}
/>
);
};
export default MessageConfigForm
Registrierung von Client-Komponenten
Nachdem die Formular-Konfigurationskomponenten entwickelt wurden, müssen diese im Kern des Benachrichtigungsmanagements registriert werden. Angenommen, der Name unserer Plattform ist "Example", dann sieht der bearbeitete Inhalt der Datei src/client/index.tsx wie folgt aus:
import { Plugin } from '@nocobase/client';
import PluginNotificationManagerClient from '@nocobase/plugin-notification-manager/client';
import { tval } from '@nocobase/utils/client';
import ChannelConfigForm from './ChannelConfigForm';
import MessageConfigForm from './MessageConfigForm';
class PluginNotificationExampleClient extends Plugin {
async afterAdd() {}
async beforeLoad() {}
async load() {
const notification = this.pm.get(PluginNotificationManagerClient);
notification.registerChannelType({
title: tval('Example SMS', { ns: '@nocobase/plugin-notification-example' }),
type: 'example-sms',
components: {
ChannelConfigForm,
MessageConfigForm,
},
});
}
}
export default PluginNotificationExampleClient;
Damit ist die Entwicklung des Clients abgeschlossen.
Server-Entwicklung
Der Kern der Server-Entwicklung besteht darin, die abstrakte Klasse BaseNotificationChannel zu erweitern und die send-Methode zu implementieren. Die send-Methode enthält die Geschäftslogik für das Senden von Benachrichtigungen durch das Erweiterungs-Plugin. Da es sich hier um ein Beispiel handelt, werden wir die empfangenen Argumente einfach ausgeben. Erstellen Sie im Verzeichnis src/server eine neue Datei namens example-server.ts. Der Dateiinhalt sieht wie folgt aus:
import { BaseNotificationChannel } from '@nocobase/plugin-notification-manager';
export class ExampleSever extends BaseNotificationChannel {
async send(args): Promise<any> {
console.log('ExampleSever send', args);
return { status: 'success', message: args.message };
}
}
Als Nächstes müssen Sie das Server-Erweiterungs-Plugin registrieren, indem Sie die registerChannelType-Methode des Benachrichtigungs-Server-Kerns aufrufen. Der bearbeitete Inhalt der Datei src/server/plugin.ts sieht wie folgt aus:
import PluginNotificationManagerServer from '@nocobase/plugin-notification-manager';
import { Plugin } from '@nocobase/server';
import { ExampleSever } from './example-server';
export class PluginNotificationExampleServer extends Plugin {
async load() {
const notificationServer = this.pm.get(PluginNotificationManagerServer) as PluginNotificationManagerServer;
notificationServer.registerChannelType({ type: 'example-sms', Channel: ExampleSever });
}
}
export default PluginNotificationExampleServer;
Plugin-Registrierung und -Start
- Führen Sie den Registrierungsbefehl aus:
yarn pm add @nocobase/plugin-notification-example
- Führen Sie den Aktivierungsbefehl aus:
yarn pm enable @nocobase/plugin-notification-example
Kanal-Konfiguration
Wenn Sie nun die Kanal-Seite der Benachrichtigungsverwaltung aufrufen, sehen Sie, dass der Kanal Example SMS aktiviert wurde.

Fügen Sie einen Beispiel-Kanal hinzu.

Erstellen Sie einen neuen Workflow und konfigurieren Sie den Benachrichtigungs-Knoten.

Lösen Sie die Workflow-Ausführung aus, um die folgende Ausgabe in der Konsole zu sehen.
