feat(work): 新增客服账号管理相关接口

This commit is contained in:
Fu Diwei 2021-09-30 16:07:25 +08:00
parent 2869492948
commit 36f32e7263
21 changed files with 352 additions and 0 deletions

View File

@ -0,0 +1,119 @@
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Flurl;
using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.Work
{
public static class WechatWorkClientExecuteCgibinKfExtensions
{
#region Account
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/account/add 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94662 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94688 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfAccountAddResponse> ExecuteCgibinKfAccountAddAsync(this WechatWorkClient client, Models.CgibinKfAccountAddRequest 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", "account", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfAccountAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/account/list 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94661 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94691 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfAccountListResponse> ExecuteCgibinKfAccountListAsync(this WechatWorkClient client, Models.CgibinKfAccountListRequest 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", "account", "list")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfAccountListResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/account/update 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94664 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94690 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfAccountUpdateResponse> ExecuteCgibinKfAccountUpdateAsync(this WechatWorkClient client, Models.CgibinKfAccountUpdateRequest 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", "account", "update")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfAccountUpdateResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/account/del 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94663 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94689 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfAccountDeleteResponse> ExecuteCgibinKfAccountDeleteAsync(this WechatWorkClient client, Models.CgibinKfAccountDeleteRequest 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", "account", "del")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfAccountDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/add_contact_way 接口。</para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90000/90135/94665 </para>
/// <para>REF: https://open.work.weixin.qq.com/api/doc/90001/90143/94692 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfAddContactWayResponse> ExecuteCgibinKfAddContactWayAsync(this WechatWorkClient client, Models.CgibinKfAddContactWayRequest 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", "add_contact_way")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfAddContactWayResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/add 接口的请求。</para>
/// </summary>
public class CgibinKfAccountAddRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 获取或设置头像的 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("media_id")]
[System.Text.Json.Serialization.JsonPropertyName("media_id")]
public string AvatarMediaId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/add 接口的响应。</para>
/// </summary>
public class CgibinKfAccountAddResponse : WechatWorkResponse
{
/// <summary>
/// 获取或设置客服账号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string OpenKfId { get; set; } = default!;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/del 接口的请求。</para>
/// </summary>
public class CgibinKfAccountDeleteRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服账号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string OpenKfId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/del 接口的响应。</para>
/// </summary>
public class CgibinKfAccountDeleteResponse : WechatWorkResponse
{
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/list 接口的请求。</para>
/// </summary>
public class CgibinKfAccountListRequest : WechatWorkRequest
{
}
}

View File

@ -0,0 +1,42 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/list 接口的响应。</para>
/// </summary>
public class CgibinKfAccountListResponse : WechatWorkResponse
{
public static class Types
{
public class KfAccount
{
/// <summary>
/// 获取或设置客服账号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string OpenKfId { get; set; } = default!;
/// <summary>
/// 获取或设置客服名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = default!;
/// <summary>
/// 获取或设置头像 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("avatar")]
[System.Text.Json.Serialization.JsonPropertyName("avatar")]
public string AvatarUrl { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置客服账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("account_list")]
[System.Text.Json.Serialization.JsonPropertyName("account_list")]
public Types.KfAccount[] KfAccountList { get; set; } = default!;
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/update 接口的请求。</para>
/// </summary>
public class CgibinKfAccountUpdateRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服账号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string OpenKfId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置客服名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string? Name { get; set; }
/// <summary>
/// 获取或设置头像的 MediaId。
/// </summary>
[Newtonsoft.Json.JsonProperty("media_id")]
[System.Text.Json.Serialization.JsonPropertyName("media_id")]
public string? AvatarMediaId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/account/update 接口的响应。</para>
/// </summary>
public class CgibinKfAccountUpdateResponse : WechatWorkResponse
{
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/add_contact_way 接口的请求。</para>
/// </summary>
public class CgibinKfAddContactWayRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服账号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string OpenKfId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置场景值。
/// </summary>
[Newtonsoft.Json.JsonProperty("scene")]
[System.Text.Json.Serialization.JsonPropertyName("scene")]
public string? Scene { get; set; }
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/add_contact_way 接口的响应。</para>
/// </summary>
public class CgibinKfAddContactWayResponse : WechatWorkResponse
{
/// <summary>
/// 获取或设置客服链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("url")]
[System.Text.Json.Serialization.JsonPropertyName("url")]
public string OpenKfId { get; set; } = default!;
}
}

View File

@ -0,0 +1,4 @@
{
"name": "新建的客服帐号",
"media_id": "294DpAog3YA5b9rTK4PjjfRfYLO0L5qpDHAJIzhhQ2jAEWjb9i661Q4lk8oFnPtmj"
}

View File

@ -0,0 +1,5 @@
{
"errcode": 0,
"errmsg": "ok",
"open_kfid": "wkAJ2GCAAAZSfhHCt7IFSvLKtMPxyJTw"
}

View File

@ -0,0 +1,3 @@
{
"open_kfid": "wkAJ2GCAAAZSfhHCt7IFSvLKtMPxyJTw"
}

View File

@ -0,0 +1,4 @@
{
"errcode": 0,
"errmsg": "ok"
}

View File

@ -0,0 +1,11 @@
{
"errcode": 0,
"errmsg": "ok",
"account_list": [
{
"open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q",
"name": "咨询客服",
"avatar": "https://wework.qpic.cn/wwhead/duc2TvpEgSSjibPZlNR6chpx9W3dtd9Ogp8XEmSNKGa6uufMWn2239HUPuwIFoYYZ7Ph580FPvo8/0"
}
]
}

View File

@ -0,0 +1,5 @@
{
"open_kfid": "wkAJ2GCAAAZSfhHCt7IFSvLKtMPxyJTw",
"name": "修改客服名",
"media_id": "294DpAog3YA5b9rTK4PjjfRfYLO0L5qpDHAJIzhhQ2jAEWjb9i661Q4lk8oFnPtmj"
}

View File

@ -0,0 +1,4 @@
{
"errcode": 0,
"errmsg": "ok"
}

View File

@ -0,0 +1,4 @@
{
"open_kfid": "OPEN_KFID",
"scene": "12345"
}

View File

@ -0,0 +1,5 @@
{
"errcode": 0,
"errmsg": "ok",
"url": "https://work.weixin.qq.com/kf/kfcbf8f8d07ac7215f?enc_scene=ENCGFSDF567DF"
}