feat(work): 新增微信客服统计管理相关接口

This commit is contained in:
Fu Diwei 2022-03-14 15:47:20 +08:00
parent 04f67c1c8a
commit dcead8cad3
9 changed files with 428 additions and 20 deletions

View File

@ -310,26 +310,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestWithJsonAsync<Models.CgibinKfCustomerBatchGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /cgi-bin/kf/get_corp_qualification 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/95153 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfGetCorpQualificationResponse> ExecuteCgibinKfGetCorpQualificationAsync(this WechatWorkClient client, Models.CgibinKfGetCorpQualificationRequest 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", "get_corp_qualification")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfGetCorpQualificationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
/// <summary>
@ -394,5 +374,65 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestWithJsonAsync<Models.CgibinKfSyncMessageResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /cgi-bin/kf/get_corp_qualification 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/95153 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfGetCorpQualificationResponse> ExecuteCgibinKfGetCorpQualificationAsync(this WechatWorkClient client, Models.CgibinKfGetCorpQualificationRequest 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", "get_corp_qualification")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfGetCorpQualificationResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/get_corp_statistic 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/95489 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfGetCorpStatisticResponse> ExecuteCgibinKfGetCorpStatisticAsync(this WechatWorkClient client, Models.CgibinKfGetCorpStatisticRequest 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", "get_corp_statistic")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfGetCorpStatisticResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/kf/get_servicer_statistic 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/95490 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinKfGetServicerStatisticResponse> ExecuteCgibinKfGetServicerStatisticAsync(this WechatWorkClient client, Models.CgibinKfGetServicerStatisticRequest 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", "get_servicer_statistic")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinKfGetServicerStatisticResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/get_corp_statistic 接口的请求。</para>
/// </summary>
public class CgibinKfGetCorpStatisticRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服帐号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string? OpenKfId { get; set; }
/// <summary>
/// 获取或设置起始日期的时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("start_time")]
[System.Text.Json.Serialization.JsonPropertyName("start_time")]
public long? StartTimestamp { get; set; }
/// <summary>
/// 获取或设置结束日期的时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("end_time")]
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
public long? EndTimestamp { get; set; }
}
}

View File

@ -0,0 +1,90 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/get_corp_statistic 接口的响应。</para>
/// </summary>
public class CgibinKfGetCorpStatisticResponse : WechatWorkResponse
{
public static class Types
{
public class Statistic
{
public static class Types
{
public class Data
{
/// <summary>
/// 获取或设置咨询会话数。
/// </summary>
[Newtonsoft.Json.JsonProperty("session_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("session_cnt")]
public int SessionCount { get; set; }
/// <summary>
/// 获取或设置咨询客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("customer_cnt")]
public int CustomerCount { get; set; }
/// <summary>
/// 获取或设置咨询消息数。
/// </summary>
[Newtonsoft.Json.JsonProperty("customer_msg_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("customer_msg_cnt")]
public int CustomerMessageCount { get; set; }
/// <summary>
/// 获取或设置升级服务客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_customer_cnt")]
public int UpgradeServiceCustomerCount { get; set; }
/// <summary>
/// 获取或设置智能回复会话数。
/// </summary>
[Newtonsoft.Json.JsonProperty("ai_session_reply_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("ai_session_reply_cnt")]
public int AISessionReplyCount { get; set; }
/// <summary>
/// 获取或设置智能回复转人工率。
/// </summary>
[Newtonsoft.Json.JsonProperty("ai_transfer_rate")]
[System.Text.Json.Serialization.JsonPropertyName("ai_transfer_rate")]
public double AITransferRate { get; set; }
/// <summary>
/// 获取或设置智能回复知识命中率。
/// </summary>
[Newtonsoft.Json.JsonProperty("ai_knowledge_hit_rate")]
[System.Text.Json.Serialization.JsonPropertyName("ai_knowledge_hit_rate")]
public double AIKnowledgeHitRate { get; set; }
}
}
/// <summary>
/// 获取或设置统计日期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("stat_time")]
[System.Text.Json.Serialization.JsonPropertyName("stat_time")]
public long StatisticsTimestamp { get; set; }
/// <summary>
/// 获取或设置统计数据信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("statistic")]
[System.Text.Json.Serialization.JsonPropertyName("statistic")]
public Types.Data Data { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置统计数据列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("statistic_list")]
[System.Text.Json.Serialization.JsonPropertyName("statistic_list")]
public Types.Statistic[]? StatisticList { get; set; } = default!;
}
}

View File

@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/get_servicer_statistic 接口的请求。</para>
/// </summary>
public class CgibinKfGetServicerStatisticRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置客服帐号 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_kfid")]
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
public string? OpenKfId { get; set; }
/// <summary>
/// 获取或设置接待人员的 UserId。
/// </summary>
[Newtonsoft.Json.JsonProperty("servicer_userid")]
[System.Text.Json.Serialization.JsonPropertyName("servicer_userid")]
public string? ServicerUserId { get; set; }
/// <summary>
/// 获取或设置起始日期的时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("start_time")]
[System.Text.Json.Serialization.JsonPropertyName("start_time")]
public long? StartTimestamp { get; set; }
/// <summary>
/// 获取或设置结束日期的时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("end_time")]
[System.Text.Json.Serialization.JsonPropertyName("end_time")]
public long? EndTimestamp { get; set; }
}
}

View File

@ -0,0 +1,146 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/kf/get_servicer_statistic 接口的响应。</para>
/// </summary>
public class CgibinKfGetServicerStatisticResponse : WechatWorkResponse
{
public static class Types
{
public class Statistic
{
public static class Types
{
public class Data
{
/// <summary>
/// 获取或设置咨询会话数。
/// </summary>
[Newtonsoft.Json.JsonProperty("session_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("session_cnt")]
public int SessionCount { get; set; }
/// <summary>
/// 获取或设置咨询客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("customer_cnt")]
public int CustomerCount { get; set; }
/// <summary>
/// 获取或设置咨询消息数。
/// </summary>
[Newtonsoft.Json.JsonProperty("customer_msg_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("customer_msg_cnt")]
public int CustomerMessageCount { get; set; }
/// <summary>
/// 获取或设置人工回复率。
/// </summary>
[Newtonsoft.Json.JsonProperty("reply_rate")]
[System.Text.Json.Serialization.JsonPropertyName("reply_rate")]
public double ReplyRate { get; set; }
/// <summary>
/// 获取或设置平均首次响应时长(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("first_reply_average_sec")]
[System.Text.Json.Serialization.JsonPropertyName("first_reply_average_sec")]
public int FirstReplyAverageSeconds { get; set; }
/// <summary>
/// 获取或设置满意度评价发送数。
/// </summary>
[Newtonsoft.Json.JsonProperty("satisfaction_investgate_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("satisfaction_investgate_cnt")]
public int SatisfactionInvestgateCount { get; set; }
/// <summary>
/// 获取或设置满意度参评率。
/// </summary>
[Newtonsoft.Json.JsonProperty("satisfaction_participation_rate")]
[System.Text.Json.Serialization.JsonPropertyName("satisfaction_participation_rate")]
public double SatisfactionParticipationRate { get; set; }
/// <summary>
/// 获取或设置“满意”评价占比。
/// </summary>
[Newtonsoft.Json.JsonProperty("satisfied_rate")]
[System.Text.Json.Serialization.JsonPropertyName("satisfied_rate")]
public double SatisfiedRate { get; set; }
/// <summary>
/// 获取或设置“一般”评价占比。
/// </summary>
[Newtonsoft.Json.JsonProperty("middling_rate")]
[System.Text.Json.Serialization.JsonPropertyName("middling_rate")]
public double MiddlingRate { get; set; }
/// <summary>
/// 获取或设置“不满意”评价占比。
/// </summary>
[Newtonsoft.Json.JsonProperty("dissatisfied_rate")]
[System.Text.Json.Serialization.JsonPropertyName("dissatisfied_rate")]
public double DissatisfiedRate { get; set; }
/// <summary>
/// 获取或设置升级服务客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_customer_cnt")]
public int UpgradeServiceCustomerCount { get; set; }
/// <summary>
/// 获取或设置专员服务邀请数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_member_invite_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_member_invite_cnt")]
public int UpgradeServiceMemberInviteCount { get; set; }
/// <summary>
/// 获取或设置添加专员的客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_member_customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_member_customer_cnt")]
public int UpgradeServiceMemberCustomerCount { get; set; }
/// <summary>
/// 获取或设置客户群服务邀请数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_groupchat_invite_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_groupchat_invite_cnt")]
public int UpgradeServiceGroupChatInviteCount { get; set; }
/// <summary>
/// 获取或设置加入客户群的客户数。
/// </summary>
[Newtonsoft.Json.JsonProperty("upgrade_service_groupchat_customer_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("upgrade_service_groupchat_customer_cnt")]
public int UpgradeServiceGroupChatCustomerCount { get; set; }
}
}
/// <summary>
/// 获取或设置统计日期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("stat_date")]
[System.Text.Json.Serialization.JsonPropertyName("stat_date")]
public long StatisticsTimestamp { get; set; }
/// <summary>
/// 获取或设置统计数据信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("statistic")]
[System.Text.Json.Serialization.JsonPropertyName("statistic")]
public Types.Data Data { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置统计数据列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("statistic_list")]
[System.Text.Json.Serialization.JsonPropertyName("statistic_list")]
public Types.Statistic[]? StatisticList { get; set; } = default!;
}
}

View File

@ -0,0 +1,5 @@
{
"open_kfid": "OPEN_KFID",
"start_time": 1645545600,
"end_time": 1645632000
}

View File

@ -0,0 +1,30 @@
{
"errcode": 0,
"errmsg": "ok",
"statistic_list": [
{
"stat_time": 1645545600,
"statistic": {
"session_cnt": 2,
"customer_cnt": 1,
"customer_msg_cnt": 6,
"upgrade_service_customer_cnt": 0,
"ai_session_reply_cnt": 1,
"ai_transfer_rate": 1,
"ai_knowledge_hit_rate": 0
}
},
{
"stat_time": 1645632000,
"statistic": {
"session_cnt": 2,
"customer_cnt": 1,
"customer_msg_cnt": 6,
"upgrade_service_customer_cnt": 0,
"ai_session_reply_cnt": 1,
"ai_transfer_rate": 1,
"ai_knowledge_hit_rate": 0
}
}
]
}

View File

@ -0,0 +1,6 @@
{
"open_kfid": "OPEN_KFID",
"servicer_userid": "zhangsan",
"start_time": 1645545600,
"end_time": 1645632000
}

View File

@ -0,0 +1,26 @@
{
"errcode": 0,
"errmsg": "ok",
"statistic_list": [
{
"stat_date": 1645545600,
"statistic": {
"session_cnt": 1,
"customer_cnt": 1,
"customer_msg_cnt": 1,
"reply_rate": 1,
"first_reply_average_sec": 17,
"satisfaction_investgate_cnt": 1,
"satisfaction_participation_rate": 1,
"satisfied_rate": 1,
"middling_rate": 0,
"dissatisfied_rate": 0,
"upgrade_service_customer_cnt": 0,
"upgrade_service_member_invite_cnt": 0,
"upgrade_service_member_customer_cnt": 0,
"upgrade_service_groupchat_invite_cnt": 0,
"upgrade_service_groupchat_customer_cnt": 0
}
}
]
}