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

Цей серверний плагін слугує інструментом для керування сповіщеннями, надаючи методи для реєстрації типів каналів сповіщень та їх надсилання.

#registerChannelType()

Цей метод реєструє новий тип каналу на серверній стороні. Приклад використання наведено нижче.

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;
#Підпис

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;