Skip to main content

babelforce_manager_sdk/resources/
campaigns.rs

1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::manager_api as api;
4use crate::gen::manager::apis::outbound_api;
5use crate::gen::manager::models;
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9/// Outbound campaigns — `/api/v2/outbound/campaigns`.
10pub struct CampaignsResource {
11    pub(crate) cfg: SharedCfg<Configuration>,
12    pub(crate) retry: RetryPolicy,
13}
14
15impl CampaignsResource {
16    /// List the outbound campaigns.
17    pub async fn list(&self) -> Result<Vec<models::OutboundCampaign>, ManagerError> {
18        let cfg = self.cfg.get().await?;
19        let cfg = cfg.as_ref();
20        let resp = with_retry(&self.retry, true, || api::list_campaigns(cfg))
21            .await
22            .map_err(map_manager_err)?;
23        Ok(resp.items)
24    }
25
26    /// Create a campaign.
27    pub async fn create(
28        &self,
29        body: models::CreateCampaignRequest,
30    ) -> Result<models::OutboundCampaignItemResponse, ManagerError> {
31        let cfg = self.cfg.get().await?;
32        let cfg = cfg.as_ref();
33        with_retry(&self.retry, false, || {
34            api::create_campaign(cfg, Some(body.clone()))
35        })
36        .await
37        .map_err(map_manager_err)
38    }
39
40    /// Get a campaign by id.
41    pub async fn get(
42        &self,
43        id: &str,
44    ) -> Result<models::OutboundCampaignItemResponse, ManagerError> {
45        let cfg = self.cfg.get().await?;
46        let cfg = cfg.as_ref();
47        with_retry(&self.retry, true, || api::get_campaign(cfg, id))
48            .await
49            .map_err(map_manager_err)
50    }
51
52    /// Update a campaign.
53    pub async fn update(
54        &self,
55        id: &str,
56        body: models::UpdateCampaignRequest,
57    ) -> Result<models::OutboundCampaignItemResponse, ManagerError> {
58        let cfg = self.cfg.get().await?;
59        let cfg = cfg.as_ref();
60        with_retry(&self.retry, false, || {
61            api::update_campaign(cfg, id, Some(body.clone()))
62        })
63        .await
64        .map_err(map_manager_err)
65    }
66
67    /// Delete a campaign.
68    pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
69        let cfg = self.cfg.get().await?;
70        let cfg = cfg.as_ref();
71        with_retry(&self.retry, false, || api::delete_campaign(cfg, id))
72            .await
73            .map_err(map_manager_err)?;
74        Ok(())
75    }
76
77    /// List the dial attempts for a campaign, optionally filtered by phone `number`.
78    pub async fn attempts(
79        &self,
80        id: &str,
81        number: Option<&str>,
82    ) -> Result<models::PaginatedAttemptResponse, ManagerError> {
83        let cfg = self.cfg.get().await?;
84        let cfg = cfg.as_ref();
85        with_retry(&self.retry, true, || {
86            outbound_api::list_campaign_attempts(cfg, id, number)
87        })
88        .await
89        .map_err(map_manager_err)
90    }
91
92    /// Get the hopper (queued leads) of a campaign.
93    pub async fn hopper(&self, id: &str) -> Result<models::CampaignHopperResponse, ManagerError> {
94        let cfg = self.cfg.get().await?;
95        let cfg = cfg.as_ref();
96        with_retry(&self.retry, true, || {
97            outbound_api::get_campaign_hopper(cfg, id)
98        })
99        .await
100        .map_err(map_manager_err)
101    }
102
103    /// List the leads of a campaign.
104    pub async fn leads(&self, id: &str) -> Result<models::PaginatedLeadResponse, ManagerError> {
105        let cfg = self.cfg.get().await?;
106        let cfg = cfg.as_ref();
107        with_retry(&self.retry, true, || {
108            outbound_api::list_campaign_leads(cfg, id)
109        })
110        .await
111        .map_err(map_manager_err)
112    }
113
114    /// List the processed leads of a campaign.
115    pub async fn processed_leads(
116        &self,
117        id: &str,
118    ) -> Result<models::PaginatedLeadResponse, ManagerError> {
119        let cfg = self.cfg.get().await?;
120        let cfg = cfg.as_ref();
121        with_retry(&self.retry, true, || {
122            outbound_api::list_campaign_processed_leads(cfg, id)
123        })
124        .await
125        .map_err(map_manager_err)
126    }
127
128    /// Get the lead list assigned to a campaign.
129    pub async fn get_list(&self, id: &str) -> Result<models::LeadListItemResponse, ManagerError> {
130        let cfg = self.cfg.get().await?;
131        let cfg = cfg.as_ref();
132        with_retry(&self.retry, true, || {
133            outbound_api::get_campaign_list(cfg, id)
134        })
135        .await
136        .map_err(map_manager_err)
137    }
138
139    /// Set the lead list of a campaign.
140    pub async fn set_list(
141        &self,
142        id: &str,
143        body: models::SetCampaignListRequest,
144    ) -> Result<models::CampaignItemResponse, ManagerError> {
145        let cfg = self.cfg.get().await?;
146        let cfg = cfg.as_ref();
147        with_retry(&self.retry, false, || {
148            outbound_api::set_campaign_list(cfg, id, body.clone())
149        })
150        .await
151        .map_err(map_manager_err)
152    }
153
154    /// Unset (detach) the lead list of a campaign.
155    pub async fn unset_list(&self, id: &str) -> Result<models::CampaignItemResponse, ManagerError> {
156        let cfg = self.cfg.get().await?;
157        let cfg = cfg.as_ref();
158        with_retry(&self.retry, false, || {
159            outbound_api::unset_campaign_list(cfg, id)
160        })
161        .await
162        .map_err(map_manager_err)
163    }
164
165    /// Set the lead list of a campaign by list id.
166    pub async fn set_list_by_id(
167        &self,
168        id: &str,
169        list_id: &str,
170    ) -> Result<models::CampaignItemResponse, ManagerError> {
171        let cfg = self.cfg.get().await?;
172        let cfg = cfg.as_ref();
173        with_retry(&self.retry, false, || {
174            outbound_api::set_campaign_list_by_id(cfg, id, list_id)
175        })
176        .await
177        .map_err(map_manager_err)
178    }
179
180    /// Log out all agents currently assigned to a campaign.
181    pub async fn logout_all_agents(
182        &self,
183        id: &str,
184    ) -> Result<models::DefaultV2MessageResponse, ManagerError> {
185        let cfg = self.cfg.get().await?;
186        let cfg = cfg.as_ref();
187        with_retry(&self.retry, false, || {
188            outbound_api::logout_all_campaign_agents(cfg, id)
189        })
190        .await
191        .map_err(map_manager_err)
192    }
193
194    /// Get the statistics of a campaign, optionally bounded by a `from`/`to` time range.
195    pub async fn statistics(
196        &self,
197        id: &str,
198        from: Option<i32>,
199        to: Option<i32>,
200    ) -> Result<models::CampaignStatisticsResponse, ManagerError> {
201        let cfg = self.cfg.get().await?;
202        let cfg = cfg.as_ref();
203        with_retry(&self.retry, true, || {
204            outbound_api::get_campaign_statistics(cfg, id, from, to)
205        })
206        .await
207        .map_err(map_manager_err)
208    }
209
210    /// Get the realtime status of a campaign.
211    pub async fn status(
212        &self,
213        id: &str,
214    ) -> Result<models::CampaignRealtimeStatusResponse, ManagerError> {
215        let cfg = self.cfg.get().await?;
216        let cfg = cfg.as_ref();
217        with_retry(&self.retry, true, || {
218            outbound_api::get_campaign_status(cfg, id)
219        })
220        .await
221        .map_err(map_manager_err)
222    }
223}