Campus-imaotai消息推送集成:PushPlus、Server酱多渠道通知

Campus-imaotai消息推送集成:PushPlus、Server酱多渠道通知

【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署 【免费下载链接】campus-imaotai 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai

消息推送系统架构概述

Campus-imaotai的消息推送系统采用异步任务处理架构,通过多渠道通知机制实现预约结果实时触达。系统核心模块位于campus-modular/src/main/java/com/oddfar/campus/business/api/,目前已集成PushPlus推送渠道,可通过简单扩展支持Server酱等其他平台。

推送流程设计

推送流程

系统推送流程基于事件驱动模型设计:

  1. 预约任务执行完成后生成操作日志ILog
  2. 根据日志状态(成功/失败)触发对应通知逻辑
  3. 通过AsyncManager执行异步推送任务
  4. 调用第三方推送API完成消息投递

PushPlus渠道配置与实现

1. 开发注册与Token获取

用户需先在PushPlus官网注册账号,获取个人专属Token。该Token作为API调用凭证,需在系统中与用户账号绑定,存储于IUser实体的pushPlusToken字段。

2. 核心实现代码解析

系统通过PushPlusApi.java实现推送功能,核心方法如下:

public static void sendNotice(IUser iUser, ILog operLog) {
    String token = iUser.getPushPlusToken();
    if (StringUtils.isEmpty(token)) {
        return;
    }
    String title, content;
    if (operLog.getStatus() == 0) {
        //预约成功通知
        title = iUser.getRemark() + "-i茅台执行成功";
        content = iUser.getMobile() + System.lineSeparator() + operLog.getLogContent();
    } else {
        //预约失败通知
        title = iUser.getRemark() + "-i茅台执行失败";
        content = iUser.getMobile() + System.lineSeparator() + operLog.getLogContent();
    }
    AsyncManager.me().execute(sendNotice(token, title, content, "txt"));
}

3. 异步推送任务

推送任务通过TimerTask实现异步执行,避免阻塞主流程:

public static TimerTask sendNotice(String token, String title, String content, String template) {
    return new TimerTask() {
        @Override
        public void run() {
            String url = "http://www.pushplus.plus/send";
            Map<String, Object> map = new HashMap<>();
            map.put("token", token);
            map.put("title", title);
            map.put("content", content);
            map.put("template", StringUtils.isEmpty(template) ? "html" : template);
            HttpUtil.post(url, map);
        }
    };
}

Server酱渠道扩展指南

1. 接口设计规范

参照PushPlus实现模式,创建ServerChanApi.java,需包含:

  • sendNotice(IUser user, ILog log): 业务入口方法
  • sendNotice(String sckey, String title, String content): 推送实现方法
  • 支持文本/Markdown两种消息格式

2. 核心代码实现

public class ServerChanApi {
    private static final String API_URL = "https://sc.ftqq.com/%s.send";
    
    public static void sendNotice(IUser iUser, ILog operLog) {
        String sckey = iUser.getServerChanKey(); //需在IUser实体添加该字段
        if (StringUtils.isEmpty(sckey)) return;
        
        String title = operLog.getStatus() == 0 ? "i茅台预约成功" : "i茅台预约失败";
        String content = String.format("用户: %s\n手机号: %s\n结果: %s",
                iUser.getRemark(), iUser.getMobile(), operLog.getLogContent());
                
        AsyncManager.me().execute(() -> {
            String url = String.format(API_URL, sckey);
            Map<String, Object> params = new HashMap<>();
            params.put("text", title);
            params.put("desp", content);
            HttpUtil.post(url, params);
        });
    }
}

3. 数据库与前端适配

  1. 在用户表添加Server酱配置字段:
ALTER TABLE `i_user` ADD COLUMN `server_chan_key` varchar(64) COMMENT 'Server酱SCKEY';
  1. 在前端配置页添加输入项: Server酱配置界面

多渠道通知管理

1. 渠道优先级配置

系统配置中可设置通知渠道优先级,支持:

  • 仅PushPlus
  • 仅Server酱
  • 两者同时发送
  • 失败重试机制

2. 推送日志查询

所有推送记录保存在推送日志表,可通过管理界面查看: 推送日志界面

常见问题解决方案

推送失败排查流程

  1. 检查第三方平台Token/SCKEY是否有效
  2. 查看系统日志中的网络请求记录
  3. 确认服务器网络是否能访问第三方API域名

消息格式优化建议

  • 成功通知使用绿色标题+简洁结果
  • 失败通知使用红色标题+详细错误信息
  • 重要操作添加时间戳与唯一标识
【预约成功】2023-10-04 09:00:12
手机号: 138****5678
商品: 贵州茅台酒(壬寅虎年)
门店: 茅台专卖店(北京王府井店)

扩展阅读与资源

通过本文档配置,您的Campus-imaotai系统将具备完善的多渠道消息推送能力,确保预约结果实时触达,提升用户体验与系统可靠性。系统设计预留了扩展接口,可根据需求添加企业微信、钉钉等更多推送渠道。

【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署 【免费下载链接】campus-imaotai 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值