Skip to main content

ghl_sdk/services/
knowledge_base.rs

1// @generated by xtask/generate_services.py — do not edit by hand.
2//! `knowledge-base` — typed methods for all 14 API v2 operations
3//! in this module.
4//!
5//! Access via [`Ghl::knowledge_base`](crate::Ghl::knowledge_base).
6//!
7//! Request and response types come from [`ghl_models::v2::knowledge_base`](https://docs.rs/ghl-models/latest/ghl_models/v2/knowledge_base/); every endpoint is also documented in the
8//! [`knowledge-base` API reference](https://github.com/Shahroz/ghl-rs/blob/main/docs/api/knowledge-base.md).
9//!
10//! Enable with `features = ["knowledge-base"]`.
11
12#![allow(clippy::too_many_arguments)]
13
14use crate::client::Ghl;
15use crate::error::Result;
16use ghl_models::v2::knowledge_base as models;
17
18/// Typed access to the `knowledge-base` API v2 surface (14 operations). Obtained via
19/// [`Ghl::knowledge_base`](crate::Ghl::knowledge_base).
20#[derive(Debug, Clone)]
21pub struct KnowledgeBaseService {
22    pub(crate) client: Ghl,
23}
24
25impl KnowledgeBaseService {
26    pub(crate) fn new(client: Ghl) -> Self {
27        Self { client }
28    }
29}
30
31/// Query parameters for [`KnowledgeBaseService::get_knowledge_bases`].
32#[derive(Debug, Clone, Default)]
33pub struct GetKnowledgeBasesParams {
34    /// `locationId` query parameter.
35    /// Required by the API.
36    pub location_id: String,
37    /// search query for knowledge base name
38    pub query: Option<String>,
39    /// Maximum number of knowledge bases to return
40    pub limit: Option<f64>,
41    /// ID of the last knowledge base from the previous page (for pagination)
42    pub last_knowledge_base_id: Option<String>,
43}
44
45impl GetKnowledgeBasesParams {
46    /// Start from the parameters the API requires.
47    pub fn new(location_id: impl Into<String>) -> Self {
48        Self {
49            location_id: location_id.into(),
50            ..Default::default()
51        }
52    }
53
54    /// search query for knowledge base name
55    pub fn query(mut self, v: impl Into<String>) -> Self {
56        self.query = Some(v.into());
57        self
58    }
59
60    /// Maximum number of knowledge bases to return
61    pub fn limit(mut self, v: f64) -> Self {
62        self.limit = Some(v);
63        self
64    }
65
66    /// ID of the last knowledge base from the previous page (for pagination)
67    pub fn last_knowledge_base_id(mut self, v: impl Into<String>) -> Self {
68        self.last_knowledge_base_id = Some(v.into());
69        self
70    }
71
72    fn to_query(&self) -> Vec<(String, String)> {
73        let mut q: Vec<(String, String)> = vec![("locationId".into(), self.location_id.clone())];
74        if let Some(v) = &self.query {
75            q.push(("query".into(), v.to_string()));
76        }
77        if let Some(v) = &self.limit {
78            q.push(("limit".into(), v.to_string()));
79        }
80        if let Some(v) = &self.last_knowledge_base_id {
81            q.push(("lastKnowledgeBaseId".into(), v.to_string()));
82        }
83        q
84    }
85}
86
87/// Query parameters for
88/// [`KnowledgeBaseService::get_all_trained_page_links_by_knowledge_base`].
89#[derive(Debug, Clone, Default)]
90pub struct GetAllTrainedPageLinksByKnowledgeBaseParams {
91    /// knowledge base ID as string
92    /// Required by the API.
93    pub knowledge_base_id: String,
94    /// location ID as string
95    /// Required by the API.
96    pub location_id: String,
97    /// Page number
98    pub page: Option<f64>,
99    /// Records per page
100    pub page_length: Option<f64>,
101    /// query to filter on url links
102    pub query: Option<String>,
103}
104
105impl GetAllTrainedPageLinksByKnowledgeBaseParams {
106    /// Start from the parameters the API requires.
107    pub fn new(knowledge_base_id: impl Into<String>, location_id: impl Into<String>) -> Self {
108        Self {
109            knowledge_base_id: knowledge_base_id.into(),
110            location_id: location_id.into(),
111            ..Default::default()
112        }
113    }
114
115    /// Page number
116    pub fn page(mut self, v: f64) -> Self {
117        self.page = Some(v);
118        self
119    }
120
121    /// Records per page
122    pub fn page_length(mut self, v: f64) -> Self {
123        self.page_length = Some(v);
124        self
125    }
126
127    /// query to filter on url links
128    pub fn query(mut self, v: impl Into<String>) -> Self {
129        self.query = Some(v.into());
130        self
131    }
132
133    fn to_query(&self) -> Vec<(String, String)> {
134        let mut q: Vec<(String, String)> = vec![
135            ("knowledgeBaseId".into(), self.knowledge_base_id.clone()),
136            ("locationId".into(), self.location_id.clone()),
137        ];
138        if let Some(v) = &self.page {
139            q.push(("page".into(), v.to_string()));
140        }
141        if let Some(v) = &self.page_length {
142            q.push(("pageLength".into(), v.to_string()));
143        }
144        if let Some(v) = &self.query {
145            q.push(("query".into(), v.to_string()));
146        }
147        q
148    }
149}
150
151/// Query parameters for
152/// [`KnowledgeBaseService::get_crawling_status_for_the_latest_operation`].
153#[derive(Debug, Clone, Default)]
154pub struct GetCrawlingStatusForTheLatestOperationParams {
155    /// Location ID as string
156    /// Required by the API.
157    pub location_id: String,
158    /// operation id as string
159    /// Required by the API.
160    pub operation_id: String,
161    /// knowledge base id
162    /// Required by the API.
163    pub knowledge_base_id: String,
164}
165
166impl GetCrawlingStatusForTheLatestOperationParams {
167    /// Start from the parameters the API requires.
168    pub fn new(
169        location_id: impl Into<String>,
170        operation_id: impl Into<String>,
171        knowledge_base_id: impl Into<String>,
172    ) -> Self {
173        Self {
174            location_id: location_id.into(),
175            operation_id: operation_id.into(),
176            knowledge_base_id: knowledge_base_id.into(),
177        }
178    }
179
180    fn to_query(&self) -> Vec<(String, String)> {
181        let q: Vec<(String, String)> = vec![
182            ("locationId".into(), self.location_id.clone()),
183            ("operationId".into(), self.operation_id.clone()),
184            ("knowledgeBaseId".into(), self.knowledge_base_id.clone()),
185        ];
186        q
187    }
188}
189
190/// Query parameters for
191/// [`KnowledgeBaseService::get_all_fa_qs_by_knowledge_base_with_pagination_support`].
192#[derive(Debug, Clone, Default)]
193pub struct GetAllFaQsByKnowledgeBaseWithPaginationSupportParams {
194    /// knowledge base ID as string
195    /// Required by the API.
196    pub knowledge_base_id: String,
197    /// location ID as string
198    /// Required by the API.
199    pub location_id: String,
200    /// Limit the number of FAQs returned
201    pub limit: Option<f64>,
202    /// Last FAQ ID for pagination (cursor-based)
203    pub last_faq_id: Option<String>,
204}
205
206impl GetAllFaQsByKnowledgeBaseWithPaginationSupportParams {
207    /// Start from the parameters the API requires.
208    pub fn new(knowledge_base_id: impl Into<String>, location_id: impl Into<String>) -> Self {
209        Self {
210            knowledge_base_id: knowledge_base_id.into(),
211            location_id: location_id.into(),
212            ..Default::default()
213        }
214    }
215
216    /// Limit the number of FAQs returned
217    pub fn limit(mut self, v: f64) -> Self {
218        self.limit = Some(v);
219        self
220    }
221
222    /// Last FAQ ID for pagination (cursor-based)
223    pub fn last_faq_id(mut self, v: impl Into<String>) -> Self {
224        self.last_faq_id = Some(v.into());
225        self
226    }
227
228    fn to_query(&self) -> Vec<(String, String)> {
229        let mut q: Vec<(String, String)> = vec![
230            ("knowledgeBaseId".into(), self.knowledge_base_id.clone()),
231            ("locationId".into(), self.location_id.clone()),
232        ];
233        if let Some(v) = &self.limit {
234            q.push(("limit".into(), v.to_string()));
235        }
236        if let Some(v) = &self.last_faq_id {
237            q.push(("lastFaqId".into(), v.to_string()));
238        }
239        q
240    }
241}
242
243impl KnowledgeBaseService {
244    /// Get all knowledge bases for a location by location Id (paginated)
245    ///
246    /// `GET /knowledge-bases/`
247    pub async fn get_knowledge_bases(
248        &self,
249        params: &GetKnowledgeBasesParams,
250    ) -> Result<models::GetAllKnowledgeBasesPaginatedResponseDTO> {
251        let query = params.to_query();
252        self.client
253            .send_versioned(
254                reqwest::Method::GET,
255                "/knowledge-bases/",
256                &query,
257                None::<&()>,
258                Some("2021-04-15"),
259            )
260            .await
261    }
262
263    /// Create a new knowledge base (max 15 knowledge bases per location)
264    ///
265    /// `POST /knowledge-bases/`
266    pub async fn post_knowledge_bases(
267        &self,
268        body: &models::CreateKnowledgeBaseDTO,
269    ) -> Result<models::CreateKnowledgeBaseResponseDTO> {
270        let query = Vec::new();
271        self.client
272            .send_versioned(
273                reqwest::Method::POST,
274                "/knowledge-bases/",
275                &query,
276                Some(body),
277                Some("2021-04-15"),
278            )
279            .await
280    }
281
282    /// Delete trained pages
283    ///
284    /// `DELETE /knowledge-bases/crawler`
285    pub async fn delete_trained_pages(
286        &self,
287        body: &models::DeleteWebsiteUrlRequestDTO,
288    ) -> Result<models::DeleteWebsiteUrlResponseDTO> {
289        let query = Vec::new();
290        self.client
291            .send_versioned(
292                reqwest::Method::DELETE,
293                "/knowledge-bases/crawler",
294                &query,
295                Some(body),
296                Some("2021-04-15"),
297            )
298            .await
299    }
300
301    /// Get all trained page links by knowledge base
302    ///
303    /// `GET /knowledge-bases/crawler`
304    pub async fn get_all_trained_page_links_by_knowledge_base(
305        &self,
306        params: &GetAllTrainedPageLinksByKnowledgeBaseParams,
307    ) -> Result<models::GetAllUrlsByKnowledgeBaseResponseDTO> {
308        let query = params.to_query();
309        self.client
310            .send_versioned(
311                reqwest::Method::GET,
312                "/knowledge-bases/crawler",
313                &query,
314                None::<&()>,
315                Some("2021-04-15"),
316            )
317            .await
318    }
319
320    /// Start crawling and discover pages for training
321    ///
322    /// `POST /knowledge-bases/crawler`
323    pub async fn start_crawling_and_discover_pages_for_training(
324        &self,
325        body: &models::DiscoverWebsiteRequestDTO,
326    ) -> Result<models::DiscoverWebsiteResponseDTO> {
327        let query = Vec::new();
328        self.client
329            .send_versioned(
330                reqwest::Method::POST,
331                "/knowledge-bases/crawler",
332                &query,
333                Some(body),
334                Some("2021-04-15"),
335            )
336            .await
337    }
338
339    /// Get crawling status for the latest operation
340    ///
341    /// `GET /knowledge-bases/crawler/status`
342    pub async fn get_crawling_status_for_the_latest_operation(
343        &self,
344        params: &GetCrawlingStatusForTheLatestOperationParams,
345    ) -> Result<models::CrawlingStatusResponseDTO> {
346        let query = params.to_query();
347        self.client
348            .send_versioned(
349                reqwest::Method::GET,
350                "/knowledge-bases/crawler/status",
351                &query,
352                None::<&()>,
353                Some("2021-04-15"),
354            )
355            .await
356    }
357
358    /// Train discovered website pages and ingest into the knowledge base
359    ///
360    /// `POST /knowledge-bases/crawler/train`
361    pub async fn post_knowledge_bases_crawler_train(
362        &self,
363        body: &models::TrainDiscoveredUrlsDTO,
364    ) -> Result<models::TrainDiscoveredUrlsResponseDTO> {
365        let query = Vec::new();
366        self.client
367            .send_versioned(
368                reqwest::Method::POST,
369                "/knowledge-bases/crawler/train",
370                &query,
371                Some(body),
372                Some("2021-04-15"),
373            )
374            .await
375    }
376
377    /// Get all FAQs by knowledge base with pagination support
378    ///
379    /// Retrieves FAQs for a knowledge base. Supports pagination using limit and lastFaqId
380    /// parameters.
381    ///
382    /// `GET /knowledge-bases/faqs`
383    pub async fn get_all_fa_qs_by_knowledge_base_with_pagination_support(
384        &self,
385        params: &GetAllFaQsByKnowledgeBaseWithPaginationSupportParams,
386    ) -> Result<models::ListFaqsResponseDTO> {
387        let query = params.to_query();
388        self.client
389            .send_versioned(
390                reqwest::Method::GET,
391                "/knowledge-bases/faqs",
392                &query,
393                None::<&()>,
394                Some("2021-04-15"),
395            )
396            .await
397    }
398
399    /// Create a new FAQ inside knowledge base
400    ///
401    /// `POST /knowledge-bases/faqs`
402    pub async fn create_a_new_faq_inside_knowledge_base(
403        &self,
404        body: &models::AddFaqDTO,
405    ) -> Result<models::CreateFaqResponseDTO> {
406        let query = Vec::new();
407        self.client
408            .send_versioned(
409                reqwest::Method::POST,
410                "/knowledge-bases/faqs",
411                &query,
412                Some(body),
413                Some("2021-04-15"),
414            )
415            .await
416    }
417
418    /// Delete an existing knowledge base FAQ
419    ///
420    /// `DELETE /knowledge-bases/faqs/{id}`
421    pub async fn delete_an_existing_knowledge_base_faq(
422        &self,
423        id: &str,
424    ) -> Result<models::DeleteFaqResponseDTO> {
425        let path = format!("/knowledge-bases/faqs/{}", crate::services::encode(id));
426        let query = Vec::new();
427        self.client
428            .send_versioned(
429                reqwest::Method::DELETE,
430                &path,
431                &query,
432                None::<&()>,
433                Some("2021-04-15"),
434            )
435            .await
436    }
437
438    /// Update an existing knowledge base FAQ
439    ///
440    /// `PUT /knowledge-bases/faqs/{id}`
441    pub async fn update_an_existing_knowledge_base_faq(
442        &self,
443        id: &str,
444        body: &models::UpdateFaqBodyDTO,
445    ) -> Result<models::UpdateFaqResponseDTO> {
446        let path = format!("/knowledge-bases/faqs/{}", crate::services::encode(id));
447        let query = Vec::new();
448        self.client
449            .send_versioned(
450                reqwest::Method::PUT,
451                &path,
452                &query,
453                Some(body),
454                Some("2021-04-15"),
455            )
456            .await
457    }
458
459    /// Update a knowledge base
460    ///
461    /// `PUT /knowledge-bases/{id}`
462    pub async fn update_a_knowledge_base(
463        &self,
464        id: &str,
465        body: &models::UpdateKnowledgeBaseDTO,
466    ) -> Result<models::UpdateKnowledgeBaseResponseDTO> {
467        let path = format!("/knowledge-bases/{}", crate::services::encode(id));
468        let query = Vec::new();
469        self.client
470            .send_versioned(
471                reqwest::Method::PUT,
472                &path,
473                &query,
474                Some(body),
475                Some("2021-04-15"),
476            )
477            .await
478    }
479
480    /// Delete a knowledge base
481    ///
482    /// `DELETE /knowledge-bases/{knowledgeBaseId}`
483    pub async fn delete_a_knowledge_base(
484        &self,
485        knowledge_base_id: &str,
486    ) -> Result<models::DeleteKnowledgeBaseResponseDTO> {
487        let path = format!(
488            "/knowledge-bases/{}",
489            crate::services::encode(knowledge_base_id)
490        );
491        let query = Vec::new();
492        self.client
493            .send_versioned(
494                reqwest::Method::DELETE,
495                &path,
496                &query,
497                None::<&()>,
498                Some("2021-04-15"),
499            )
500            .await
501    }
502
503    /// Get knowledge base by ID
504    ///
505    /// `GET /knowledge-bases/{knowledgeBaseId}`
506    pub async fn get_knowledge_base_by_id(
507        &self,
508        knowledge_base_id: &str,
509    ) -> Result<models::GetKnowledgeBaseByIdResponseDTO> {
510        let path = format!(
511            "/knowledge-bases/{}",
512            crate::services::encode(knowledge_base_id)
513        );
514        let query = Vec::new();
515        self.client
516            .send_versioned(
517                reqwest::Method::GET,
518                &path,
519                &query,
520                None::<&()>,
521                Some("2021-04-15"),
522            )
523            .await
524    }
525}