package cn.iocoder.yudao.module.mp.service.message.bo; import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO; import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*; import lombok.Data; import me.chanjar.weixin.common.api.WxConsts; import org.hibernate.validator.constraints.URL; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import java.util.List; /** * 公众号消息发送 Request BO * * 为什么要有该 BO 呢?在自动回复、客服消息、菜单回复消息等场景,都涉及到 MP 给粉丝发送消息,所以使用该 BO 统一承接 * * @author 芋道源码 */ @Data public class MpMessageSendOutReqBO { /** * 公众号 appId */ @NotEmpty(message = "公众号 appId 不能为空") private String appId; /** * 公众号粉丝 openid */ @NotEmpty(message = "公众号粉丝 openid 不能为空") private String openid; // ========== 消息内容 ========== /** * 消息类型 * * 枚举 {@link WxConsts.XmlMsgType} 中的 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC */ @NotEmpty(message = "消息类型不能为空") public String type; /** * 消息内容 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 TEXT */ @NotEmpty(message = "消息内容不能为空", groups = TextMessageGroup.class) private String content; /** * 媒体 id * * 消息类型为 {@link WxConsts.XmlMsgType} 的 IMAGE、VOICE、VIDEO */ @NotEmpty(message = "消息 mediaId 不能为空", groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class}) private String mediaId; /** * 缩略图的媒体 id * * 消息类型为 {@link WxConsts.XmlMsgType} 的 VIDEO、MUSIC */ @NotEmpty(message = "消息 thumbMediaId 不能为空", groups = {MusicMessageGroup.class}) private String thumbMediaId; /** * 标题 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 VIDEO */ @NotEmpty(message = "消息标题不能为空", groups = VideoMessageGroup.class) private String title; /** * 描述 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 VIDEO */ @NotEmpty(message = "消息描述不能为空", groups = VideoMessageGroup.class) private String description; /** * 图文消息 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 NEWS */ @Valid @NotNull(message = "图文消息不能为空", groups = NewsMessageGroup.class) private List articles; /** * 音乐链接 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 MUSIC */ @NotEmpty(message = "音乐链接不能为空", groups = MusicMessageGroup.class) @URL(message = "高质量音乐链接格式不正确", groups = MusicMessageGroup.class) private String musicUrl; /** * 高质量音乐链接 * * 消息类型为 {@link WxConsts.XmlMsgType} 的 MUSIC */ @NotEmpty(message = "高质量音乐链接不能为空", groups = MusicMessageGroup.class) @URL(message = "高质量音乐链接格式不正确", groups = MusicMessageGroup.class) private String hqMusicUrl; }