# Node-RED 消息通知节点集合

这是一个Node-RED节点集合，提供多种消息通知方式，包括飞书、钉钉、企业微信、阿里云短信、腾讯云短信和电子邮件等。通过这些节点，您可以轻松地在Node-RED流程中发送各类消息通知。

## 项目背景

在现代企业环境中，消息通知是业务流程自动化的重要组成部分。然而，不同的团队和场景可能使用不同的通讯工具，导致系统集成时面临以下挑战：

- 多平台碎片化：企业内部同时使用多种通讯工具（飞书、钉钉、企业微信等）
- 开发成本高：为每个平台单独开发和维护集成代码耗时费力
- 使用门槛高：需要了解各平台API的开发人员才能实现消息推送
- 缺乏统一管理：难以集中配置和管理各类消息通知

本项目旨在解决这些问题，为Node-RED用户提供一站式的消息通知解决方案。

## 设计思路

### 模块化设计

项目采用高度模块化的设计理念，每个通知渠道（飞书、钉钉、企业微信、短信等）都是独立的节点，具有以下特点：

- **统一接口**：所有节点遵循相似的配置和使用方式，降低学习成本
- **松耦合架构**：各节点之间相互独立，可以单独安装和使用
- **可扩展性**：便于添加新的通知渠道和功能

### 配置灵活性

为了适应不同的使用场景，每个节点都支持两种配置方式：

1. **静态配置**：通过Node-RED界面配置面板设置参数
2. **动态配置**：通过消息属性在运行时动态覆盖配置

这种设计使得用户可以根据需要灵活选择配置方式，既可以简单固定使用，也可以实现复杂的动态场景。

### 错误处理

所有节点都实现了完善的错误处理机制：

- 参数验证：检查必要参数是否提供
- 异常捕获：捕获并处理API调用过程中的异常
- 状态反馈：通过节点状态和调试输出提供清晰的错误信息

## 项目结构

```
├── feishu.js          # 飞书消息节点实现
├── feishu.html        # 飞书节点配置界面
├── dingtalk.js        # 钉钉消息节点实现
├── dingtalk.html      # 钉钉节点配置界面
├── wecom.js           # 企业微信群机器人节点实现
├── wecom.html         # 企业微信群机器人节点配置界面
├── wecom-app.js       # 企业微信应用消息节点实现
├── wecom-app.html     # 企业微信应用消息节点配置界面
├── aliyun-sms.js      # 阿里云短信节点实现
├── aliyun-sms.html    # 阿里云短信节点配置界面
├── tencent-sms.js     # 腾讯云短信节点实现
├── tencent-sms.html   # 腾讯云短信节点配置界面
├── email.js           # 电子邮件节点实现
├── email.html         # 电子邮件节点配置界面
└── package.json       # 项目配置和依赖管理
```

每个功能模块通常包含两个文件：
- `.js`文件：包含节点的业务逻辑实现
- `.html`文件：定义节点在Node-RED编辑器中的配置界面和帮助信息

## 功能特点

- **多平台支持**：支持飞书、钉钉、企业微信等主流企业通讯工具
- **短信服务**：集成阿里云短信和腾讯云短信服务
- **邮件发送**：支持HTML和纯文本格式的电子邮件发送
- **灵活配置**：所有节点均支持通过配置面板或消息属性动态设置参数
- **丰富的消息格式**：支持文本、Markdown、富文本等多种消息格式
- **统一错误处理**：所有节点采用一致的错误处理机制，提供清晰的状态反馈
- **低代码实现**：无需编写代码，通过拖拽和配置即可实现复杂的消息通知流程
- **可视化管理**：在Node-RED流程中直观地管理和监控消息发送状态

## 安装

在Node-RED环境中，通过以下命令安装：

```bash
npm install node-red-contrib-feishu
```

或者在Node-RED界面中，通过「管理面板」→「安装」搜索并安装 `node-red-contrib-feishu`。

## 节点说明

### 飞书消息节点

用于向飞书机器人发送消息通知。

#### 配置

- **名称**：节点显示名称（可选）
- **Webhook URL**：飞书机器人的Webhook地址（必填）
- **消息类型**：支持text（纯文本）和rich_text（富文本）

#### 输入

- **msg.payload**：消息内容
- **msg.title**：消息标题（仅富文本消息有效）
- **msg.webhookUrl**：可动态覆盖配置的Webhook URL
- **msg.messageType**：可动态覆盖配置的消息类型

#### 示例

```javascript
// 发送纯文本消息
msg.payload = "这是一条测试消息";
return msg;

// 发送富文本消息
msg.messageType = "rich_text";
msg.title = "通知标题";
msg.payload = "这是一条**富文本**消息";
return msg;
```

### 钉钉消息节点

用于向钉钉机器人发送消息通知。

#### 配置

- **名称**：节点显示名称（可选）
- **Access Token**：钉钉机器人的访问令牌（必填）
- **加签密钥**：钉钉机器人的安全设置密钥（可选）
- **消息类型**：支持text（纯文本）和markdown（Markdown格式）

#### 输入

- **msg.payload**：消息内容
- **msg.title**：Markdown消息的标题
- **msg.accessToken**：可动态覆盖配置的Access Token
- **msg.secret**：可动态覆盖配置的加签密钥
- **msg.messageType**：可动态覆盖配置的消息类型

### 企业微信消息节点

用于向企业微信机器人发送消息通知。

#### 配置

- **名称**：节点显示名称（可选）
- **Webhook URL**：企业微信机器人的Webhook地址（必填）
- **消息类型**：支持text（纯文本）和markdown（Markdown格式）

#### 输入

- **msg.payload**：消息内容
- **msg.webhookUrl**：可动态覆盖配置的Webhook URL
- **msg.messageType**：可动态覆盖配置的消息类型

### 阿里云短信节点

用于通过阿里云短信服务发送短信。

#### 配置

- **阿里云配置**：选择或创建阿里云SMS配置节点
- **签名名称**：短信签名名称
- **模板代码**：短信模板ID

#### 阿里云SMS配置节点

- **AccessKey ID**：阿里云访问密钥ID
- **AccessKey Secret**：阿里云访问密钥密码
- **接入点**：阿里云SMS服务接入点，默认为`dysmsapi.aliyuncs.com`

#### 输入

- **msg.phoneNumber**：接收短信的手机号码，可以是单个号码或号码数组
- **msg.templateParam**：模板参数，JSON对象或字符串
- **msg.smsUpExtendCode**：上行短信扩展码（可选）
- **msg.outId**：外部流水扩展字段（可选）

#### 示例

```javascript
// 发送阿里云短信
msg.phoneNumber = "13800138000";
msg.templateParam = {code: "123456", product: "测试产品"};
return msg;
```

### 腾讯云短信节点

用于通过腾讯云短信服务发送短信。

#### 配置

- **名称**：节点显示名称（可选）
- **Secret ID**：腾讯云访问密钥ID
- **Secret Key**：腾讯云访问密钥密码
- **地区**：腾讯云区域，默认为`ap-guangzhou`
- **应用ID**：短信应用ID
- **签名**：短信签名
- **模板ID**：默认短信模板ID

#### 输入

- **msg.phoneNumber**：接收短信的手机号码，可以是单个号码或号码数组
- **msg.templateParams**：模板参数，数组或对象
- **msg.templateId**：可动态覆盖配置的模板ID
- **msg.sessionContext**：用户自定义的上下文信息（可选）

#### 示例

```javascript
// 发送腾讯云短信
msg.phoneNumber = "13800138000";
msg.templateParams = ["123456", "5"];
return msg;
```

### 电子邮件节点

用于发送电子邮件。

#### 配置

- **名称**：节点显示名称（可选）
- **邮件配置**：选择或创建邮件配置节点
- **收件人**：默认收件人邮箱地址
- **主题**：默认邮件主题
- **消息类型**：支持text（纯文本）和html（HTML格式）

#### 邮件配置节点

- **SMTP服务器**：邮件服务器地址
- **端口**：SMTP服务器端口
- **安全连接**：是否使用SSL/TLS
- **用户名**：SMTP服务器用户名
- **密码**：SMTP服务器密码

#### 输入

- **msg.payload**：邮件内容
- **msg.to**：可动态覆盖配置的收件人
- **msg.subject**：可动态覆盖配置的邮件主题
- **msg.messageType**：可动态覆盖配置的消息类型

## 注意事项

1. 所有节点在发送失败时会将错误信息输出到Node-RED的调试面板
2. 短信服务需要在相应的云服务平台开通并配置模板
3. 企业通讯工具的机器人需要在各平台管理界面创建并获取Webhook地址
4. 邮件服务可能需要在邮箱设置中开启SMTP服务并获取授权码

## 未来展望

本项目将持续发展和完善，未来计划包括：

### 功能扩展

- **更多通知渠道**：计划支持Slack、Microsoft Teams、Telegram等国际化平台
- **消息模板系统**：提供可视化的消息模板编辑和管理功能
- **定时发送**：支持预设时间发送消息，实现定时通知
- **消息队列集成**：与主流消息队列系统（如RabbitMQ、Kafka）集成，提高消息处理可靠性
- **消息历史记录**：保存和查询历史消息记录，便于追踪和审计

### 技术优化

- **性能优化**：提高大批量消息处理能力
- **安全增强**：增加消息加密和权限控制功能
- **国际化支持**：完善多语言支持，适应国际化团队需求
- **更智能的错误处理**：提供自动重试和故障转移机制

### 生态建设

- **社区贡献**：鼓励社区参与，共同完善和扩展功能
- **插件系统**：设计插件架构，使第三方开发者可以轻松扩展新的通知渠道
- **集成案例**：提供更多实际应用场景的集成案例和最佳实践
- **文档完善**：持续改进文档和教程，降低使用门槛

通过以上计划，我们希望将这个项目发展成为Node-RED生态系统中最全面、最易用的消息通知解决方案，满足从个人开发者到大型企业的各类通知需求。

## 许可证

[MIT](LICENSE)