Skip to main content

highlevel_api/apis/conversations/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4#[serde(rename_all = "camelCase")]
5pub struct SearchConversationsParams {
6    pub location_id: String,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub contact_id: Option<String>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub assigned_to: Option<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub status: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub limit: Option<u32>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub last_message_type: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub last_message_action: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub sort: Option<String>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub sort_by: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub start_after_id: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub start_after: Option<i64>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct Conversation {
32    pub id: String,
33    pub location_id: String,
34    pub contact_id: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub assigned_to: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub status: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub last_message: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub last_message_date: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub last_message_type: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub unread_count: Option<i32>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub inbox_id: Option<String>,
49    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
50    pub type_: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub starred: Option<bool>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct SearchConversationsResponse {
57    pub conversations: Vec<Conversation>,
58    pub total: u64,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct GetConversationResponse {
63    pub conversation: Conversation,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, Default)]
67#[serde(rename_all = "camelCase")]
68pub struct CreateConversationParams {
69    pub location_id: String,
70    pub contact_id: String,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, Default)]
74#[serde(rename_all = "camelCase")]
75pub struct UpdateConversationParams {
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub unread_count: Option<i32>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub starred: Option<bool>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub assigned_to: Option<String>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub status: Option<String>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct DeleteConversationResponse {
88    pub succeded: bool,
89}
90
91// ── Messages ─────────────────────────────────────────────────────────────────
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(rename_all = "camelCase")]
95pub struct Message {
96    pub id: String,
97    pub conversation_id: String,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub location_id: Option<String>,
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub contact_id: Option<String>,
102    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
103    pub type_: Option<String>,
104    #[serde(skip_serializing_if = "Option::is_none")]
105    pub direction: Option<String>,
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub status: Option<String>,
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub body: Option<String>,
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub html: Option<String>,
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub subject: Option<String>,
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub source: Option<String>,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub date_added: Option<String>,
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub read: Option<bool>,
120    #[serde(default)]
121    pub attachments: Vec<String>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
125#[serde(rename_all = "camelCase")]
126pub struct MessagesPage {
127    pub messages: Vec<Message>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub total: Option<u64>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub next_page_url: Option<String>,
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub prev_page_url: Option<String>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub last_message_id: Option<String>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
139pub struct GetMessagesResponse {
140    pub messages: MessagesPage,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize, Default)]
144#[serde(rename_all = "camelCase")]
145pub struct SendMessageParams {
146    #[serde(rename = "type")]
147    pub type_: String,
148    pub conversation_id: String,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub contact_id: Option<String>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub scheduled_timestamp: Option<i64>,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub message: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub subject: Option<String>,
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub html: Option<String>,
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub email_from: Option<String>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub email_to: Option<Vec<String>>,
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub email_cc: Option<Vec<String>>,
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub email_bcc: Option<Vec<String>>,
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub attachments: Option<Vec<String>>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173pub struct SendMessageResponse {
174    pub id: String,
175    pub conversation_id: String,
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub date_added: Option<String>,
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub email_message_id: Option<String>,
180}