diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteApiExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteApiExtensions.cs
new file mode 100644
index 00000000..27d2672c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteApiExtensions.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI
+{
+ public static class WechatOpenAIClientExecuteApiExtensions
+ {
+ ///
+ /// 异步调用 [POST] /v2/api/get_welcome_msg 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/get_welcomemsg.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteApiGetWelcomeMessageAsync(this WechatOpenAIClient client, Models.ApiGetWelcomeMessageRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "api", "get_welcome_msg");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/api/set_welcome_msg 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/set_welcomemsg.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteApiSetWelcomeMessageAsync(this WechatOpenAIClient client, Models.ApiSetWelcomeMessageRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "api", "set_welcome_msg");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteBotExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteBotExtensions.cs
new file mode 100644
index 00000000..72c014a7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteBotExtensions.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI
+{
+ public static class WechatOpenAIClientExecuteBotExtensions
+ {
+ ///
+ /// 异步调用 [POST] /v2/bot/save 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/save.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotSaveAsync(this WechatOpenAIClient client, Models.BotSaveRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "save");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [GET] /v2/bot/get_detail 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/get_detail.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotGetDetailAsync(this WechatOpenAIClient client, Models.BotGetDetailRequest 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
+ .CreateRequest(request, HttpMethod.Get, "v2", "bot", "get_detail");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/bot/delete 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/save.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotDeleteAsync(this WechatOpenAIClient client, Models.BotDeleteRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "delete");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/bot/get_list 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/get_list.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotGetListAsync(this WechatOpenAIClient client, Models.BotGetListRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "get_list");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v1/bot/import 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/import.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotImportAsync(this WechatOpenAIClient client, Models.BotImportRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v1", "bot", "import");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [GET] /v1/bot/export 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/export.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotExportAsync(this WechatOpenAIClient client, Models.BotExportRequest 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
+ .CreateRequest(request, HttpMethod.Get, "v1", "bot", "export");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/bot/publish 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/publish.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotPublishAsync(this WechatOpenAIClient client, Models.BotPublishRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "publish");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/bot/publish/get_record 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/get_publish_record.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotPublishGetRecordAsync(this WechatOpenAIClient client, Models.BotPublishGetRecordRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "publish", "get_record");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v1/bot/import/json 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/json_import.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotImportJsonAsync(this WechatOpenAIClient client, Models.BotImportJsonRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v1", "bot", "import", "json");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [GET] /v1/bot/test 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/test.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotTestAsync(this WechatOpenAIClient client, Models.BotTestRequest 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
+ .CreateRequest(request, HttpMethod.Get, "v1", "bot", "test");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/bot/effective_progress 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/effective_progress.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteBotEffectiveProgressAsync(this WechatOpenAIClient client, Models.BotEffectiveProgressRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v2", "bot", "effective_progress");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteUnmatchedClassExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteUnmatchedClassExtensions.cs
new file mode 100644
index 00000000..a9b324b1
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteUnmatchedClassExtensions.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI
+{
+ public static class WechatOpenAIClientExecuteUnmatchedClassExtensions
+ {
+ ///
+ /// 异步调用 [POST] /v1/unmatched/class/list 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/unmatched_class_list.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUnmatchedClassListAsync(this WechatOpenAIClient client, Models.UnmatchedClassListRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v1", "unmatched", "class", "list");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v1/unmatched/class/detail 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/bot/unmatched_class_detail.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUnmatchedClassDetailAsync(this WechatOpenAIClient client, Models.UnmatchedClassDetailRequest 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
+ .CreateRequest(request, HttpMethod.Post, "v1", "unmatched", "class", "detail");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageRequest.cs
new file mode 100644
index 00000000..ad3a9c41
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/api/get_welcome_msg 接口的请求。
+ ///
+ public class ApiGetWelcomeMessageRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置渠道 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("channelId")]
+ [System.Text.Json.Serialization.JsonPropertyName("channelId")]
+ public string ChannelId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置标签 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("lableId")]
+ [System.Text.Json.Serialization.JsonPropertyName("lableId")]
+ public string? LabelId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageResponse.cs
new file mode 100644
index 00000000..2bde8158
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiGetWelcomeMessageResponse.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/api/get_welcome_msg 接口的响应。
+ ///
+ public class ApiGetWelcomeMessageResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class WelcomeMessage
+ {
+ ///
+ /// 获取或设置来源类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("source")]
+ [System.Text.Json.Serialization.JsonPropertyName("source")]
+ public int Source { get; set; }
+
+ ///
+ /// 获取或设置欢迎语 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("msgId")]
+ [System.Text.Json.Serialization.JsonPropertyName("msgId")]
+ public string MessageId { get; set; } = default!;
+
+ ///
+ /// 获取或设置欢迎语类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("msgType")]
+ [System.Text.Json.Serialization.JsonPropertyName("msgType")]
+ public string MessageType { get; set; } = default!;
+
+ ///
+ /// 获取或设置欢迎语内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("welcomeMsg")]
+ [System.Text.Json.Serialization.JsonPropertyName("welcomeMsg")]
+ public string MessageContent { get; set; } = default!;
+
+ ///
+ /// 获取或设置标签。
+ ///
+ [Newtonsoft.Json.JsonProperty("label")]
+ [System.Text.Json.Serialization.JsonPropertyName("label")]
+ public string? Label { get; set; }
+
+ ///
+ /// 获取或设置发送间隔(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("newSendInterval")]
+ [System.Text.Json.Serialization.JsonPropertyName("newSendInterval")]
+ public int SendInterval { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置欢迎语列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.WelcomeMessage[] WelcomeMessageList { get; set; } = default!;
+
+ ///
+ /// 获取或设置欢迎语总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int TotalCount { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageRequest.cs
new file mode 100644
index 00000000..b6f663c8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageRequest.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/api/set_welcome_msg 接口的请求。
+ ///
+ public class ApiSetWelcomeMessageRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置渠道 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("channelId")]
+ [System.Text.Json.Serialization.JsonPropertyName("channelId")]
+ public string ChannelId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置来源类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("source")]
+ [System.Text.Json.Serialization.JsonPropertyName("source")]
+ public int Source { get; set; }
+
+ ///
+ /// 获取或设置欢迎语 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("msgId")]
+ [System.Text.Json.Serialization.JsonPropertyName("msgId")]
+ public string? MessageId { get; set; }
+
+ ///
+ /// 获取或设置欢迎语类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("msgType")]
+ [System.Text.Json.Serialization.JsonPropertyName("msgType")]
+ public string MessageType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置欢迎语内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("welcomeMsg")]
+ [System.Text.Json.Serialization.JsonPropertyName("welcomeMsg")]
+ public string MessageContent { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置标签 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("lableId")]
+ [System.Text.Json.Serialization.JsonPropertyName("lableId")]
+ public string? LabelId { get; set; }
+
+ ///
+ /// 获取或设置发送间隔(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("newSendInterval")]
+ [System.Text.Json.Serialization.JsonPropertyName("newSendInterval")]
+ public int SendInterval { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageResponse.cs
new file mode 100644
index 00000000..0ca65080
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Api/ApiSetWelcomeMessageResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/api/set_welcome_msg 接口的响应。
+ ///
+ public class ApiSetWelcomeMessageResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchRequest.cs
index 5a4f03f8..ba73de04 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchRequest.cs
@@ -9,7 +9,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
public class AsyncFetchRequest : WechatOpenAIRequest
{
///
- /// 获取或设置任务 ID。
+ /// 获取或设置异步任务 ID。
///
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchResponse.cs
index e3fc6edc..e289dccb 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Async/AsyncFetchResponse.cs
@@ -20,18 +20,18 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
public int State { get; set; }
///
- /// 获取或设置任务进度。
+ /// 获取或设置任务进度字符串。
///
[Newtonsoft.Json.JsonProperty("progress")]
[System.Text.Json.Serialization.JsonPropertyName("progress")]
- public string Progress { get; set; } = default!;
+ public string ProgressString { get; set; } = default!;
///
- /// 获取或设置任务耗时。
+ /// 获取或设置任务耗时字符串。
///
[Newtonsoft.Json.JsonProperty("cost")]
[System.Text.Json.Serialization.JsonPropertyName("cost")]
- public string Cost { get; set; } = default!;
+ public string CostString { get; set; } = default!;
///
/// 获取或设置导出任务的下载链接。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteRequest.cs
new file mode 100644
index 00000000..fe0dbd57
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/delete 接口的请求。
+ ///
+ public class BotDeleteRequest : WechatOpenAIRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteResponse.cs
new file mode 100644
index 00000000..f7e4f92b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotDeleteResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/delete 接口的响应。
+ ///
+ public class BotDeleteResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置异步任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_id")]
+ public string TaskId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressRequest.cs
new file mode 100644
index 00000000..46e916ce
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/effective_progress 接口的请求。
+ ///
+ public class BotEffectiveProgressRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置环境。
+ ///
+ [Newtonsoft.Json.JsonProperty("env")]
+ [System.Text.Json.Serialization.JsonPropertyName("env")]
+ public string? Environment { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressResponse.cs
new file mode 100644
index 00000000..52360e54
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotEffectiveProgressResponse.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/effective_progress 接口的响应。
+ ///
+ public class BotEffectiveProgressResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置进度(范围:0~100)。
+ ///
+ [Newtonsoft.Json.JsonProperty("progress")]
+ [System.Text.Json.Serialization.JsonPropertyName("progress")]
+ public int Progress { get; set; }
+
+ ///
+ /// 获取或设置状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportRequest.cs
new file mode 100644
index 00000000..5e2f5fa0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v1/bot/export 接口的请求。
+ ///
+ public class BotExportRequest : WechatOpenAIRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportResponse.cs
new file mode 100644
index 00000000..0f1873d3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotExportResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v1/bot/export 接口的响应。
+ ///
+ public class BotExportResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置异步任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_id")]
+ public string TaskId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailRequest.cs
new file mode 100644
index 00000000..1370097f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v2/bot/get_detail 接口的请求。
+ ///
+ public class BotGetDetailRequest : WechatOpenAIRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailResponse.cs
new file mode 100644
index 00000000..da702f30
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetDetailResponse.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v2/bot/get_detail 接口的响应。
+ ///
+ public class BotGetDetailResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置机器人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string BotId { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人中文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_ch")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_ch")]
+ public string ChineseName { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人英文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_en")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_en")]
+ public string? EnglishName { get; set; }
+
+ ///
+ /// 获取或设置机器人昵称。
+ ///
+ [Newtonsoft.Json.JsonProperty("nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("nickname")]
+ public string? Nickname { get; set; }
+
+ ///
+ /// 获取或设置机器人类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("bot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("bot_type")]
+ public int BotType { get; set; }
+
+ ///
+ /// 获取或设置行业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("industry")]
+ [System.Text.Json.Serialization.JsonPropertyName("industry")]
+ public int IndustryId { get; set; }
+
+ ///
+ /// 获取或设置默认回答开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_answer_switch")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_answer_switch")]
+ public bool DefaultAnswerSwitch { get; set; }
+
+ ///
+ /// 获取或设置默认回答。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_answer")]
+ public string? DefaultAnswer { get; set; }
+
+ ///
+ /// 获取或设置相似度阈值。
+ ///
+ [Newtonsoft.Json.JsonProperty("similarity")]
+ [System.Text.Json.Serialization.JsonPropertyName("similarity")]
+ public double Similarity { get; set; }
+
+ ///
+ /// 获取或设置相似度阈值下限。
+ ///
+ [Newtonsoft.Json.JsonProperty("similarity_low")]
+ [System.Text.Json.Serialization.JsonPropertyName("similarity_low")]
+ public double SimilarityMinimum { get; set; }
+
+ ///
+ /// 获取或设置相似问题推荐数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("similar_question_recommend_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("similar_question_recommend_num")]
+ public int SimilarityQuestionRecommendCount { get; set; }
+
+ ///
+ /// 获取或设置收集用户反馈开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_feedback")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_feedback")]
+ public bool UserFeedbackSwitch { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListRequest.cs
new file mode 100644
index 00000000..9a3db573
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListRequest.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/get_list 接口的请求。
+ ///
+ public class BotGetListRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置关键字。
+ ///
+ [Newtonsoft.Json.JsonProperty("keyword")]
+ [System.Text.Json.Serialization.JsonPropertyName("keyword")]
+ public string? Keyword { get; set; }
+
+ ///
+ /// 获取或设置机器人类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("bot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("bot_type")]
+ public int? BotType { get; set; }
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:0
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("size")]
+ [System.Text.Json.Serialization.JsonPropertyName("size")]
+ public int Limit { get; set; } = 10;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListResponse.cs
new file mode 100644
index 00000000..ac049150
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotGetListResponse.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/get_list 接口的响应。
+ ///
+ public class BotGetListResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Bot
+ {
+ ///
+ /// 获取或设置机器人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string BotId { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人中文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_ch")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_ch")]
+ public string ChineseName { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人英文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_en")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_en")]
+ public string? EnglishName { get; set; }
+
+ ///
+ /// 获取或设置机器人类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("bot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("bot_type")]
+ public int BotType { get; set; }
+
+ ///
+ /// 获取或设置操作权限类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("auth")]
+ [System.Text.Json.Serialization.JsonPropertyName("auth")]
+ public int AuthType { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置机器人列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Bot[] BotList { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置默认机器人数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_bot_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_bot_count")]
+ public int DefaultBotCount { get; set; }
+
+ ///
+ /// 获取或设置直播机器人数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("live_bot_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("live_bot_count")]
+ public int LiveBotCount { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonRequest.cs
new file mode 100644
index 00000000..5d30b043
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonRequest.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/bot/import/json 接口的请求。
+ ///
+ public class BotImportJsonRequest : WechatOpenAIRequest
+ {
+ public static class Types
+ {
+ public class SkillIntent
+ {
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill")]
+ public string Skill { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置原来意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("old_intent")]
+ [System.Text.Json.Serialization.JsonPropertyName("old_intent")]
+ public string? OldIntent { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent")]
+ public string Intent { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置相似度。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString | System.Text.Json.Serialization.JsonNumberHandling.WriteAsString)]
+ public double Threshold { get; set; }
+
+ ///
+ /// 获取或设置是否禁用。
+ ///
+ [Newtonsoft.Json.JsonProperty("disable")]
+ [System.Text.Json.Serialization.JsonPropertyName("disable")]
+ public bool IsDisabled { get; set; }
+
+ ///
+ /// 获取或设置问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("questions")]
+ [System.Text.Json.Serialization.JsonPropertyName("questions")]
+ public IList QuestionList { get; set; } = new List();
+
+ ///
+ /// 获取或设置回答列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answers")]
+ [System.Text.Json.Serialization.JsonPropertyName("answers")]
+ public IList AnswerList { get; set; } = new List();
+ }
+ }
+
+ ///
+ /// 获取或设置技能意图列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public IList SkillIntentList { get; set; } = new List();
+
+ ///
+ /// 获取或设置导入模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("mode")]
+ public int Mode { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonResponse.cs
new file mode 100644
index 00000000..0e9b227d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportJsonResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/bot/import/json 接口的响应。
+ ///
+ public class BotImportJsonResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置异步任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_id")]
+ public string TaskId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportRequest.cs
new file mode 100644
index 00000000..2d29a3a3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/bot/import 接口的请求。
+ ///
+ public class BotImportRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置上传的文件标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_key")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_key")]
+ public string FileKey { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否覆盖。
+ ///
+ [Newtonsoft.Json.JsonProperty("cover")]
+ [System.Text.Json.Serialization.JsonPropertyName("cover")]
+ public bool IsCover { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportResponse.cs
new file mode 100644
index 00000000..85724c4f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotImportResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/bot/import 接口的响应。
+ ///
+ public class BotImportResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置异步任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_id")]
+ public string TaskId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordRequest.cs
new file mode 100644
index 00000000..dff83d2e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordRequest.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/publish/get_record 接口的请求。
+ ///
+ public class BotPublishGetRecordRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:0
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("size")]
+ [System.Text.Json.Serialization.JsonPropertyName("size")]
+ public int Limit { get; set; } = 10;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordResponse.cs
new file mode 100644
index 00000000..a7bca23c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishGetRecordResponse.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/publish/get_record 接口的响应。
+ ///
+ public class BotPublishGetRecordResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ ///
+ /// 获取或设置 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string Id { get; set; } = default!;
+
+ ///
+ /// 获取或设置发布者 OpenId。
+ ///
+ [Newtonsoft.Json.JsonProperty("open_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("open_id")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置发布状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ ///
+ /// 获取或设置同步数据状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sync_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("sync_status")]
+ public int SyncStatus { get; set; }
+
+ ///
+ /// 获取或设置描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = default!;
+
+ ///
+ /// 获取或设置发布时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("created_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.RegularDateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("created_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.RegularDateTimeOffsetConverter))]
+ public DateTimeOffset CreateTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置发布记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int TotalCount { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishRequest.cs
new file mode 100644
index 00000000..46ad8909
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishRequest.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/publish 接口的请求。
+ ///
+ public class BotPublishRequest : WechatOpenAIRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishResponse.cs
new file mode 100644
index 00000000..b2773273
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotPublishResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/publish 接口的响应。
+ ///
+ public class BotPublishResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置异步任务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("task_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("task_id")]
+ public string TaskId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveRequest.cs
new file mode 100644
index 00000000..55f3550a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveRequest.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/save 接口的请求。
+ ///
+ public class BotSaveRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置机器人中文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_ch")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_ch")]
+ public string ChineseName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置机器人英文名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name_en")]
+ [System.Text.Json.Serialization.JsonPropertyName("name_en")]
+ public string? EnglishName { get; set; }
+
+ ///
+ /// 获取或设置机器人昵称。
+ ///
+ [Newtonsoft.Json.JsonProperty("nickname")]
+ [System.Text.Json.Serialization.JsonPropertyName("nickname")]
+ public string? Nickname { get; set; }
+
+ ///
+ /// 获取或设置机器人类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("bot_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("bot_type")]
+ public int? BotType { get; set; }
+
+ ///
+ /// 获取或设置行业 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("industry")]
+ [System.Text.Json.Serialization.JsonPropertyName("industry")]
+ public int? IndustryId { get; set; }
+
+ ///
+ /// 获取或设置默认回答开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_answer_switch")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_answer_switch")]
+ public bool? DefaultAnswerSwitch { get; set; }
+
+ ///
+ /// 获取或设置默认回答。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_answer")]
+ public string? DefaultAnswer { get; set; }
+
+ ///
+ /// 获取或设置相似度阈值。
+ ///
+ [Newtonsoft.Json.JsonProperty("similarity")]
+ [System.Text.Json.Serialization.JsonPropertyName("similarity")]
+ public double? Similarity { get; set; }
+
+ ///
+ /// 获取或设置相似度阈值下限。
+ ///
+ [Newtonsoft.Json.JsonProperty("similarity_low")]
+ [System.Text.Json.Serialization.JsonPropertyName("similarity_low")]
+ public double? SimilarityMinimum { get; set; }
+
+ ///
+ /// 获取或设置相似问题推荐数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("similar_question_recommend_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("similar_question_recommend_num")]
+ public int? SimilarityQuestionRecommendCount { get; set; }
+
+ ///
+ /// 获取或设置收集用户反馈开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_feedback")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_feedback")]
+ public bool? UserFeedbackSwitch { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveResponse.cs
new file mode 100644
index 00000000..3454e1c9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotSaveResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/bot/save 接口的响应。
+ ///
+ public class BotSaveResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置机器人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string BotId { get; set; } = default!;
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestRequest.cs
new file mode 100644
index 00000000..f286be4c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v1/bot/test 接口的请求。
+ ///
+ public class BotTestRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置询问语句。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string QueryString { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestResponse.cs
new file mode 100644
index 00000000..dc8425b4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Bot/BotTestResponse.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [GET] /v1/bot/test 接口的响应。
+ ///
+ public class BotTestResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class BotState
+ {
+ ///
+ /// 获取或设置机器人配置错误信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("err_msg")]
+ [System.Text.Json.Serialization.JsonPropertyName("err_msg")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// 获取或设置最后有效时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("last_effective_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("last_effective_time")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public long LastEffectiveTimestamp { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("ans_node_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("ans_node_id")]
+ public int AnswerNodeId { get; set; }
+
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("ans_node_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("ans_node_name")]
+ public string AnswerNodeName { get; set; } = default!;
+
+ ///
+ /// 获取或设置回复类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_type")]
+ public string AnswerType { get; set; } = default!;
+
+ ///
+ /// 获取或设置回复内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public string Answer { get; set; } = default!;
+
+ ///
+ /// 获取或设置意图标题。
+ ///
+ [Newtonsoft.Json.JsonProperty("title")]
+ [System.Text.Json.Serialization.JsonPropertyName("title")]
+ public string Title { get; set; } = default!;
+
+ ///
+ /// 获取或设置回复状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public string Status { get; set; } = default!;
+
+ ///
+ /// 获取或设置机器人状态信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("bot_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("bot_state")]
+ public Types.BotState? BotState { get; set; }
+
+ ///
+ /// 获取或设置创建时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("create_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("create_time")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public long CreateTimestamp { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs
new file mode 100644
index 00000000..d328edf0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/unmatched/class/detail 接口的请求。
+ ///
+ public class UnmatchedClassDetailRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置查询日期(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("date")]
+ [System.Text.Json.Serialization.JsonPropertyName("date")]
+ public string DateString { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置话术 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("class_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("class_id")]
+ public int ClassId { get; set; }
+
+ ///
+ /// 获取或设置排序方式。
+ /// 默认值:desc
+ ///
+ [Newtonsoft.Json.JsonProperty("sort")]
+ [System.Text.Json.Serialization.JsonPropertyName("sort")]
+ public string SortType { get; set; } = "desc";
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_no")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailResponse.cs
new file mode 100644
index 00000000..7f971ee6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailResponse.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/unmatched/class/detail 接口的响应。
+ ///
+ public class UnmatchedClassDetailResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Class
+ {
+ ///
+ /// 获取或设置询问话术。
+ ///
+ [Newtonsoft.Json.JsonProperty("query")]
+ [System.Text.Json.Serialization.JsonPropertyName("query")]
+ public string Query { get; set; } = default!;
+
+ ///
+ /// 获取或设置回答话术。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public string Answer { get; set; } = default!;
+
+ ///
+ /// 获取或设置未命中数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Class[] ClassList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置分页页数。
+ ///
+ [Newtonsoft.Json.JsonProperty("page_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_no")]
+ public int Page { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListRequest.cs
new file mode 100644
index 00000000..e8376176
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListRequest.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/unmatched/class/list 接口的请求。
+ ///
+ public class UnmatchedClassListRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置查询日期(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("date")]
+ [System.Text.Json.Serialization.JsonPropertyName("date")]
+ public string DateString { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置排序方式。
+ /// 默认值:desc
+ ///
+ [Newtonsoft.Json.JsonProperty("sort")]
+ [System.Text.Json.Serialization.JsonPropertyName("sort")]
+ public string SortType { get; set; } = "desc";
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_no")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; } = 10;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs
new file mode 100644
index 00000000..36864890
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/unmatched/class/list 接口的响应。
+ ///
+ public class UnmatchedClassListResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Class
+ {
+ ///
+ /// 获取或设置话术 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public int ClassId { get; set; }
+
+ ///
+ /// 获取或设置话术名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置未命中数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Class[] ClassList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置分页页数。
+ ///
+ [Newtonsoft.Json.JsonProperty("page_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_no")]
+ public int Page { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("page_size")]
+ [System.Text.Json.Serialization.JsonPropertyName("page_size")]
+ public int Limit { get; set; }
+ }
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageRequest.json
new file mode 100644
index 00000000..4ce17a54
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageRequest.json
@@ -0,0 +1,3 @@
+{
+ "channelId": "sXRdXepMU58WyAV3xgT2F14PzXi4ya"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageResponse.json
new file mode 100644
index 00000000..e181cdc1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiGetWelcomeMessageResponse.json
@@ -0,0 +1,18 @@
+{
+ "code": 0,
+ "data": {
+ "list": [
+ {
+ "source": 1,
+ "msgType": "text",
+ "welcomeMsg": "你好",
+ "msgId": "5248",
+ "label": "全部",
+ "newSendInterval": 0
+ }
+ ],
+ "total": 1
+ },
+ "request_id": "18024ec0-837e-4873-825a-922247d4e57f"
+
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageRequest.json
new file mode 100644
index 00000000..aad44b8c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageRequest.json
@@ -0,0 +1,9 @@
+{
+ "channelId": "sXRdXepMU58WyAV3xgT2F14PzXi4ya",
+ "msgType": "text",
+ "newSendInterval": 0,
+ "source": 1,
+ "welcomeMsg": "你好",
+ "lableId": "",
+ "msgId": "5500"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageResponse.json
new file mode 100644
index 00000000..c50fc1e8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Api/ApiSetWelcomeMessageResponse.json
@@ -0,0 +1,4 @@
+{
+ "code": 0,
+ "request_id": "f9da2eba-98f9-4b51-a68c-5bc7c537e539"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteRequest.json
new file mode 100644
index 00000000..22fdca1b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteRequest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteResponse.json
new file mode 100644
index 00000000..3059ae80
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotDeleteResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "data": {
+ "task_id": "172ead02b7a14bfd8aac43939c0e2cb3"
+ },
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressRequest.json
new file mode 100644
index 00000000..f39c8243
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressRequest.json
@@ -0,0 +1,3 @@
+{
+ "env": "debug"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressResponse.json
new file mode 100644
index 00000000..3a9aaa2f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotEffectiveProgressResponse.json
@@ -0,0 +1,9 @@
+{
+ "code": 0,
+ "msg": "success",
+ "data": {
+ "progress": 100,
+ "status": 1
+ },
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportRequest.json
new file mode 100644
index 00000000..22fdca1b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportRequest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportResponse.json
new file mode 100644
index 00000000..d8b0d65a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotExportResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "msg": "请求成功",
+ "data": {
+ "task_id": "337cd9d9-210c-4a59-972e-1c8df8c18adb"
+ },
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailRequest.json
new file mode 100644
index 00000000..22fdca1b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailRequest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailResponse.json
new file mode 100644
index 00000000..80f85ec8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetDetailResponse.json
@@ -0,0 +1,19 @@
+{
+ "code": 0,
+ "data": {
+ "default_answer": null,
+ "default_answer_switch": true,
+ "id": "3yrw9n5uknsox1pwzyz9ohb2eu4ta4wo",
+ "name_ch": "测试bot000121",
+ "name_en": "testBot000121",
+ "nickname": null,
+ "similar_question_recommend_num": 5,
+ "similarity": 0.9,
+ "similarity_low": 0.7,
+ "user_feedback": false,
+ "industry": 2,
+ "bot_type": 0
+ },
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListRequest.json
new file mode 100644
index 00000000..686f9641
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListRequest.json
@@ -0,0 +1,6 @@
+{
+ "keyword": "测试",
+ "page": 1,
+ "size": 10,
+ "bot_type": -1
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListResponse.json
new file mode 100644
index 00000000..1b50091d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotGetListResponse.json
@@ -0,0 +1,40 @@
+{
+ "code": 0,
+ "data": {
+ "count": 4,
+ "default_bot_count": 3,
+ "live_bot_count": 1,
+ "list": [
+ {
+ "id": "3yrw9n5uknsox1pwzyz9ohb2eu4ta4wo",
+ "name_ch": "测试bot000121",
+ "name_en": "testBot000121",
+ "auth": 200,
+ "bot_type": 0
+ },
+ {
+ "id": "sbcvmbvxrdkjg0axix5c9driwfwqbkum",
+ "name_ch": "测试bot0001211",
+ "name_en": "testBot0001211",
+ "auth": 200,
+ "bot_type": 1
+ },
+ {
+ "id": "td6kko408oo5afll4b7dh3l3ybmtsrgi",
+ "name_ch": "测试bot000111",
+ "name_en": "testBot00211",
+ "auth": 200,
+ "bot_type": 0
+ },
+ {
+ "id": "81wfgwcjmenfs3kkapwa97hwqfnrbu1z",
+ "name_ch": "测试bot00013",
+ "name_en": "testBot00013",
+ "auth": 200,
+ "bot_type": 0
+ }
+ ]
+ },
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonRequest.json
new file mode 100644
index 00000000..257a5d09
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonRequest.json
@@ -0,0 +1,19 @@
+{
+ "mode": 0,
+ "data": [
+ {
+ "skill": "吃啥",
+ "intent": "中午吃什么",
+ "threshold": "0.9",
+ "disable": false,
+ "questions": [
+ "中午吃什么?",
+ "中午吃啥?"
+ ],
+ "answers": [
+ "面条",
+ "包子"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonResponse.json
new file mode 100644
index 00000000..520ef734
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportJsonResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "data": {
+ "task_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+ },
+ "msg": "",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportRequest.json
new file mode 100644
index 00000000..f36b3759
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportRequest.json
@@ -0,0 +1,4 @@
+{
+ "file_key": "fe48940d7310e79d6bf0a4aced56d522",
+ "cover": false
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportResponse.json
new file mode 100644
index 00000000..d8b0d65a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotImportResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "msg": "请求成功",
+ "data": {
+ "task_id": "337cd9d9-210c-4a59-972e-1c8df8c18adb"
+ },
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordRequest.json
new file mode 100644
index 00000000..61c8c337
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordRequest.json
@@ -0,0 +1,4 @@
+{
+ "page": 0,
+ "size": 8
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordResponse.json
new file mode 100644
index 00000000..c62e3564
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishGetRecordResponse.json
@@ -0,0 +1,34 @@
+{
+ "code": 0,
+ "data": {
+ "count": 3,
+ "list": [
+ {
+ "created_time": "2020-08-21 18:00:51",
+ "description": "",
+ "id": "65",
+ "open_id": "123456",
+ "status": 8,
+ "sync_status": 0
+ },
+ {
+ "created_time": "2020-08-21 19:00:52",
+ "description": "",
+ "id": "79",
+ "open_id": "123456",
+ "status": 8,
+ "sync_status": 1
+ },
+ {
+ "created_time": "2020-08-21 20:00:53",
+ "description": "",
+ "id": "555",
+ "open_id": "123456",
+ "status": 9,
+ "sync_status": 2
+ }
+ ]
+ },
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishRequest.json
new file mode 100644
index 00000000..22fdca1b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishRequest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishResponse.json
new file mode 100644
index 00000000..918b8871
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotPublishResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "data": {
+ "task_id": "b86a904600eb4a2e940beb8af8d5c0d3"
+ },
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveRequest.json
new file mode 100644
index 00000000..3fdeffc4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveRequest.json
@@ -0,0 +1,13 @@
+{
+ "name_ch": "中文234",
+ "name_en": "en134",
+ "nickname": "测试",
+ "default_answer": "你好",
+ "default_answer_switch": true,
+ "similarity": 0.9,
+ "similarity_low": 0.7,
+ "similar_question_recommend_num": 5,
+ "user_feedback": true,
+ "industry": 2,
+ "bot_type": 0
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveResponse.json
new file mode 100644
index 00000000..96ecf792
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotSaveResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "data": {
+ "id": "dzcmrij0zyvexs4llblxepwclfvnq3fv"
+ },
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestRequest.json
new file mode 100644
index 00000000..22fdca1b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestRequest.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestResponse.json
new file mode 100644
index 00000000..bd6da986
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Bot/BotTestResponse.json
@@ -0,0 +1,18 @@
+{
+ "code": 0,
+ "data": {
+ "ans_node_id": 9620273,
+ "ans_node_name": "吃啥",
+ "answer": "包子",
+ "answer_type": "text",
+ "bot_state": {
+ "err_msg": "",
+ "last_effective_time": "20210827113707"
+ },
+ "create_time": "1630035702",
+ "status": "GENERAL_FAQ",
+ "title": "中午吃什么"
+ },
+ "msg": "",
+ "request_id": "32482"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailRequest.json
new file mode 100644
index 00000000..febddf2b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailRequest.json
@@ -0,0 +1,7 @@
+{
+ "sort": "asc",
+ "page_no": 1,
+ "page_size": 10,
+ "class_id": 12,
+ "date": "2021-08-23"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailResponse.json
new file mode 100644
index 00000000..ce262db8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassDetailResponse.json
@@ -0,0 +1,17 @@
+{
+ "code": 0,
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142",
+ "data": {
+ "list": [
+ {
+ "query": "你好啊啊啊",
+ "answer": "哈哈哈哈",
+ "count": 1
+ }
+ ],
+ "page_no": 1,
+ "page_size": 10,
+ "total": 1
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListRequest.json
new file mode 100644
index 00000000..01e4279c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListRequest.json
@@ -0,0 +1,6 @@
+{
+ "sort": "asc",
+ "page_no": 1,
+ "page_size": 10,
+ "date": "2021-08-23"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListResponse.json
new file mode 100644
index 00000000..b0ef2f80
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/UnmatchedClass/UnmatchedClassListResponse.json
@@ -0,0 +1,17 @@
+{
+ "code": 0,
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142",
+ "data": {
+ "list": [
+ {
+ "id": 1,
+ "count": 9,
+ "name": "哈哈哈哈"
+ }
+ ],
+ "page_no": 1,
+ "page_size": 10,
+ "total": 100
+ }
+}
\ No newline at end of file