From 3e63bdd24793a14aafdccaf1b8cfa3fb71c827da Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Fri, 8 Oct 2021 15:42:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(openai):=20=E6=96=B0=E5=A2=9E=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...echatOpenAIClientExecuteSkillExtensions.cs | 90 ++++++++++++ .../Models/Skill/SkillDeleteRequest.cs | 18 +++ .../Models/Skill/SkillDeleteResponse.cs | 12 ++ .../Models/Skill/SkillGetDetailRequest.cs | 41 ++++++ .../Models/Skill/SkillGetDetailResponse.cs | 120 ++++++++++++++++ .../Models/Skill/SkillGetListRequest.cs | 41 ++++++ .../Models/Skill/SkillGetListResponse.cs | 135 ++++++++++++++++++ .../Models/Skill/SkillSaveRequest.cs | 95 ++++++++++++ .../Models/Skill/SkillSaveResponse.cs | 24 ++++ .../UnmatchedClassDetailRequest.cs | 2 +- .../UnmatchedClassListResponse.cs | 2 +- .../Skill/SkillDeleteRequest.json | 3 + .../Skill/SkillDeleteResponse.json | 5 + .../Skill/SkillGetDetailRequest.json | 6 + .../Skill/SkillGetDetailResponse.json | 38 +++++ .../Skill/SkillGetListRequest.json | 4 + .../Skill/SkillGetListResponse.json | 26 ++++ .../ModelSamples/Skill/SkillSaveRequest.json | 22 +++ .../ModelSamples/Skill/SkillSaveResponse.json | 8 ++ 19 files changed, 690 insertions(+), 2 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteSkillExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteSkillExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteSkillExtensions.cs new file mode 100644 index 00000000..23ed360b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/WechatOpenAIClientExecuteSkillExtensions.cs @@ -0,0 +1,90 @@ +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 WechatOpenAIClientExecuteSkillExtensions + { + /// + /// 异步调用 [POST] /v2/skill/save 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/skill/save.html + /// + /// + /// + /// + /// + public static async Task ExecuteSkillSaveAsync(this WechatOpenAIClient client, Models.SkillSaveRequest 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", "skill", "save"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /v2/skill/get_list 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/skill/get_list.html + /// + /// + /// + /// + /// + public static async Task ExecuteSkillGetListAsync(this WechatOpenAIClient client, Models.SkillGetListRequest 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", "skill", "get_list"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /v2/skill/get_detail 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/skill/get_detail.html + /// + /// + /// + /// + /// + public static async Task ExecuteSkillGetDetailAsync(this WechatOpenAIClient client, Models.SkillGetDetailRequest 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", "skill", "get_detail"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /v2/skill/delete 接口。 + /// REF: https://developers.weixin.qq.com/doc/aispeech/openapi/api/v2/skill/delete.html + /// + /// + /// + /// + /// + public static async Task ExecuteSkillDeleteAsync(this WechatOpenAIClient client, Models.SkillDeleteRequest 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", "skill", "delete"); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteRequest.cs new file mode 100644 index 00000000..1d39830a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteRequest.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/delete 接口的请求。 + /// + public class SkillDeleteRequest : WechatOpenAIRequest + { + /// + /// 获取或设置技能 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public IList SkillIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteResponse.cs new file mode 100644 index 00000000..5b5649e5 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillDeleteResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/delete 接口的响应。 + /// + public class SkillDeleteResponse : WechatOpenAIResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailRequest.cs new file mode 100644 index 00000000..3e32533f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailRequest.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/get_detail 接口的请求。 + /// + public class SkillGetDetailRequest : WechatOpenAIRequest + { + /// + /// 获取或设置关键字。 + /// + [Newtonsoft.Json.JsonProperty("keyword")] + [System.Text.Json.Serialization.JsonPropertyName("keyword")] + public string? Keyword { get; set; } + + /// + /// 获取或设置技能 ID。 + /// + [Newtonsoft.Json.JsonProperty("skill_id")] + [System.Text.Json.Serialization.JsonPropertyName("skill_id")] + public long SkillId { 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/Skill/SkillGetDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailResponse.cs new file mode 100644 index 00000000..02d0b66f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetDetailResponse.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/get_detail 接口的响应。 + /// + public class SkillGetDetailResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Skill : SkillGetListResponse.Types.Data.Types.Skill + { + /// + /// 获取或设置技能开关。 + /// + [Newtonsoft.Json.JsonProperty("switch")] + [System.Text.Json.Serialization.JsonPropertyName("switch")] + public bool Switch { get; set; } + } + + public class IntentItem + { + /// + /// 获取或设置意图 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public long IntentId { get; set; } + + /// + /// 获取或设置意图名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置技能 ID。 + /// + [Newtonsoft.Json.JsonProperty("skill_id")] + [System.Text.Json.Serialization.JsonPropertyName("skill_id")] + public long SkillId { get; set; } + + /// + /// 获取或设置优先级。 + /// + [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("created_time")] + [System.Text.Json.Serialization.JsonPropertyName("created_time")] + public long CreateTimestamp { get; set; } + + /// + /// 获取或设置修改时间戳。 + /// + [Newtonsoft.Json.JsonProperty("updated_time")] + [System.Text.Json.Serialization.JsonPropertyName("updated_time")] + public long UpdateTimestamp { get; set; } + } + + public class IntentList + { + /// + /// 获取或设置意图列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public IntentItem[] Items { get; set; } = default!; + + /// + /// 获取或设置意图数量。 + /// + [Newtonsoft.Json.JsonProperty("count")] + [System.Text.Json.Serialization.JsonPropertyName("count")] + public int Count { get; set; } + } + } + + /// + /// 获取或设置技能信息。 + /// + [Newtonsoft.Json.JsonProperty("skill")] + [System.Text.Json.Serialization.JsonPropertyName("skill")] + public Types.Skill Skill { get; set; } = default!; + + /// + /// 获取或设置意图列表。 + /// + [Newtonsoft.Json.JsonProperty("intents")] + [System.Text.Json.Serialization.JsonPropertyName("intents")] + public Types.IntentList IntentList { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListRequest.cs new file mode 100644 index 00000000..8f83b8f2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListRequest.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/get_list 接口的请求。 + /// + public class SkillGetListRequest : WechatOpenAIRequest + { + /// + /// 获取或设置关键字。 + /// + [Newtonsoft.Json.JsonProperty("keyword")] + [System.Text.Json.Serialization.JsonPropertyName("keyword")] + public string? Keyword { get; set; } + + /// + /// 获取或设置技能类型。 + /// + [Newtonsoft.Json.JsonProperty("skill_type")] + [System.Text.Json.Serialization.JsonPropertyName("skill_type")] + public int? SkillType { 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/Skill/SkillGetListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListResponse.cs new file mode 100644 index 00000000..f26e21ee --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillGetListResponse.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/get_list 接口的响应。 + /// + public class SkillGetListResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + public static class Types + { + public class Skill + { + /// + /// 获取或设置技能 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("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("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int SkillType { get; set; } + + /// + /// 获取或设置意图数量。 + /// + [Newtonsoft.Json.JsonProperty("intent_count")] + [System.Text.Json.Serialization.JsonPropertyName("intent_count")] + public int IntentCount { get; set; } + + /// + /// 获取或设置未配置回答的意图数量。 + /// + [Newtonsoft.Json.JsonProperty("no_answer_intent_count")] + [System.Text.Json.Serialization.JsonPropertyName("no_answer_intent_count")] + public int NoAnswerIntentCount { get; set; } + + /// + /// 获取或设置场景存活的最大轮数。 + /// + [Newtonsoft.Json.JsonProperty("max_round")] + [System.Text.Json.Serialization.JsonPropertyName("max_round")] + public int MaxRound { get; set; } + + /// + /// 获取或设置唤醒开关。 + /// + [Newtonsoft.Json.JsonProperty("wake_open")] + [System.Text.Json.Serialization.JsonPropertyName("wake_open")] + public bool WakeSwitch { get; set; } + + /// + /// 获取或设置唤醒热词。 + /// + [Newtonsoft.Json.JsonProperty("awaken_word")] + [System.Text.Json.Serialization.JsonPropertyName("awaken_word")] + public string? AwakeWord { get; set; } + + /// + /// 获取或设置唤醒的回复语句列表。 + /// + [Newtonsoft.Json.JsonProperty("awaken_answer")] + [System.Text.Json.Serialization.JsonPropertyName("awaken_answer")] + public string[]? AwakeAnswerList { get; set; } + + /// + /// 获取或设置退出热词。 + /// + [Newtonsoft.Json.JsonProperty("exist_word")] + [System.Text.Json.Serialization.JsonPropertyName("exist_word")] + public string? ExistWord { get; set; } + + /// + /// 获取或设置退出的回复语句列表。 + /// + [Newtonsoft.Json.JsonProperty("exist_answer")] + [System.Text.Json.Serialization.JsonPropertyName("exist_answer")] + public string[]? ExitAnswerList { get; set; } + + /// + /// 获取或设置取消意图操作。 + /// + [Newtonsoft.Json.JsonProperty("cancel_intent_operation")] + [System.Text.Json.Serialization.JsonPropertyName("cancel_intent_operation")] + public bool CancelIntentOperation { get; set; } + + /// + /// 获取或设置取消操作的回复列表。 + /// + [Newtonsoft.Json.JsonProperty("cancel_answer")] + [System.Text.Json.Serialization.JsonPropertyName("cancel_answer")] + public string[]? CancelAnswerList { get; set; } + + /// + /// 获取或设置没有可取消意图时的回复列表。 + /// + [Newtonsoft.Json.JsonProperty("no_cancel_answer")] + [System.Text.Json.Serialization.JsonPropertyName("no_cancel_answer")] + public string[]? NoCancelAnswerList { get; set; } + } + } + + /// + /// 获取或设置技能列表。 + /// + [Newtonsoft.Json.JsonProperty("list")] + [System.Text.Json.Serialization.JsonPropertyName("list")] + public Types.Skill[] SkillList { 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/Skill/SkillSaveRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveRequest.cs new file mode 100644 index 00000000..5fc8e884 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveRequest.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/save 接口的请求。 + /// + public class SkillSaveRequest : WechatOpenAIRequest + { + /// + /// 获取或设置技能 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("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("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int? SkillType { get; set; } + + /// + /// 获取或设置场景存活的最大轮数。 + /// + [Newtonsoft.Json.JsonProperty("max_round")] + [System.Text.Json.Serialization.JsonPropertyName("max_round")] + public int? MaxRound { get; set; } + + /// + /// 获取或设置唤醒开关。 + /// + [Newtonsoft.Json.JsonProperty("wake_open")] + [System.Text.Json.Serialization.JsonPropertyName("wake_open")] + public bool? WakeSwitch { get; set; } + + /// + /// 获取或设置唤醒热词。 + /// + [Newtonsoft.Json.JsonProperty("awaken_word")] + [System.Text.Json.Serialization.JsonPropertyName("awaken_word")] + public string? AwakeWord { get; set; } + + /// + /// 获取或设置唤醒的回复语句列表。 + /// + [Newtonsoft.Json.JsonProperty("awaken_answer")] + [System.Text.Json.Serialization.JsonPropertyName("awaken_answer")] + public IList? AwakeAnswerList { get; set; } + + /// + /// 获取或设置退出热词。 + /// + [Newtonsoft.Json.JsonProperty("exist_word")] + [System.Text.Json.Serialization.JsonPropertyName("exist_word")] + public string? ExistWord { get; set; } + + /// + /// 获取或设置退出的回复语句列表。 + /// + [Newtonsoft.Json.JsonProperty("exist_answer")] + [System.Text.Json.Serialization.JsonPropertyName("exist_answer")] + public IList? ExitAnswerList { get; set; } + + /// + /// 获取或设置取消意图操作。 + /// + [Newtonsoft.Json.JsonProperty("cancel_intent_operation")] + [System.Text.Json.Serialization.JsonPropertyName("cancel_intent_operation")] + public bool? CancelIntentOperation { get; set; } + + /// + /// 获取或设置取消操作的回复列表。 + /// + [Newtonsoft.Json.JsonProperty("cancel_answer")] + [System.Text.Json.Serialization.JsonPropertyName("cancel_answer")] + public IList? CancelAnswerList { get; set; } + + /// + /// 获取或设置没有可取消意图时的回复列表。 + /// + [Newtonsoft.Json.JsonProperty("no_cancel_answer")] + [System.Text.Json.Serialization.JsonPropertyName("no_cancel_answer")] + public IList? NoCancelAnswerList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs new file mode 100644 index 00000000..2f2f5804 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Skill/SkillSaveResponse.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models +{ + /// + /// 表示 [POST] /v2/skill/save 接口的响应。 + /// + public class SkillSaveResponse : WechatOpenAIResponse + { + public static class Types + { + public class Data + { + /// + /// 获取或设置技能 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public long SkillId { get; set; } = default!; + } + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs index d328edf0..d6028769 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassDetailRequest.cs @@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models /// [Newtonsoft.Json.JsonProperty("class_id")] [System.Text.Json.Serialization.JsonPropertyName("class_id")] - public int ClassId { get; set; } + public long ClassId { get; set; } /// /// 获取或设置排序方式。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs index 36864890..f5b8ca71 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/UnmatchedClass/UnmatchedClassListResponse.cs @@ -21,7 +21,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models /// [Newtonsoft.Json.JsonProperty("id")] [System.Text.Json.Serialization.JsonPropertyName("id")] - public int ClassId { get; set; } + public long ClassId { get; set; } /// /// 获取或设置话术名称。 diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteRequest.json new file mode 100644 index 00000000..46917863 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteRequest.json @@ -0,0 +1,3 @@ +{ + "id": [ 1205880 ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteResponse.json new file mode 100644 index 00000000..d05d963e --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillDeleteResponse.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/Skill/SkillGetDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailRequest.json new file mode 100644 index 00000000..e70c79b9 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailRequest.json @@ -0,0 +1,6 @@ +{ + "skill_id": 1243671, + "keyword": "", + "page": 1, + "size": 1 +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailResponse.json new file mode 100644 index 00000000..c2cabd5d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetDetailResponse.json @@ -0,0 +1,38 @@ +{ + "code": 0, + "data": { + "intents": { + "count": 4559, + "list": [ + { + "created_time": 1604308818, + "id": 7541523, + "name": "什么是正教?", + "rank_level": 0.8, + "skill_id": 1243671, + "switch": true, + "threshold": 0.8, + "updated_time": 1604309309 + } + ] + }, + "skill": { + "awaken_answer": [], + "awaken_word": "", + "cancel_answer": [], + "cancel_intent_operation": false, + "exist_answer": [], + "exist_word": "", + "id": 1243671, + "intent_count": 0, + "max_round": 10, + "name": "知识图谱", + "no_cancel_answer": [], + "switch": true, + "type": 0, + "wake_open": false + } + }, + "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/Skill/SkillGetListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListRequest.json new file mode 100644 index 00000000..b97a2661 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListRequest.json @@ -0,0 +1,4 @@ +{ + "skill_type": 0, + "keyword": "天气" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListResponse.json new file mode 100644 index 00000000..a70d6cc5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillGetListResponse.json @@ -0,0 +1,26 @@ +{ + "code": 0, + "data": { + "count": 2, + "list": [ + { + "id": 1205880, + "intent_count": 0, + "no_answer_intent_count": 0, + "type": 1, + "name": "天气询问", + "max_round": 10, + "wake_open": true, + "awaken_word": "你好", + "awaken_answer": [ "有什么可以帮忙的吗" ], + "exist_word": "再见", + "exist_answer": [ "祝您好运" ], + "cancel_intent_operation": true, + "cancel_answer": [ "已取消" ], + "no_cancel_answer": [ "没有可以取消的内容" ] + } + ] + }, + "msg": "请求成功", + "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveRequest.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveRequest.json new file mode 100644 index 00000000..f979230b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveRequest.json @@ -0,0 +1,22 @@ +{ + "id": 1205880, + "type": 1, + "name": "天气询问", + "max_round": 10, + "wake_open": true, + "awaken_word": "你好", + "awaken_answer": [ + "有什么可以帮忙的吗" + ], + "exist_word": "再见", + "exist_answer": [ + "祝您好运" + ], + "cancel_intent_operation": true, + "cancel_answer": [ + "已取消" + ], + "no_cancel_answer": [ + "没有可以取消的内容" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveResponse.json b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveResponse.json new file mode 100644 index 00000000..dfe7cb81 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/ModelSamples/Skill/SkillSaveResponse.json @@ -0,0 +1,8 @@ +{ + "code": 0, + "msg": "请求成功", + "request_id": "255i0ug8-l9q4-3801-44ft-w7csjn9e5142", + "data": { + "id": 1205882 + } +} \ No newline at end of file