line_bot_messaging_api/api/
insight.rs

1use crate::{LineApiResponse, LineClient};
2use serde_derive::{Deserialize, Serialize};
3use serde_json::{json, Value};
4
5impl LineClient {
6    /// https://developers.line.biz/ja/reference/messaging-api/#get-number-of-delivery-messages
7    pub async fn insight_message_delivery(
8        &self,
9        date: &str,
10    ) -> LineApiResponse<LineApiInsightMessageDeliveryResponse> {
11        self.http_get(
12            format!(
13                "https://api.line.me/v2/bot/insight/message/delivery?date={}",
14                date
15            )
16            .as_str(),
17            &json!({}),
18        )
19        .await
20    }
21    /// https://developers.line.biz/ja/reference/messaging-api/#get-number-of-followers
22    pub async fn insight_followers(
23        &self,
24        date: &str,
25    ) -> LineApiResponse<LineApiInsightFollowersResponse> {
26        self.http_get(
27            format!("https://api.line.me/v2/bot/insight/followers?date={}", date).as_str(),
28            &json!({}),
29        )
30        .await
31    }
32    /// https://developers.line.biz/ja/reference/messaging-api/#get-demographic
33    pub async fn insight_demographic(&self) -> LineApiResponse<LineApiInsightDemographicResponse> {
34        self.http_get("https://api.line.me/v2/bot/insight/demographic", &json!({}))
35            .await
36    }
37    /// https://developers.line.biz/ja/reference/messaging-api/#get-demographic
38    pub async fn insight_message_event(&self, request_id: &str) -> LineApiResponse<Value> {
39        self.http_get(
40            format!(
41                "https://api.line.me/v2/bot/insight/message/event?requestId={}",
42                request_id
43            )
44            .as_str(),
45            &json!({}),
46        )
47        .await
48    }
49    /// https://developers.line.biz/ja/reference/messaging-api/#get-statistics-per-unit
50    pub async fn insight_message_event_aggregation(
51        &self,
52        custom_aggregation_unit: &str,
53        from: &str,
54        to: &str,
55    ) -> LineApiResponse<Value> {
56        self.http_get(format!("https://api.line.me/v2/bot/insight/message/event/aggregation?customAggregationUnit={}&from={}&to={}", custom_aggregation_unit, from, to).as_str(), &json!({})).await
57    }
58}
59
60#[derive(Debug, Default, Deserialize, Serialize, Clone)]
61pub struct LineApiInsightMessageDeliveryResponse {
62    pub status: String,
63    pub broadcast: Option<u32>,
64    pub targeting: Option<u32>,
65    #[serde(rename = "autoResponse")]
66    pub auto_response: Option<u32>,
67    #[serde(rename = "welcomeResponse")]
68    pub welcome_response: Option<u32>,
69    #[serde(rename = "chat")]
70    pub chat: Option<u32>,
71    #[serde(rename = "apiBroadcast")]
72    pub api_broadcast: Option<u32>,
73    #[serde(rename = "apiPush")]
74    pub api_push: Option<u32>,
75    #[serde(rename = "apiMulticast")]
76    pub api_multicast: Option<u32>,
77    #[serde(rename = "apiNarrowcast")]
78    pub api_narrowcast: Option<u32>,
79    #[serde(rename = "apiReply")]
80    pub api_reply: Option<u32>,
81}
82
83#[derive(Debug, Default, Deserialize, Serialize, Clone)]
84pub struct LineApiInsightFollowersResponse {
85    pub status: String,
86    pub followers: Option<u32>,
87    #[serde(rename = "targetedReaches")]
88    pub targeted_reaches: Option<u32>,
89    pub blocks: Option<u32>,
90}
91
92#[derive(Debug, Default, Deserialize, Serialize, Clone)]
93pub struct LineApiInsightDemographicResponse {
94    pub available: bool,
95    pub genders: Vec<LineApiInsightDemographicGender>,
96    pub ages: Vec<LineApiInsightDemographicAge>,
97    pub areas: Vec<LineApiInsightDemographicArea>,
98    #[serde(rename = "appTypes")]
99    pub app_types: Vec<LineApiInsightDemographicAppType>,
100    #[serde(rename = "subscriptionPeriods")]
101    pub subscription_periods: Vec<LineApiInsightDemographicSubscriptionPeriods>,
102}
103
104#[derive(Debug, Default, Deserialize, Serialize, Clone)]
105pub struct LineApiInsightDemographicGender {
106    gender: String,
107    percentage: f32,
108}
109
110#[derive(Debug, Default, Deserialize, Serialize, Clone)]
111pub struct LineApiInsightDemographicAge {
112    age: String,
113    percentage: f32,
114}
115
116#[derive(Debug, Default, Deserialize, Serialize, Clone)]
117pub struct LineApiInsightDemographicArea {
118    area: String,
119    percentage: f32,
120}
121
122#[derive(Debug, Default, Deserialize, Serialize, Clone)]
123pub struct LineApiInsightDemographicAppType {
124    #[serde(rename = "appType")]
125    app_type: String,
126    percentage: f32,
127}
128
129#[derive(Debug, Default, Deserialize, Serialize, Clone)]
130pub struct LineApiInsightDemographicSubscriptionPeriods {
131    #[serde(rename = "subscriptionPeriod")]
132    subscription_period: String,
133    percentage: f32,
134}