line_bot_messaging_api/api/
insight.rs1use crate::{LineApiResponse, LineClient};
2use serde_derive::{Deserialize, Serialize};
3use serde_json::{json, Value};
4
5impl LineClient {
6 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 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 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 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 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}