Справочник API

Серверная часть

BaseNotificationChannel

Этот абстрактный класс представляет основу для различных типов каналов уведомлений и определяет ключевые интерфейсы для реализации канала. Чтобы добавить новый канал уведомлений, необходимо унаследоваться от этого класса и реализовать его методы.

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

Этот серверный плагин служит инструментом управления уведомлениями: он предоставляет методы для регистрации типов каналов уведомлений и отправки уведомлений.

registerChannelType()

Этот метод регистрирует новый тип канала на стороне сервера. Пример использования приведён ниже.

import PluginNotificationManagerServer from '@nocobase/plugin-notification-manager';
import { Plugin } from '@nocobase/server';
import { ExampleServer } from './example-server';
export class PluginNotificationExampleServer extends Plugin {
  async load() {
    const notificationServer = this.pm.get(
      PluginNotificationManagerServer,
    ) as PluginNotificationManagerServer;
    notificationServer.registerChannelType({
      type: 'example-sms',
      Channel: ExampleServer,
    });
  }
}

export default PluginNotificationExampleServer;
Сигнатура

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

send()

Метод send используется для отправки уведомлений через указанный канал.

// Сообщение в приложении
send({
  channelName: 'in-app-message',
  message: {
    title: 'Тестовый заголовок встроенного сообщения',
    content: 'Тест встроенного сообщения'
  },
  receivers: {
    type: 'userId',
    value: [1, 2, 3]
  },
  triggerFrom: 'workflow'
});

// Электронная почта
send({
  channelName: 'email',
  message: {
    title: 'Тестовый заголовок письма',
    content: 'Тест письма'
  },
  receivers: {
    type: 'channel-self-defined',
    channelType: 'email',
    value: ['a@example.com', 'b@example.com']
  },
  triggerFrom: 'workflow'
});
Сигнатура

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

Поле receivers сейчас поддерживает два формата: идентификаторы пользователей NocoBase userId или пользовательские конфигурации канала channel-self-defined.

type ReceiversType =
  | { value: number[]; type: 'userId' }
  | { value: any; type: 'channel-self-defined'; channelType: string };
Подробная информация

sendConfig

СвойствоТипОписание
channelNamestringИдентификатор канала
messageobjectОбъект сообщения
receiversReceiversTypeПолучатели
triggerFromstringИсточник запуска триггера

Клиентская часть

PluginNotificationManagerClient

channelTypes

Реестр зарегистрированных типов каналов.

Сигнатура

channelTypes: Registry<registerTypeOptions>

registerChannelType()

Регистрирует тип канала на стороне клиента.

Сигнатура

registerChannelType(params: registerTypeOptions)

Тип
type registerTypeOptions = {
  title: string; // Отображаемое название канала
  type: string; // Идентификатор канала
  components: {
    ChannelConfigForm?: ComponentType; // Компонент формы настройки канала
    MessageConfigForm?: ComponentType<{ variableOptions: any }>; // Компонент формы настройки сообщения
    ContentConfigForm?: ComponentType<{ variableOptions: any }>; // Компонент формы настройки содержимого (только содержимое сообщения, без настройки получателей)
  };
  meta?: {
    // Метаданные для конфигурации канала
    createable?: boolean; // Можно ли добавлять новые каналы
    editable?: boolean; // Можно ли редактировать конфигурацию канала
    deletable?: boolean; // Можно ли удалять конфигурацию канала
  };
};

type RegisterChannelType = (params: ChannelType) => void;