mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2026-03-10 00:13:36 +08:00
feat(work): 随官方更新微信客服
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Events
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// <para>表示 EVENT.kf_account_auth_change 事件的数据。</para>
|
||||||
|
/// <para>REF: https://developer.work.weixin.qq.com/document/path/97712 </para>
|
||||||
|
/// </summary>
|
||||||
|
public class KfAccountAuthChangeEvent : WechatWorkEvent, WechatWorkEvent.Serialization.IXmlSerializable
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置新增授权的客服账号 ID 列表。
|
||||||
|
/// </summary>
|
||||||
|
[System.Xml.Serialization.XmlElement("AuthAddOpenKfId", Type = typeof(string), IsNullable = true)]
|
||||||
|
public string[]? AuthAddedOpenKfId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置取消授权的客服账号 ID 列表。
|
||||||
|
/// </summary>
|
||||||
|
[System.Xml.Serialization.XmlElement("AuthDelOpenKfId", Type = typeof(string), IsNullable = true)]
|
||||||
|
public string[]? AuthDeletedOpenKfId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Events
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Events
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 kf_msg_or_event 事件的数据。</para>
|
/// <para>表示 EVENT.kf_msg_or_event 事件的数据。</para>
|
||||||
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94670 </para>
|
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94670 </para>
|
||||||
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94699 </para>
|
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94699 </para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -10,7 +10,13 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置调用拉取消息的 Token。
|
/// 获取或设置调用拉取消息的 Token。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[System.Xml.Serialization.XmlElement("Content")]
|
[System.Xml.Serialization.XmlElement("Token")]
|
||||||
public string Token { get; set; } = default!;
|
public string Token { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置客服账号 ID。
|
||||||
|
/// </summary>
|
||||||
|
[System.Xml.Serialization.XmlElement("OpenKfId")]
|
||||||
|
public string OpenKfId { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /cgi-bin/kf/account/list 接口的响应。</para>
|
/// <para>表示 [POST] /cgi-bin/kf/account/list 接口的响应。</para>
|
||||||
@@ -29,6 +29,13 @@
|
|||||||
[Newtonsoft.Json.JsonProperty("avatar")]
|
[Newtonsoft.Json.JsonProperty("avatar")]
|
||||||
[System.Text.Json.Serialization.JsonPropertyName("avatar")]
|
[System.Text.Json.Serialization.JsonPropertyName("avatar")]
|
||||||
public string AvatarUrl { get; set; } = default!;
|
public string AvatarUrl { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置是否有该管理权限。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("manage_privilege")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("manage_privilege")]
|
||||||
|
public bool HasManagePivilege { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /cgi-bin/kf/sync_msg 接口的请求。</para>
|
/// <para>表示 [POST] /cgi-bin/kf/sync_msg 接口的请求。</para>
|
||||||
@@ -32,5 +32,12 @@
|
|||||||
[Newtonsoft.Json.JsonProperty("voice_format")]
|
[Newtonsoft.Json.JsonProperty("voice_format")]
|
||||||
[System.Text.Json.Serialization.JsonPropertyName("voice_format")]
|
[System.Text.Json.Serialization.JsonPropertyName("voice_format")]
|
||||||
public int? VoiceFormat { get; set; }
|
public int? VoiceFormat { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置客服账号 ID。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("open_kfid")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("open_kfid")]
|
||||||
|
public string? OpenKfId { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /cgi-bin/kf/sync_msg 接口的响应。</para>
|
/// <para>表示 [POST] /cgi-bin/kf/sync_msg 接口的响应。</para>
|
||||||
@@ -75,6 +75,13 @@
|
|||||||
[Newtonsoft.Json.JsonProperty("nickname")]
|
[Newtonsoft.Json.JsonProperty("nickname")]
|
||||||
[System.Text.Json.Serialization.JsonPropertyName("nickname")]
|
[System.Text.Json.Serialization.JsonPropertyName("nickname")]
|
||||||
public string? Nickname { get; set; }
|
public string? Nickname { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置场景值。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("scene")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("scene")]
|
||||||
|
public int Scene { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,6 +197,97 @@
|
|||||||
[System.Text.Json.Serialization.JsonPropertyName("recall_msgid")]
|
[System.Text.Json.Serialization.JsonPropertyName("recall_msgid")]
|
||||||
public string? RecalledMessageId { get; set; }
|
public string? RecalledMessageId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ChannelsShopProductMessage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品 ID。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("product_id")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
|
||||||
|
public string ProductId { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品头图 URL。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("head_img")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("head_img")]
|
||||||
|
public string HeadImageUrl { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品标题。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("title")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("title")]
|
||||||
|
public string Title { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品价格(单位:分)。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("sales_price")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("sales_price")]
|
||||||
|
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
|
||||||
|
public int SalesPrice { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置店铺名称。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("shop_nickname")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("shop_nickname")]
|
||||||
|
public string ShopNickname { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置店铺头像 URL。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("shop_head_img")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("shop_head_img")]
|
||||||
|
public string ShopHeadImageUrl { get; set; } = default!;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ChannelsShopOrderMessage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置订单 ID。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("order_id")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("order_id")]
|
||||||
|
public string OrderId { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品标题。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("product_titles")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("product_titles")]
|
||||||
|
public string ProductTitle { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置商品价格描述。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("price_wording")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("price_wording")]
|
||||||
|
public string PriceWording { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置订单状态。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("state")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("state")]
|
||||||
|
public string State { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置订单缩略图 URL。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("image_url")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("image_url")]
|
||||||
|
public string ImageUrl { get; set; } = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置店铺名称。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("shop_nickname")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("shop_nickname")]
|
||||||
|
public string ShopNickname { get; set; } = default!;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -311,6 +409,20 @@
|
|||||||
[System.Text.Json.Serialization.JsonPropertyName("event")]
|
[System.Text.Json.Serialization.JsonPropertyName("event")]
|
||||||
public Types.EventMessage? MessageContentForEvent { get; set; }
|
public Types.EventMessage? MessageContentForEvent { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置视频号商品消息信息。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("channels_shop_product")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("channels_shop_product")]
|
||||||
|
public Types.ChannelsShopProductMessage? MessageContentForChannelsShopProduct { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置视频号订单消息信息。
|
||||||
|
/// </summary>
|
||||||
|
[Newtonsoft.Json.JsonProperty("channels_shop_order")]
|
||||||
|
[System.Text.Json.Serialization.JsonPropertyName("channels_shop_order")]
|
||||||
|
public Types.ChannelsShopOrderMessage? MessageContentForChannelsShopOrder { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取或设置发送时间戳。
|
/// 获取或设置发送时间戳。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>表示 [POST] /cgi-bin/kf/customer/batchget 接口的响应。</para>
|
/// <para>表示 [POST] /cgi-bin/kf/customer/batchget 接口的响应。</para>
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<xml>
|
||||||
|
<ToUserName><![CDATA[toUser]]></ToUserName>
|
||||||
|
<FromUserName><![CDATA[sys]]></FromUserName>
|
||||||
|
<CreateTime>1348831860</CreateTime>
|
||||||
|
<MsgType><![CDATA[event]]></MsgType>
|
||||||
|
<Event><![CDATA[kf_account_auth_change]]></Event>
|
||||||
|
<AuthAddOpenKfId><![CDATA[wkxxxx1]]></AuthAddOpenKfId>
|
||||||
|
<AuthDelOpenKfId><![CDATA[wkxxxx2]]></AuthDelOpenKfId>
|
||||||
|
</xml>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<xml>
|
||||||
|
<ToUserName><![CDATA[ww12345678910]]></ToUserName>
|
||||||
|
<CreateTime>1348831860</CreateTime>
|
||||||
|
<MsgType><![CDATA[event]]></MsgType>
|
||||||
|
<Event><![CDATA[kf_msg_or_event]]></Event>
|
||||||
|
<Token><![CDATA[ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR]]></Token>
|
||||||
|
<OpenKfId><![CDATA[wkxxxxxxx]]></OpenKfId>
|
||||||
|
</xml>
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"errcode": 0,
|
"errcode": 0,
|
||||||
"errmsg": "ok",
|
"errmsg": "ok",
|
||||||
"account_list": [
|
"account_list": [
|
||||||
{
|
{
|
||||||
"open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q",
|
"open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q",
|
||||||
"name": "咨询客服",
|
"name": "咨询客服",
|
||||||
"avatar": "https://wework.qpic.cn/wwhead/duc2TvpEgSSjibPZlNR6chpx9W3dtd9Ogp8XEmSNKGa6uufMWn2239HUPuwIFoYYZ7Ph580FPvo8/0"
|
"avatar": "https://wework.qpic.cn/wwhead/duc2TvpEgSSjibPZlNR6chpx9W3dtd9Ogp8XEmSNKGa6uufMWn2239HUPuwIFoYYZ7Ph580FPvo8/0",
|
||||||
|
"manage_privilege": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"cursor": "4gw7MepFLfgF2VC5npN",
|
"cursor": "4gw7MepFLfgF2VC5npN",
|
||||||
"token": "ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR",
|
"token": "ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR",
|
||||||
"limit": 1000,
|
"limit": 1000,
|
||||||
"voice_format": 0
|
"voice_format": 0,
|
||||||
|
"open_kfid": "wkxxxxxx"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"errcode": 0,
|
"errcode": 0,
|
||||||
"errmsg": "ok",
|
"errmsg": "ok",
|
||||||
"next_cursor": "4gw7MepFLfgF2VC5npN",
|
"next_cursor": "4gw7MepFLfgF2VC5npN",
|
||||||
@@ -31,6 +31,28 @@
|
|||||||
"recall_msgid": "RECALL_MSGID",
|
"recall_msgid": "RECALL_MSGID",
|
||||||
"servicer_userid": "SERVICER_USERID"
|
"servicer_userid": "SERVICER_USERID"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"msgtype": "channels_shop_product",
|
||||||
|
"channels_shop_product": {
|
||||||
|
"product_id": "PRODUCT_ID",
|
||||||
|
"head_img": "PRODUCT_IMANGE_URL",
|
||||||
|
"title": "TITLE",
|
||||||
|
"sales_price": 0,
|
||||||
|
"shop_nickname": "SHOP_NICKNAME",
|
||||||
|
"shop_head_img": "SHOP_HEAD_IMG"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"msgtype": "channels_shop_order",
|
||||||
|
"channels_shop_order": {
|
||||||
|
"order_id": "ORDER_ID",
|
||||||
|
"product_titles": "PRODUCT_TITLES",
|
||||||
|
"price_wording": "PRICE_WORDING",
|
||||||
|
"state": "STATE",
|
||||||
|
"image_url": "IMAGE_URL",
|
||||||
|
"shop_nickname": "SHOP_NICKNAME"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user