diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteIntentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteIntentExtensions.cs
new file mode 100644
index 00000000..27b1b26e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteIntentExtensions.cs
@@ -0,0 +1,209 @@
+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 WechatOpenAIClientExecuteIntentExtensions
+ {
+ ///
+ /// 异步调用 [POST] /v2/intent/save 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/batch_save.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentSaveAsync(this WechatOpenAIClient client, Models.IntentSaveRequest 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", "intent", "save");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/search 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/search .html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentSearchAsync(this WechatOpenAIClient client, Models.IntentSearchRequest 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", "intent", "search");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/get_detail 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/get_detail .html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentGetDetailAsync(this WechatOpenAIClient client, Models.IntentGetDetailRequest 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", "intent", "get_detail");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/name_exist 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/name_exist .html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentNameExistAsync(this WechatOpenAIClient client, Models.IntentNameExistRequest 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", "intent", "name_exist");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/delete 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/batch_delete.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentDeleteAsync(this WechatOpenAIClient client, Models.IntentDeleteRequest 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", "intent", "delete");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v1/intent/switch/batch 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/batch_delete.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentSwitchBatchAsync(this WechatOpenAIClient client, Models.IntentSwitchBatchRequest 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", "intent", "switch", "batch");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ #region Config
+ ///
+ /// 异步调用 [POST] /v2/intent/config/save 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/save_config.html
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/save_config_normal_answer_config.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentConfigSaveAsync(this WechatOpenAIClient client, Models.IntentConfigSaveRequest 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", "intent", "config", "save");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/config/get 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/get_config.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentConfigGetAsync(this WechatOpenAIClient client, Models.IntentConfigGetRequest 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", "intent", "config", "get");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+
+ #region Question
+ ///
+ /// 异步调用 [POST] /v2/intent/question/save 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/batch_save_question.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentQuestionSaveAsync(this WechatOpenAIClient client, Models.IntentQuestionSaveRequest 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", "intent", "question", "save");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+
+ ///
+ /// 异步调用 [POST] /v2/intent/question/delete 接口。
+ /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/intent/batch_delete_question.html
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteIntentQuestionDeleteAsync(this WechatOpenAIClient client, Models.IntentQuestionDeleteRequest 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", "intent", "question", "delete");
+
+ return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken);
+ }
+ #endregion
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetRequest.cs
new file mode 100644
index 00000000..e6c9c252
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/config/get 接口的请求。
+ ///
+ public class IntentConfigGetRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetResponse.cs
new file mode 100644
index 00000000..f4f4a836
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigGetResponse.cs
@@ -0,0 +1,447 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/config/get 接口的响应。
+ ///
+ public class IntentConfigGetResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Slot
+ {
+ ///
+ /// 获取或设置语义槽名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置词典名称列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("dicts")]
+ [System.Text.Json.Serialization.JsonPropertyName("dicts")]
+ public string[] DictionaryNameList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否追问。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask")]
+ public bool IsKeepAsk { get; set; }
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public string[]? AskContentList { get; set; } = default!;
+ }
+
+ public class Previous
+ {
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent")]
+ public string IntentName { get; set; } = default!;
+
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill")]
+ public string SkillName { get; set; } = default!;
+ }
+
+ public class Next : Previous
+ {
+ }
+
+ public class NormalAnswerConfig
+ {
+ public static class Types
+ {
+ public class Answer
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置回答内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("content")]
+ [System.Text.Json.Serialization.JsonPropertyName("content")]
+ public object Content { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置是否合并。
+ ///
+ [Newtonsoft.Json.JsonProperty("merge_answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("merge_answer")]
+ public bool RequireMergeAnswer { get; set; }
+
+ ///
+ /// 获取或设置回答列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public Types.Answer[] AnswerList { get; set; } = default!;
+ }
+
+ public class ApiAnswerConfig
+ {
+ public static class Types
+ {
+ public class Argument
+ {
+ public static class Types
+ {
+ public class Item
+ {
+ ///
+ /// 获取或设置参数名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否必填。
+ ///
+ [Newtonsoft.Json.JsonProperty("input")]
+ [System.Text.Json.Serialization.JsonPropertyName("input")]
+ public bool IsRequired { get; set; }
+
+ ///
+ /// 获取或设置参数含义。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string Description { get; set; } = default!;
+
+ ///
+ /// 获取或设置对应语义槽。
+ ///
+ [Newtonsoft.Json.JsonProperty("slot")]
+ [System.Text.Json.Serialization.JsonPropertyName("slot")]
+ public string Slot { get; set; } = default!;
+
+ ///
+ /// 获取或设置默认值。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_value")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_value")]
+ public string DefaultValue { get; set; } = default!;
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public string[]? AskContentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置入参列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("input")]
+ [System.Text.Json.Serialization.JsonPropertyName("input")]
+ public Types.Item[]? InputArgumentList { get; set; }
+
+ ///
+ /// 获取或设置出参列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("output")]
+ [System.Text.Json.Serialization.JsonPropertyName("output")]
+ public Types.Item[]? OutArgumentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置服务接口调用 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = default!;
+
+ ///
+ /// 获取或设置 API 类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("http_method")]
+ [System.Text.Json.Serialization.JsonPropertyName("http_method")]
+ public string HttpMethod { get; set; } = default!;
+
+ ///
+ /// 获取或设置 API 地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("http_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("http_url")]
+ public string HttpUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否征求用户意见。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_confirm")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_confirm")]
+ public bool RequireConfirm { get; set; }
+
+ ///
+ /// 获取或设置征求语句。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_confirm_response")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_confirm_response")]
+ public string? ConfirmResponse { get; set; }
+
+ ///
+ /// 获取或设置参数信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("arguments")]
+ [System.Text.Json.Serialization.JsonPropertyName("arguments")]
+ public Types.Argument Argument { get; set; } = default!;
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public Result[] ResultList { get; set; } = default!;
+ }
+
+ public class AskSlotAnswerConfig
+ {
+ public static class Types
+ {
+ public class Argument
+ {
+ ///
+ /// 获取或设置参数名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置对应语义槽。
+ ///
+ [Newtonsoft.Json.JsonProperty("slot")]
+ [System.Text.Json.Serialization.JsonPropertyName("slot")]
+ public string Slot { get; set; } = default!;
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public string[]? AskContentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置语义槽信息追问 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = default!;
+
+ ///
+ /// 获取或设置参数列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("arguments")]
+ [System.Text.Json.Serialization.JsonPropertyName("arguments")]
+ public Types.Argument[]? ArgumentList { get; set; }
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public Result[] ResultList { get; set; } = default!;
+ }
+
+ public class AskAnswerConfig
+ {
+ ///
+ /// 获取或设置机器人提问 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = default!;
+
+ ///
+ /// 获取或设置问题。
+ ///
+ [Newtonsoft.Json.JsonProperty("question")]
+ [System.Text.Json.Serialization.JsonPropertyName("question")]
+ public string Question { get; set; } = default!;
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public Result[] ResultList { get; set; } = default!;
+ }
+
+ public class Result
+ {
+ ///
+ /// 获取或设置错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("code")]
+ [System.Text.Json.Serialization.JsonPropertyName("code")]
+ public string ErrorCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置错误描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string ErrorDescription { get; set; } = default!;
+
+ ///
+ /// 获取或设置回答配置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_config_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_config_type")]
+ public int AnswerConfigType { get; set; }
+
+ ///
+ /// 获取或设置回答。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public string Answer { get; set; } = default!;
+
+ ///
+ /// 获取或设置普通技能信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_answer_config")]
+ public NormalAnswerConfig? AnswerConfigForNormal { get; set; }
+
+ ///
+ /// 获取或设置服务接口调用信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("api_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("api_answer_config")]
+ public ApiAnswerConfig? AnswerConfigForApi { get; set; }
+
+ ///
+ /// 获取或设置语义槽追问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_slot_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_slot_answer_config")]
+ public AskSlotAnswerConfig? AnswerConfigForAskSlot { get; set; }
+
+ ///
+ /// 获取或设置机器人提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_answer_config")]
+ public AskAnswerConfig? AnswerConfigForAsk { get; set; }
+
+ ///
+ /// 获取或设置机器人动态提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("dynamic_ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("dynamic_ask_answer_config")]
+ public AskAnswerConfig? AnswerConfigForAskDynamic { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置语义槽列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("slots")]
+ [System.Text.Json.Serialization.JsonPropertyName("slots")]
+ public Types.Slot[] IntentQuestionList { get; set; } = default!;
+
+ ///
+ /// 获取或设置前置对话列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("pre")]
+ [System.Text.Json.Serialization.JsonPropertyName("pre")]
+ public Types.Previous[] PreviousList { get; set; } = default!;
+
+ ///
+ /// 获取或设置后续对话列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("next")]
+ [System.Text.Json.Serialization.JsonPropertyName("next")]
+ public Types.Next[] NextList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否追问。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask")]
+ public bool IsKeepAsk { get; set; }
+
+ ///
+ /// 获取或设置最大追问次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask_num")]
+ public int KeepAskCount { get; set; }
+
+ ///
+ /// 获取或设置回答配置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_config_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_config_type")]
+ public int AnswerConfigType { get; set; }
+
+ ///
+ /// 获取或设置普通技能信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_answer_config")]
+ public Types.NormalAnswerConfig? AnswerConfigForNormal { get; set; }
+
+ ///
+ /// 获取或设置服务接口调用信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("api_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("api_answer_config")]
+ public Types.ApiAnswerConfig? AnswerConfigForApi { get; set; }
+
+ ///
+ /// 获取或设置语义槽追问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_slot_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_slot_answer_config")]
+ public Types.AskSlotAnswerConfig? AnswerConfigForAskSlot { get; set; }
+
+ ///
+ /// 获取或设置机器人提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_answer_config")]
+ public Types.AskAnswerConfig? AnswerConfigForAsk { get; set; }
+
+ ///
+ /// 获取或设置机器人动态提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("dynamic_ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("dynamic_ask_answer_config")]
+ public Types.AskAnswerConfig? AnswerConfigForAskDynamic { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveRequest.cs
new file mode 100644
index 00000000..54298e32
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveRequest.cs
@@ -0,0 +1,455 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/config/save 接口的请求。
+ ///
+ public class IntentConfigSaveRequest : WechatOpenAIRequest
+ {
+ public static class Types
+ {
+ public class Slot
+ {
+ ///
+ /// 获取或设置语义槽名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置词典名称列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("dicts")]
+ [System.Text.Json.Serialization.JsonPropertyName("dicts")]
+ public IList DictionaryNameList { get; set; } = new List();
+
+ ///
+ /// 获取或设置是否追问。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask")]
+ public bool IsKeepAsk { get; set; }
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public IList? AskContentList { get; set; }
+ }
+
+ public class Previous
+ {
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent")]
+ public string IntentName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill")]
+ public string SkillName { get; set; } = string.Empty;
+ }
+
+ public class Next : Previous
+ {
+ }
+
+ public class NormalAnswerConfig
+ {
+ public static class Types
+ {
+ public class Answer
+ {
+ ///
+ /// 获取或设置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置回答内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("content")]
+ [System.Text.Json.Serialization.JsonPropertyName("content")]
+ public string Content { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置是否合并。
+ ///
+ [Newtonsoft.Json.JsonProperty("merge_answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("merge_answer")]
+ public bool RequireMergeAnswer { get; set; }
+
+ ///
+ /// 获取或设置回答列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public IList AnswerList { get; set; } = new List();
+ }
+
+ public class ApiAnswerConfig
+ {
+ public static class Types
+ {
+ public class Argument
+ {
+ public static class Types
+ {
+ public class Item
+ {
+ ///
+ /// 获取或设置参数名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否必填。
+ ///
+ [Newtonsoft.Json.JsonProperty("input")]
+ [System.Text.Json.Serialization.JsonPropertyName("input")]
+ public bool IsRequired { get; set; }
+
+ ///
+ /// 获取或设置参数含义。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string Description { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置对应语义槽。
+ ///
+ [Newtonsoft.Json.JsonProperty("slot")]
+ [System.Text.Json.Serialization.JsonPropertyName("slot")]
+ public string Slot { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置默认值。
+ ///
+ [Newtonsoft.Json.JsonProperty("default_value")]
+ [System.Text.Json.Serialization.JsonPropertyName("default_value")]
+ public string DefaultValue { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public IList? AskContentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置入参列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("input")]
+ [System.Text.Json.Serialization.JsonPropertyName("input")]
+ public IList? InputArgumentList { get; set; }
+
+ ///
+ /// 获取或设置出参列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("output")]
+ [System.Text.Json.Serialization.JsonPropertyName("output")]
+ public IList? OutArgumentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置服务接口调用 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置 API 类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("http_method")]
+ [System.Text.Json.Serialization.JsonPropertyName("http_method")]
+ public string HttpMethod { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置 API 地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("http_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("http_url")]
+ public string HttpUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否征求用户意见。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_confirm")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_confirm")]
+ public bool RequireConfirm { get; set; }
+
+ ///
+ /// 获取或设置征求语句。
+ ///
+ [Newtonsoft.Json.JsonProperty("need_confirm_response")]
+ [System.Text.Json.Serialization.JsonPropertyName("need_confirm_response")]
+ public string? ConfirmResponse { get; set; }
+
+ ///
+ /// 获取或设置参数信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("arguments")]
+ [System.Text.Json.Serialization.JsonPropertyName("arguments")]
+ public Types.Argument Argument { get; set; } = new Types.Argument();
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public IList ResultList { get; set; } = new List();
+ }
+
+ public class AskSlotAnswerConfig
+ {
+ public static class Types
+ {
+ public class Argument
+ {
+ ///
+ /// 获取或设置参数名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置对应语义槽。
+ ///
+ [Newtonsoft.Json.JsonProperty("slot")]
+ [System.Text.Json.Serialization.JsonPropertyName("slot")]
+ public string Slot { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置追问话术列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_content")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_content")]
+ public IList? AskContentList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置语义槽信息追问 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置参数信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("arguments")]
+ [System.Text.Json.Serialization.JsonPropertyName("arguments")]
+ public IList Argument { get; set; } = new List();
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public IList ResultList { get; set; } = new List();
+ }
+
+ public class AskAnswerConfig
+ {
+ ///
+ /// 获取或设置机器人提问 API。
+ ///
+ [Newtonsoft.Json.JsonProperty("api")]
+ [System.Text.Json.Serialization.JsonPropertyName("api")]
+ public string Api { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置问题。
+ ///
+ [Newtonsoft.Json.JsonProperty("question")]
+ [System.Text.Json.Serialization.JsonPropertyName("question")]
+ public string Question { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("result")]
+ [System.Text.Json.Serialization.JsonPropertyName("result")]
+ public IList ResultList { get; set; } = new List();
+ }
+
+ public class Result
+ {
+ ///
+ /// 获取或设置错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("code")]
+ [System.Text.Json.Serialization.JsonPropertyName("code")]
+ public string ErrorCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置错误描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("desc")]
+ [System.Text.Json.Serialization.JsonPropertyName("desc")]
+ public string ErrorDescription { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置回答配置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_config_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_config_type")]
+ public int AnswerConfigType { get; set; }
+
+ ///
+ /// 获取或设置回答。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer")]
+ public string Answer { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置普通技能信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_answer_config")]
+ public NormalAnswerConfig? AnswerConfigForNormal { get; set; }
+
+ ///
+ /// 获取或设置服务接口调用信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("api_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("api_answer_config")]
+ public ApiAnswerConfig? AnswerConfigForApi { get; set; }
+
+ ///
+ /// 获取或设置语义槽追问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_slot_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_slot_answer_config")]
+ public AskSlotAnswerConfig? AnswerConfigForAskSlot { get; set; }
+
+ ///
+ /// 获取或设置机器人提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_answer_config")]
+ public AskAnswerConfig? AnswerConfigForAsk { get; set; }
+
+ ///
+ /// 获取或设置机器人动态提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("dynamic_ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("dynamic_ask_answer_config")]
+ public AskAnswerConfig? AnswerConfigForAskDynamic { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置语义槽列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("slots")]
+ [System.Text.Json.Serialization.JsonPropertyName("slots")]
+ public IList IntentQuestionList { get; set; } = new List();
+
+ ///
+ /// 获取或设置前置对话列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("pre")]
+ [System.Text.Json.Serialization.JsonPropertyName("pre")]
+ public IList PreviousList { get; set; } = new List();
+
+ ///
+ /// 获取或设置后续对话列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("next")]
+ [System.Text.Json.Serialization.JsonPropertyName("next")]
+ public IList NextList { get; set; } = new List();
+
+ ///
+ /// 获取或设置是否追问。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask")]
+ public bool IsKeepAsk { get; set; }
+
+ ///
+ /// 获取或设置最大追问次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("keep_ask_num")]
+ [System.Text.Json.Serialization.JsonPropertyName("keep_ask_num")]
+ public int KeepAskCount { get; set; }
+
+ ///
+ /// 获取或设置回答配置类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("answer_config_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("answer_config_type")]
+ public int AnswerConfigType { get; set; }
+
+ ///
+ /// 获取或设置普通技能信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_answer_config")]
+ public Types.NormalAnswerConfig? AnswerConfigForNormal { get; set; }
+
+ ///
+ /// 获取或设置服务接口调用信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("api_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("api_answer_config")]
+ public Types.ApiAnswerConfig? AnswerConfigForApi { get; set; }
+
+ ///
+ /// 获取或设置语义槽追问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_slot_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_slot_answer_config")]
+ public Types.AskSlotAnswerConfig? AnswerConfigForAskSlot { get; set; }
+
+ ///
+ /// 获取或设置机器人提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("ask_answer_config")]
+ public Types.AskAnswerConfig? AnswerConfigForAsk { get; set; }
+
+ ///
+ /// 获取或设置机器人动态提问信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("dynamic_ask_answer_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("dynamic_ask_answer_config")]
+ public Types.AskAnswerConfig? AnswerConfigForAskDynamic { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveResponse.cs
new file mode 100644
index 00000000..10ef0efd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Config/IntentConfigSaveResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/config/save 接口的响应。
+ ///
+ public class IntentConfigSaveResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteRequest.cs
new file mode 100644
index 00000000..bd36fc56
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/delete 接口的请求。
+ ///
+ public class IntentDeleteRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置意图 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("id_list")]
+ public IList IntentIdList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteResponse.cs
new file mode 100644
index 00000000..a0dd4398
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentDeleteResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/delete 接口的响应。
+ ///
+ public class IntentDeleteResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailRequest.cs
new file mode 100644
index 00000000..18c62241
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/get_detail 接口的请求。
+ ///
+ public class IntentGetDetailRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public long IntentId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailResponse.cs
new file mode 100644
index 00000000..52836d4c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentGetDetailResponse.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/get_detail 接口的响应。
+ ///
+ public class IntentGetDetailResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Question
+ {
+ ///
+ /// 获取或设置问题 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public long QuestionId { get; set; }
+
+ ///
+ /// 获取或设置问题内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("question")]
+ [System.Text.Json.Serialization.JsonPropertyName("question")]
+ public string Content { get; set; } = default!;
+
+ ///
+ /// 获取或设置优先级。
+ ///
+ [Newtonsoft.Json.JsonProperty("rank_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("rank_level")]
+ public double RankLevel { get; set; }
+
+ ///
+ /// 获取或设置相似度。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public double Threshold { get; set; }
+
+ ///
+ /// 获取或设置是否为反例。
+ ///
+ [Newtonsoft.Json.JsonProperty("counter_example")]
+ [System.Text.Json.Serialization.JsonPropertyName("counter_example")]
+ public bool IsCounterExample { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置优先级。
+ ///
+ [Newtonsoft.Json.JsonProperty("rank_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("rank_level")]
+ public double RankLevel { get; set; }
+
+ ///
+ /// 获取或设置相似度。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public double Threshold { get; set; }
+
+ ///
+ /// 获取或设置意图开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("switch")]
+ [System.Text.Json.Serialization.JsonPropertyName("switch")]
+ public bool Switch { get; set; }
+
+ ///
+ /// 获取或设置命中次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("frequency")]
+ [System.Text.Json.Serialization.JsonPropertyName("frequency")]
+ public int Frequency { get; set; }
+
+ ///
+ /// 获取或设置意图问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("questions")]
+ [System.Text.Json.Serialization.JsonPropertyName("questions")]
+ public Types.Question[] QuestionList { get; set; } = default!;
+
+ ///
+ /// 获取或设置更新时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("updated_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("updated_time")]
+ public long UpdateTimestamp { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistRequest.cs
new file mode 100644
index 00000000..637f6e3a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/name_exist 接口的请求。
+ ///
+ public class IntentNameExistRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_name")]
+ public string IntentName { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistResponse.cs
new file mode 100644
index 00000000..45e24706
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentNameExistResponse.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/name_exist 接口的响应。
+ ///
+ public class IntentNameExistResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ ///
+ /// 获取或设置是否已存在。
+ ///
+ [Newtonsoft.Json.JsonProperty("exist")]
+ [System.Text.Json.Serialization.JsonPropertyName("exist")]
+ public bool IsExisted { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveRequest.cs
new file mode 100644
index 00000000..114a3585
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveRequest.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/save 接口的请求。
+ ///
+ public class IntentSaveRequest : WechatOpenAIRequest
+ {
+ public static class Types
+ {
+ public class Intent
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置优先级。
+ ///
+ [Newtonsoft.Json.JsonProperty("rank_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("rank_level")]
+ public double RankLevel { get; set; }
+
+ ///
+ /// 获取或设置相似度。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public double Threshold { get; set; }
+
+ ///
+ /// 获取或设置意图开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("switch")]
+ [System.Text.Json.Serialization.JsonPropertyName("switch")]
+ public bool Switch { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置意图列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_list")]
+ public IList IntentList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveResponse.cs
new file mode 100644
index 00000000..41bc790f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSaveResponse.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/save 接口的响应。
+ ///
+ public class IntentSaveResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+
+ public static class Types
+ {
+ public class Intent
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_name")]
+ public string Name { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置意图列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Intent[] IntentList { get; set; } = default!;
+
+ ///
+ /// 获取或设置意图数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+ }
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSearchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSearchRequest.cs
new file mode 100644
index 00000000..c6bffd92
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSearchRequest.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/search 接口的请求。
+ ///
+ public class IntentSearchRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置关键字。
+ ///
+ [Newtonsoft.Json.JsonProperty("keyword")]
+ [System.Text.Json.Serialization.JsonPropertyName("keyword")]
+ public string? Keyword { get; set; }
+
+ ///
+ /// 获取或设置分页页数。
+ /// 默认值:1
+ ///
+ [Newtonsoft.Json.JsonProperty("page")]
+ [System.Text.Json.Serialization.JsonPropertyName("page")]
+ public int Page { get; set; } = 1;
+
+ ///
+ /// 获取或设置分页每页数量。
+ /// 默认值: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/Intent/IntentSearchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSearchResponse.cs
new file mode 100644
index 00000000..db7ebd9f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSearchResponse.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/search 接口的响应。
+ ///
+ public class IntentSearchResponse : WechatOpenAIResponse
+ {
+ public static class Types
+ {
+ public class Data
+ {
+ public static class Types
+ {
+ public class Intent
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_name")]
+ public string IntentName { get; set; } = default!;
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_name")]
+ public string SkillName { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置意图列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("list")]
+ [System.Text.Json.Serialization.JsonPropertyName("list")]
+ public Types.Intent[] IntentList { 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/Intent/IntentSwitchBatchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSwitchBatchRequest.cs
new file mode 100644
index 00000000..3dd8320b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSwitchBatchRequest.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/intent/switch/batch 接口的请求。
+ ///
+ public class IntentSwitchBatchRequest : WechatOpenAIRequest
+ {
+ public static class Types
+ {
+ public class Intent
+ {
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置意图开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("switch")]
+ [System.Text.Json.Serialization.JsonPropertyName("switch")]
+ public bool Switch { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置意图列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("switch_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("switch_list")]
+ public IList IntentList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSwitchBatchResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSwitchBatchResponse.cs
new file mode 100644
index 00000000..548a77d4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/IntentSwitchBatchResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v1/intent/switch/batch 接口的响应。
+ ///
+ public class IntentSwitchBatchResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteRequest.cs
new file mode 100644
index 00000000..c35a0efe
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteRequest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/question/delete 接口的请求。
+ ///
+ public class IntentQuestionDeleteRequest : WechatOpenAIRequest
+ {
+ ///
+ /// 获取或设置意图问题 ID 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("id_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("id_list")]
+ public IList IntentQuestionIdList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteResponse.cs
new file mode 100644
index 00000000..8571197f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionDeleteResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/question/delete 接口的响应。
+ ///
+ public class IntentQuestionDeleteResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveRequest.cs
new file mode 100644
index 00000000..f542e5b5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveRequest.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/question/save 接口的请求。
+ ///
+ public class IntentQuestionSaveRequest : WechatOpenAIRequest
+ {
+ public static class Types
+ {
+ public class Question
+ {
+ ///
+ /// 获取或设置问题 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public long QuestionId { get; set; }
+
+ ///
+ /// 获取或设置问题内容。
+ ///
+ [Newtonsoft.Json.JsonProperty("question")]
+ [System.Text.Json.Serialization.JsonPropertyName("question")]
+ public string Content { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置优先级。
+ ///
+ [Newtonsoft.Json.JsonProperty("rank_level")]
+ [System.Text.Json.Serialization.JsonPropertyName("rank_level")]
+ public double RankLevel { get; set; }
+
+ ///
+ /// 获取或设置相似度。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public double Threshold { get; set; }
+
+ ///
+ /// 获取或设置是否为反例。
+ ///
+ [Newtonsoft.Json.JsonProperty("counter_example")]
+ [System.Text.Json.Serialization.JsonPropertyName("counter_example")]
+ public bool IsCounterExample { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置保存模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("mode")]
+ public int Mode { get; set; }
+
+ ///
+ /// 获取或设置意图 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_id")]
+ public long IntentId { get; set; }
+
+ ///
+ /// 获取或设置意图名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("intent_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("intent_name")]
+ public string? IntentName { get; set; }
+
+ ///
+ /// 获取或设置技能 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_id")]
+ public long SkillId { get; set; }
+
+ ///
+ /// 获取或设置技能名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("skill_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("skill_name")]
+ public string? SkillName { get; set; }
+
+ ///
+ /// 获取或设置意图问题列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("data")]
+ [System.Text.Json.Serialization.JsonPropertyName("data")]
+ public IList IntentQuestionList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveResponse.cs
new file mode 100644
index 00000000..160123ee
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Intent/Question/IntentQuestionSaveResponse.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models
+{
+ ///
+ /// 表示 [POST] /v2/intent/question/save 接口的响应。
+ ///
+ public class IntentQuestionSaveResponse : WechatOpenAIResponse
+ {
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetRequest.json
new file mode 100644
index 00000000..a08edfde
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetRequest.json
@@ -0,0 +1,3 @@
+{
+ "intent_id": 1205882
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetResponse.json
new file mode 100644
index 00000000..f59353e5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigGetResponse.json
@@ -0,0 +1,127 @@
+{
+ "code": 0,
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142",
+ "data": {
+ "slots": [
+ {
+ "name": "城市",
+ "dicts": [ "建筑", "公路" ],
+ "keep_ask": true,
+ "ask_content": [ "建筑1", "公路1" ]
+ }
+ ],
+ "pre": [
+ {
+ "skill": "音乐",
+ "intent": "点播"
+ }
+ ],
+ "next": [
+ {
+ "skill": "天气",
+ "intent": "询问"
+ }
+ ],
+ "keep_ask": true,
+ "keep_ask_num": 10,
+ "answer_config_type": 4,
+ "dynamic_ask_answer_config": {
+ "api": "_dynamic_list_selection_{}",
+ "question": "AskAnswerConfigQuestion",
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 3,
+ "answer": "",
+ "ask_answer_config": {
+ "api": "_bot_ask_{}",
+ "question": "AskAnswerConfigQuestion",
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 2,
+ "answer": "",
+ "ask_slot_answer_config": {
+ "api": "_bot_getinfo_{}",
+ "arguments": [
+ {
+ "name": "",
+ "slot": "Slot",
+ "ask_content": [ "111", "222" ]
+ }
+ ],
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 1,
+ "answer": "",
+ "api_answer_config": {
+ "api": "_http_service_{}",
+ "need_confirm": true,
+ "need_confirm_response": "城市好啊",
+ "http_method": "get",
+ "http_url": "HttpUrl111",
+ "arguments": {
+ "input": [
+ {
+ "name": "InputName",
+ "input": true,
+ "desc": "Inputdesc",
+ "slot": "InputSlot",
+ "default_value": "defa",
+ "ask_content": [ "ask" ]
+ }
+ ],
+ "output": [
+ {
+ "name": "OutputName",
+ "input": false,
+ "desc": "desc",
+ "slot": "OutputSlot",
+ "default_value": ""
+ }
+ ]
+ },
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 0,
+ "answer": "",
+ "normal_answer_config": {
+ "merge_answer": true,
+ "answer": [
+ {
+ "type": 0,
+ "content": "我在哪"
+ },
+ {
+ "type": 1,
+ "content": {
+ "title": "我是h5",
+ "description": "我是Description",
+ "url": "我是Url",
+ "pic_url": "我是PicUrl",
+ "type": "h5"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveRequest.json
new file mode 100644
index 00000000..61fc06ee
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveRequest.json
@@ -0,0 +1,125 @@
+{
+ "intent_id": 9617433,
+ "skill_id": 1549251,
+ "slots": [
+ {
+ "name": "城市",
+ "dicts": [
+ "建筑",
+ "公路"
+ ],
+ "keep_ask": true,
+ "ask_content": [
+ "建筑1",
+ "公路1"
+ ]
+ }
+ ],
+ "pre": [
+ {
+ "skill": "音乐",
+ "intent": "点播"
+ }
+ ],
+ "next": [
+ {
+ "skill": "天气",
+ "intent": "询问"
+ }
+ ],
+ "keep_ask": true,
+ "keep_ask_num": 10,
+ "answer_config_type": 4,
+ "dynamic_ask_answer_config": {
+ "api": "_dynamic_list_selection_{}",
+ "question": "AskAnswerConfig Question",
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 3,
+ "answer": "",
+ "ask_answer_config": {
+ "api": "_bot_ask_{}",
+ "question": "AskAnswerConfig Question",
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 2,
+ "answer": "",
+ "ask_slot_answer_config": {
+ "api": "_bot_getinfo_{}",
+ "arguments": [
+ {
+ "name": "",
+ "slot": "Slot",
+ "ask_content": [
+ "111",
+ "222"
+ ]
+ }
+ ],
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 1,
+ "answer": "",
+ "api_answer_config": {
+ "api": "_http_service_{}",
+ "need_confirm": true,
+ "need_confirm_response": "城市好啊",
+ "http_method": "get",
+ "http_url": "HttpUrl111",
+ "arguments": {
+ "input": [
+ {
+ "name": "Input Name",
+ "input": true,
+ "desc": "Input desc",
+ "slot": "Input Slot",
+ "default_value": "defa",
+ "ask_content": [
+ "ask"
+ ]
+ }
+ ],
+ "output": [
+ {
+ "name": "Output Name",
+ "input": false,
+ "desc": "desc",
+ "slot": "Output Slot",
+ "default_value": ""
+ }
+ ]
+ },
+ "result": [
+ {
+ "code": "0",
+ "desc": "",
+ "answer_config_type": 0,
+ "answer": "",
+ "normal_answer_config": {
+ "merge_answer": true,
+ "answer": [
+ {
+ "content": "我在哪"
+ }
+ ]
+
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveResponse.json
new file mode 100644
index 00000000..d05d963e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Config/IntentConfigSaveResponse.json
@@ -0,0 +1,5 @@
+{
+ "code": 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/Intent/IntentDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentDeleteRequest.json
new file mode 100644
index 00000000..299271af
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentDeleteRequest.json
@@ -0,0 +1,3 @@
+{
+ "id_list": [ 1205882, 1205883, 1205884 ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentDeleteResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentDeleteResponse.json
new file mode 100644
index 00000000..a2217ea2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentDeleteResponse.json
@@ -0,0 +1,5 @@
+{
+ "code": 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/Intent/IntentGetDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentGetDetailRequest.json
new file mode 100644
index 00000000..a12b174e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentGetDetailRequest.json
@@ -0,0 +1,3 @@
+{
+ "id": 6326248
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentGetDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentGetDetailResponse.json
new file mode 100644
index 00000000..696e6bac
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentGetDetailResponse.json
@@ -0,0 +1,24 @@
+{
+ "code": 0,
+ "data": {
+ "id": 6326248,
+ "name": "温度bab1",
+ "questions": [
+ {
+ "counter_example": true,
+ "id": 92,
+ "question": "今天温度怎么样e",
+ "rank_level": 1,
+ "threshold": 0.9
+ }
+ ],
+ "rank_level": 1,
+ "skill_id": 1205882,
+ "switch": false,
+ "threshold": 0.9,
+ "frequency": 0,
+ "updated_time": 1588931008
+ },
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistRequest.json
new file mode 100644
index 00000000..142c0856
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistRequest.json
@@ -0,0 +1,4 @@
+{
+ "skill_id": 1548171,
+ "intent_name": "温度"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistResponse.json
new file mode 100644
index 00000000..f977ff57
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentNameExistResponse.json
@@ -0,0 +1,8 @@
+{
+ "code": 0,
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142",
+ "data": {
+ "exist": true
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveRequest.json
new file mode 100644
index 00000000..d65b1d4a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveRequest.json
@@ -0,0 +1,20 @@
+{
+ "intent_list": [
+ {
+ "intent_id": 0,
+ "skill_id": 1,
+ "name": "测试创建意图1",
+ "rank_level": 0.65,
+ "threshold": 0.7,
+ "switch": false
+ },
+ {
+ "intent_id": 0,
+ "skill_id": 1,
+ "name": "测试创建意图2",
+ "rank_level": 0.75,
+ "threshold": 0.7,
+ "switch": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveResponse.json
new file mode 100644
index 00000000..124e1773
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSaveResponse.json
@@ -0,0 +1,18 @@
+{
+ "code": 0,
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142",
+ "data": {
+ "count": 2,
+ "list": [
+ {
+ "intent_id": 45,
+ "intent_name": "测试创建意图1"
+ },
+ {
+ "intent_id": 20,
+ "intent_name": "测试创建意图2"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchRequest.json
new file mode 100644
index 00000000..eb20811b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchRequest.json
@@ -0,0 +1,5 @@
+{
+ "keyword": "测试",
+ "page": 1,
+ "size": 10
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchResponse.json
new file mode 100644
index 00000000..f95ab94e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSearchResponse.json
@@ -0,0 +1,28 @@
+{
+ "code": 0,
+ "data": {
+ "count": 3,
+ "list": [
+ {
+ "intent_id": 1516,
+ "intent_name": "笑什么?",
+ "skill_id": 7895,
+ "skill_name": "测试技能4"
+ },
+ {
+ "intent_id": 1517,
+ "intent_name": "测试意图333",
+ "skill_id": 7899,
+ "skill_name": "技能5"
+ },
+ {
+ "intent_id": 2,
+ "intent_name": "测试意图666",
+ "skill_id": 7899,
+ "skill_name": "技能5"
+ }
+ ]
+ },
+ "msg": "请求成功",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchRequest.json
new file mode 100644
index 00000000..a3cc4e18
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchRequest.json
@@ -0,0 +1,12 @@
+{
+ "switch_list": [
+ {
+ "id": 1205882,
+ "switch": true
+ },
+ {
+ "id": 1205883,
+ "switch": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchResponse.json
new file mode 100644
index 00000000..d05d963e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/IntentSwitchBatchResponse.json
@@ -0,0 +1,5 @@
+{
+ "code": 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/Intent/Question/IntentQuestionDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionDeleteRequest.json
new file mode 100644
index 00000000..9609b62b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionDeleteRequest.json
@@ -0,0 +1,3 @@
+{
+ "id_list": [ 1, 2, 3 ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionDeleteResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionDeleteResponse.json
new file mode 100644
index 00000000..a2217ea2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionDeleteResponse.json
@@ -0,0 +1,5 @@
+{
+ "code": 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/Intent/Question/IntentQuestionSaveRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionSaveRequest.json
new file mode 100644
index 00000000..192ae488
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionSaveRequest.json
@@ -0,0 +1,23 @@
+{
+ "mode": 0,
+ "skill_id": 16579,
+ "skill_name": "",
+ "intent_id": 1205882,
+ "intent_name": "",
+ "data": [
+ {
+ "id": 0,
+ "question": "天气",
+ "rank_level": 0.9,
+ "threshold": 0.8,
+ "counter_example": false
+ },
+ {
+ "id": 0,
+ "question": "温度",
+ "rank_level": 0.8,
+ "threshold": 0.8,
+ "counter_example": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionSaveResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionSaveResponse.json
new file mode 100644
index 00000000..a2217ea2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Intent/Question/IntentQuestionSaveResponse.json
@@ -0,0 +1,5 @@
+{
+ "code": 0,
+ "msg": "success",
+ "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142"
+}
\ No newline at end of file