open_lark/service/im/v1/buzz_messages/
mod.rs

1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::impl_full_service;
6use crate::{
7    core::{
8        api_req::ApiRequest,
9        api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
10        config::Config,
11        constants::AccessTokenType,
12        endpoints::EndpointBuilder,
13        http::Transport,
14        req_option::RequestOption,
15        standard_response::StandardResponse,
16        SDKResult,
17    },
18    service::im::v1::models::UserIdType,
19};
20
21/// 消息加急服务
22pub struct BuzzMessagesService {
23    pub config: Config,
24}
25
26/// 发送应用内加急请求
27#[derive(Debug, Serialize, Deserialize)]
28pub struct UrgentAppRequest {
29    /// 用户ID列表
30    pub user_id_list: Vec<String>,
31}
32
33// 接入统一 Service 抽象(IM v1 - BuzzMessagesService)
34impl_full_service!(BuzzMessagesService, "im.buzz_messages", "v1");
35
36/// 发送短信加急请求  
37#[derive(Debug, Serialize, Deserialize)]
38pub struct UrgentSmsRequest {
39    /// 用户ID列表
40    pub user_id_list: Vec<String>,
41}
42
43/// 发送电话加急请求
44#[derive(Debug, Serialize, Deserialize)]
45pub struct UrgentPhoneRequest {
46    /// 用户ID列表
47    pub user_id_list: Vec<String>,
48}
49
50/// 消息加急响应
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct UrgentResponse {
53    /// 无效的用户ID列表
54    pub invalid_user_id_list: Vec<String>,
55}
56
57impl ApiResponseTrait for UrgentResponse {
58    fn data_format() -> ResponseFormat {
59        ResponseFormat::Data
60    }
61}
62
63impl BuzzMessagesService {
64    pub fn new(config: Config) -> Self {
65        Self { config }
66    }
67
68    /// 发送应用内加急
69    pub async fn urgent_app(
70        &self,
71        message_id: &str,
72        user_id_type: UserIdType,
73        request: UrgentAppRequest,
74        option: Option<RequestOption>,
75    ) -> SDKResult<UrgentResponse> {
76        let api_req = ApiRequest {
77            http_method: Method::PATCH,
78            api_path: EndpointBuilder::replace_param(
79                crate::core::endpoints::im::IM_V1_MESSAGE_URGENT_APP,
80                "message_id",
81                message_id,
82            ),
83            supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
84            query_params: HashMap::from([("user_id_type", user_id_type.as_str().to_string())]),
85            body: serde_json::to_vec(&request)?,
86            ..Default::default()
87        };
88
89        let api_resp: BaseResponse<UrgentResponse> =
90            Transport::request(api_req, &self.config, option).await?;
91        api_resp.into_result()
92    }
93
94    /// 发送短信加急
95    pub async fn urgent_sms(
96        &self,
97        message_id: &str,
98        user_id_type: UserIdType,
99        request: UrgentSmsRequest,
100        option: Option<RequestOption>,
101    ) -> SDKResult<UrgentResponse> {
102        let api_req = ApiRequest {
103            http_method: Method::PATCH,
104            api_path: EndpointBuilder::replace_param(
105                crate::core::endpoints::im::IM_V1_MESSAGE_URGENT_SMS,
106                "message_id",
107                message_id,
108            ),
109            supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
110            query_params: HashMap::from([("user_id_type", user_id_type.as_str().to_string())]),
111            body: serde_json::to_vec(&request)?,
112            ..Default::default()
113        };
114
115        let api_resp: BaseResponse<UrgentResponse> =
116            Transport::request(api_req, &self.config, option).await?;
117        api_resp.into_result()
118    }
119
120    /// 发送电话加急
121    pub async fn urgent_phone(
122        &self,
123        message_id: &str,
124        user_id_type: UserIdType,
125        request: UrgentPhoneRequest,
126        option: Option<RequestOption>,
127    ) -> SDKResult<UrgentResponse> {
128        let api_req = ApiRequest {
129            http_method: Method::PATCH,
130            api_path: EndpointBuilder::replace_param(
131                crate::core::endpoints::im::IM_V1_MESSAGE_URGENT_PHONE,
132                "message_id",
133                message_id,
134            ),
135            supported_access_token_types: vec![AccessTokenType::Tenant, AccessTokenType::User],
136            query_params: HashMap::from([("user_id_type", user_id_type.as_str().to_string())]),
137            body: serde_json::to_vec(&request)?,
138            ..Default::default()
139        };
140
141        let api_resp: BaseResponse<UrgentResponse> =
142            Transport::request(api_req, &self.config, option).await?;
143        api_resp.into_result()
144    }
145}