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

Canal de notificação

Mensagem interna
E-mail
WeCom

Guia de Desenvolvimento

Estender tipo de canal de notificação
Estender API de notificação
Previous PageEstender tipo de canal de notificação
Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

#Referência da API

#Lado do Servidor

#BaseNotificationChannel

Esta é uma classe abstrata que serve como base para diferentes tipos de canais de notificação. Ela define as interfaces essenciais para a implementação de um canal. Para adicionar um novo tipo de canal de notificação, você precisa estender esta classe e implementar seus métodos.

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

Este plugin do lado do servidor atua como uma ferramenta de gerenciamento de notificações, oferecendo métodos para registrar tipos de canais de notificação e enviar notificações.

#registerChannelType()

Este método registra um novo tipo de canal no lado do servidor. Veja um exemplo de uso abaixo.

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

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

#send()

O método send é usado para enviar notificações através de um canal especificado.

// Mensagem no aplicativo
send({
  channelName: 'in-app-message',
  message: {
    title: 'Título do teste de mensagem no aplicativo',
    content: 'Teste de mensagem no aplicativo'
  },
  receivers: {
    type: 'userId',
    value: [1, 2, 3]
  },
  triggerFrom: 'workflow'
});

// E-mail
send({
  channelName: 'email',
  message: {
    title: 'Título do teste de e-mail',
    content: 'Teste de e-mail'
  },
  receivers: {
    type: 'channel-self-defined',
    channelType: 'email',
    value: ['a@example.com', 'b@example.com']
  },
  triggerFrom: 'workflow'
});
#Assinatura

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

O campo receivers atualmente suporta dois formatos: IDs de usuário do NocoBase (userId) ou configurações de canal personalizadas (channel-self-defined).

type ReceiversType = 
  | { value: number[]; type: 'userId' }
  | { value: any; type: 'channel-self-defined'; channelType: string };
#Informações Detalhadas

sendConfig

PropriedadeTipoDescrição
channelNamestringIdentificador do canal
messageobjectObjeto da mensagem
receiversReceiversTypeDestinatários
triggerFromstringOrigem do acionamento

#Lado do Cliente

#PluginNotificationManagerClient

#channelTypes

A biblioteca de tipos de canais registrados.

#Assinatura

channelTypes: Registry<registerTypeOptions>

#registerChannelType()

Registra um tipo de canal do lado do cliente.

#Assinatura

registerChannelType(params: registerTypeOptions)

#Tipo
type registerTypeOptions = {
  title: string; // Título de exibição para o canal
  type: string;  // Identificador do canal
  components: {
    ChannelConfigForm?: ComponentType // Componente do formulário de configuração do canal;
    MessageConfigForm?: ComponentType<{ variableOptions: any }> // Componente do formulário de configuração da mensagem;
    ContentConfigForm?: ComponentType<{ variableOptions: any }> // Componente do formulário de configuração do conteúdo (apenas para o conteúdo da mensagem, excluindo a configuração do destinatário);
  };
  meta?: { // Metadados para a configuração do canal
    createable?: boolean // Se novos canais podem ser adicionados;
    editable?: boolean  // Se a configuração do canal é editável;
    deletable?: boolean // Se a configuração do canal é deletável;
  };
};

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