diff --git a/Source/ZoomNet.IntegrationTests/Tests/Meetings.cs b/Source/ZoomNet.IntegrationTests/Tests/Meetings.cs index 12f97718..211c0903 100644 --- a/Source/ZoomNet.IntegrationTests/Tests/Meetings.cs +++ b/Source/ZoomNet.IntegrationTests/Tests/Meetings.cs @@ -26,22 +26,29 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie var paginatedUpcomingMeetings = await client.Meetings.GetAllAsync(myUser.Id, MeetingListType.Upcoming, 100, null, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"There are {paginatedUpcomingMeetings.TotalRecords} upcoming meetings").ConfigureAwait(false); + var paginatedUpcomingMeetingsMeetings = await client.Meetings.GetAllAsync(myUser.Id, MeetingListType.UpcomingMeetings, 100, null, cancellationToken).ConfigureAwait(false); + await log.WriteLineAsync($"There are {paginatedUpcomingMeetingsMeetings.TotalRecords} UpcomingMeetings meetings").ConfigureAwait(false); + + var paginatedPreviousMeetings = await client.Meetings.GetAllAsync(myUser.Id, MeetingListType.PreviousMeetings, 100, null, cancellationToken).ConfigureAwait(false); + await log.WriteLineAsync($"There are {paginatedPreviousMeetings.TotalRecords} previous meetings").ConfigureAwait(false); + // CLEANUP PREVIOUS INTEGRATION TESTS THAT MIGHT HAVE BEEN INTERRUPTED BEFORE THEY HAD TIME TO CLEANUP AFTER THEMSELVES var cleanUpTasks = paginatedScheduledMeetings.Records .Union(paginatedLiveMeetings.Records) .Union(paginatedUpcomingMeetings.Records) + .Union(paginatedUpcomingMeetingsMeetings.Records) + .Union(paginatedPreviousMeetings.Records) .Where(m => m.Topic.StartsWith("ZoomNet Integration Testing:")) - .Select(async oldMeeting => + .GroupBy(m => m.Id) + .Select(async grp => { - await client.Meetings.DeleteAsync(oldMeeting.Id, null, false, false, cancellationToken).ConfigureAwait(false); - await log.WriteLineAsync($"Meeting {oldMeeting.Id} deleted").ConfigureAwait(false); + await client.Meetings.DeleteAsync(grp.Key, null, false, false, cancellationToken).ConfigureAwait(false); + await log.WriteLineAsync($"Meeting {grp.Key} deleted").ConfigureAwait(false); await Task.Delay(250, cancellationToken).ConfigureAwait(false); // Brief pause to ensure Zoom has time to catch up }); await Task.WhenAll(cleanUpTasks).ConfigureAwait(false); - // For an unknown reason, using myUser.Id to retrieve meeting templates causes an "Invalid token" exception. - // That's why I use "me" on the following line: - var templates = await client.Meetings.GetTemplatesAsync("me", cancellationToken).ConfigureAwait(false); + var templates = await client.Meetings.GetTemplatesAsync(myUser.Id, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Retrieved {templates.Length} meeting templates").ConfigureAwait(false); var settings = new MeetingSettings() @@ -60,7 +67,7 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie }; // Instant meeting - var newInstantMeeting = await client.Meetings.CreateInstantMeetingAsync(myUser.Id, "ZoomNet Integration Testing: instant meeting", "The agenda", "p@ss!w0rd", settings, trackingFields, null, cancellationToken).ConfigureAwait(false); + var newInstantMeeting = await client.Meetings.CreateInstantMeetingAsync(myUser.Id, "ZoomNet Integration Testing: instant meeting", "The agenda", null, settings, trackingFields, null, true, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Instant meeting {newInstantMeeting.Id} created").ConfigureAwait(false); var instantMeeting = (InstantMeeting)await client.Meetings.GetAsync(newInstantMeeting.Id, null, cancellationToken).ConfigureAwait(false); @@ -78,7 +85,7 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie // Scheduled meeting var start = DateTime.UtcNow.AddMonths(1); var duration = 30; - var newScheduledMeeting = await client.Meetings.CreateScheduledMeetingAsync(myUser.Id, "ZoomNet Integration Testing: scheduled meeting", "The agenda", start, duration, TimeZones.UTC, "p@ss!w0rd", settings, trackingFields, null, cancellationToken).ConfigureAwait(false); + var newScheduledMeeting = await client.Meetings.CreateScheduledMeetingAsync(myUser.Id, "ZoomNet Integration Testing: scheduled meeting", "The agenda", start, duration, TimeZones.UTC, "pass@word!", settings, trackingFields, null, true, false, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Scheduled meeting {newScheduledMeeting.Id} created").ConfigureAwait(false); var updatedSettings = new MeetingSettings() { Audio = AudioType.Voip }; @@ -88,53 +95,53 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie var scheduledMeeting = (ScheduledMeeting)await client.Meetings.GetAsync(newScheduledMeeting.Id, null, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Scheduled meeting {scheduledMeeting.Id} retrieved").ConfigureAwait(false); - var requiredFields = new[] - { - RegistrationField.PurchasingTimeFrame, - RegistrationField.RoleInPurchaseProcess - }; - var optionalFields = new[] - { - RegistrationField.Address, - RegistrationField.City, - RegistrationField.Country, - RegistrationField.PostalCode, - RegistrationField.State, - RegistrationField.Phone, - RegistrationField.Industry, - RegistrationField.Organization, - RegistrationField.JobTitle, - RegistrationField.NumberOfEmployees, - RegistrationField.Comments - }; - var customQuestions = new[] + if (myUser.Type == UserType.Licensed) { - new RegistrationCustomQuestionForMeeting + var requiredFields = new[] { - Title = "Are you happy?", - Type = RegistrationCustomQuestionTypeForMeeting.Single, - IsRequired = true, - Answers = new[] { "Yes", "No", "Maybe", "I don't know" } - }, - new RegistrationCustomQuestionForMeeting + RegistrationField.PurchasingTimeFrame, + RegistrationField.RoleInPurchaseProcess + }; + var optionalFields = new[] { - Title = "Tell us about yourself", - Type = RegistrationCustomQuestionTypeForMeeting.Short, - IsRequired = false - } - }; - await client.Meetings.UpdateRegistrationQuestionsAsync(newScheduledMeeting.Id, requiredFields, optionalFields, customQuestions, cancellationToken).ConfigureAwait(false); - await log.WriteLineAsync($"Added {customQuestions.Length} custom registration questions to this meeting.").ConfigureAwait(false); + RegistrationField.Address, + RegistrationField.City, + RegistrationField.Country, + RegistrationField.PostalCode, + RegistrationField.State, + RegistrationField.Phone, + RegistrationField.Industry, + RegistrationField.Organization, + RegistrationField.JobTitle, + RegistrationField.NumberOfEmployees, + RegistrationField.Comments + }; + var customQuestions = new[] + { + new RegistrationCustomQuestionForMeeting + { + Title = "Are you happy?", + Type = RegistrationCustomQuestionTypeForMeeting.Single, + IsRequired = true, + Answers = new[] { "Yes", "No", "Maybe", "I don't know" } + }, + new RegistrationCustomQuestionForMeeting + { + Title = "Tell us about yourself", + Type = RegistrationCustomQuestionTypeForMeeting.Short, + IsRequired = false + } + }; + await client.Meetings.UpdateRegistrationQuestionsAsync(newScheduledMeeting.Id, requiredFields, optionalFields, customQuestions, cancellationToken).ConfigureAwait(false); + await log.WriteLineAsync($"Added {customQuestions.Length} custom registration questions to this meeting.").ConfigureAwait(false); - var registrationQuestions = await client.Meetings.GetRegistrationQuestionsAsync(newScheduledMeeting.Id, cancellationToken).ConfigureAwait(false); - await log.WriteLineAsync($"Here's a quick summary of the registration form for meeting {newScheduledMeeting.Id}:").ConfigureAwait(false); - await log.WriteLineAsync($" - there are {registrationQuestions.RequiredFields.Length} required fields.").ConfigureAwait(false); - await log.WriteLineAsync($" - there are {registrationQuestions.OptionalFields.Length} optional fields.").ConfigureAwait(false); - await log.WriteLineAsync($" - there are {registrationQuestions.Questions.Count(q => q.IsRequired)} required custom questions.").ConfigureAwait(false); - await log.WriteLineAsync($" - there are {registrationQuestions.Questions.Count(q => !q.IsRequired)} optional custom questions.").ConfigureAwait(false); + var registrationQuestions = await client.Meetings.GetRegistrationQuestionsAsync(newScheduledMeeting.Id, cancellationToken).ConfigureAwait(false); + await log.WriteLineAsync($"Here's a quick summary of the registration form for meeting {newScheduledMeeting.Id}:").ConfigureAwait(false); + await log.WriteLineAsync($" - there are {registrationQuestions.RequiredFields.Length} required fields.").ConfigureAwait(false); + await log.WriteLineAsync($" - there are {registrationQuestions.OptionalFields.Length} optional fields.").ConfigureAwait(false); + await log.WriteLineAsync($" - there are {registrationQuestions.Questions.Count(q => q.IsRequired)} required custom questions.").ConfigureAwait(false); + await log.WriteLineAsync($" - there are {registrationQuestions.Questions.Count(q => !q.IsRequired)} optional custom questions.").ConfigureAwait(false); - if (myUser.Type == UserType.Licensed) - { var registrants = new List { new BatchRegistrant { Email = "firstBatchRegistrant@example.com", FirstName = "Mariful", LastName = "Maruf" }, @@ -239,7 +246,7 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie WeeklyDays = new[] { DayOfWeek.Monday, DayOfWeek.Friday }, Type = RecurrenceType.Weekly }; - var newRecurringMeeting = await client.Meetings.CreateRecurringMeetingAsync(myUser.Id, "ZoomNet Integration Testing: recurring meeting", "The agenda", start, duration, recurrenceInfo, TimeZones.UTC, "p@ss!w0rd", settings, trackingFields, null, cancellationToken).ConfigureAwait(false); + var newRecurringMeeting = await client.Meetings.CreateRecurringMeetingAsync(myUser.Id, "ZoomNet Integration Testing: recurring meeting", "The agenda", start, duration, recurrenceInfo, TimeZones.UTC, "p@ss!w0rd", settings, trackingFields, null, false, false, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Recurring meeting {newRecurringMeeting.Id} created").ConfigureAwait(false); await client.Meetings.UpdateRecurringMeetingAsync(newRecurringMeeting.Id, topic: "ZoomNet Integration Testing: UPDATED recurring meeting", cancellationToken: cancellationToken).ConfigureAwait(false); @@ -259,7 +266,7 @@ public async Task RunAsync(User myUser, string[] myPermissions, IZoomClient clie await log.WriteLineAsync($"Recurring meeting {newRecurringMeeting.Id} deleted").ConfigureAwait(false); // Recurring meeting with no fixed time - var newRecurringNoFixTimeMeeting = await client.Meetings.CreateRecurringMeetingAsync(myUser.Id, "ZoomNet Integration Testing: recurring meeting with no fixed time", "The agenda", start, duration, null, TimeZones.UTC, "p@ss!w0rd", settings, null, null, cancellationToken).ConfigureAwait(false); + var newRecurringNoFixTimeMeeting = await client.Meetings.CreateRecurringMeetingAsync(myUser.Id, "ZoomNet Integration Testing: recurring meeting with no fixed time", "The agenda", start, duration, null, TimeZones.UTC, "p@ss!w0rd", settings, null, null, false, false, cancellationToken).ConfigureAwait(false); await log.WriteLineAsync($"Recurring meeting with no fixed time {newRecurringNoFixTimeMeeting.Id} created").ConfigureAwait(false); await client.Meetings.DeleteAsync(newRecurringNoFixTimeMeeting.Id, null, false, false, cancellationToken).ConfigureAwait(false); diff --git a/Source/ZoomNet/IZoomClient.cs b/Source/ZoomNet/IZoomClient.cs index 42cc97d9..d38f20cc 100644 --- a/Source/ZoomNet/IZoomClient.cs +++ b/Source/ZoomNet/IZoomClient.cs @@ -11,19 +11,23 @@ public interface IZoomClient /// /// Gets the resource which allows you to manage sub accounts. /// - /// - /// The accounts resource. - /// IAccounts Accounts { get; } + /// + /// Gets the resource which allows you to manage call logs. + /// + ICallLogs CallLogs { get; } + /// /// Gets the resource which allows you to manage chat channels, messages, etc. /// - /// - /// The chat resource. - /// IChat Chat { get; } + /// + /// Gets the resource which allows you to manage chatbot messages. + /// + IChatbot Chatbot { get; } + /// /// Gets the resource which allows you to manage cloud recordings. /// @@ -40,68 +44,42 @@ public interface IZoomClient /// IContacts Contacts { get; } + /// + /// Gets the resource which allows you to view metrics. + /// + IDashboards Dashboards { get; } + /// /// Gets the resource which allows you to notify Zoom that you comply with the policy which requires /// you to handle user's data in accordance to the user's preference after the user uninstalls your app. /// - /// - /// The data compliance resource. - /// [Obsolete("The Data Compliance API is deprecated")] IDataCompliance DataCompliance { get; } + /// + /// Gets the resource that allows you to manage groups. + /// + IGroups Groups { get; } + /// /// Gets the resource which allows you to manage meetings. /// - /// - /// The meetings resource. - /// IMeetings Meetings { get; } /// /// Gets the resource which allows you to manage meetings that occured in the past. /// - /// - /// The past meetings resource. - /// IPastMeetings PastMeetings { get; } /// /// Gets the resource which allows you to manage webinars that occured in the past. /// - /// - /// The past webinars resource. - /// IPastWebinars PastWebinars { get; } /// - /// Gets the resource which allows you to manage roles. - /// - /// - /// The roles resource. - /// - IRoles Roles { get; } - - /// - /// Gets the resource which allows you to manage users. - /// - /// - /// The users resource. - /// - IUsers Users { get; } - - /// - /// Gets the resource which allows you to manage webinars. - /// - /// - /// The webinars resource. - /// - IWebinars Webinars { get; } - - /// - /// Gets the resource which allows you to view metrics. + /// Gets the resource which allows you to access Zoom Phone API endpoints. /// - IDashboards Dashboards { get; } + IPhone Phone { get; } /// /// Gets the resource which allows you to view reports. @@ -109,28 +87,23 @@ public interface IZoomClient IReports Reports { get; } /// - /// Gets the resource which allows you to manage call logs. - /// - ICallLogs CallLogs { get; } - - /// - /// Gets the resource which allows you to manage chatbot messages. + /// Gets the resource which allows you to manage roles. /// - IChatbot Chatbot { get; } + IRoles Roles { get; } /// - /// Gets the resource which allows you to access Zoom Phone API endpoints. + /// Gets the resource which allows you to manage SMS messages and sessions. /// - IPhone Phone { get; } + ISms Sms { get; } /// - /// Gets the resource which allows you to manage SMS messages and sessions. + /// Gets the resource which allows you to manage users. /// - ISms Sms { get; } + IUsers Users { get; } /// - /// Gets the resource that allows you to manage groups. + /// Gets the resource which allows you to manage webinars. /// - IGroups Groups { get; } + IWebinars Webinars { get; } } } diff --git a/Source/ZoomNet/Models/MeetingListType.cs b/Source/ZoomNet/Models/MeetingListType.cs index 233e0a99..a4ed2492 100644 --- a/Source/ZoomNet/Models/MeetingListType.cs +++ b/Source/ZoomNet/Models/MeetingListType.cs @@ -8,21 +8,34 @@ namespace ZoomNet.Models public enum MeetingListType { /// - /// Scheduled. + /// All valid previous (unexpired) meetings, live meetings, and upcoming scheduled meetings. /// [EnumMember(Value = "scheduled")] Scheduled, /// - /// Live. + /// All the ongoing meetings. /// [EnumMember(Value = "live")] Live, /// - /// Upcoming. + /// All upcoming meetings, including live meetings. /// [EnumMember(Value = "upcoming")] Upcoming, + + /// + /// All upcoming meetings, including live meetings. + /// + /// I don't know what the distinction between "upcoming" and "upcoming_meetings is. + [EnumMember(Value = "upcoming_meetings")] + UpcomingMeetings, + + /// + /// All the previous meetings. + /// + [EnumMember(Value = "previous_meetings")] + PreviousMeetings, } } diff --git a/Source/ZoomNet/Resources/IMeetings.cs b/Source/ZoomNet/Resources/IMeetings.cs index 286c75df..7ca520c7 100644 --- a/Source/ZoomNet/Resources/IMeetings.cs +++ b/Source/ZoomNet/Resources/IMeetings.cs @@ -57,12 +57,13 @@ public interface IMeetings /// Meeting settings. /// Tracking fields. /// Template Identifer. + /// Whether to generate a default passcode using the user's settings. If this value is true and the user has the PMI setting enabled with a passcode, then the user's meetings will use the PMI passcode. /// The cancellation token. /// /// The new meeting. /// /// Thrown when an exception occured while creating the meeting. - Task CreateInstantMeetingAsync(string userId, string topic, string agenda, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, CancellationToken cancellationToken = default); + Task CreateInstantMeetingAsync(string userId, string topic, string agenda, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, bool generatePassword = false, CancellationToken cancellationToken = default); /// /// Create a scheduled meeting for a user. @@ -77,12 +78,14 @@ public interface IMeetings /// Meeting settings. /// Tracking fields. /// Template Identifer. + /// Whether to generate a default passcode using the user's settings. If this value is true and the user has the PMI setting enabled with a passcode, then the user's meetings will use the PMI passcode. + /// Whether to create a prescheduled meeting via the GSuite app. /// The cancellation token. /// /// The new meeting. /// /// Thrown when an exception occured while creating the meeting. - Task CreateScheduledMeetingAsync(string userId, string topic, string agenda, DateTime start, int duration, TimeZones? timeZone = TimeZones.UTC, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, CancellationToken cancellationToken = default); + Task CreateScheduledMeetingAsync(string userId, string topic, string agenda, DateTime start, int duration, TimeZones? timeZone = TimeZones.UTC, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, bool generatePassword = false, bool preSchedule = false, CancellationToken cancellationToken = default); /// /// Create a recurring meeting for a user. @@ -98,12 +101,14 @@ public interface IMeetings /// Meeting settings. /// Tracking fields. /// Template Identifer. + /// Whether to generate a default passcode using the user's settings. If this value is true and the user has the PMI setting enabled with a passcode, then the user's meetings will use the PMI passcode. + /// Whether to create a prescheduled meeting via the GSuite app. This only applies to recurring meetings with no fixed time. /// The cancellation token. /// /// The new meeting. /// /// Thrown when an exception occured while creating the meeting. - Task CreateRecurringMeetingAsync(string userId, string topic, string agenda, DateTime? start, int duration, RecurrenceInfo recurrence, TimeZones? timeZone = TimeZones.UTC, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, CancellationToken cancellationToken = default); + Task CreateRecurringMeetingAsync(string userId, string topic, string agenda, DateTime? start, int duration, RecurrenceInfo recurrence, TimeZones? timeZone = TimeZones.UTC, string password = null, MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, bool generatePassword = false, bool preSchedule = false, CancellationToken cancellationToken = default); /// /// Update the details of a meeting occurrence. diff --git a/Source/ZoomNet/Resources/Meetings.cs b/Source/ZoomNet/Resources/Meetings.cs index cc066aa2..78087b86 100644 --- a/Source/ZoomNet/Resources/Meetings.cs +++ b/Source/ZoomNet/Resources/Meetings.cs @@ -67,17 +67,21 @@ public Task CreateInstantMeetingAsync( MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, + bool generatePassword = false, CancellationToken cancellationToken = default) { + if (generatePassword && !string.IsNullOrEmpty(password)) throw new ArgumentException($"{nameof(generatePassword)} and {nameof(password)} are mutually exclusive. Either specify a password and set {nameof(generatePassword)} to false or set {nameof(password)} to null and set {nameof(generatePassword)} to true."); + var data = new JsonObject { - { "type", 1 }, + { "type", MeetingType.Instant }, { "topic", topic }, { "password", password }, { "agenda", agenda }, { "settings", settings }, { "tracking_fields", trackingFields?.Select(tf => new JsonObject { { "field", tf.Key }, { "value", tf.Value } }).ToArray() }, - { "template_id", templateId } + { "template_id", templateId }, + { "default_password", generatePassword }, }; return _client @@ -99,11 +103,15 @@ public Task CreateScheduledMeetingAsync( MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, + bool generatePassword = false, + bool preSchedule = false, CancellationToken cancellationToken = default) { + if (generatePassword && !string.IsNullOrEmpty(password)) throw new ArgumentException($"{nameof(generatePassword)} and {nameof(password)} are mutually exclusive. Either specify a password and set {nameof(generatePassword)} to false or set {nameof(password)} to null and set {nameof(generatePassword)} to true."); + var data = new JsonObject { - { "type", 2 }, + { "type", MeetingType.Scheduled }, { "topic", topic }, { "password", password }, { "agenda", agenda }, @@ -112,7 +120,9 @@ public Task CreateScheduledMeetingAsync( { "timezone", timeZone }, { "settings", settings }, { "tracking_fields", trackingFields?.Select(tf => new JsonObject { { "field", tf.Key }, { "value", tf.Value } }).ToArray() }, - { "template_id", templateId } + { "template_id", templateId }, + { "default_password", generatePassword }, + { "pre_schedule", preSchedule }, }; return _client @@ -135,8 +145,13 @@ public Task CreateRecurringMeetingAsync( MeetingSettings settings = null, IDictionary trackingFields = null, string templateId = null, + bool generatePassword = false, + bool preSchedule = false, CancellationToken cancellationToken = default) { + if (generatePassword && !string.IsNullOrEmpty(password)) throw new ArgumentException($"{nameof(generatePassword)} and {nameof(password)} are mutually exclusive. Either specify a password and set {nameof(generatePassword)} to false or set {nameof(password)} to null and set {nameof(generatePassword)} to true."); + if (preSchedule && recurrence != null) throw new ArgumentException($"{nameof(preSchedule)} can be set to true only when {nameof(recurrence)} is null.", nameof(preSchedule)); + var data = new JsonObject { { "type", recurrence == null ? MeetingType.RecurringNoFixedTime : MeetingType.RecurringFixedTime }, @@ -149,7 +164,9 @@ public Task CreateRecurringMeetingAsync( { "timezone", timeZone }, { "settings", settings }, { "tracking_fields", trackingFields?.Select(tf => new JsonObject { { "field", tf.Key }, { "value", tf.Value } }).ToArray() }, - { "template_id", templateId } + { "template_id", templateId }, + { "default_password", generatePassword }, + { "pre_schedule", preSchedule }, }; return _client diff --git a/Source/ZoomNet/ZoomClient.cs b/Source/ZoomNet/ZoomClient.cs index 7b65b1cd..46bd7213 100644 --- a/Source/ZoomNet/ZoomClient.cs +++ b/Source/ZoomNet/ZoomClient.cs @@ -67,19 +67,31 @@ public static string Version /// public IAccounts Accounts { get; private set; } + /// + public ICallLogs CallLogs { get; private set; } + /// public IChat Chat { get; private set; } + /// + public IChatbot Chatbot { get; private set; } + /// public ICloudRecordings CloudRecordings { get; private set; } /// public IContacts Contacts { get; private set; } + /// + public IDashboards Dashboards { get; private set; } + /// [Obsolete("The Data Compliance API is deprecated")] public IDataCompliance DataCompliance { get; private set; } + /// + public IGroups Groups { get; private set; } + /// public IMeetings Meetings { get; private set; } @@ -90,34 +102,22 @@ public static string Version public IPastWebinars PastWebinars { get; private set; } /// - public IRoles Roles { get; private set; } - - /// - public IUsers Users { get; private set; } - - /// - public IWebinars Webinars { get; private set; } - - /// - public IDashboards Dashboards { get; private set; } + public IPhone Phone { get; private set; } /// public IReports Reports { get; private set; } /// - public ICallLogs CallLogs { get; private set; } - - /// - public IChatbot Chatbot { get; private set; } + public IRoles Roles { get; private set; } /// - public IPhone Phone { get; private set; } + public ISms Sms { get; private set; } /// - public ISms Sms { get; private set; } + public IUsers Users { get; private set; } /// - public IGroups Groups { get; private set; } + public IWebinars Webinars { get; private set; } #endregion @@ -210,23 +210,23 @@ private ZoomClient(IConnectionInfo connectionInfo, HttpClient httpClient, bool d _fluentClient.Filters.Add(new ZoomErrorHandler()); Accounts = new Accounts(_fluentClient); + CallLogs = new CallLogs(_fluentClient); Chat = new Chat(_fluentClient); + Chatbot = new Chatbot(_fluentClient); CloudRecordings = new CloudRecordings(_fluentClient); Contacts = new Contacts(_fluentClient); + Dashboards = new Dashboards(_fluentClient); DataCompliance = new DataCompliance(_fluentClient); + Groups = new Groups(_fluentClient); Meetings = new Meetings(_fluentClient); PastMeetings = new PastMeetings(_fluentClient); PastWebinars = new PastWebinars(_fluentClient); + Phone = new Phone(_fluentClient); + Reports = new Reports(_fluentClient); Roles = new Roles(_fluentClient); + Sms = new Sms(_fluentClient); Users = new Users(_fluentClient); Webinars = new Webinars(_fluentClient); - Dashboards = new Dashboards(_fluentClient); - Reports = new Reports(_fluentClient); - CallLogs = new CallLogs(_fluentClient); - Chatbot = new Chatbot(_fluentClient); - Phone = new Phone(_fluentClient); - Sms = new Sms(_fluentClient); - Groups = new Groups(_fluentClient); } /// diff --git a/build.cake b/build.cake index 71596964..f2ca8ae3 100644 --- a/build.cake +++ b/build.cake @@ -1,5 +1,5 @@ // Install tools. -#tool dotnet:?package=GitVersion.Tool&version=6.0.3 +#tool dotnet:?package=GitVersion.Tool&version=6.0.4 #tool dotnet:?package=coveralls.net&version=4.0.1 #tool nuget:https://f.feedz.io/jericho/jericho/nuget/?package=GitReleaseManager&version=0.17.0-collaborators0008 #tool nuget:?package=ReportGenerator&version=5.3.11