logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo
Обзор

Канал уведомлений

Внутренние сообщения
Электронная почта
WeChat Work

Руководство для разработчиков

Расширенные типы каналов уведомлений
Расширенный API уведомлений
Previous PageРасширенные типы каналов уведомлений
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Справочник 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

Этот серверный плагин (plugin) предназначен для управления уведомлениями. Он предоставляет методы для регистрации типов каналов уведомлений и отправки самих уведомлений.

#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 используется для отправки уведомлений через указанный канал.

// In-app message
send({
  channelName: 'in-app-message',
  message: {
    title: 'In-app message test title',
    content: 'In-app message test'
  },
  receivers: {
    type: 'userId',
    value: [1, 2, 3]
  },
  triggerFrom: 'workflow'
});

// Email
send({
  channelName: 'email',
  message: {
    title: 'Email test title',
    content: 'Email test'
  },
  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;