From c5d9874248e43e497d1d803f6b6e9cc5f461a125 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 30 Sep 2021 16:33:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E6=96=B0=E5=A2=9E=E5=AE=A2?= =?UTF-8?q?=E6=9C=8D=E4=BC=9A=E8=AF=9D=E5=88=86=E9=85=8D=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...chatWorkClientExecuteCgibinKfExtensions.cs | 44 +++++++++++++++++++ .../CgibinKfServiceStateGetRequest.cs | 22 ++++++++++ .../CgibinKfServiceStateGetResponse.cs | 22 ++++++++++ .../CgibinKfServiceStateTransferRequest.cs | 36 +++++++++++++++ .../CgibinKfServiceStateTransferResponse.cs | 15 +++++++ .../CgibinKfServiceStateGetRequest.json | 4 ++ .../CgibinKfServiceStateGetResponse.json | 6 +++ .../CgibinKfServiceStateTransferRequest.json | 6 +++ .../CgibinKfServiceStateTransferResponse.json | 5 +++ 9 files changed, 160 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs index fc9d5750..5fea3084 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinKfExtensions.cs @@ -181,5 +181,49 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken); } #endregion + + #region ServiceState + /// + /// 异步调用 [POST] /cgi-bin/kf/service_state/get 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94669 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94698 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfServiceStateGetAsync(this WechatWorkClient client, Models.CgibinKfServiceStateGetRequest 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", "service_state", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/kf/service_state/trans 接口。 + /// REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94669 + /// REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94698 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinKfServiceStateTransferAsync(this WechatWorkClient client, Models.CgibinKfServiceStateTransferRequest 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", "service_state", "trans") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.cs new file mode 100644 index 00000000..c99b517b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/service_state/get 接口的请求。 + /// + public class CgibinKfServiceStateGetRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid")] + public string OpenKfId { get; set; } = string.Empty; + + /// + /// 获取或设置外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string ExternalUserId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.cs new file mode 100644 index 00000000..d5037796 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/service_state/get 接口的响应。 + /// + public class CgibinKfServiceStateGetResponse : WechatWorkResponse + { + /// + /// 获取或设置会话状态。 + /// + [Newtonsoft.Json.JsonProperty("service_state")] + [System.Text.Json.Serialization.JsonPropertyName("service_state")] + public int ServiceState { get; set; } + + /// + /// 获取或设置接待人员的 UserId。 + /// + [Newtonsoft.Json.JsonProperty("servicer_userid")] + [System.Text.Json.Serialization.JsonPropertyName("servicer_userid")] + public string? ServicerUserId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.cs new file mode 100644 index 00000000..4c2b03a1 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/service_state/trans 接口的请求。 + /// + public class CgibinKfServiceStateTransferRequest : WechatWorkRequest + { + /// + /// 获取或设置客服账号 ID。 + /// + [Newtonsoft.Json.JsonProperty("open_kfid")] + [System.Text.Json.Serialization.JsonPropertyName("open_kfid")] + public string OpenKfId { get; set; } = string.Empty; + + /// + /// 获取或设置外部联系人账号。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string ExternalUserId { get; set; } = string.Empty; + + /// + /// 获取或设置会话状态。 + /// + [Newtonsoft.Json.JsonProperty("service_state")] + [System.Text.Json.Serialization.JsonPropertyName("service_state")] + public int ServiceState { get; set; } + + /// + /// 获取或设置接待人员的 UserId。 + /// + [Newtonsoft.Json.JsonProperty("servicer_userid")] + [System.Text.Json.Serialization.JsonPropertyName("servicer_userid")] + public string? ServicerUserId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.cs new file mode 100644 index 00000000..d1aa9b63 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/kf/service_state/trans 接口的响应。 + /// + public class CgibinKfServiceStateTransferResponse : WechatWorkResponse + { + /// + /// 获取或设置用于发送响应事件消息的 Code。 + /// + [Newtonsoft.Json.JsonProperty("msg_code")] + [System.Text.Json.Serialization.JsonPropertyName("msg_code")] + public string MessageCode { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.json new file mode 100644 index 00000000..29d42442 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetRequest.json @@ -0,0 +1,4 @@ +{ + "open_kfid": "wkxxxxxxxxxxxxxxxxxx", + "external_userid": "wmxxxxxxxxxxxxxxxxxx" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.json new file mode 100644 index 00000000..3c473521 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateGetResponse.json @@ -0,0 +1,6 @@ +{ + "errcode": 0, + "errmsg": "ok", + "service_state": 3, + "servicer_userid": "zhangsan" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.json new file mode 100644 index 00000000..8adfa379 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferRequest.json @@ -0,0 +1,6 @@ +{ + "open_kfid": "wkxxxxxxxxxxxxxxxxxx", + "external_userid": "wmxxxxxxxxxxxxxxxxxx", + "service_state": 3, + "servicer_userid": "zhangsan" +} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.json new file mode 100644 index 00000000..0fba444f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinKf/ServiceState/CgibinKfServiceStateTransferResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "msg_code": "MSG_CODE" +} \ No newline at end of file