logologo
Start
Dokumentacja
Deweloperzy
Wtyczki
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Start
Dokumentacja
Deweloperzy
Wtyczki
API
logologo
Przegląd

Kanały powiadomień

Wiadomości wewnętrzne
E-mail
WeChat Work

Przewodnik dewelopera

Rozszerzanie typów kanałów powiadomień
Rozszerzanie API powiadomień
Previous PageRozszerzanie typów kanałów powiadomień
TIP

Ten dokument został przetłumaczony przez AI. W przypadku niedokładności, proszę odnieść się do wersji angielskiej

#Referencje API

#Po Stronie Serwera

#BaseNotificationChannel

Jest to abstrakcyjna klasa bazowa dla różnych typów kanałów powiadomień. Definiuje ona niezbędne interfejsy do implementacji kanału. Aby dodać nowy typ kanału powiadomień, należy rozszerzyć tę klasę i zaimplementować jej metody.

export abstract class BaseNotificationChannel<Message = any> {
  constructor(protected app: Application) {}
  abstract send(params: {
    channel: ChannelOptions;
    message: Message;
  }): Promise<{ message: Message; status: 'success' | 'fail'; reason?: string }>;
}

#PluginNotificationManagerServer

Ta wtyczka po stronie serwera służy jako narzędzie do zarządzania powiadomieniami, udostępniając metody do rejestrowania typów kanałów powiadomień oraz do wysyłania powiadomień.

#registerChannelType()

Ta metoda rejestruje nowy typ kanału po stronie serwera. Poniżej znajdą Państwo przykład użycia.

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;
#Sygnatura

registerChannelType({ type, Channel }: {type: string, Channel: BaseNotificationChannel })

#send()

Metoda send służy do wysyłania powiadomień za pośrednictwem określonego kanału.

// Wiadomość w aplikacji
send({
  channelName: 'in-app-message',
  message: {
    title: 'Tytuł testowej wiadomości w aplikacji',
    content: 'Testowa wiadomość w aplikacji'
  },
  receivers: {
    type: 'userId',
    value: [1, 2, 3]
  },
  triggerFrom: 'workflow'
});

// E-mail
send({
  channelName: 'email',
  message: {
    title: 'Tytuł testowego e-maila',
    content: 'Testowy e-mail'
  },
  receivers: {
    type: 'channel-self-defined',
    channelType: 'email',
    value: ['a@example.com', 'b@example.com']
  },
  triggerFrom: 'workflow'
});
#Sygnatura

send(sendConfig: {channelName:String, message: Object, receivers: ReceiversType, triggerFrom: String })

Pole receivers obsługuje obecnie dwa formaty: identyfikatory użytkowników NocoBase (userId) lub niestandardowe konfiguracje kanałów (channel-self-defined).

type ReceiversType = 
  | { value: number[]; type: 'userId' }
  | { value: any; type: 'channel-self-defined'; channelType: string };
#Szczegółowe informacje

sendConfig

WłaściwośćTypOpis
channelNamestringIdentyfikator kanału
messageobjectObiekt wiadomości
receiversReceiversTypeOdbiorcy
triggerFromstringŹródło wyzwalacza

#Po Stronie Klienta

#PluginNotificationManagerClient

#channelTypes

Biblioteka zarejestrowanych typów kanałów.

#Sygnatura

channelTypes: Registry<registerTypeOptions>

#registerChannelType()

Rejestruje typ kanału po stronie klienta.

#Sygnatura

registerChannelType(params: registerTypeOptions)

#Typ
type registerTypeOptions = {
  title: string; // Tytuł wyświetlany dla kanału
  type: string;  // Identyfikator kanału
  components: {
    ChannelConfigForm?: ComponentType // Komponent formularza konfiguracji kanału;
    MessageConfigForm?: ComponentType<{ variableOptions: any }> // Komponent formularza konfiguracji wiadomości;
    ContentConfigForm?: ComponentType<{ variableOptions: any }> // Komponent formularza konfiguracji treści (tylko dla treści wiadomości, bez konfiguracji odbiorców);
  };
  meta?: { // Metadane konfiguracji kanału
    createable?: boolean // Czy można dodawać nowe kanały;
    editable?: boolean  // Czy konfiguracja kanału jest edytowalna;
    deletable?: boolean // Czy konfiguracja kanału jest usuwalna;
  };
};

type RegisterChannelType = (params: ChannelType) => void