wecom_rs/client/external_contact/enterprise_service/
enterprise_service.rs1use super::{
2 ContactWay, EnterpriseServiceManager, ParamsContactWayCreate, ParamsContactWayList,
3 ParamsContactWayUpdate, RespContactWayCreate,
4};
5use crate::{client::BASE_URL, common::model::Response, Client, Result};
6use async_trait::async_trait;
7use reqwest::Method;
8use serde::{Deserialize, Serialize};
9
10#[async_trait]
11impl EnterpriseServiceManager for Client {
12 async fn get_follow_user_list(&self) -> Result<Vec<String>> {
13 let token = self.custom_contact_access_token().await?;
14 let resp = self
15 .request::<Response<FollowUserList>>(
16 Method::GET,
17 &format!("{BASE_URL}/externalcontact/get_follow_user_list?access_token={token}"),
18 None,
19 )
20 .await?;
21
22 Ok(resp.data.unwrap().follow_user)
23 }
24
25 async fn contact_way_create(
26 &self,
27 params: ParamsContactWayCreate,
28 ) -> Result<RespContactWayCreate> {
29 let token = self.custom_contact_access_token().await?;
30 let resp = self
31 .request::<Response<RespContactWayCreate>>(
32 Method::POST,
33 &format!("{BASE_URL}/externalcontact/add_contact_way?access_token={token}"),
34 Some(serde_json::to_value(¶ms)?),
35 )
36 .await?;
37
38 Ok(resp.data.unwrap())
39 }
40
41 async fn contact_way_get(&self, config_id: &str) -> Result<ContactWay> {
42 let token = self.custom_contact_access_token().await?;
43 let resp = self
44 .request::<Response<ContactWay>>(
45 Method::POST,
46 &format!("{BASE_URL}/externalcontact/get_contact_way?access_token={token}"),
47 Some(serde_json::json!({ "config_id": config_id })),
48 )
49 .await?;
50
51 Ok(resp.data.unwrap())
52 }
53
54 async fn contact_way_list(
55 &self,
56 params: Option<ParamsContactWayList>,
57 ) -> Result<Vec<ContactWay>> {
58 let token = self.custom_contact_access_token().await?;
59
60 let params = if let Some(params) = params {
61 Some(serde_json::to_value(¶ms)?)
62 } else {
63 None
64 };
65 let resp = self
66 .request::<Response<Vec<ContactWay>>>(
67 Method::POST,
68 &format!("{BASE_URL}/externalcontact/list_contact_way?access_token={token}"),
69 params,
70 )
71 .await?;
72
73 Ok(resp.data.unwrap_or(vec![]))
74 }
75
76 async fn contact_way_update(&self, params: ParamsContactWayUpdate) -> Result<()> {
77 let token = self.custom_contact_access_token().await?;
78 self.request::<Response<()>>(
79 Method::POST,
80 &format!("{BASE_URL}/externalcontact/update_contact_way?access_token={token}"),
81 Some(serde_json::to_value(¶ms)?),
82 )
83 .await?;
84
85 Ok(())
86 }
87
88 async fn contact_way_delete(&self, config_id: &str) -> Result<()> {
89 let token = self.custom_contact_access_token().await?;
90 self.request::<Response<()>>(
91 Method::POST,
92 &format!("{BASE_URL}//externalcontact/del_contact_way?access_token={token}"),
93 Some(serde_json::json!({ "config_id": config_id })),
94 )
95 .await?;
96
97 Ok(())
98 }
99
100 async fn temp_chat_close(&self, userid: &str, external_userid: &str) -> Result<()> {
101 let token = self.custom_contact_access_token().await?;
102 self.request::<Response<()>>(
103 Method::POST,
104 &format!("{BASE_URL}/externalcontact/close_temp_chat?access_token={token}"),
105 Some(serde_json::json!({"userid": userid, "external_userid": external_userid})),
106 )
107 .await?;
108
109 Ok(())
110 }
111}
112
113#[derive(Debug, Deserialize, Serialize, Default)]
114struct FollowUserList {
115 follow_user: Vec<String>,
117}