UNIVPLMDataIntegration/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Service/Chat/Dto/AppChatMessageInput.cs
2025-08-21 08:55:02 +08:00

410 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Plugin.WorkWeixin;
/// <summary>
/// 应用推送消息基类
/// </summary>
[HttpRemoteApi(Action = "appchat/send", Desc = "应用消息推送", HttpMethod = HttpMethodEnum.Post)]
public abstract class AppChatMessageInput : AuthWorkWxInput
{
/// <summary>
/// 群聊id
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("chatid")]
[Required(ErrorMessage = "群聊ID不能为空")]
public string ChatId { get; set; }
/// <summary>
/// 消息类型
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("msgtype")]
[Required(ErrorMessage = "消息类型不能为空")]
public abstract string MsgType { get; }
/// <summary>
/// 表示是否是保密消息0表示否1表示是默认0
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("safe")]
[Range(0, 1, ErrorMessage = "安全标识只能是0或1")]
public int? Safe { get; set; }
}
/// <summary>
/// 文本消息
/// </summary>
/// <remarks>
/// <br/>特殊说明content字段可以支持换行换行符请用转义过的'\n'
/// </remarks>
public class TextAppChatMessage : AppChatMessageInput
{
public override string MsgType => "text";
/// <summary>
/// 文本消息内容
/// </summary>
[CustomJsonProperty("text")]
[Required(ErrorMessage = "文本消息内容不能为空")]
public TextContent Text { get; set; } = new TextContent();
}
/// <summary>
/// 图片消息
/// </summary>
public class ImageAppChatMessage : AppChatMessageInput
{
public override string MsgType => "image";
/// <summary>
/// 图片消息内容
/// </summary>
[CustomJsonProperty("image")]
[Required(ErrorMessage = "图片消息内容不能为空")]
public MediaContent Image { get; set; } = new MediaContent();
}
/// <summary>
/// 语音消息
/// </summary>
public class VoiceAppChatMessage : AppChatMessageInput
{
public override string MsgType => "voice";
/// <summary>
/// 语音消息内容
/// </summary>
[CustomJsonProperty("voice")]
[Required(ErrorMessage = "语音消息内容不能为空")]
public MediaContent Voice { get; set; } = new MediaContent();
}
/// <summary>
/// 视频消息
/// </summary>
public class VideoAppChatMessage : AppChatMessageInput
{
public override string MsgType => "video";
/// <summary>
/// 视频消息内容
/// </summary>
[CustomJsonProperty("video")]
[Required(ErrorMessage = "视频消息内容不能为空")]
public VideoContent Video { get; set; } = new VideoContent();
}
/// <summary>
/// 文件消息
/// </summary>
public class FileAppChatMessage : AppChatMessageInput
{
public override string MsgType => "file";
/// <summary>
/// 文件消息内容
/// </summary>
[CustomJsonProperty("file")]
[Required(ErrorMessage = "文件消息内容不能为空")]
public MediaContent File { get; set; } = new MediaContent();
}
/// <summary>
/// 文本卡片消息
/// </summary>
public class TextCardAppChatMessage : AppChatMessageInput
{
public override string MsgType => "textcard";
/// <summary>
/// 文本卡片消息内容
/// </summary>
[CustomJsonProperty("textcard")]
[Required(ErrorMessage = "文本卡片消息内容不能为空")]
public TextCardContent TextCard { get; set; } = new TextCardContent();
}
/// <summary>
/// 图文消息
/// </summary>
public class NewsAppChatMessage : AppChatMessageInput
{
public override string MsgType => "news";
/// <summary>
/// 图文消息内容
/// </summary>
[CustomJsonProperty("news")]
[Required(ErrorMessage = "图文消息内容不能为空")]
public NewsContent News { get; set; } = new NewsContent();
}
/// <summary>
/// 图文消息mpnews
/// </summary>
public class MpNewsAppChatMessage : AppChatMessageInput
{
public override string MsgType => "mpnews";
/// <summary>
/// 图文消息内容
/// </summary>
[CustomJsonProperty("mpnews")]
[Required(ErrorMessage = "图文消息内容不能为空")]
public MpNewsContent MpNews { get; set; } = new MpNewsContent();
}
/// <summary>
/// Markdown消息
/// </summary>
public class MarkdownAppChatMessage : AppChatMessageInput
{
public override string MsgType => "markdown";
/// <summary>
/// Markdown消息内容
/// </summary>
[CustomJsonProperty("markdown")]
[Required(ErrorMessage = "Markdown消息内容不能为空")]
public MarkdownContent Markdown { get; set; } = new MarkdownContent();
}
/// <summary>
/// 文本消息内容
/// </summary>
public class TextContent
{
/// <summary>
/// 消息内容最长不超过2048个字节
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("content")]
[Required(ErrorMessage = "消息内容不能为空")]
[StringLength(2048, ErrorMessage = "消息内容长度不能超过2048个字节")]
public string Content { get; set; }
}
/// <summary>
/// 媒体内容基类
/// </summary>
public class MediaContent
{
/// <summary>
/// 媒体文件id可以调用上传临时素材接口获取
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("media_id")]
[Required(ErrorMessage = "媒体文件ID不能为空")]
public string MediaId { get; set; }
}
/// <summary>
/// 视频消息内容
/// </summary>
public class VideoContent : MediaContent
{
/// <summary>
/// 视频消息的标题不超过128个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("title")]
[StringLength(128, ErrorMessage = "视频标题长度不能超过128个字节")]
public string Title { get; set; }
/// <summary>
/// 视频消息的描述不超过512个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("description")]
[StringLength(512, ErrorMessage = "视频描述长度不能超过512个字节")]
public string Description { get; set; }
}
/// <summary>
/// 文本卡片消息内容
/// </summary>
public class TextCardContent
{
/// <summary>
/// 标题不超过128个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("title")]
[Required(ErrorMessage = "标题不能为空")]
[StringLength(128, ErrorMessage = "标题长度不能超过128个字节")]
public string Title { get; set; }
/// <summary>
/// 描述不超过512个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("description")]
[Required(ErrorMessage = "描述不能为空")]
[StringLength(512, ErrorMessage = "描述长度不能超过512个字节")]
public string Description { get; set; }
/// <summary>
/// 点击后跳转的链接
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("url")]
[Required(ErrorMessage = "跳转链接不能为空")]
[Url(ErrorMessage = "链接格式不正确")]
public string Url { get; set; }
/// <summary>
/// 按钮文字。默认为"详情"不超过4个文字超过自动截断
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("btntxt")]
[StringLength(4, ErrorMessage = "按钮文字长度不能超过4个字符")]
public string BtnTxt { get; set; }
}
/// <summary>
/// 图文消息文章
/// </summary>
public class Article
{
/// <summary>
/// 标题不超过128个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("title")]
[Required(ErrorMessage = "文章标题不能为空")]
[StringLength(128, ErrorMessage = "文章标题长度不能超过128个字节")]
public string Title { get; set; }
/// <summary>
/// 描述不超过512个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("description")]
[StringLength(512, ErrorMessage = "文章描述长度不能超过512个字节")]
public string Description { get; set; }
/// <summary>
/// 点击后跳转的链接
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("url")]
[Required(ErrorMessage = "文章链接不能为空")]
[Url(ErrorMessage = "文章链接格式不正确")]
public string Url { get; set; }
/// <summary>
/// 图文消息的图片链接支持JPG、PNG格式
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("picurl")]
[Url(ErrorMessage = "图片链接格式不正确")]
public string PicUrl { get; set; }
}
/// <summary>
/// 图文消息内容
/// </summary>
public class NewsContent
{
/// <summary>
/// 图文消息一个图文消息支持1到8条图文
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("articles")]
[Required(ErrorMessage = "图文消息不能为空")]
[MinLength(1, ErrorMessage = "至少需要1条图文消息")]
[MaxLength(8, ErrorMessage = "最多只能有8条图文消息")]
public List<Article> Articles { get; set; } = new List<Article>();
}
/// <summary>
/// 图文消息mpnews文章
/// </summary>
public class MpArticle
{
/// <summary>
/// 标题不超过128个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("title")]
[Required(ErrorMessage = "文章标题不能为空")]
[StringLength(128, ErrorMessage = "文章标题长度不能超过128个字节")]
public string Title { get; set; }
/// <summary>
/// 图文消息缩略图的media_id可以通过素材管理接口获得
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("thumb_media_id")]
[Required(ErrorMessage = "缩略图媒体ID不能为空")]
public string ThumbMediaId { get; set; }
/// <summary>
/// 图文消息的作者不超过64个字节
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("author")]
[StringLength(64, ErrorMessage = "作者长度不能超过64个字节")]
public string Author { get; set; }
/// <summary>
/// 图文消息点击"阅读原文"之后的页面链接
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("content_source_url")]
[Url(ErrorMessage = "原文链接格式不正确")]
public string ContentSourceUrl { get; set; }
/// <summary>
/// 图文消息的内容支持html标签不超过666K个字节
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("content")]
[Required(ErrorMessage = "文章内容不能为空")]
public string Content { get; set; }
/// <summary>
/// 图文消息的描述不超过512个字节超过会自动截断
/// </summary>
/// <remarks>是否必填:否</remarks>
[CustomJsonProperty("digest")]
[StringLength(512, ErrorMessage = "摘要长度不能超过512个字节")]
public string Digest { get; set; }
}
/// <summary>
/// 图文消息mpnews内容
/// </summary>
public class MpNewsContent
{
/// <summary>
/// 图文消息一个图文消息支持1到8条图文
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("articles")]
[Required(ErrorMessage = "图文消息不能为空")]
[MinLength(1, ErrorMessage = "至少需要1条图文消息")]
[MaxLength(8, ErrorMessage = "最多只能有8条图文消息")]
public List<MpArticle> Articles { get; set; } = new List<MpArticle>();
}
/// <summary>
/// Markdown消息内容
/// </summary>
public class MarkdownContent
{
/// <summary>
/// markdown内容最长不超过2048个字节必须是utf8编码
/// </summary>
/// <remarks>是否必填:是</remarks>
[CustomJsonProperty("content")]
[Required(ErrorMessage = "Markdown内容不能为空")]
[StringLength(2048, ErrorMessage = "Markdown内容长度不能超过2048个字节")]
public string Content { get; set; }
}