diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/CustomerAcquisition/CustomerAcquisitionEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/CustomerAcquisition/CustomerAcquisitionEvent.cs
new file mode 100644
index 00000000..f2cfd9f9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/CustomerAcquisition/CustomerAcquisitionEvent.cs
@@ -0,0 +1,45 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 EVENT.customer_acquisition 事件的数据。
+ /// REF: https://developer.work.weixin.qq.com/document/path/97299
+ ///
+ public class CustomerAcquisitionEvent : WechatWorkEvent, WechatWorkEvent.Serialization.IXmlSerializable
+ {
+ ///
+ /// 获取或设置变更类型。
+ ///
+ [System.Xml.Serialization.XmlElement("ChangeType")]
+ public string ChangeType { get; set; } = default!;
+
+ ///
+ /// 获取或设置获客链接 ID。
+ ///
+ [System.Xml.Serialization.XmlElement("LinkId", IsNullable = true)]
+ public string? LinkId { get; set; }
+
+ ///
+ /// 获取或设置企业服务人员的成员账号。
+ ///
+ [System.Xml.Serialization.XmlElement("UserID", IsNullable = true)]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置外部联系人 ID。
+ ///
+ [System.Xml.Serialization.XmlElement("ExternalUserID", IsNullable = true)]
+ public string? ExternalUserId { get; set; }
+
+ ///
+ /// 获取或设置过期时间戳戳。
+ ///
+ [System.Xml.Serialization.XmlElement("ExpireTime", IsNullable = true)]
+ public long? ExpireTimestamp { get; set; }
+
+ ///
+ /// 获取或设置过期获客额度数。
+ ///
+ [System.Xml.Serialization.XmlElement("ExpireQuotaNum", IsNullable = true)]
+ public int? ExpireQuota { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelSpecialAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelSpecialAuthEvent.cs
new file mode 100644
index 00000000..b40c918e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelSpecialAuthEvent.cs
@@ -0,0 +1,27 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 INFO.cancel_special_auth 事件的数据。
+ /// REF: https://developer.work.weixin.qq.com/document/path/98959
+ ///
+ public class CancelSpecialAuthEvent : WechatWorkEvent, WechatWorkEvent.Serialization.IXmlSerializable
+ {
+ ///
+ /// 获取或设置第三方应用的 SuiteId。
+ ///
+ [System.Xml.Serialization.XmlElement("SuiteId")]
+ public string SuiteId { get; set; } = default!;
+
+ ///
+ /// 获取或设置授权方的 CorpId。
+ ///
+ [System.Xml.Serialization.XmlElement("AuthCorpId")]
+ public string AuthorizerCorpId { get; set; } = default!;
+
+ ///
+ /// 获取或设置权限类型。
+ ///
+ [System.Xml.Serialization.XmlElement("AuthType")]
+ public string AuthType { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.cs
index 72cd0c52..97aaf128 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.cs
@@ -9,6 +9,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
public static class Types
{
+ public class TagFilter
+ {
+ public static class Types
+ {
+ public class TagFilterGroup
+ {
+ ///
+ /// 获取或设置标签列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("tag_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("tag_list")]
+ public IList? TagList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置标签筛选分组列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("group_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("group_list")]
+ public IList? GroupList { get; set; }
+ }
+
public class Text
{
///
@@ -181,6 +204,20 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models
[System.Text.Json.Serialization.JsonPropertyName("external_userid")]
public IList? ExternalUserIdList { get; set; }
+ ///
+ /// 获取或设置客户群 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("chat_id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("chat_id_list")]
+ public IList? GroupChatIdList { get; set; }
+
+ ///
+ /// 获取或设置标签筛选条件。
+ ///
+ [Newtonsoft.Json.JsonProperty("tag_filter")]
+ [System.Text.Json.Serialization.JsonPropertyName("tag_filter")]
+ public Types.TagFilter? TagFilter { get; set; }
+
///
/// 获取或设置发送者成员账号。
///
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.json
index ac19b5d3..88433816 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinExternalContact/GroupMessage/CgibinExternalContactAddMessageTemplateRequest.json
@@ -4,6 +4,17 @@
"woAJ2GCAAAXtWyujaWJHDDGi0mACAAAA",
"wmqfasd1e1927831123109rBAAAA"
],
+ "chat_id_list": [ "wr2GCAAAXtWyujaWJHDDGasdadAAA" ],
+ "tag_filter": {
+ "group_list": [
+ {
+ "tag_list": [ "ete19278asuMT123109rBAAAA", "ete19MT12278109UYteaBAAAA" ]
+ },
+ {
+ "tag_list": [ "eteIlKKHSDfuMT18Kg9rBAAAA" ]
+ }
+ ]
+ },
"sender": "zhangsan",
"allow_select": true,
"text": {