Skip to main content

slack_web_api/api/
admin_analytics.rs

1// このファイルは codegen/generate.py が生成する。手で編集しない
2
3#![allow(unused_imports)]
4
5use crate::objects::*;
6use crate::{
7    CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
8};
9use serde::{Deserialize, Serialize};
10
11/// Arguments for the Slack Web API method [`admin.analytics.getFile`](https://docs.slack.dev/reference/methods/admin.analytics.getFile): Retrieve analytics data for a given date, presented as a compressed JSON file
12///
13/// Send it with [`SlackClient::admin_analytics_get_file`].
14#[doc(alias = "admin.analytics.getFile")]
15#[derive(Debug, Clone, PartialEq, Serialize)]
16#[non_exhaustive]
17pub struct AdminAnalyticsGetFileRequest {
18    /// The type of analytics to retrieve. The options are currently limited to `member` (for Enterprise org member analytics) and `public_channel` (for public channel analytics).
19    pub r#type: String,
20    /// Date to retrieve the analytics data for, expressed as `YYYY-MM-DD` in UTC. Required unless `metadata_only` is set to true.
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub date: Option<String>,
23    /// Retrieve metadata for the `type` of analytics indicated. Can be used only with `type` set to `public_channel` analytics. See [detail below](#metadata_only). Omit the `date` parameter when using this argument.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub metadata_only: Option<bool>,
26}
27
28impl AdminAnalyticsGetFileRequest {
29    pub fn new(r#type: impl Into<String>) -> Self {
30        Self {
31            r#type: r#type.into(),
32            date: None,
33            metadata_only: None,
34        }
35    }
36
37    pub fn date(mut self, date: impl Into<String>) -> Self {
38        self.date = Some(date.into());
39        self
40    }
41
42    pub fn metadata_only(mut self, metadata_only: bool) -> Self {
43        self.metadata_only = Some(metadata_only);
44        self
45    }
46}
47
48/// Arguments for the Slack Web API method [`admin.analytics.messages.activity`](https://docs.slack.dev/reference/methods/admin.analytics.messages.activity): Retrieves activity metrics for messages from a given channel.
49///
50/// Send it with [`SlackClient::admin_analytics_messages_activity`].
51#[doc(alias = "admin.analytics.messages.activity")]
52#[derive(Debug, Clone, PartialEq, Serialize)]
53#[non_exhaustive]
54pub struct AdminAnalyticsMessagesActivityRequest {
55    /// Channel ID for channel of the message activity to query.
56    pub channel: String,
57    /// Oldest timestamp to include in the results. Defaults to 7 days before current time. If not passed while still passing the `latest_ts` parameter, defaults to 7 days before `latest_ts`.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub oldest_ts: Option<String>,
60    /// Most recent timestamp to include in results. Defaults to current time. If not passed while still passing the `oldest_ts` parameter, defaults to 7 days after `oldest_ts`.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub latest_ts: Option<String>,
63    /// Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first "page" of the collection.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub cursor: Option<String>,
66    /// Maximum number of entries to return. Defaults to 50 if not passed. Max allowed is 100.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub limit: Option<i64>,
69}
70
71impl AdminAnalyticsMessagesActivityRequest {
72    pub fn new(channel: impl Into<String>) -> Self {
73        Self {
74            channel: channel.into(),
75            oldest_ts: None,
76            latest_ts: None,
77            cursor: None,
78            limit: None,
79        }
80    }
81
82    pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
83        self.oldest_ts = Some(oldest_ts.into());
84        self
85    }
86
87    pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
88        self.latest_ts = Some(latest_ts.into());
89        self
90    }
91
92    pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
93        self.cursor = Some(cursor.into());
94        self
95    }
96
97    pub fn limit(mut self, limit: i64) -> Self {
98        self.limit = Some(limit);
99        self
100    }
101}
102
103impl SlackApiMethod for AdminAnalyticsMessagesActivityRequest {
104    const METHOD: &'static str = "admin.analytics.messages.activity";
105    type Response = AdminAnalyticsMessagesActivityResponse;
106}
107
108impl CursorPaginated for AdminAnalyticsMessagesActivityRequest {
109    fn set_cursor(&mut self, cursor: String) {
110        self.cursor = Some(cursor);
111    }
112}
113
114impl NextCursor for AdminAnalyticsMessagesActivityResponse {
115    fn next_cursor(&self) -> Option<&str> {
116        self.response_metadata.as_ref()?.next_cursor.as_deref()
117    }
118}
119
120/// Successful response of the Slack Web API method [`admin.analytics.messages.activity`](https://docs.slack.dev/reference/methods/admin.analytics.messages.activity).
121#[doc(alias = "admin.analytics.messages.activity")]
122#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
123pub struct AdminAnalyticsMessagesActivityResponse {
124    #[serde(
125        default,
126        deserialize_with = "crate::de::vec",
127        skip_serializing_if = "Vec::is_empty"
128    )]
129    pub message_activities: Vec<AdminAnalyticsMessagesActivityResponseMessageActivities>,
130    #[serde(
131        default,
132        deserialize_with = "crate::de::opt_object",
133        skip_serializing_if = "Option::is_none"
134    )]
135    pub response_metadata: Option<ResponseMetadata>,
136    #[serde(
137        default,
138        deserialize_with = "crate::de::opt_string",
139        skip_serializing_if = "Option::is_none"
140    )]
141    pub warning: Option<String>,
142}
143
144#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
145pub struct AdminAnalyticsMessagesActivityResponseMessageActivities {
146    #[serde(
147        default,
148        deserialize_with = "crate::de::opt_string",
149        skip_serializing_if = "Option::is_none"
150    )]
151    pub channel_id: Option<String>,
152    #[serde(
153        default,
154        deserialize_with = "crate::de::opt_string",
155        skip_serializing_if = "Option::is_none"
156    )]
157    pub timestamp: Option<String>,
158    #[serde(
159        default,
160        deserialize_with = "crate::de::opt_i64",
161        skip_serializing_if = "Option::is_none"
162    )]
163    pub unique_user_reactions_count: Option<i64>,
164    #[serde(
165        default,
166        deserialize_with = "crate::de::opt_i64",
167        skip_serializing_if = "Option::is_none"
168    )]
169    pub unique_user_shares_count: Option<i64>,
170    #[serde(
171        default,
172        deserialize_with = "crate::de::opt_i64",
173        skip_serializing_if = "Option::is_none"
174    )]
175    pub unique_user_views_count: Option<i64>,
176    #[serde(
177        default,
178        deserialize_with = "crate::de::opt_i64",
179        skip_serializing_if = "Option::is_none"
180    )]
181    pub unique_user_clicks_count: Option<i64>,
182    #[serde(
183        default,
184        deserialize_with = "crate::de::opt_object",
185        skip_serializing_if = "Option::is_none"
186    )]
187    pub unique_views_client:
188        Option<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient>,
189    #[serde(
190        default,
191        deserialize_with = "crate::de::vec",
192        skip_serializing_if = "Vec::is_empty"
193    )]
194    pub unique_stats_by_department:
195        Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment>,
196    #[serde(
197        default,
198        deserialize_with = "crate::de::vec",
199        skip_serializing_if = "Vec::is_empty"
200    )]
201    pub unique_stats_by_org:
202        Vec<AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg>,
203}
204
205#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
206pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueViewsClient {
207    #[serde(
208        default,
209        deserialize_with = "crate::de::opt_i64",
210        skip_serializing_if = "Option::is_none"
211    )]
212    pub desktop_views_count: Option<i64>,
213    #[serde(
214        default,
215        deserialize_with = "crate::de::opt_i64",
216        skip_serializing_if = "Option::is_none"
217    )]
218    pub mobile_views_count: Option<i64>,
219    #[serde(
220        default,
221        deserialize_with = "crate::de::opt_i64",
222        skip_serializing_if = "Option::is_none"
223    )]
224    pub web_views_count: Option<i64>,
225}
226
227#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
228pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByDepartment {
229    #[serde(
230        default,
231        deserialize_with = "crate::de::opt_string",
232        skip_serializing_if = "Option::is_none"
233    )]
234    pub department: Option<String>,
235    #[serde(
236        default,
237        deserialize_with = "crate::de::opt_i64",
238        skip_serializing_if = "Option::is_none"
239    )]
240    pub views: Option<i64>,
241    #[serde(
242        default,
243        deserialize_with = "crate::de::opt_i64",
244        skip_serializing_if = "Option::is_none"
245    )]
246    pub reactions: Option<i64>,
247    #[serde(
248        default,
249        deserialize_with = "crate::de::opt_i64",
250        skip_serializing_if = "Option::is_none"
251    )]
252    pub shares: Option<i64>,
253    #[serde(
254        default,
255        deserialize_with = "crate::de::opt_i64",
256        skip_serializing_if = "Option::is_none"
257    )]
258    pub clicks: Option<i64>,
259}
260
261#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
262pub struct AdminAnalyticsMessagesActivityResponseMessageActivitiesUniqueStatsByOrg {
263    #[serde(
264        default,
265        deserialize_with = "crate::de::opt_string",
266        skip_serializing_if = "Option::is_none"
267    )]
268    pub team_id: Option<String>,
269    #[serde(
270        default,
271        deserialize_with = "crate::de::opt_i64",
272        skip_serializing_if = "Option::is_none"
273    )]
274    pub views: Option<i64>,
275    #[serde(
276        default,
277        deserialize_with = "crate::de::opt_i64",
278        skip_serializing_if = "Option::is_none"
279    )]
280    pub reactions: Option<i64>,
281    #[serde(
282        default,
283        deserialize_with = "crate::de::opt_i64",
284        skip_serializing_if = "Option::is_none"
285    )]
286    pub shares: Option<i64>,
287    #[serde(
288        default,
289        deserialize_with = "crate::de::opt_i64",
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub clicks: Option<i64>,
293}
294
295/// Arguments for the Slack Web API method [`admin.analytics.messages.metadata`](https://docs.slack.dev/reference/methods/admin.analytics.messages.metadata): Retrieves metadata for a list of messages from a given channel.
296///
297/// Send it with [`SlackClient::admin_analytics_messages_metadata`].
298#[doc(alias = "admin.analytics.messages.metadata")]
299#[derive(Debug, Clone, PartialEq, Serialize)]
300#[non_exhaustive]
301pub struct AdminAnalyticsMessagesMetadataRequest {
302    /// Channel ID for channel containing the messages to query.
303    pub channel: String,
304    /// Oldest timestamp to include in the results
305    #[serde(skip_serializing_if = "Option::is_none")]
306    pub oldest_ts: Option<String>,
307    /// Most recent timestamp to include in the results. If not passed, defaults to current time.
308    #[serde(skip_serializing_if = "Option::is_none")]
309    pub latest_ts: Option<String>,
310    /// Paginate through collections of data by setting the `cursor` parameter to a `next_cursor` attribute returned by a previous request's `response_metadata`. Default value fetches the first "page" of the collection. See [pagination](https://docs.slack.dev/apis/web-api/pagination.md) for more detail.
311    #[serde(skip_serializing_if = "Option::is_none")]
312    pub cursor: Option<String>,
313}
314
315impl AdminAnalyticsMessagesMetadataRequest {
316    pub fn new(channel: impl Into<String>) -> Self {
317        Self {
318            channel: channel.into(),
319            oldest_ts: None,
320            latest_ts: None,
321            cursor: None,
322        }
323    }
324
325    pub fn oldest_ts(mut self, oldest_ts: impl Into<String>) -> Self {
326        self.oldest_ts = Some(oldest_ts.into());
327        self
328    }
329
330    pub fn latest_ts(mut self, latest_ts: impl Into<String>) -> Self {
331        self.latest_ts = Some(latest_ts.into());
332        self
333    }
334
335    pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
336        self.cursor = Some(cursor.into());
337        self
338    }
339}
340
341impl SlackApiMethod for AdminAnalyticsMessagesMetadataRequest {
342    const METHOD: &'static str = "admin.analytics.messages.metadata";
343    type Response = AdminAnalyticsMessagesMetadataResponse;
344}
345
346impl CursorPaginated for AdminAnalyticsMessagesMetadataRequest {
347    fn set_cursor(&mut self, cursor: String) {
348        self.cursor = Some(cursor);
349    }
350}
351
352impl NextCursor for AdminAnalyticsMessagesMetadataResponse {
353    fn next_cursor(&self) -> Option<&str> {
354        self.response_metadata.as_ref()?.next_cursor.as_deref()
355    }
356}
357
358/// Successful response of the Slack Web API method [`admin.analytics.messages.metadata`](https://docs.slack.dev/reference/methods/admin.analytics.messages.metadata).
359#[doc(alias = "admin.analytics.messages.metadata")]
360#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
361pub struct AdminAnalyticsMessagesMetadataResponse {
362    #[serde(
363        default,
364        deserialize_with = "crate::de::vec",
365        skip_serializing_if = "Vec::is_empty"
366    )]
367    pub messages: Vec<Message>,
368    #[serde(
369        default,
370        deserialize_with = "crate::de::opt_object",
371        skip_serializing_if = "Option::is_none"
372    )]
373    pub response_metadata: Option<ResponseMetadata>,
374    #[serde(
375        default,
376        deserialize_with = "crate::de::opt_string",
377        skip_serializing_if = "Option::is_none"
378    )]
379    pub warning: Option<String>,
380}
381
382impl SlackClient {
383    /// Calls the Slack Web API method [`admin.analytics.getFile`](https://docs.slack.dev/reference/methods/admin.analytics.getFile): Retrieve analytics data for a given date, presented as a compressed JSON file
384    ///
385    /// Required scopes:
386    ///
387    /// - user token: `admin.analytics:read`
388    ///
389    /// Rate limit: Tier 2 (<https://docs.slack.dev/apis/web-api/rate-limits>).
390    ///
391    /// Returns the raw file body (a gzip-compressed JSON Lines file), not JSON.
392    ///
393    /// # Errors
394    ///
395    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
396    #[doc(alias = "admin.analytics.getFile")]
397    pub async fn admin_analytics_get_file(
398        &self,
399        request: &AdminAnalyticsGetFileRequest,
400    ) -> Result<bytes::Bytes, SlackError> {
401        self.call_bytes("admin.analytics.getFile", request).await
402    }
403
404    /// Calls the Slack Web API method [`admin.analytics.messages.activity`](https://docs.slack.dev/reference/methods/admin.analytics.messages.activity): Retrieves activity metrics for messages from a given channel.
405    ///
406    /// Required scopes:
407    ///
408    /// - user token: `admin.analytics:read`
409    ///
410    /// Rate limit: Tier 2 (<https://docs.slack.dev/apis/web-api/rate-limits>).
411    ///
412    /// # Errors
413    ///
414    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
415    #[doc(alias = "admin.analytics.messages.activity")]
416    pub async fn admin_analytics_messages_activity(
417        &self,
418        request: &AdminAnalyticsMessagesActivityRequest,
419    ) -> Result<AdminAnalyticsMessagesActivityResponse, SlackError> {
420        self.call(request).await
421    }
422
423    /// Calls the Slack Web API method [`admin.analytics.messages.metadata`](https://docs.slack.dev/reference/methods/admin.analytics.messages.metadata): Retrieves metadata for a list of messages from a given channel.
424    ///
425    /// Required scopes:
426    ///
427    /// - user token: `admin.analytics:read`
428    ///
429    /// Rate limit: 1200 requests per minute with a burst allowance of 2000.
430    ///
431    /// # Errors
432    ///
433    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
434    #[doc(alias = "admin.analytics.messages.metadata")]
435    pub async fn admin_analytics_messages_metadata(
436        &self,
437        request: &AdminAnalyticsMessagesMetadataRequest,
438    ) -> Result<AdminAnalyticsMessagesMetadataResponse, SlackError> {
439        self.call(request).await
440    }
441}