diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiExpiredEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiExpiredEvent.cs
new file mode 100644
index 00000000..902a1e47
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiExpiredEvent.cs
@@ -0,0 +1,35 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 INFO.advanced_api_expired 事件的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class AdvancedApiExpiredEvent : AdvancedApiTrialExpiredEvent
+ {
+ public static class Types
+ {
+ public class ChatArchiveApi
+ {
+ ///
+ /// 获取或设置到期的账号版本。
+ ///
+ [Newtonsoft.Json.JsonProperty("Edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("Edition")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ [System.Xml.Serialization.XmlElement("Edition")]
+ public int Edition { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会话内容数据接口相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ChatArchiveApi")]
+ [System.Text.Json.Serialization.JsonPropertyName("ChatArchiveApi")]
+ [System.Xml.Serialization.XmlElement("ChatArchiveApi")]
+ public Types.ChatArchiveApi ChatArchiveApi { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiTrialExpiredEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiTrialExpiredEvent.cs
new file mode 100644
index 00000000..c925caf7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/AdvancedApiTrialExpiredEvent.cs
@@ -0,0 +1,37 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Events
+{
+ ///
+ /// 表示 INFO.advanced_api_trial_expired 事件的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ public class AdvancedApiTrialExpiredEvent : WechatWorkEvent
+ {
+ ///
+ /// 获取或设置服务商 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("ServiceCorpId")]
+ [System.Text.Json.Serialization.JsonPropertyName("ServiceCorpId")]
+ [System.Xml.Serialization.XmlElement("ServiceCorpId")]
+ public string ServiceCorpId { get; set; } = default!;
+
+ ///
+ /// 获取或设置授权方的 CorpId。
+ ///
+ [Newtonsoft.Json.JsonProperty("AuthCorpId")]
+ [System.Text.Json.Serialization.JsonPropertyName("AuthCorpId")]
+ [System.Xml.Serialization.XmlElement("AuthCorpId")]
+ public string AuthorizerCorpId { get; set; } = default!;
+
+ ///
+ /// 获取或设置高级接口类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("AdvanceApiType")]
+ [System.Text.Json.Serialization.JsonPropertyName("AdvanceApiType")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ [System.Xml.Serialization.XmlElement("AdvanceApiType")]
+ public int AdvanceApiType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
index 06265958..e58c86d8 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs
@@ -32,6 +32,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
}
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/get_corp_auth_info 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataGetCorpAuthInfoAsync(this WechatWorkClient client, Models.CgibinChatDataGetCorpAuthInfoRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "get_corp_auth_info")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
///
/// 异步调用 [POST] /cgi-bin/chatdata/set_public_key 接口。
///
@@ -55,6 +78,83 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
}
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/set_receive_callback 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataSetReceiveCallbackAsync(this WechatWorkClient client, Models.CgibinChatDataSetReceiveCallbackRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "set_receive_callback")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/set_log_level 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataSetLogLevelAsync(this WechatWorkClient client, Models.CgibinChatDataSetLogLevelRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "set_log_level")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ;
+ }
+
+ ///
+ /// 异步调用 [POST] /cgi-bin/chatdata/upload_media 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinChatDataUploadMediaAsync(this WechatWorkClient client, Models.CgibinChatDataUploadMediaRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.FileName is null)
+ request.FileName = Guid.NewGuid().ToString("N").ToLower();
+
+ if (request.FileContentType is null)
+ request.FileContentType = MimeTypes.GetMimeMapping(request.FileName!);
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "upload")
+ .SetQueryParam("access_token", request.AccessToken)
+ .SetQueryParam("type", request.Type);
+
+ using var httpContent = Utilities.HttpContentBuilder.BuildWithFile(fileName: request.FileName, fileBytes: request.FileBytes, fileContentType: request.FileContentType, formDataName: "media");
+ return await client.SendFlurlRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
///
/// 异步调用 [POST] /cgi-bin/chatdata/sync_msg 接口。
///
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoRequest.cs
new file mode 100644
index 00000000..1848e6db
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/get_corp_auth_info 接口的请求。
+ ///
+ public class CgibinChatDataGetCorpAuthInfoRequest : WechatWorkRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.cs
new file mode 100644
index 00000000..6794aa5d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.cs
@@ -0,0 +1,90 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/get_corp_auth_info 接口的响应。
+ ///
+ public class CgibinChatDataGetCorpAuthInfoResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class AuthEdition
+ {
+ public static class Types
+ {
+ public class AuthScope
+ {
+ ///
+ /// 获取或设置企业授权存档的成员账号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid_list")]
+ public string[]? UserIdList { get; set; }
+
+ ///
+ /// 获取或设置企业授权存档的部门 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("department_id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("department_id_list")]
+ public long[]? DepartmentIdList { get; set; }
+
+ ///
+ /// 获取或设置企业授权存档的标签 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("tag_id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("tag_id_list")]
+ public long[]? TagIdList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置会话版本类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("edition")]
+ [System.Text.Json.Serialization.JsonPropertyName("edition")]
+ public int Edition { get; set; }
+
+ ///
+ /// 获取或设置授权范围信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_scope")]
+ public Types.AuthScope AuthScope { get; set; } = default!;
+
+ ///
+ /// 获取或设置状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置开始生效时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ public long BeginTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束生效时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置会话授权的天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("msg_duration_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("msg_duration_days")]
+ public int MessageDurationDays { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置企业授权的会话版本列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth_edition_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth_edition_list")]
+ public Types.AuthEdition[] AuthEditionList { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelRequest.cs
new file mode 100644
index 00000000..5519a551
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/set_log_level 接口的请求。
+ ///
+ public class CgibinChatDataSetLogLevelRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置日志级别。
+ ///
+ [Newtonsoft.Json.JsonProperty("log_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("log_level")]
+ public int LogLevel { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelResponse.cs
new file mode 100644
index 00000000..2a91490d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetLogLevelResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/set_log_level 接口的响应。
+ ///
+ public class CgibinChatDataSetLogLevelResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.cs
new file mode 100644
index 00000000..1ca8ae3f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/set_receive_callback 接口的请求。
+ ///
+ public class CgibinChatDataSetReceiveCallbackRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置应用关联的程序 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("program_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("program_id")]
+ public string ProgramId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackResponse.cs
new file mode 100644
index 00000000..3f596487
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetReceiveCallbackResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/set_receive_callback 接口的响应。
+ ///
+ public class CgibinChatDataSetReceiveCallbackResponse : WechatWorkResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaRequest.cs
new file mode 100644
index 00000000..783c8d35
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaRequest.cs
@@ -0,0 +1,38 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/upload_media 接口的请求。
+ ///
+ public class CgibinChatDataUploadMediaRequest : WechatWorkRequest
+ {
+ ///
+ /// 获取或设置媒体文件类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string Type { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置文件字节数组。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public byte[] FileBytes { get; set; } = Array.Empty();
+
+ ///
+ /// 获取或设置文件名。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? FileName { get; set; }
+
+ ///
+ /// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? FileContentType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaResponse.cs
new file mode 100644
index 00000000..071260c6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataUploadMediaResponse.cs
@@ -0,0 +1,30 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/chatdata/upload_media 接口的响应。
+ ///
+ public class CgibinChatDataUploadMediaResponse : WechatWorkResponse
+ {
+ ///
+ /// 获取或设置媒体文件类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置媒体文件标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("media_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("media_id")]
+ public string MediaId { get; set; } = default!;
+
+ ///
+ /// 获取或设置媒体文件上传时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("created_at")]
+ [System.Text.Json.Serialization.JsonPropertyName("created_at")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public long CreateTimestamp { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiExpiredEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiExpiredEvent.xml
new file mode 100644
index 00000000..c9276052
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiExpiredEvent.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+ 1403610513
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiTrialExpiredEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiTrialExpiredEvent.xml
new file mode 100644
index 00000000..8d8b4a9d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/AdvancedApiTrialExpiredEvent.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+ 1403610513
+
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.json
new file mode 100644
index 00000000..a1e78727
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetCorpAuthInfoResponse.json
@@ -0,0 +1,30 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "auth_edition_list": [
+ {
+ "edition": 1,
+ "auth_scope": {
+ "userid_list": [ "xxxx" ],
+ "department_id_list": [ 1, 2, 3 ],
+ "tag_id_list": [ 10, 11 ]
+ },
+ "status": 1,
+ "begin_time": 1726588800,
+ "end_time": 1729180799,
+ "msg_duration_days": 90
+ },
+ {
+ "edition": 2,
+ "auth_scope": {
+ "userid_list": [ "xxxx" ],
+ "department_id_list": [ 1, 2 ],
+ "tag_id_list": [ 10 ]
+ },
+ "status": 1,
+ "begin_time": 1726588800,
+ "end_time": 1729180799,
+ "msg_duration_days": 90
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetLogLevelRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetLogLevelRequest.json
new file mode 100644
index 00000000..2c40c794
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetLogLevelRequest.json
@@ -0,0 +1,4 @@
+{
+ "program_id": "xxxx",
+ "log_level": 2
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.json
new file mode 100644
index 00000000..11b4ea73
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetReceiveCallbackRequest.json
@@ -0,0 +1,3 @@
+{
+ "program_id": "xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataUploadMediaResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataUploadMediaResponse.json
new file mode 100644
index 00000000..206aa954
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataUploadMediaResponse.json
@@ -0,0 +1,7 @@
+{
+ "errcode": 0,
+ "errmsg": "",
+ "type": "file",
+ "media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0",
+ "created_at": "1380000000"
+}