feat(work): 新增会议录制管理相关接口

This commit is contained in:
Fu Diwei 2023-06-15 10:50:27 +08:00
parent f8f428da68
commit 67cac022e0
18 changed files with 643 additions and 0 deletions

View File

@ -639,5 +639,107 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingPhoneGetTempOpenIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region Record
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/meeting/record/list 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98192 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinMeetingRecordListResponse> ExecuteCgibinMeetingRecordListAsync(this WechatWorkClient client, Models.CgibinMeetingRecordListRequest 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", "meeting", "record", "list")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingRecordListResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/meeting/record/get_statistics 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98209 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinMeetingRecordGetStatisticsResponse> ExecuteCgibinMeetingRecordGetStatisticsAsync(this WechatWorkClient client, Models.CgibinMeetingRecordGetStatisticsRequest 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", "meeting", "record", "get_statistics")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingRecordGetStatisticsResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/meeting/record/update_sharing_config 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98208 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinMeetingRecordUpdateSharingConfigResponse> ExecuteCgibinMeetingRecordUpdateSharingConfigAsync(this WechatWorkClient client, Models.CgibinMeetingRecordUpdateSharingConfigRequest 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", "meeting", "record", "update_sharing_config")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingRecordUpdateSharingConfigResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/meeting/record/delete 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98206 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinMeetingRecordDeleteResponse> ExecuteCgibinMeetingRecordDeleteAsync(this WechatWorkClient client, Models.CgibinMeetingRecordDeleteRequest 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", "meeting", "record", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingRecordDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/meeting/record/delete_file 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98207 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinMeetingRecordDeleteFileResponse> ExecuteCgibinMeetingRecordDeleteFileAsync(this WechatWorkClient client, Models.CgibinMeetingRecordDeleteFileRequest 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", "meeting", "record", "delete_file")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.CgibinMeetingRecordDeleteFileResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/delete_file 接口的请求。</para>
/// </summary>
public class CgibinMeetingRecordDeleteFileRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string MeetingId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置会议录制文件 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_file_id")]
[System.Text.Json.Serialization.JsonPropertyName("record_file_id")]
public string RecordFileId { get; set; } = string.Empty;
}
}

View File

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

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/delete 接口的请求。</para>
/// </summary>
public class CgibinMeetingRecordDeleteRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string MeetingId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置会议录制 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_record_id")]
public string RecordId { get; set; } = string.Empty;
}
}

View File

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

View File

@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/get_statistics 接口的请求。</para>
/// </summary>
public class CgibinMeetingRecordGetStatisticsRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string MeetingId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置会议录制 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_record_id")]
public string RecordId { get; set; } = string.Empty;
/// <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,42 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/get_statistics 接口的响应。</para>
/// </summary>
public class CgibinMeetingRecordGetStatisticsResponse : WechatWorkResponse
{
public static class Types
{
public class Summary
{
/// <summary>
/// 获取或设置日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("date")]
[System.Text.Json.Serialization.JsonPropertyName("date")]
public string DateString { get; set; } = default!;
/// <summary>
/// 获取或设置观看次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("view_count")]
[System.Text.Json.Serialization.JsonPropertyName("view_count")]
public int ViewCount { get; set; }
/// <summary>
/// 获取或设置下载次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("download_count")]
[System.Text.Json.Serialization.JsonPropertyName("download_count")]
public int DownloadCount { get; set; }
}
}
/// <summary>
/// 获取或设置统计列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("summaries")]
[System.Text.Json.Serialization.JsonPropertyName("summaries")]
public Types.Summary[] SummaryList { get; set; } = default!;
}
}

View File

@ -0,0 +1,57 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/list 接口的请求。</para>
/// </summary>
public class CgibinMeetingRecordListRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string? MeetingId { get; set; }
/// <summary>
/// 获取或设置入会码。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_code")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_code")]
public string? MeetingCode { get; set; }
/// <summary>
/// 获取或设置成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")]
public string? UserId { 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; }
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("cursor")]
[System.Text.Json.Serialization.JsonPropertyName("cursor")]
public string? Cursor { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int? Limit { get; set; }
}
}

View File

@ -0,0 +1,174 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/list 接口的响应。</para>
/// </summary>
public class CgibinMeetingRecordListResponse : WechatWorkResponse
{
public static class Types
{
public class Record
{
public static class Types
{
public class RecordFile
{
/// <summary>
/// 获取或设置录制文件 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_file_id")]
[System.Text.Json.Serialization.JsonPropertyName("record_file_id")]
public string RecordFileId { get; set; } = default!;
/// <summary>
/// 获取或设置开始录制时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_start_time")]
[System.Text.Json.Serialization.JsonPropertyName("record_start_time")]
public long RecordStartTimestamp { get; set; }
/// <summary>
/// 获取或设置结束录制时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_end_time")]
[System.Text.Json.Serialization.JsonPropertyName("record_end_time")]
public long RecordEndTimestamp { get; set; }
/// <summary>
/// 获取或设置文件大小(单位:字节)。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_size")]
[System.Text.Json.Serialization.JsonPropertyName("record_size")]
public int FileSize { get; set; }
/// <summary>
/// 获取或设置共享状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_state")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_state")]
public int SharingState { get; set; }
/// <summary>
/// 获取或设置共享链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_url")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_url")]
public string? SharingUrl { get; set; }
/// <summary>
/// 获取或设置是否仅企业成员可查看。
/// </summary>
[Newtonsoft.Json.JsonProperty("required_same_corp")]
[System.Text.Json.Serialization.JsonPropertyName("required_same_corp")]
public bool? RequireSameCorp { get; set; }
/// <summary>
/// 获取或设置是否仅参会成员可查看。
/// </summary>
[Newtonsoft.Json.JsonProperty("required_attendee")]
[System.Text.Json.Serialization.JsonPropertyName("required_attendee")]
public bool? RequireAttendee { get; set; }
/// <summary>
/// 获取或设置访问密码。
/// </summary>
[Newtonsoft.Json.JsonProperty("password")]
[System.Text.Json.Serialization.JsonPropertyName("password")]
public string? SharingPassword { get; set; }
/// <summary>
/// 获取或设置共享链接过期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_expire")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_expire")]
public long? SharingExpireTimestamp { get; set; }
/// <summary>
/// 获取或设置是否允许下载。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_download")]
[System.Text.Json.Serialization.JsonPropertyName("allow_download")]
public bool? AllowDownload { get; set; }
}
}
/// <summary>
/// 获取或设置录制 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_record_id")]
public string RecordId { get; set; } = default!;
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string MeetingId { get; set; } = default!;
/// <summary>
/// 获取或设置入会码。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_code")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_code")]
public string MeetingCode { get; set; } = default!;
/// <summary>
/// 获取或设置会议主持人成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("host_user_id")]
[System.Text.Json.Serialization.JsonPropertyName("host_user_id")]
public string HostUserId { 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("meeting_start_time")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_start_time")]
public long StartTimestamp { get; set; }
/// <summary>
/// 获取或设置录制状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("state")]
[System.Text.Json.Serialization.JsonPropertyName("state")]
public int State { get; set; }
/// <summary>
/// 获取或设置录制文件列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_files")]
[System.Text.Json.Serialization.JsonPropertyName("record_files")]
public Types.RecordFile[] RecordFileList { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置录制列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("record_meetings")]
[System.Text.Json.Serialization.JsonPropertyName("record_meetings")]
public Types.Record[] RecordList { get; set; } = default!;
/// <summary>
/// 获取或设置是否还有更多。
/// </summary>
[Newtonsoft.Json.JsonProperty("has_more")]
[System.Text.Json.Serialization.JsonPropertyName("has_more")]
public bool HasMore { get; set; }
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_cursor")]
[System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
public string? NextCursor { get; set; }
}
}

View File

@ -0,0 +1,84 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/meeting/record/update_sharing_config 接口的请求。</para>
/// </summary>
public class CgibinMeetingRecordUpdateSharingConfigRequest : WechatWorkRequest
{
public static class Types
{
public class SharingConfig
{
/// <summary>
/// 获取或设置是否开启共享。
/// </summary>
[Newtonsoft.Json.JsonProperty("enable_sharing")]
[System.Text.Json.Serialization.JsonPropertyName("enable_sharing")]
public bool EnableSharing { get; set; }
/// <summary>
/// 获取或设置共享权限类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_auth_type")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_auth_type")]
public int? SharingAuthType { get; set; }
/// <summary>
/// 获取或设置是否需要访问密码。
/// </summary>
[Newtonsoft.Json.JsonProperty("enable_password")]
[System.Text.Json.Serialization.JsonPropertyName("enable_password")]
public bool? EnablePassword { get; set; }
/// <summary>
/// 获取或设置访问密码。
/// </summary>
[Newtonsoft.Json.JsonProperty("password")]
[System.Text.Json.Serialization.JsonPropertyName("password")]
public string? SharingPassword { get; set; }
/// <summary>
/// 获取或设置是否有有效期。
/// </summary>
[Newtonsoft.Json.JsonProperty("enable_sharing_expire")]
[System.Text.Json.Serialization.JsonPropertyName("enable_sharing_expire")]
public bool? EnableExpire { get; set; }
/// <summary>
/// 获取或设置共享链接过期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_expire")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_expire")]
public long? SharingExpireTimestamp { get; set; }
/// <summary>
/// 获取或设置是否允许下载。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_download")]
[System.Text.Json.Serialization.JsonPropertyName("allow_download")]
public bool? AllowDownload { get; set; }
}
}
/// <summary>
/// 获取或设置会议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meetingid")]
[System.Text.Json.Serialization.JsonPropertyName("meetingid")]
public string MeetingId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置会议录制 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("meeting_record_id")]
[System.Text.Json.Serialization.JsonPropertyName("meeting_record_id")]
public string RecordId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置共享配置。
/// </summary>
[Newtonsoft.Json.JsonProperty("sharing_config")]
[System.Text.Json.Serialization.JsonPropertyName("sharing_config")]
public Types.SharingConfig SharingConfig { get; set; } = new Types.SharingConfig();
}
}

View File

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

View File

@ -0,0 +1,4 @@
{
"record_file_id": "fileid",
"meetingid": "ID"
}

View File

@ -0,0 +1,4 @@
{
"meeting_record_id": "record",
"meetingid": "MEETINGID"
}

View File

@ -0,0 +1,6 @@
{
"meeting_record_id": "record",
"meetingid": "MEETINGID",
"start_time": 16666666,
"end_time": 1788888888
}

View File

@ -0,0 +1,11 @@
{
"errcode": 0,
"errmsg": "ok",
"summaries": [
{
"date": "2033-01-01",
"view_count": 12,
"download_count": 12
}
]
}

View File

@ -0,0 +1,9 @@
{
"meetingid": "meetingid11234",
"meeting_code": "MEETINGCODE",
"start_time": 16666666,
"end_time": 178888888,
"userid": "USERID",
"cursor": "NGEING",
"limit": 10
}

View File

@ -0,0 +1,30 @@
{
"errcode": 0,
"errmsg": "ok",
"record_meetings": [
{
"meeting_record_id": "GEIGN",
"meetingid": "GEMIGE",
"meeting_code": "GEJIGNEO",
"host_user_id": "XGMEIG",
"meeting_start_time": 177777777,
"title": "TJIE",
"state": 1,
"record_files": [
{
"record_file_id": "FILEID",
"record_start_time": 15555,
"record_end_time": 1777777,
"record_size": 323235325,
"sharing_state": 1,
"sharing_url": "https://share.url",
"required_same_corp": true,
"required_attendee": true,
"password": "fgjisnge",
"sharing_expire": 3323,
"allow_download": true
}
]
}
]
}

View File

@ -0,0 +1,13 @@
{
"meeting_record_id": "record",
"meetingid": "MEETINGID",
"sharing_config": {
"enable_sharing": true,
"sharing_auth_type": 0,
"enable_password": true,
"password": "123352",
"enable_sharing_expire": true,
"sharing_expire": 1999999999,
"allow_download": true
}
}