2021-03-23 09:47:30 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
在目前的业务中我们有着很多的消息推送的需求,一开始我们是放在微信公众号的模板消息里面的。
后来因为便利性问题转义到了企业微信的应用消息。
但是随着消息种类、数量越来越多,就会显得很臃肿。所以在在近期的小程序整体完善后,业务调整为:
① 业务消息发送企业微信消息并链接到小程序
② 通知消息走目前的自建应用消息
简单来说这次的调整主要预期有如下3个:
① 业务和通知分离
② 解决消息堆积和臃肿问题
③ 切掉目前应用消息链接的H5页面
因为这次修改时在之前的基础上进行的,所以如果你有一些云里雾里,可以先阅读下面的文章:
小程序通知消息,只允许绑定了小程序的应用发送,从2019年6月28日起,用户收到的小程序通知会出现在各个独立的应用中。
通过上述说明我们可以获得的信息有:
① 企业微信支持发送小程序消息
② 企业微信要绑定小程序
③ 用户接受的通知显示在小程序的应用中(这正是我想要的!)
④ 不支持全员发送了(因为现在消息分属小程序应用了)
{
"touser" : "zhangsan|lisi",
"toparty": "1|2",
"totag": "1|2",
"msgtype" : "miniprogram_notice",
"miniprogram_notice" : {
"appid": "wx123123123123123",
"page": "pages/index?userid=zhangsan&orderid=123123123",
"title": "会议室预订成功通知",
"description": "4月27日 16:16",
"emphasis_first_item": true,
"content_item": [
{
"key": "会议室",
"value": "402"
},
{
"key": "会议地点",
"value": "广州TIT-402会议室"
},
{
"key": "会议时间",
"value": "2018年8月1日 09:00-09:30"
},
{
"key": "参与人员",
"value": "周剑轩"
}
]
},
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}
参数 | 是否必须 | 说明 |
---|---|---|
touser | 否 | 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个) |
toparty | 否 | 部门ID列表,多个接收者用‘|’分隔,最多支持100个。 |
totag | 否 | 标签ID列表,多个接收者用‘|’分隔,最多支持100个。 |
msgtype | 是 | 消息类型,此时固定为:miniprogram_notice |
appid | 是 | 小程序appid,必须是与当前应用关联的小程序 |
page | 否 | 点击消息卡片后的小程序页面,仅限本小程序内的页面。该字段不填则消息点击后不跳转。 |
title | 是 | 消息标题,长度限制4-12个汉字(支持id转译) |
description | 否 | 消息描述,长度限制4-12个汉字(支持id转译) |
emphasis_first_item | 否 | 是否放大第一个content_item |
content_item | 否 | 消息内容键值对,最多允许10个item |
key | 是 | 长度10个汉字以内 |
value | 是 | 长度30个汉字以内(支持id转译) |
enable_id_trans | 否 | 表示是否开启id转译,0表示否,1表示是,默认0 |
enable_duplicate_check | 否 | 表示是否开启重复消息检查,0表示否,1表示是,默认0 |
duplicate_check_interval | 否 | 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时 |
这个就不做过多的说明了...
这里选择关联已有的小程序,会自动跳转到微信登录平台,按说明一步步操作即可。
创建完成后如下:
一个是应用
一个是微信小程序
MSG_TYPE_00(0, "文本消息"),
MSG_TYPE_01(1, "图片消息"),
MSG_TYPE_02(2, "语音消息"),
MSG_TYPE_03(3, "视频消息"),
MSG_TYPE_04(4, "文件消息"),
MSG_TYPE_05(5, "图文消息"),
MSG_TYPE_06(6, "卡片消息"),
MSG_TYPE_07(7, "小程序消息");
case 7:
/*小程序消息发送*/
MiniProgramDataDTO miniProgramDataDTO = new MiniProgramDataDTO();
miniProgramDataDTO.setMsgtype("miniprogram_notice");
miniProgramDataDTO.setTouser(msgHandlerVO.getToUser());
miniProgramDataDTO.setToparty(msgHandlerVO.getToparty());
miniProgramDataDTO.setMiniprogram_notice(msgHandlerVO.getMiniProgramDataVO());
rltStr = HttpClientUtil.sendJsonStr(url, JSONObject.toJSONString(miniProgramDataDTO));
break;
/**
* @author XA
* date 2020/11/18 14:30
* description 小程序内容DTO
* params
* return
*/
@Data
public class MiniProgramDataDTO implements Serializable {
/**
* 消息类型,此时固定为:miniprogram_notice
*/
private String msgtype;
/**
* 部门ID列表,多个接收者用‘|’分隔,最多支持100个。
*/
private String toparty;
/**
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)
*/
private String touser;
/**
* 小程序消息内容
*/
private MiniProgramDataVO miniprogram_notice;
}
/**
* @author XA
* date 2020/11/18 14:30
* description 小程序内容VO
* params
* return
*/
@Data
public class MiniProgramDataVO implements Serializable {
/**
* appId
*/
@NotBlank(message = "appId不能为空!")
private String appid;
/**
* 小程序跳转页,不传则不跳转
*/
@NotBlank(message = "小程序跳转页不能为空!")
private String page;
/**
* 标题
*/
@NotBlank(message = "标题不能为空!")
private String title;
/**
* 消息描述
*/
private String description;
/**
* 是否放大一级标题
*/
private boolean emphasis_first_item;
/**
* 消息内容键值对,最多支持10个
*/
private List<JSONObject> content_item;
}
① 首次进入要进行微信授权
② 可能因为小程序登录过期(按各自业务处理),导致要重新登录