zoom_api/
dashboards.rs

1use crate::Client;
2use crate::ClientResult;
3
4pub struct Dashboards {
5    pub client: Client,
6}
7
8impl Dashboards {
9    #[doc(hidden)]
10    pub fn new(client: Client) -> Self {
11        Dashboards { client }
12    }
13
14    /**
15     * List meetings.
16     *
17     * This function performs a `GET` to the `/metrics/meetings` endpoint.
18     *
19     * List total live or past meetings that occurred during a specified period of time. This overview will show if features such as audio, video, screen sharing, and recording were being used in the meeting. You can also see the license types of each user on your account.<br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.<br>
20     * **Scopes:** `dashboard_meetings:read:admin`<br>
21     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Resource-intensive`<br><br>
22     * **Prerequisites:** <br>
23     * * Business or a higher plan.<br><br>
24     *
25     * **Parameters:**
26     *
27     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
28     *  
29     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
30     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
31     * * `to: chrono::NaiveDate` -- Start Date.
32     * * `page_size: i64` -- The number of records returned within a single API call.
33     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
34     * * `include_fields: crate::types::IncludeFields` -- Set the value of this field to "tracking_fields" if you would like to include tracking fields of each meeting in the response.
35     */
36    pub async fn meeting(
37        &self,
38        type_: crate::types::DashboardMeetingsType,
39        from: chrono::NaiveDate,
40        to: chrono::NaiveDate,
41        page_size: i64,
42        next_page_token: &str,
43        include_fields: crate::types::IncludeFields,
44    ) -> ClientResult<crate::Response<crate::types::DashboardMeetingsResponseAllOf>> {
45        let mut query_args: Vec<(String, String)> = Default::default();
46        if !from.to_string().is_empty() {
47            query_args.push(("from".to_string(), from.to_string()));
48        }
49        if !include_fields.to_string().is_empty() {
50            query_args.push(("include_fields".to_string(), include_fields.to_string()));
51        }
52        if !next_page_token.is_empty() {
53            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
54        }
55        if page_size > 0 {
56            query_args.push(("page_size".to_string(), page_size.to_string()));
57        }
58        if !to.to_string().is_empty() {
59            query_args.push(("to".to_string(), to.to_string()));
60        }
61        if !type_.to_string().is_empty() {
62            query_args.push(("type".to_string(), type_.to_string()));
63        }
64        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
65        let url = self
66            .client
67            .url(&format!("/metrics/meetings?{}", query_), None);
68        self.client
69            .get(
70                &url,
71                crate::Message {
72                    body: None,
73                    content_type: None,
74                },
75            )
76            .await
77    }
78    /**
79     * Get meeting details.
80     *
81     * This function performs a `GET` to the `/metrics/meetings/{meetingId}` endpoint.
82     *
83     * Get details on live or past meetings. This overview will show if features such as audio, video, screen sharing, and recording were being used in the meeting. You can also see the license types of each user on your account.<br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.  <br>
84     * **Scopes:** `dashboard_meetings:read:admin`<br>
85     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
86     * **Prerequisites:** <br>
87     * * Business or a higher plan.
88     *
89     * **Parameters:**
90     *
91     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
92     *   
93     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
94     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
95     *  
96     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
97     */
98    pub async fn meeting_detail(
99        &self,
100        meeting_id: &str,
101        type_: crate::types::DashboardMeetingsType,
102    ) -> ClientResult<crate::Response<crate::types::MeetingMetric>> {
103        let mut query_args: Vec<(String, String)> = Default::default();
104        if !type_.to_string().is_empty() {
105            query_args.push(("type".to_string(), type_.to_string()));
106        }
107        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
108        let url = self.client.url(
109            &format!(
110                "/metrics/meetings/{}?{}",
111                crate::progenitor_support::encode_path(meeting_id),
112                query_
113            ),
114            None,
115        );
116        self.client
117            .get(
118                &url,
119                crate::Message {
120                    body: None,
121                    content_type: None,
122                },
123            )
124            .await
125    }
126    /**
127     * List meeting participants.
128     *
129     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants` endpoint.
130     *
131     * Get a list of participants from live or past meetings.<br><br>
132     * If you do not provide the `type` query parameter, the default value will be set to `live` and thus, you will only see metrics for participants in a live meeting, if any meeting is currently being conducted. To view metrics on past meeting participants, provide the appropriate value for `type`. <br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.
133     *
134     * **Scopes:** `dashboard_meetings:read:admin`<br>
135     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
136     * **Prerequisites:** Business or a higher plan.
137     *
138     * **Parameters:**
139     *
140     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
141     *   
142     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
143     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
144     *  
145     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
146     * * `page_size: i64` -- The number of records returned within a single API call.
147     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
148     * * `include_fields: crate::types::DashboardMeetingParticipantsIncludeFields` -- Provide `registrant_id` as the value for this field if you would like to see the registrant ID attribute in the response of this API call. A registrant ID is a unique identifier of a [meeting registrant](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrants). This is not supported for `live` meeting types.
149     */
150    pub async fn meeting_participant(
151        &self,
152        meeting_id: &str,
153        type_: crate::types::DashboardMeetingsType,
154        page_size: i64,
155        next_page_token: &str,
156        include_fields: crate::types::DashboardMeetingParticipantsIncludeFields,
157    ) -> ClientResult<crate::Response<crate::types::DashboardMeetingParticipantsResponseAllOf>>
158    {
159        let mut query_args: Vec<(String, String)> = Default::default();
160        if !include_fields.to_string().is_empty() {
161            query_args.push(("include_fields".to_string(), include_fields.to_string()));
162        }
163        if !next_page_token.is_empty() {
164            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
165        }
166        if page_size > 0 {
167            query_args.push(("page_size".to_string(), page_size.to_string()));
168        }
169        if !type_.to_string().is_empty() {
170            query_args.push(("type".to_string(), type_.to_string()));
171        }
172        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
173        let url = self.client.url(
174            &format!(
175                "/metrics/meetings/{}/participants?{}",
176                crate::progenitor_support::encode_path(meeting_id),
177                query_
178            ),
179            None,
180        );
181        self.client
182            .get(
183                &url,
184                crate::Message {
185                    body: None,
186                    content_type: None,
187                },
188            )
189            .await
190    }
191    /**
192     * Get meeting participant QoS.
193     *
194     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants/{participantId}/qos` endpoint.
195     *
196     * Use this API to retrieve the quality of service (QoS) for participants from live or past meetings. The data returned indicates the connection quality for sending/receiving video, audio, and shared content. The API returns this data for either the API request or when the API request was last received.
197     *
198     * This API will **not** return data if there is no data being sent or received at the time of request.
199     * <p style="background-color:#e1f5fe; color:#01579b; padding:8px"> <b>Note:</b> When the sender sends its data, a timestamp is attached to the sender’s data packet. The receiver then returns this timestamp to the sender. This helps determine the upstream and downstream latency, which includes the application processing time. The latency data returned is the five second average and five second maximum.</p>
200     *
201     * **Scopes:** `dashboard_meetings:read:admin`<br>**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`
202     *
203     * **Parameters:**
204     *
205     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
206     *   
207     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
208     * * `participant_id: &str` -- User's first name.
209     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
210     *  
211     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
212     */
213    pub async fn meeting_participant_qo(
214        &self,
215        meeting_id: &str,
216        participant_id: &str,
217        type_: crate::types::DashboardMeetingsType,
218    ) -> ClientResult<crate::Response<crate::types::ParticipantQos>> {
219        let mut query_args: Vec<(String, String)> = Default::default();
220        if !type_.to_string().is_empty() {
221            query_args.push(("type".to_string(), type_.to_string()));
222        }
223        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
224        let url = self.client.url(
225            &format!(
226                "/metrics/meetings/{}/participants/{}/qos?{}",
227                crate::progenitor_support::encode_path(meeting_id),
228                crate::progenitor_support::encode_path(participant_id),
229                query_
230            ),
231            None,
232        );
233        self.client
234            .get(
235                &url,
236                crate::Message {
237                    body: None,
238                    content_type: None,
239                },
240            )
241            .await
242    }
243    /**
244     * List meeting participants QoS.
245     *
246     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants/qos` endpoint.
247     *
248     * Get a list of meeting participants from live or past meetings along with the quality of service they recieve during the meeting such as connection quality for sending/receiving video, audio, and shared content.<br>If you do not provide the `type` query parameter, the default value will be set to `live` and thus, you will only see metrics for participants in a live meeting, if any meeting is currently being conducted. To view metrics on past meeting participants, provide the appropriate value for `type`.<br> <br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.<br><br>
249     * **Scopes:** `dashboard_meetings:read:admin`<br>
250     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
251     * **Prerequisites:** <br>
252     * * Business or a higher plan.
253     *
254     * **Parameters:**
255     *
256     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
257     *   
258     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
259     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
260     *  
261     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
262     * * `page_size: i64` -- The number of items returned per page.
263     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
264     */
265    pub async fn meeting_participants_qo(
266        &self,
267        meeting_id: &str,
268        type_: crate::types::DashboardMeetingsType,
269        page_size: i64,
270        next_page_token: &str,
271    ) -> ClientResult<crate::Response<crate::types::Domains>> {
272        let mut query_args: Vec<(String, String)> = Default::default();
273        if !next_page_token.is_empty() {
274            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
275        }
276        if page_size > 0 {
277            query_args.push(("page_size".to_string(), page_size.to_string()));
278        }
279        if !type_.to_string().is_empty() {
280            query_args.push(("type".to_string(), type_.to_string()));
281        }
282        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
283        let url = self.client.url(
284            &format!(
285                "/metrics/meetings/{}/participants/qos?{}",
286                crate::progenitor_support::encode_path(meeting_id),
287                query_
288            ),
289            None,
290        );
291        self.client
292            .get(
293                &url,
294                crate::Message {
295                    body: None,
296                    content_type: None,
297                },
298            )
299            .await
300    }
301    /**
302     * Get sharing/recording details.
303     *
304     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants/sharing` endpoint.
305     *
306     * Retrieve the sharing and recording details of participants from live or past meetings.<br>
307     * **Scopes:** `dashboard_meetings:read:admin`<br>
308     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
309     * **Prerequisites:** <br>
310     * * Business or a higher plan.
311     *
312     * **Parameters:**
313     *
314     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
315     *   
316     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
317     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
318     *  
319     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
320     * * `page_size: i64` -- The number of records returned within a single API call.
321     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceed the current page size. The expiration period for this token is 15 minutes.
322     */
323    pub async fn meeting_participant_share(
324        &self,
325        meeting_id: &str,
326        type_: crate::types::DashboardMeetingsType,
327        page_size: i64,
328        next_page_token: &str,
329    ) -> ClientResult<crate::Response<crate::types::DashboardMeetingParticipantShareResponseAllOf>>
330    {
331        let mut query_args: Vec<(String, String)> = Default::default();
332        if !next_page_token.is_empty() {
333            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
334        }
335        if page_size > 0 {
336            query_args.push(("page_size".to_string(), page_size.to_string()));
337        }
338        if !type_.to_string().is_empty() {
339            query_args.push(("type".to_string(), type_.to_string()));
340        }
341        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
342        let url = self.client.url(
343            &format!(
344                "/metrics/meetings/{}/participants/sharing?{}",
345                crate::progenitor_support::encode_path(meeting_id),
346                query_
347            ),
348            None,
349        );
350        self.client
351            .get(
352                &url,
353                crate::Message {
354                    body: None,
355                    content_type: None,
356                },
357            )
358            .await
359    }
360    /**
361     * List webinars.
362     *
363     * This function performs a `GET` to the `/metrics/webinars` endpoint.
364     *
365     * List all the live or past webinars from a specified period of time. <br><br>
366     * **Scopes:** `dashboard_webinars:read:admin`<br>
367     * **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Resource-intensive`<br>
368     * **Prerequisites:**<br>
369     * * Business, Education or API Plan with Webinar add-on.
370     *
371     *
372     *
373     *
374     * **Parameters:**
375     *
376     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
377     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
378     * * `to: chrono::NaiveDate` -- Start Date.
379     * * `page_size: i64` -- The number of records returned within a single API call.
380     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
381     */
382    pub async fn webinar(
383        &self,
384        type_: crate::types::DashboardWebinarsType,
385        from: chrono::NaiveDate,
386        to: chrono::NaiveDate,
387        page_size: i64,
388        next_page_token: &str,
389    ) -> ClientResult<crate::Response<crate::types::DashboardWebinarsResponseAllOf>> {
390        let mut query_args: Vec<(String, String)> = Default::default();
391        if !from.to_string().is_empty() {
392            query_args.push(("from".to_string(), from.to_string()));
393        }
394        if !next_page_token.is_empty() {
395            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
396        }
397        if page_size > 0 {
398            query_args.push(("page_size".to_string(), page_size.to_string()));
399        }
400        if !to.to_string().is_empty() {
401            query_args.push(("to".to_string(), to.to_string()));
402        }
403        if !type_.to_string().is_empty() {
404            query_args.push(("type".to_string(), type_.to_string()));
405        }
406        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
407        let url = self
408            .client
409            .url(&format!("/metrics/webinars?{}", query_), None);
410        self.client
411            .get(
412                &url,
413                crate::Message {
414                    body: None,
415                    content_type: None,
416                },
417            )
418            .await
419    }
420    /**
421     * Get webinar details.
422     *
423     * This function performs a `GET` to the `/metrics/webinars/{webinarId}` endpoint.
424     *
425     * Retrieve details from live or past webinars.<br><br>
426     * **Scopes:** `dashboard_webinars:read:admin`<br>
427     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
428     * **Prerequisites:**<br>
429     * * Business, Education or API Plan with Webinar add-on.
430     *
431     *
432     *
433     * **Parameters:**
434     *
435     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
436     *   
437     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
438     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
439     */
440    pub async fn webinar_detail(
441        &self,
442        webinar_id: &str,
443        type_: crate::types::DashboardWebinarsType,
444    ) -> ClientResult<crate::Response<crate::types::Webinars>> {
445        let mut query_args: Vec<(String, String)> = Default::default();
446        if !type_.to_string().is_empty() {
447            query_args.push(("type".to_string(), type_.to_string()));
448        }
449        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
450        let url = self.client.url(
451            &format!(
452                "/metrics/webinars/{}?{}",
453                crate::progenitor_support::encode_path(webinar_id),
454                query_
455            ),
456            None,
457        );
458        self.client
459            .get(
460                &url,
461                crate::Message {
462                    body: None,
463                    content_type: None,
464                },
465            )
466            .await
467    }
468    /**
469     * Get webinar participants.
470     *
471     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants` endpoint.
472     *
473     * Retrieve details on participants from live or past webinars.<br><br>
474     * **Scopes:** `dashboard_webinars:read:admin`<br>
475     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
476     * **Prerequisites:**<br>
477     * * Business, Education or API Plan with Webinar add-on.
478     *
479     *
480     *
481     * **Parameters:**
482     *
483     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
484     *   
485     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
486     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
487     * * `page_size: i64` -- The number of records returned within a single API call.
488     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
489     * * `include_fields: crate::types::DashboardMeetingParticipantsIncludeFields` -- Provide `registrant_id` as the value for this field if you would like to see the registrant ID attribute in the response of this API call. A registrant ID is a unique identifier of a [meeting registrant](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrants). This is not supported for `live` meeting types.
490     */
491    pub async fn webinar_participant(
492        &self,
493        webinar_id: &str,
494        type_: crate::types::DashboardWebinarsType,
495        page_size: i64,
496        next_page_token: &str,
497        include_fields: crate::types::DashboardMeetingParticipantsIncludeFields,
498    ) -> ClientResult<crate::Response<crate::types::DashboardWebinarParticipantsResponseAllOf>>
499    {
500        let mut query_args: Vec<(String, String)> = Default::default();
501        if !include_fields.to_string().is_empty() {
502            query_args.push(("include_fields".to_string(), include_fields.to_string()));
503        }
504        if !next_page_token.is_empty() {
505            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
506        }
507        if page_size > 0 {
508            query_args.push(("page_size".to_string(), page_size.to_string()));
509        }
510        if !type_.to_string().is_empty() {
511            query_args.push(("type".to_string(), type_.to_string()));
512        }
513        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
514        let url = self.client.url(
515            &format!(
516                "/metrics/webinars/{}/participants?{}",
517                crate::progenitor_support::encode_path(webinar_id),
518                query_
519            ),
520            None,
521        );
522        self.client
523            .get(
524                &url,
525                crate::Message {
526                    body: None,
527                    content_type: None,
528                },
529            )
530            .await
531    }
532    /**
533     * Get webinar participant QoS.
534     *
535     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants/{participantId}/qos` endpoint.
536     *
537     * Retrieve details on the quality of service that participants from live or past webinars recieved.<br>This data indicates the connection quality for sending/receiving video, audio, and shared content. If nothing is being sent or received at that time, no information will be shown in the fields.<br>
538     * **Scopes:** `dashboard_webinars:read:admin`<br>
539     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy` <br>
540     * **Prerequisites:** <br>
541     * * Business, Education or API Plan with Zoom Rooms set up.
542     *
543     *
544     * **Parameters:**
545     *
546     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
547     *   
548     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
549     * * `participant_id: &str` -- User's first name.
550     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
551     */
552    pub async fn webinar_participant_qo(
553        &self,
554        webinar_id: &str,
555        participant_id: &str,
556        type_: crate::types::DashboardWebinarsType,
557    ) -> ClientResult<crate::Response<crate::types::ParticipantQos>> {
558        let mut query_args: Vec<(String, String)> = Default::default();
559        if !type_.to_string().is_empty() {
560            query_args.push(("type".to_string(), type_.to_string()));
561        }
562        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
563        let url = self.client.url(
564            &format!(
565                "/metrics/webinars/{}/participants/{}/qos?{}",
566                crate::progenitor_support::encode_path(webinar_id),
567                crate::progenitor_support::encode_path(participant_id),
568                query_
569            ),
570            None,
571        );
572        self.client
573            .get(
574                &url,
575                crate::Message {
576                    body: None,
577                    content_type: None,
578                },
579            )
580            .await
581    }
582    /**
583     * List webinar participant QoS.
584     *
585     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants/qos` endpoint.
586     *
587     * Retrieve a list of participants from live or past webinars and the quality of service they received.<br>This data indicates the connection quality for sending/receiving video, audio, and shared content. If nothing is being sent or received at that time, no information will be shown in the fields.<br>
588     * **Scopes:** `dashboard_webinars:read:admin`<br>
589     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
590     * **Prerequisites:**
591     * * Business, Education or API Plan with Webinar add-on.
592     *
593     *
594     *
595     * **Parameters:**
596     *
597     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
598     *   
599     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
600     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
601     * * `page_size: i64` -- The number of items returned per page.
602     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
603     */
604    pub async fn webinar_participants_qo(
605        &self,
606        webinar_id: &str,
607        type_: crate::types::DashboardWebinarsType,
608        page_size: i64,
609        next_page_token: &str,
610    ) -> ClientResult<crate::Response<crate::types::Domains>> {
611        let mut query_args: Vec<(String, String)> = Default::default();
612        if !next_page_token.is_empty() {
613            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
614        }
615        if page_size > 0 {
616            query_args.push(("page_size".to_string(), page_size.to_string()));
617        }
618        if !type_.to_string().is_empty() {
619            query_args.push(("type".to_string(), type_.to_string()));
620        }
621        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
622        let url = self.client.url(
623            &format!(
624                "/metrics/webinars/{}/participants/qos?{}",
625                crate::progenitor_support::encode_path(webinar_id),
626                query_
627            ),
628            None,
629        );
630        self.client
631            .get(
632                &url,
633                crate::Message {
634                    body: None,
635                    content_type: None,
636                },
637            )
638            .await
639    }
640    /**
641     * Get sharing/recording details.
642     *
643     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants/sharing` endpoint.
644     *
645     * Retrieve the sharing and recording details of participants from live or past webinars. <br><br>
646     * **Scopes:** `dashboard_webinars:read:admin`<br>
647     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy` <br>
648     * **Prerequisites:**<br>
649     * * Business, Education or API Plan with Webinar add-on.
650     *
651     *
652     *
653     * **Parameters:**
654     *
655     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
656     *   
657     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
658     * * `type_: crate::types::DashboardWebinarsType` -- The webinar type.
659     * * `page_size: i64` -- The number of records returned within a single API call.
660     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceed the current page size. The expiration period for this token is 15 minutes.
661     */
662    pub async fn webinar_participant_share(
663        &self,
664        webinar_id: &str,
665        type_: crate::types::DashboardWebinarsType,
666        page_size: i64,
667        next_page_token: &str,
668    ) -> ClientResult<crate::Response<crate::types::DashboardMeetingParticipantShareResponseAllOf>>
669    {
670        let mut query_args: Vec<(String, String)> = Default::default();
671        if !next_page_token.is_empty() {
672            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
673        }
674        if page_size > 0 {
675            query_args.push(("page_size".to_string(), page_size.to_string()));
676        }
677        if !type_.to_string().is_empty() {
678            query_args.push(("type".to_string(), type_.to_string()));
679        }
680        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
681        let url = self.client.url(
682            &format!(
683                "/metrics/webinars/{}/participants/sharing?{}",
684                crate::progenitor_support::encode_path(webinar_id),
685                query_
686            ),
687            None,
688        );
689        self.client
690            .get(
691                &url,
692                crate::Message {
693                    body: None,
694                    content_type: None,
695                },
696            )
697            .await
698    }
699    /**
700     * List Zoom Rooms.
701     *
702     * This function performs a `GET` to the `/metrics/zoomrooms` endpoint.
703     *
704     * List information on all Zoom Rooms in an account.<br><br>
705     * **Scopes:** `dashboard_zr:read:admin`
706     *
707     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Resource-intensive`<br>
708     *  **Prerequisites:**<br>
709     * * Business, Education or API Plan with Zoom Rooms set up.
710     *
711     *
712     *
713     *
714     * **Parameters:**
715     *
716     * * `page_size: i64` -- The number of records returned within a single API call.
717     * * `page_number: i64` -- The page number of the current page in the returned records.
718     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
719     */
720    pub async fn zoom_room(
721        &self,
722        page_size: i64,
723        page_number: i64,
724        next_page_token: &str,
725    ) -> ClientResult<crate::Response<crate::types::Domains>> {
726        let mut query_args: Vec<(String, String)> = Default::default();
727        if !next_page_token.is_empty() {
728            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
729        }
730        if page_number > 0 {
731            query_args.push(("page_number".to_string(), page_number.to_string()));
732        }
733        if page_size > 0 {
734            query_args.push(("page_size".to_string(), page_size.to_string()));
735        }
736        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
737        let url = self
738            .client
739            .url(&format!("/metrics/zoomrooms?{}", query_), None);
740        self.client
741            .get(
742                &url,
743                crate::Message {
744                    body: None,
745                    content_type: None,
746                },
747            )
748            .await
749    }
750    /**
751     * Get Zoom Rooms details.
752     *
753     * This function performs a `GET` to the `/metrics/zoomrooms/{zoomroomId}` endpoint.
754     *
755     * The Zoom Rooms dashboard metrics lets you know the type of configuration a Zoom room has and details on the meetings held in that room.
756     *
757     * Use this API to retrieve information on a specific room.<br><br>
758     * **Scopes:** `dashboard_zr:read:admin`<br> <br>
759     *
760     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`**Prerequisites:**<br>
761     * * Business, Education or API Plan with Zoom Rooms set up.
762     *
763     *
764     * **Parameters:**
765     *
766     * * `zoomroom_id: &str` -- User's first name.
767     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
768     * * `to: chrono::NaiveDate` -- Start Date.
769     * * `page_size: i64` -- The number of records returned within a single API call.
770     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
771     */
772    pub async fn zoom_room_dashboards(
773        &self,
774        zoomroom_id: &str,
775        from: chrono::NaiveDate,
776        to: chrono::NaiveDate,
777        page_size: i64,
778        next_page_token: &str,
779    ) -> ClientResult<crate::Response<crate::types::Domains>> {
780        let mut query_args: Vec<(String, String)> = Default::default();
781        if !from.to_string().is_empty() {
782            query_args.push(("from".to_string(), from.to_string()));
783        }
784        if !next_page_token.is_empty() {
785            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
786        }
787        if page_size > 0 {
788            query_args.push(("page_size".to_string(), page_size.to_string()));
789        }
790        if !to.to_string().is_empty() {
791            query_args.push(("to".to_string(), to.to_string()));
792        }
793        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
794        let url = self.client.url(
795            &format!(
796                "/metrics/zoomrooms/{}?{}",
797                crate::progenitor_support::encode_path(zoomroom_id),
798                query_
799            ),
800            None,
801        );
802        self.client
803            .get(
804                &url,
805                crate::Message {
806                    body: None,
807                    content_type: None,
808                },
809            )
810            .await
811    }
812    /**
813     * Get CRC port usage.
814     *
815     * This function performs a `GET` to the `/metrics/crc` endpoint.
816     *
817     * A Cloud Room Connector allows H.323/SIP endpoints to connect to a Zoom meeting.
818     *
819     * Use this API to get the hour by hour CRC Port usage for a specified period of time. <aside class='notice'>We will provide the report for a maximum of one month. For example, if "from" is set to "2017-08-05" and "to" is set to "2017-10-10", we will adjust "from" to "2017-09-10".</aside><br><br>
820     * **Prerequisites:**<br>
821     * * Business, Education or API Plan.
822     * * Room Connector must be enabled on the account.<br><br>
823     * **Scopes:** `dashboard_crc:read:admin`<br>
824     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`
825     *
826     * **Parameters:**
827     *
828     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
829     * * `to: chrono::NaiveDate` -- Start Date.
830     */
831    pub async fn crc(
832        &self,
833        from: chrono::NaiveDate,
834        to: chrono::NaiveDate,
835    ) -> ClientResult<crate::Response<crate::types::Domains>> {
836        let mut query_args: Vec<(String, String)> = Default::default();
837        if !from.to_string().is_empty() {
838            query_args.push(("from".to_string(), from.to_string()));
839        }
840        if !to.to_string().is_empty() {
841            query_args.push(("to".to_string(), to.to_string()));
842        }
843        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
844        let url = self.client.url(&format!("/metrics/crc?{}", query_), None);
845        self.client
846            .get(
847                &url,
848                crate::Message {
849                    body: None,
850                    content_type: None,
851                },
852            )
853            .await
854    }
855    /**
856     * Get IM metrics.
857     *
858     * This function performs a `GET` to the `/metrics/im` endpoint.
859     *
860     * Get [metrics](https://support.zoom.us/hc/en-us/articles/204654719-Dashboard#h_cc7e9749-1c70-4afb-a9a2-9680654821e4) on how users are utilizing the Zoom Chat client.
861     *
862     * You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.<p style="background-color:#e1f5fe; color:#000000; padding:8px"><b>Deprecated:</b> We will completely deprecate this endpoint in a future release. You can continue using this endpoint to query data for messages sent <b>before</b> July 1, 2021.</br></br>To get metrics on chat messages sent <b>on and after</b> July 1, 2021, use the <a href="https://marketplace.zoom.us/docs/api-reference/zoom-api/dashboards/dashboardchat">Get chat metrics API</a>.</p>
863     *
864     * **Scopes:** `dashboard_im:read:admin`<br>**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Resource-intensive`
865     *
866     * **Prerequisites:**
867     *
868     * * Business or a higher plan.
869     *
870     * **Parameters:**
871     *
872     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
873     * * `to: chrono::NaiveDate` -- Start Date.
874     * * `page_size: i64` -- The number of records returned within a single API call.
875     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
876     */
877    pub async fn im(
878        &self,
879        from: chrono::NaiveDate,
880        to: chrono::NaiveDate,
881        page_size: i64,
882        next_page_token: &str,
883    ) -> ClientResult<crate::Response<crate::types::DashboardImResponseAllOf>> {
884        let mut query_args: Vec<(String, String)> = Default::default();
885        if !from.to_string().is_empty() {
886            query_args.push(("from".to_string(), from.to_string()));
887        }
888        if !next_page_token.is_empty() {
889            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
890        }
891        if page_size > 0 {
892            query_args.push(("page_size".to_string(), page_size.to_string()));
893        }
894        if !to.to_string().is_empty() {
895            query_args.push(("to".to_string(), to.to_string()));
896        }
897        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
898        let url = self.client.url(&format!("/metrics/im?{}", query_), None);
899        self.client
900            .get(
901                &url,
902                crate::Message {
903                    body: None,
904                    content_type: None,
905                },
906            )
907            .await
908    }
909    /**
910     * Get chat metrics.
911     *
912     * This function performs a `GET` to the `/metrics/chat` endpoint.
913     *
914     * Get [metrics](https://support.zoom.us/hc/en-us/articles/204654719-Dashboard#h_cc7e9749-1c70-4afb-a9a2-9680654821e4) for how users are utilizing Zoom Chat to send messages.
915     *
916     * Use the `from` and `to` query parameters to specify a monthly date range for the dashboard data. The monthly date range must be within the last six months.
917     *
918     * > **Note:** To query chat metrics from July 1, 2021 and later, use this endpoint instead of the [Get IM metrics API](https://marketplace.zoom.us/docs/api-reference/zoom-api/dashboards/dashboardim).
919     *
920     * **Scope:** `dashboard_im:read:admin`</br>**[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Resource-intensive`
921     *
922     * **Prerequisites:**
923     *
924     * * Business or a higher plan
925     *
926     * **Parameters:**
927     *
928     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
929     * * `to: chrono::NaiveDate` -- Start Date.
930     * * `page_size: i64` -- The number of records returned within a single API call.
931     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
932     */
933    pub async fn chat(
934        &self,
935        from: chrono::NaiveDate,
936        to: chrono::NaiveDate,
937        page_size: i64,
938        next_page_token: &str,
939    ) -> ClientResult<crate::Response<crate::types::DashboardChatResponseAllOf>> {
940        let mut query_args: Vec<(String, String)> = Default::default();
941        if !from.to_string().is_empty() {
942            query_args.push(("from".to_string(), from.to_string()));
943        }
944        if !next_page_token.is_empty() {
945            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
946        }
947        if page_size > 0 {
948            query_args.push(("page_size".to_string(), page_size.to_string()));
949        }
950        if !to.to_string().is_empty() {
951            query_args.push(("to".to_string(), to.to_string()));
952        }
953        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
954        let url = self.client.url(&format!("/metrics/chat?{}", query_), None);
955        self.client
956            .get(
957                &url,
958                crate::Message {
959                    body: None,
960                    content_type: None,
961                },
962            )
963            .await
964    }
965    /**
966     * List Zoom meetings client feedback.
967     *
968     * This function performs a `GET` to the `/metrics/client/feedback` endpoint.
969     *
970     * Retrieve survey results from [Zoom meetings client feedback](https://support.zoom.us/hc/en-us/articles/115005855266-End-of-Meeting-Feedback-Survey#h_e30d552b-6d8e-4e0a-a588-9ca8180c4dbf). <br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.
971     *
972     * **Prerequisites:**
973     * * Business or higher account
974     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) enabled.
975     *
976     * **Scope:** `account:read:admin`<br>
977     *
978     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`
979     *
980     * **Parameters:**
981     *
982     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
983     * * `to: chrono::NaiveDate` -- Start Date.
984     */
985    pub async fn client_feedback(
986        &self,
987        from: chrono::NaiveDate,
988        to: chrono::NaiveDate,
989    ) -> ClientResult<crate::Response<crate::types::DashboardClientFeedbackResponse>> {
990        let mut query_args: Vec<(String, String)> = Default::default();
991        if !from.to_string().is_empty() {
992            query_args.push(("from".to_string(), from.to_string()));
993        }
994        if !to.to_string().is_empty() {
995            query_args.push(("to".to_string(), to.to_string()));
996        }
997        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
998        let url = self
999            .client
1000            .url(&format!("/metrics/client/feedback?{}", query_), None);
1001        self.client
1002            .get(
1003                &url,
1004                crate::Message {
1005                    body: None,
1006                    content_type: None,
1007                },
1008            )
1009            .await
1010    }
1011    /**
1012     * Get top 25 issues of Zoom Rooms.
1013     *
1014     * This function performs a `GET` to the `/metrics/zoomrooms/issues` endpoint.
1015     *
1016     * Get top 25 issues of Zoom Rooms.<br>
1017     * **Scopes:** `dashboard_zr:read:admin`<br>
1018     *
1019     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1020     *  **Prerequisites:**<br>
1021     * * Business, Education or API Plan with Zoom Rooms set up.
1022     *
1023     *
1024     *
1025     * **Parameters:**
1026     *
1027     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
1028     * * `to: chrono::NaiveDate` -- Start Date.
1029     */
1030    pub async fn zoom_room_issue(
1031        &self,
1032        from: chrono::NaiveDate,
1033        to: chrono::NaiveDate,
1034    ) -> ClientResult<crate::Response<crate::types::Domains>> {
1035        let mut query_args: Vec<(String, String)> = Default::default();
1036        if !from.to_string().is_empty() {
1037            query_args.push(("from".to_string(), from.to_string()));
1038        }
1039        if !to.to_string().is_empty() {
1040            query_args.push(("to".to_string(), to.to_string()));
1041        }
1042        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1043        let url = self
1044            .client
1045            .url(&format!("/metrics/zoomrooms/issues?{}", query_), None);
1046        self.client
1047            .get(
1048                &url,
1049                crate::Message {
1050                    body: None,
1051                    content_type: None,
1052                },
1053            )
1054            .await
1055    }
1056    /**
1057     * Get top 25 Zoom Rooms with issues.
1058     *
1059     * This function performs a `GET` to the `/metrics/issues/zoomrooms` endpoint.
1060     *
1061     * Get information on top 25 Zoom Rooms with issues in a month. The month specified with the "from" and "to" range should fall within the last six months.<br>
1062     * **Scope:** `dashboard_home:read:admin`<br>
1063     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1064     * **Prerequisites:**<br>
1065     * * Business or a higher plan.
1066     * * Zoom Room must be enabled in the account.
1067     *
1068     * **Parameters:**
1069     *
1070     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
1071     * * `to: chrono::NaiveDate` -- Start Date.
1072     */
1073    pub async fn issue_zoom_room(
1074        &self,
1075        from: chrono::NaiveDate,
1076        to: chrono::NaiveDate,
1077    ) -> ClientResult<crate::Response<crate::types::DashboardIssueZoomRoomResponseAllOf>> {
1078        let mut query_args: Vec<(String, String)> = Default::default();
1079        if !from.to_string().is_empty() {
1080            query_args.push(("from".to_string(), from.to_string()));
1081        }
1082        if !to.to_string().is_empty() {
1083            query_args.push(("to".to_string(), to.to_string()));
1084        }
1085        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1086        let url = self
1087            .client
1088            .url(&format!("/metrics/issues/zoomrooms?{}", query_), None);
1089        self.client
1090            .get(
1091                &url,
1092                crate::Message {
1093                    body: None,
1094                    content_type: None,
1095                },
1096            )
1097            .await
1098    }
1099    /**
1100     * Get issues of Zoom Rooms.
1101     *
1102     * This function performs a `GET` to the `/metrics/issues/zoomrooms/{zoomroomId}` endpoint.
1103     *
1104     * Get information about the issues that occured on the Top 25 **Zoom Rooms with issues** in an acount. <br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.
1105     *
1106     * **Scope:** `dashboard_home:read:admin`<br>
1107     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1108     * **Prerequisites:** <br>
1109     * * Business or a higher plan.
1110     * * Zoom Room must be enabled in the account.
1111     *
1112     * **Parameters:**
1113     *
1114     * * `zoomroom_id: &str` -- User's first name.
1115     * * `from: chrono::NaiveDate` -- Start date in 'yyyy-mm-dd' format. The date range defined by the "from" and "to" parameters should only be one month as the report includes only one month worth of data at once.
1116     * * `to: chrono::NaiveDate` -- Start Date.
1117     * * `page_size: i64` -- The number of records returned within a single API call.
1118     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
1119     */
1120    pub async fn issue_detail_zoom_room(
1121        &self,
1122        zoomroom_id: &str,
1123        from: chrono::NaiveDate,
1124        to: chrono::NaiveDate,
1125        page_size: i64,
1126        next_page_token: &str,
1127    ) -> ClientResult<crate::Response<crate::types::DashboardIssueDetailZoomRoomResponseAllOf>>
1128    {
1129        let mut query_args: Vec<(String, String)> = Default::default();
1130        if !from.to_string().is_empty() {
1131            query_args.push(("from".to_string(), from.to_string()));
1132        }
1133        if !next_page_token.is_empty() {
1134            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
1135        }
1136        if page_size > 0 {
1137            query_args.push(("page_size".to_string(), page_size.to_string()));
1138        }
1139        if !to.to_string().is_empty() {
1140            query_args.push(("to".to_string(), to.to_string()));
1141        }
1142        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1143        let url = self.client.url(
1144            &format!(
1145                "/metrics/issues/zoomrooms/{}?{}",
1146                crate::progenitor_support::encode_path(zoomroom_id),
1147                query_
1148            ),
1149            None,
1150        );
1151        self.client
1152            .get(
1153                &url,
1154                crate::Message {
1155                    body: None,
1156                    content_type: None,
1157                },
1158            )
1159            .await
1160    }
1161    /**
1162     * Get zoom meetings client feedback.
1163     *
1164     * This function performs a `GET` to the `/metrics/client/feedback/{feedbackId}` endpoint.
1165     *
1166     * Retrieve detailed information on a [Zoom meetings client feedback](https://support.zoom.us/hc/en-us/articles/115005855266-End-of-Meeting-Feedback-Survey#h_e30d552b-6d8e-4e0a-a588-9ca8180c4dbf). <br> You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months.
1167     *
1168     * **Prerequisites:**
1169     * * Business or higher account
1170     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) enabled.
1171     *
1172     * **Scope:** `dashboard_home:read:admin`<br>
1173     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`
1174     *
1175     * `
1176     *
1177     * **Parameters:**
1178     *
1179     * * `feedback_id: &str` -- User's first name.
1180     * * `from: chrono::NaiveDate` -- Start Date.
1181     * * `to: chrono::NaiveDate` -- Start Date.
1182     * * `page_size: i64` -- Account seats.
1183     * * `next_page_token: &str` -- User's first name.
1184     */
1185    pub async fn client_feedback_detail(
1186        &self,
1187        feedback_id: &str,
1188        from: chrono::NaiveDate,
1189        to: chrono::NaiveDate,
1190        page_size: i64,
1191        next_page_token: &str,
1192    ) -> ClientResult<crate::Response<crate::types::DashboardClientFeedbackDetailResponseAllOf>>
1193    {
1194        let mut query_args: Vec<(String, String)> = Default::default();
1195        if !from.to_string().is_empty() {
1196            query_args.push(("from".to_string(), from.to_string()));
1197        }
1198        if !next_page_token.is_empty() {
1199            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
1200        }
1201        if page_size > 0 {
1202            query_args.push(("page_size".to_string(), page_size.to_string()));
1203        }
1204        if !to.to_string().is_empty() {
1205            query_args.push(("to".to_string(), to.to_string()));
1206        }
1207        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1208        let url = self.client.url(
1209            &format!(
1210                "/metrics/client/feedback/{}?{}",
1211                crate::progenitor_support::encode_path(feedback_id),
1212                query_
1213            ),
1214            None,
1215        );
1216        self.client
1217            .get(
1218                &url,
1219                crate::Message {
1220                    body: None,
1221                    content_type: None,
1222                },
1223            )
1224            .await
1225    }
1226    /**
1227     * List client meeting satisfaction.
1228     *
1229     * This function performs a `GET` to the `/metrics/client/satisfaction` endpoint.
1230     *
1231     * If the [End of Meeting Feedback Survey](https://support.zoom.us/hc/en-us/articles/115005855266) option is enabled, attendees will be prompted with a survey window where they can tap either the **Thumbs Up** or **Thumbs Down** button that indicates their Zoom meeting experience. With this API, you can get information on the attendees' meeting satisfaction. Specify a monthly date range for the query using the from and to query parameters. The month should fall within the last six months.
1232     *
1233     * To get information on the survey results with negative experiences (indicated by **Thumbs Down**), use the [Get Zoom Meetings Client Feedback API](https://marketplace.zoom.us/docs/api-reference/zoom-api/dashboards/dashboardclientfeedbackdetail).<br>
1234     * **Scopes:** `dashboard:read:admin`<br>
1235     *  **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`
1236     *
1237     * **Parameters:**
1238     *
1239     * * `from: chrono::NaiveDate` -- The start date for the query in “yyyy-mm-dd” format. .
1240     * * `to: chrono::NaiveDate` -- The end date for the query in “yyyy-mm-dd” format. .
1241     */
1242    pub async fn list_meeting_satisfaction(
1243        &self,
1244        from: chrono::NaiveDate,
1245        to: chrono::NaiveDate,
1246    ) -> ClientResult<crate::Response<crate::types::ListMeetingSatisfactionResponse>> {
1247        let mut query_args: Vec<(String, String)> = Default::default();
1248        if !from.to_string().is_empty() {
1249            query_args.push(("from".to_string(), from.to_string()));
1250        }
1251        if !to.to_string().is_empty() {
1252            query_args.push(("to".to_string(), to.to_string()));
1253        }
1254        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1255        let url = self
1256            .client
1257            .url(&format!("/metrics/client/satisfaction?{}", query_), None);
1258        self.client
1259            .get(
1260                &url,
1261                crate::Message {
1262                    body: None,
1263                    content_type: None,
1264                },
1265            )
1266            .await
1267    }
1268    /**
1269     * List call logs.
1270     *
1271     * This function performs a `GET` to the `/phone/metrics/call_logs` endpoint.
1272     *
1273     * Call logs provide a record of all incoming and outgoing calls over Zoom Phone in an account.
1274     *
1275     * Use this API to list monthly call logs metrics. You can use query parameters to filter the response by date, site and MOS(Mean Opinion Score) of the call.
1276     *
1277     * **Prerequisites:**
1278     * * Business, or Education account
1279     * * Zoom Phone license <br><br>
1280     *
1281     * **Scopes:** `phone:read:admin`, `phone:write:admin`<br>
1282     * **Rate Limit Label:** `Heavy`
1283     *
1284     * **Parameters:**
1285     *
1286     * * `from: &str` -- Start date for the report in `yyyy-mm-dd` format. Specify a 30 day range using the `from` and `to` parameters as the response provides a maximum of a month worth of data per API request.
1287     * * `to: &str` -- End date for the report in `yyyy-mm-dd` format.
1288     * * `site_id: &str` -- Unique identifier of the [site](https://support.zoom.us/hc/en-us/articles/360020809672-Managing-multiple-sites). Use this query parameter if you have enabled multiple sites and would like to filter the response of this API call by call logs of a specific phone site.
1289     * * `quality_type: &str` -- Filter call logs by voice quality. Zoom uses MOS of 3.5 as a general baseline to categorize calls by call quality. A MOS greater than or equal to 3.5 means good quality, while below 3.5 means poor quality. <br><br>The value of this field can be one of the following:<br>
1290     *   * `good`: Retrieve call logs of the call(s) with good quality of voice.<br>
1291     *   * `bad`: Retrieve call logs of the call(s) with good quality of voice.<br>
1292     *   * `all`: Retrieve all call logs without filtering by voice quality.
1293     *   
1294     *   
1295     *   
1296     *   .
1297     * * `page_size: i64` -- The number of records returned within a single call.
1298     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
1299     */
1300    pub async fn list_call_logs_metrics(
1301        &self,
1302        from: &str,
1303        to: &str,
1304        site_id: &str,
1305        quality_type: &str,
1306        page_size: i64,
1307        next_page_token: &str,
1308    ) -> ClientResult<crate::Response<Vec<crate::types::ListCallLogsMetricsResponse>>> {
1309        let mut query_args: Vec<(String, String)> = Default::default();
1310        if !from.is_empty() {
1311            query_args.push(("from".to_string(), from.to_string()));
1312        }
1313        if !next_page_token.is_empty() {
1314            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
1315        }
1316        if page_size > 0 {
1317            query_args.push(("page_size".to_string(), page_size.to_string()));
1318        }
1319        if !quality_type.is_empty() {
1320            query_args.push(("quality_type".to_string(), quality_type.to_string()));
1321        }
1322        if !site_id.is_empty() {
1323            query_args.push(("site_id".to_string(), site_id.to_string()));
1324        }
1325        if !to.is_empty() {
1326            query_args.push(("to".to_string(), to.to_string()));
1327        }
1328        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1329        let url = self
1330            .client
1331            .url(&format!("/phone/metrics/call_logs?{}", query_), None);
1332        let resp: crate::Response<crate::types::ListCallLogsMetricsResponseData> = self
1333            .client
1334            .get(
1335                &url,
1336                crate::Message {
1337                    body: None,
1338                    content_type: None,
1339                },
1340            )
1341            .await?;
1342
1343        // Return our response data.
1344        Ok(crate::Response::new(
1345            resp.status,
1346            resp.headers,
1347            resp.body.call_logs.to_vec(),
1348        ))
1349    }
1350    /**
1351     * List call logs.
1352     *
1353     * This function performs a `GET` to the `/phone/metrics/call_logs` endpoint.
1354     *
1355     * As opposed to `list_call_logs_metrics`, this function returns all the pages of the request at once.
1356     *
1357     * Call logs provide a record of all incoming and outgoing calls over Zoom Phone in an account.
1358     *
1359     * Use this API to list monthly call logs metrics. You can use query parameters to filter the response by date, site and MOS(Mean Opinion Score) of the call.
1360     *
1361     * **Prerequisites:**
1362     * * Business, or Education account
1363     * * Zoom Phone license <br><br>
1364     *
1365     * **Scopes:** `phone:read:admin`, `phone:write:admin`<br>
1366     * **Rate Limit Label:** `Heavy`
1367     */
1368    pub async fn list_all_call_logs_metrics(
1369        &self,
1370        from: &str,
1371        to: &str,
1372        site_id: &str,
1373        quality_type: &str,
1374    ) -> ClientResult<crate::Response<Vec<crate::types::ListCallLogsMetricsResponse>>> {
1375        let mut query_args: Vec<(String, String)> = Default::default();
1376        if !from.is_empty() {
1377            query_args.push(("from".to_string(), from.to_string()));
1378        }
1379        if !quality_type.is_empty() {
1380            query_args.push(("quality_type".to_string(), quality_type.to_string()));
1381        }
1382        if !site_id.is_empty() {
1383            query_args.push(("site_id".to_string(), site_id.to_string()));
1384        }
1385        if !to.is_empty() {
1386            query_args.push(("to".to_string(), to.to_string()));
1387        }
1388        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1389        let url = self
1390            .client
1391            .url(&format!("/phone/metrics/call_logs?{}", query_), None);
1392        let crate::Response::<crate::types::ListCallLogsMetricsResponseData> {
1393            mut status,
1394            mut headers,
1395            mut body,
1396        } = self
1397            .client
1398            .get(
1399                &url,
1400                crate::Message {
1401                    body: None,
1402                    content_type: None,
1403                },
1404            )
1405            .await?;
1406
1407        let mut call_logs = body.call_logs;
1408        let mut page = body.next_page_token;
1409
1410        // Paginate if we should.
1411        while !page.is_empty() {
1412            // Check if we already have URL params and need to concat the token.
1413            if !url.contains('?') {
1414                crate::Response::<crate::types::ListCallLogsMetricsResponseData> {
1415                    status,
1416                    headers,
1417                    body,
1418                } = self
1419                    .client
1420                    .get(
1421                        &format!("{}?next_page_token={}", url, page),
1422                        crate::Message {
1423                            body: None,
1424                            content_type: None,
1425                        },
1426                    )
1427                    .await?;
1428            } else {
1429                crate::Response::<crate::types::ListCallLogsMetricsResponseData> {
1430                    status,
1431                    headers,
1432                    body,
1433                } = self
1434                    .client
1435                    .get(
1436                        &format!("{}&next_page_token={}", url, page),
1437                        crate::Message {
1438                            body: None,
1439                            content_type: None,
1440                        },
1441                    )
1442                    .await?;
1443            }
1444
1445            call_logs.append(&mut body.call_logs);
1446
1447            if !body.next_page_token.is_empty() && body.next_page_token != page {
1448                page = body.next_page_token.to_string();
1449            } else {
1450                page = "".to_string();
1451            }
1452        }
1453
1454        // Return our response data.
1455        Ok(crate::Response::new(status, headers, call_logs))
1456    }
1457    /**
1458     * Get call details from call log.
1459     *
1460     * This function performs a `GET` to the `/phone/metrics/call_logs/{call_id}` endpoint.
1461     *
1462     * Call logs provide a record of all incoming and outgoing calls over Zoom Phone in an account.
1463     *
1464     * Use this API to list call log details of a specific call.
1465     *
1466     * **Prerequisites:**
1467     * * Business, or Education account
1468     * * Zoom Phone license <br><br>
1469     *
1470     * **Scopes:** `phone:read:admin`, `phone:write:admin`<br>
1471     * **Rate Limit Label:** `Light`
1472     *
1473     *
1474     * **Parameters:**
1475     *
1476     * * `call_id: &str` -- Unique identifier of the phone call. The value of this field can be retrieved from [List Call Logs]() API.
1477     */
1478    pub async fn get_call_log_metrics_details(
1479        &self,
1480        call_id: &str,
1481    ) -> ClientResult<crate::Response<crate::types::ListCallLogsMetricsResponse>> {
1482        let url = self.client.url(
1483            &format!(
1484                "/phone/metrics/call_logs/{}",
1485                crate::progenitor_support::encode_path(call_id),
1486            ),
1487            None,
1488        );
1489        self.client
1490            .get(
1491                &url,
1492                crate::Message {
1493                    body: None,
1494                    content_type: None,
1495                },
1496            )
1497            .await
1498    }
1499    /**
1500     * Get call QoS.
1501     *
1502     * This function performs a `GET` to the `/phone/metrics/call_logs/{callId}/qos` endpoint.
1503     *
1504     * Get call quality of service(QoS) data for a call made or received by a Zoom phone user in the account.
1505     *
1506     * **Prerequisites:**
1507     * * Business, or Education account
1508     * * Zoom Phone license <br><br>
1509     * **Scopes:** `phone:read:admin`, `phone:write:admin`<br>
1510     * **Rate Limit Label:** `Light`
1511     *
1512     * **Parameters:**
1513     *
1514     * * `call_id: &str` -- Unique identifier of the call.
1515     */
1516    pub async fn get_call_qo(
1517        &self,
1518        call_id: &str,
1519    ) -> ClientResult<crate::Response<crate::types::GetCallQoSResponse>> {
1520        let url = self.client.url(
1521            &format!(
1522                "/phone/metrics/call_logs/{}/qos",
1523                crate::progenitor_support::encode_path(call_id),
1524            ),
1525            None,
1526        );
1527        self.client
1528            .get(
1529                &url,
1530                crate::Message {
1531                    body: None,
1532                    content_type: None,
1533                },
1534            )
1535            .await
1536    }
1537    /**
1538     * Get post meeting feedback.
1539     *
1540     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants/satisfaction` endpoint.
1541     *
1542     * When a meeting ends, each attendee will be prompted to share their meeting experience by clicking either thumbs up or thumbs down. Use this API to retrieve the feedback submitted for a specific meeting. Note that this API only works for meetings scheduled after December 20, 2020.
1543     *
1544     * **Prerequisites:**
1545     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) setting must be enabled by the participant prior to the meeting.
1546     * * The user making the API request must be enrolled in a Business or a higher plan.
1547     *
1548     * <br> **Scope:** `dashboard_meetings:read:admiin`
1549     *
1550     * **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1551     *
1552     * **Parameters:**
1553     *
1554     * * `meeting_id: &str` -- The meeting ID or the meeting UUID.  If a meeting ID is provided in the request instead of a UUID, the response will be for the latest meeting instance.
1555     *   
1556     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
1557     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
1558     *  
1559     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
1560     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
1561     * * `page_size: i64` -- The number of records returned within a single API call.
1562     */
1563    pub async fn participant_feedback(
1564        &self,
1565        meeting_id: &str,
1566        type_: crate::types::DashboardMeetingsType,
1567        next_page_token: &str,
1568        page_size: i64,
1569    ) -> ClientResult<crate::Response<Vec<crate::types::ParticipantFeedbackResponseParticipants>>>
1570    {
1571        let mut query_args: Vec<(String, String)> = Default::default();
1572        if !next_page_token.is_empty() {
1573            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
1574        }
1575        if page_size > 0 {
1576            query_args.push(("page_size".to_string(), page_size.to_string()));
1577        }
1578        if !type_.to_string().is_empty() {
1579            query_args.push(("type".to_string(), type_.to_string()));
1580        }
1581        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1582        let url = self.client.url(
1583            &format!(
1584                "/metrics/meetings/{}/participants/satisfaction?{}",
1585                crate::progenitor_support::encode_path(meeting_id),
1586                query_
1587            ),
1588            None,
1589        );
1590        let resp: crate::Response<crate::types::ParticipantFeedbackResponse> = self
1591            .client
1592            .get(
1593                &url,
1594                crate::Message {
1595                    body: None,
1596                    content_type: None,
1597                },
1598            )
1599            .await?;
1600
1601        // Return our response data.
1602        Ok(crate::Response::new(
1603            resp.status,
1604            resp.headers,
1605            resp.body.participants.to_vec(),
1606        ))
1607    }
1608    /**
1609     * Get post meeting feedback.
1610     *
1611     * This function performs a `GET` to the `/metrics/meetings/{meetingId}/participants/satisfaction` endpoint.
1612     *
1613     * As opposed to `participant_feedback`, this function returns all the pages of the request at once.
1614     *
1615     * When a meeting ends, each attendee will be prompted to share their meeting experience by clicking either thumbs up or thumbs down. Use this API to retrieve the feedback submitted for a specific meeting. Note that this API only works for meetings scheduled after December 20, 2020.
1616     *
1617     * **Prerequisites:**
1618     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) setting must be enabled by the participant prior to the meeting.
1619     * * The user making the API request must be enrolled in a Business or a higher plan.
1620     *
1621     * <br> **Scope:** `dashboard_meetings:read:admiin`
1622     *
1623     * **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1624     */
1625    pub async fn get_all_participant_feedback(
1626        &self,
1627        meeting_id: &str,
1628        type_: crate::types::DashboardMeetingsType,
1629    ) -> ClientResult<crate::Response<Vec<crate::types::ParticipantFeedbackResponseParticipants>>>
1630    {
1631        let mut query_args: Vec<(String, String)> = Default::default();
1632        if !type_.to_string().is_empty() {
1633            query_args.push(("type".to_string(), type_.to_string()));
1634        }
1635        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1636        let url = self.client.url(
1637            &format!(
1638                "/metrics/meetings/{}/participants/satisfaction?{}",
1639                crate::progenitor_support::encode_path(meeting_id),
1640                query_
1641            ),
1642            None,
1643        );
1644        let crate::Response::<crate::types::ParticipantFeedbackResponse> {
1645            mut status,
1646            mut headers,
1647            mut body,
1648        } = self
1649            .client
1650            .get(
1651                &url,
1652                crate::Message {
1653                    body: None,
1654                    content_type: None,
1655                },
1656            )
1657            .await?;
1658
1659        let mut participants = body.participants;
1660        let mut page = body.next_page_token;
1661
1662        // Paginate if we should.
1663        while !page.is_empty() {
1664            // Check if we already have URL params and need to concat the token.
1665            if !url.contains('?') {
1666                crate::Response::<crate::types::ParticipantFeedbackResponse> {
1667                    status,
1668                    headers,
1669                    body,
1670                } = self
1671                    .client
1672                    .get(
1673                        &format!("{}?next_page_token={}", url, page),
1674                        crate::Message {
1675                            body: None,
1676                            content_type: None,
1677                        },
1678                    )
1679                    .await?;
1680            } else {
1681                crate::Response::<crate::types::ParticipantFeedbackResponse> {
1682                    status,
1683                    headers,
1684                    body,
1685                } = self
1686                    .client
1687                    .get(
1688                        &format!("{}&next_page_token={}", url, page),
1689                        crate::Message {
1690                            body: None,
1691                            content_type: None,
1692                        },
1693                    )
1694                    .await?;
1695            }
1696
1697            participants.append(&mut body.participants);
1698
1699            if !body.next_page_token.is_empty() && body.next_page_token != page {
1700                page = body.next_page_token.to_string();
1701            } else {
1702                page = "".to_string();
1703            }
1704        }
1705
1706        // Return our response data.
1707        Ok(crate::Response::new(status, headers, participants))
1708    }
1709    /**
1710     * Get post webinar feedback.
1711     *
1712     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants/satisfaction` endpoint.
1713     *
1714     * When a Webinar ends, each attendee will be prompted to share their Webinar experience by clicking either thumbs up or thumbs down. Use this API to retrieve the feedback submitted for a specific webinar. Note that this API only works for meetings scheduled after December 20, 2020.
1715     *
1716     * **Prerequisites:**
1717     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) setting must be enabled by the participant prior to the meeting.
1718     * * The user making the API request must be enrolled in a Business or a higher plan.
1719     *
1720     *
1721     * <br> **Scope:** `dashboard_webinars:read:admin`
1722     *
1723     * **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1724     *
1725     * **Parameters:**
1726     *
1727     * * `type_: crate::types::DashboardMeetingsType` -- Specify a value to get the response for the corresponding meeting type. The value of this field can be one of the following:<br> <br>`past` - Meeting that already occurred in the specified date range.<br>`pastOne` - Past meetings that were attended by only one user. <br>`live` - Live meetings.<br><br>
1728     *  
1729     *  If you do not provide this field, the default value will be `live` and thus, the API will only query responses for live meetings.
1730     * * `page_size: i64` -- The number of records returned within a single API call.
1731     * * `next_page_token: &str` -- The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
1732     * * `webinar_id: &str` -- The webinar ID or the webinar UUID.  If a webinar ID is provided in the request instead of a UUID, the response will be for the latest webinar instance.
1733     *   
1734     *   If a UUID starts with "/" or contains "//" (example: "/ajXp112QmuoKj4854875==\"), you must **double encode** the UUID before making an API request.
1735     */
1736    pub async fn participant_webinar_feedback(
1737        &self,
1738        type_: crate::types::DashboardMeetingsType,
1739        page_size: i64,
1740        next_page_token: &str,
1741        webinar_id: &str,
1742    ) -> ClientResult<crate::Response<Vec<crate::types::ParticipantFeedbackResponseParticipants>>>
1743    {
1744        let mut query_args: Vec<(String, String)> = Default::default();
1745        if !next_page_token.is_empty() {
1746            query_args.push(("next_page_token".to_string(), next_page_token.to_string()));
1747        }
1748        if page_size > 0 {
1749            query_args.push(("page_size".to_string(), page_size.to_string()));
1750        }
1751        if !type_.to_string().is_empty() {
1752            query_args.push(("type".to_string(), type_.to_string()));
1753        }
1754        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1755        let url = self.client.url(
1756            &format!(
1757                "/metrics/webinars/{}/participants/satisfaction?{}",
1758                crate::progenitor_support::encode_path(webinar_id),
1759                query_
1760            ),
1761            None,
1762        );
1763        let resp: crate::Response<crate::types::ParticipantFeedbackResponse> = self
1764            .client
1765            .get(
1766                &url,
1767                crate::Message {
1768                    body: None,
1769                    content_type: None,
1770                },
1771            )
1772            .await?;
1773
1774        // Return our response data.
1775        Ok(crate::Response::new(
1776            resp.status,
1777            resp.headers,
1778            resp.body.participants.to_vec(),
1779        ))
1780    }
1781    /**
1782     * Get post webinar feedback.
1783     *
1784     * This function performs a `GET` to the `/metrics/webinars/{webinarId}/participants/satisfaction` endpoint.
1785     *
1786     * As opposed to `participant_webinar_feedback`, this function returns all the pages of the request at once.
1787     *
1788     * When a Webinar ends, each attendee will be prompted to share their Webinar experience by clicking either thumbs up or thumbs down. Use this API to retrieve the feedback submitted for a specific webinar. Note that this API only works for meetings scheduled after December 20, 2020.
1789     *
1790     * **Prerequisites:**
1791     * * [Feedback to Zoom](https://support.zoom.us/hc/en-us/articles/115005838023) setting must be enabled by the participant prior to the meeting.
1792     * * The user making the API request must be enrolled in a Business or a higher plan.
1793     *
1794     *
1795     * <br> **Scope:** `dashboard_webinars:read:admin`
1796     *
1797     * **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Heavy`<br>
1798     */
1799    pub async fn get_all_participant_webinar_feedback(
1800        &self,
1801        type_: crate::types::DashboardMeetingsType,
1802        webinar_id: &str,
1803    ) -> ClientResult<crate::Response<Vec<crate::types::ParticipantFeedbackResponseParticipants>>>
1804    {
1805        let mut query_args: Vec<(String, String)> = Default::default();
1806        if !type_.to_string().is_empty() {
1807            query_args.push(("type".to_string(), type_.to_string()));
1808        }
1809        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
1810        let url = self.client.url(
1811            &format!(
1812                "/metrics/webinars/{}/participants/satisfaction?{}",
1813                crate::progenitor_support::encode_path(webinar_id),
1814                query_
1815            ),
1816            None,
1817        );
1818        let crate::Response::<crate::types::ParticipantFeedbackResponse> {
1819            mut status,
1820            mut headers,
1821            mut body,
1822        } = self
1823            .client
1824            .get(
1825                &url,
1826                crate::Message {
1827                    body: None,
1828                    content_type: None,
1829                },
1830            )
1831            .await?;
1832
1833        let mut participants = body.participants;
1834        let mut page = body.next_page_token;
1835
1836        // Paginate if we should.
1837        while !page.is_empty() {
1838            // Check if we already have URL params and need to concat the token.
1839            if !url.contains('?') {
1840                crate::Response::<crate::types::ParticipantFeedbackResponse> {
1841                    status,
1842                    headers,
1843                    body,
1844                } = self
1845                    .client
1846                    .get(
1847                        &format!("{}?next_page_token={}", url, page),
1848                        crate::Message {
1849                            body: None,
1850                            content_type: None,
1851                        },
1852                    )
1853                    .await?;
1854            } else {
1855                crate::Response::<crate::types::ParticipantFeedbackResponse> {
1856                    status,
1857                    headers,
1858                    body,
1859                } = self
1860                    .client
1861                    .get(
1862                        &format!("{}&next_page_token={}", url, page),
1863                        crate::Message {
1864                            body: None,
1865                            content_type: None,
1866                        },
1867                    )
1868                    .await?;
1869            }
1870
1871            participants.append(&mut body.participants);
1872
1873            if !body.next_page_token.is_empty() && body.next_page_token != page {
1874                page = body.next_page_token.to_string();
1875            } else {
1876                page = "".to_string();
1877            }
1878        }
1879
1880        // Return our response data.
1881        Ok(crate::Response::new(status, headers, participants))
1882    }
1883}