diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalContactExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalContactExtensions.cs index 5238875d..e2b55189 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalContactExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinExternalContactExtensions.cs @@ -1540,7 +1540,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work } /// - /// 异步调用 [POST] /cgi-bin/externalcontact/get_intercept_rule_list 接口。 + /// 异步调用 [GET] /cgi-bin/externalcontact/get_intercept_rule_list 接口。 /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/95097 /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/95130 /// @@ -1554,10 +1554,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (request is null) throw new ArgumentNullException(nameof(request)); IFlurlRequest flurlReq = client - .CreateRequest(request, HttpMethod.Post, "cgi-bin", "externalcontact", "get_intercept_rule_list") + .CreateRequest(request, HttpMethod.Get, "cgi-bin", "externalcontact", "get_intercept_rule_list") .SetQueryParam("access_token", request.AccessToken); - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); } /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs index 55adb9fe..fc9d5750 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs @@ -32,7 +32,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work } /// - /// 异步调用 [POST] /cgi-bin/kf/account/list 接口。 + /// 异步调用 [GET] /cgi-bin/kf/account/list 接口。 /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94661 /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94691 /// @@ -46,7 +46,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work if (request is null) throw new ArgumentNullException(nameof(request)); IFlurlRequest flurlReq = client - .CreateRequest(request, HttpMethod.Post, "cgi-bin", "kf", "account", "list") + .CreateRequest(request, HttpMethod.Get, "cgi-bin", "kf", "account", "list") .SetQueryParam("access_token", request.AccessToken); return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); @@ -115,5 +115,71 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } #endregion + + #region Servicer + /// + /// 异步调用 [POST] /cgi-bin/kf/servicer/add 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94646 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94695 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfServicerAddAsync(this WechatWorkClient client, Models.CgibinKfServicerAddRequest 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, "cgi-bin", "kf", "servicer", "add") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/kf/servicer/del 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94647 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94696 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfServicerDeleteAsync(this WechatWorkClient client, Models.CgibinKfServicerDeleteRequest 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, "cgi-bin", "kf", "servicer", "del") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [GET] /cgi-bin/kf/servicer/list 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94645 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94697 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfServicerListAsync(this WechatWorkClient client, Models.CgibinKfServicerListRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateRequest(request, HttpMethod.Get, "cgi-bin", "kf", "servicer", "list") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("open_kfid", request.OpenKfId); + + return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListRequest.cs index adab1afc..9f23191e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListRequest.cs @@ -1,7 +1,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// - /// 表示 [POST] /cgi-bin/externalcontact/get_intercept_rule_list 接口的请求。 + /// 表示 [GET] /cgi-bin/externalcontact/get_intercept_rule_list 接口的请求。 /// public class CgibinExternalContactGetInterceptRuleListRequest : WechatWorkRequest { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListResponse.cs index 3b7f28ef..9b40a039 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExternalContact/InterceptRule/CgibinExternalContactGetInterceptRuleListResponse.cs @@ -1,7 +1,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// - /// 表示 [POST] /cgi-bin/externalcontact/get_intercept_rule_list 接口的响应。 + /// 表示 [GET] /cgi-bin/externalcontact/get_intercept_rule_list 接口的响应。 /// public class CgibinExternalContactGetInterceptRuleListResponse : WechatWorkResponse { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListRequest.cs index d6210247..bffa1076 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListRequest.cs @@ -1,7 +1,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// - /// 表示 [POST] /cgi-bin/kf/account/list 接口的请求。 + /// 表示 [GET] /cgi-bin/kf/account/list 接口的请求。 /// public class CgibinKfAccountListRequest : WechatWorkRequest { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListResponse.cs index 33599f8d..1b125c96 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Account/CgibinKfAccountListResponse.cs @@ -1,7 +1,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// - /// 表示 [POST] /cgi-bin/kf/account/list 接口的响应。 + /// 表示 [GET] /cgi-bin/kf/account/list 接口的响应。 /// public class CgibinKfAccountListResponse : WechatWorkResponse { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddRequest.cs new file mode 100644 index 00000000..36341f22 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddRequest.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/servicer/add 接口的请求。 + /// + public class CgibinKfServicerAddRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid")] + public string OpenKfId { get; set; } = string.Empty; + + /// + /// 获取或设置接待人员的 UserId 列表。 + /// + [Newtonsoft.Json.JsonProperty("userid_list")] + [System.Text.Json.Serialization.JsonPropertyName("userid_list")] + public IList UserIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddResponse.cs new file mode 100644 index 00000000..bcb1a456 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerAddResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/servicer/add 接口的响应。 + /// + public class CgibinKfServicerAddResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置接待人员的 UserId。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置错误描述。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public string ErrorMessage { get; set; } = default!; + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("result_list")] + [System.Text.Json.Serialization.JsonPropertyName("result_list")] + public Types.Result[] ResultList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.cs new file mode 100644 index 00000000..2a067605 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/servicer/del 接口的请求。 + /// + public class CgibinKfServicerDeleteRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid")] + public string OpenKfId { get; set; } = string.Empty; + + /// + /// 获取或设置接待人员的 UserId 列表。 + /// + [Newtonsoft.Json.JsonProperty("userid_list")] + [System.Text.Json.Serialization.JsonPropertyName("userid_list")] + public IList UserIdList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.cs new file mode 100644 index 00000000..df030e81 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/servicer/del 接口的响应。 + /// + public class CgibinKfServicerDeleteResponse : WechatWorkResponse + { + public static class Types + { + public class Result : CgibinKfServicerAddResponse.Types.Result + { + } + } + + /// + /// 获取或设置结果列表。 + /// + [Newtonsoft.Json.JsonProperty("result_list")] + [System.Text.Json.Serialization.JsonPropertyName("result_list")] + public Types.Result[] ResultList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListRequest.cs new file mode 100644 index 00000000..735d6de1 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/kf/servicer/list 接口的请求。 + /// + public class CgibinKfServicerListRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string OpenKfId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListResponse.cs new file mode 100644 index 00000000..8e5727a2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/Servicer/CgibinKfServicerListResponse.cs @@ -0,0 +1,35 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [GET] /cgi-bin/kf/servicer/list 接口的响应。 + /// + public class CgibinKfServicerListResponse : WechatWorkResponse + { + public static class Types + { + public class Servicer + { + /// + /// 获取或设置接待人员的 UserId。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string UserId { get; set; } = default!; + + /// + /// 获取或设置接待状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + } + } + + /// + /// 获取或设置接待人员列表。 + /// + [Newtonsoft.Json.JsonProperty("servicer_list")] + [System.Text.Json.Serialization.JsonPropertyName("servicer_list")] + public Types.Servicer[] ServicerList { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddRequest.json new file mode 100644 index 00000000..1f062804 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddRequest.json @@ -0,0 +1,7 @@ +{ + "open_kfid": "kfxxxxxxxxxxxxxx", + "userid_list": [ + "zhangsan", + "lisi" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddResponse.json new file mode 100644 index 00000000..1f11c67f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerAddResponse.json @@ -0,0 +1,16 @@ +{ + "errcode": 0, + "errmsg": "ok", + "result_list": [ + { + "userid": "zhangsan", + "errcode": 0, + "errmsg": "success" + }, + { + "userid": "lisi", + "errcode": 0, + "errmsg": "ignored" + } + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.json new file mode 100644 index 00000000..1f062804 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteRequest.json @@ -0,0 +1,7 @@ +{ + "open_kfid": "kfxxxxxxxxxxxxxx", + "userid_list": [ + "zhangsan", + "lisi" + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.json new file mode 100644 index 00000000..1f11c67f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerDeleteResponse.json @@ -0,0 +1,16 @@ +{ + "errcode": 0, + "errmsg": "ok", + "result_list": [ + { + "userid": "zhangsan", + "errcode": 0, + "errmsg": "success" + }, + { + "userid": "lisi", + "errcode": 0, + "errmsg": "ignored" + } + ] +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListResponse.json new file mode 100644 index 00000000..56df40b4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/Servicer/CgibinKfServicerListResponse.json @@ -0,0 +1,14 @@ +{ + "errcode": 0, + "errmsg": "ok", + "servicer_list": [ + { + "userid": "zhangsan", + "status": 0 + }, + { + "userid": "lisi", + "status": 1 + } + ] +} \ No newline at end of file