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}