Skip to main content

ghl_models/v3/
chat_widget.rs

1// @generated by xtask/generate_models.py — do not edit by hand.
2// Source: https://github.com/GoHighLevel/highlevel-api-docs
3// Doc comments are HighLevel's own field descriptions, reflowed verbatim, so
4// they aren't held to rustdoc's markdown conventions.
5#![allow(
6    missing_docs,
7    clippy::doc_lazy_continuation,
8    clippy::doc_overindented_list_items
9)]
10
11use serde::{Deserialize, Serialize};
12
13/// `A2PComplianceDTO` from the GoHighLevel OpenAPI spec.
14#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct A2PComplianceDTO {
16    /// Enable A2P Compliance
17    #[serde(
18        rename = "enableA2PCompliance",
19        default,
20        skip_serializing_if = "Option::is_none"
21    )]
22    pub enable_a2_p_compliance: Option<bool>,
23    /// A2P Opt In Form 1
24    #[serde(
25        rename = "a2pOptInForm1",
26        default,
27        skip_serializing_if = "Option::is_none"
28    )]
29    pub a2p_opt_in_form1: Option<String>,
30    /// Show checkbox for A2P Opt In Form 1
31    #[serde(
32        rename = "a2pOptInForm1ShowCheckbox",
33        default,
34        skip_serializing_if = "Option::is_none"
35    )]
36    pub a2p_opt_in_form1_show_checkbox: Option<bool>,
37    /// Pre-checked state for A2P Opt In Form 1 checkbox
38    #[serde(
39        rename = "a2pOptInForm1PreChecked",
40        default,
41        skip_serializing_if = "Option::is_none"
42    )]
43    pub a2p_opt_in_form1_pre_checked: Option<bool>,
44    /// Is A2P Opt In Form 2
45    #[serde(
46        rename = "isA2POptInForm2",
47        default,
48        skip_serializing_if = "Option::is_none"
49    )]
50    pub is_a2_p_opt_in_form2: Option<bool>,
51    /// A2P Opt In Form 2
52    #[serde(
53        rename = "a2pOptInForm2",
54        default,
55        skip_serializing_if = "Option::is_none"
56    )]
57    pub a2p_opt_in_form2: Option<String>,
58    /// Show checkbox for A2P Opt In Form 2
59    #[serde(
60        rename = "a2pOptInForm2ShowCheckbox",
61        default,
62        skip_serializing_if = "Option::is_none"
63    )]
64    pub a2p_opt_in_form2_show_checkbox: Option<bool>,
65    /// Pre-checked state for A2P Opt In Form 2 checkbox
66    #[serde(
67        rename = "a2pOptInForm2PreChecked",
68        default,
69        skip_serializing_if = "Option::is_none"
70    )]
71    pub a2p_opt_in_form2_pre_checked: Option<bool>,
72    /// Privacy Policy Link
73    #[serde(
74        rename = "privacyPolicyLink",
75        default,
76        skip_serializing_if = "Option::is_none"
77    )]
78    pub privacy_policy_link: Option<String>,
79    /// Terms of Service
80    #[serde(
81        rename = "termsOfServiceLink",
82        default,
83        skip_serializing_if = "Option::is_none"
84    )]
85    pub terms_of_service_link: Option<String>,
86    /// Is A2P Opt In Form 1 enabled
87    #[serde(
88        rename = "isA2POptInForm1",
89        default,
90        skip_serializing_if = "Option::is_none"
91    )]
92    pub is_a2_p_opt_in_form1: Option<bool>,
93    /// Message Type
94    #[serde(
95        rename = "messageType",
96        default,
97        skip_serializing_if = "Option::is_none"
98    )]
99    pub message_type: Option<String>,
100}
101
102/// `AcknowledgementDetailsDTO` from the GoHighLevel OpenAPI spec.
103#[derive(Debug, Clone, Default, Serialize, Deserialize)]
104pub struct AcknowledgementDetailsDTO {
105    /// Icon
106    #[serde(default, skip_serializing_if = "Option::is_none")]
107    pub icon: Option<String>,
108    /// Placeholder color
109    #[serde(
110        rename = "placeholderColor",
111        default,
112        skip_serializing_if = "Option::is_none"
113    )]
114    pub placeholder_color: Option<String>,
115    /// Icon for live chat
116    #[serde(
117        rename = "liveChatIcon",
118        default,
119        skip_serializing_if = "Option::is_none"
120    )]
121    pub live_chat_icon: Option<String>,
122    /// Placeholder color for live chat
123    #[serde(
124        rename = "liveChatPlaceholderColor",
125        default,
126        skip_serializing_if = "Option::is_none"
127    )]
128    pub live_chat_placeholder_color: Option<String>,
129}
130
131/// `AdvanceSettingsDTO` from the GoHighLevel OpenAPI spec.
132#[derive(Debug, Clone, Default, Serialize, Deserialize)]
133pub struct AdvanceSettingsDTO {
134    /// Branding Title
135    #[serde(
136        rename = "brandingTitle",
137        default,
138        skip_serializing_if = "Option::is_none"
139    )]
140    pub branding_title: Option<String>,
141    /// Redirect Object
142    #[serde(default, skip_serializing_if = "Option::is_none")]
143    pub redirect: Option<RedirectDTO>,
144    /// Boolean for showing contact form at start
145    #[serde(
146        rename = "enableContactForm",
147        default,
148        skip_serializing_if = "Option::is_none"
149    )]
150    pub enable_contact_form: Option<bool>,
151    /// By default consent check for contact form
152    #[serde(
153        rename = "defaultConsentCheck",
154        default,
155        skip_serializing_if = "Option::is_none"
156    )]
157    pub default_consent_check: Option<bool>,
158    /// Business Office Hours
159    #[serde(
160        rename = "businessOfficeHours",
161        default,
162        skip_serializing_if = "Option::is_none"
163    )]
164    pub business_office_hours: Option<BusinessOfficeHoursDTO>,
165    /// Contact form field configuration
166    #[serde(
167        rename = "contactFormOptions",
168        default,
169        skip_serializing_if = "Vec::is_empty"
170    )]
171    pub contact_form_options: Vec<String>,
172    /// Chat types included in the all-in-one widget
173    /// Allowed values: `liveChat`, `waChat`, `emailChat`, `allInOneChat`, `voiceAiChat`,
174    /// `facebookChat`, `instagramChat`, `webChat`.
175    #[serde(
176        rename = "allInOneChatTypes",
177        default,
178        skip_serializing_if = "Vec::is_empty"
179    )]
180    pub all_in_one_chat_types: Vec<String>,
181    /// All In One Initial Msg
182    #[serde(
183        rename = "allInOneInitialMsg",
184        default,
185        skip_serializing_if = "Option::is_none"
186    )]
187    pub all_in_one_initial_msg: Option<String>,
188    /// Contact Form Intro Message
189    #[serde(
190        rename = "contactFormIntroMessage",
191        default,
192        skip_serializing_if = "Option::is_none"
193    )]
194    pub contact_form_intro_message: Option<String>,
195    /// Contact Form System Message
196    #[serde(
197        rename = "contactFormSystemMessage",
198        default,
199        skip_serializing_if = "Option::is_none"
200    )]
201    pub contact_form_system_message: Option<String>,
202    /// Prefilled Message Text
203    #[serde(
204        rename = "prefilledMessageText",
205        default,
206        skip_serializing_if = "Option::is_none"
207    )]
208    pub prefilled_message_text: Option<String>,
209    /// Voice AI Agent
210    #[serde(
211        rename = "voiceAiAgent",
212        default,
213        skip_serializing_if = "Option::is_none"
214    )]
215    pub voice_ai_agent: Option<serde_json::Value>,
216    /// Facebook Page
217    #[serde(rename = "fbPage", default, skip_serializing_if = "Option::is_none")]
218    pub fb_page: Option<FBPageDTO>,
219    /// Instagram Page
220    #[serde(
221        rename = "instagramPage",
222        default,
223        skip_serializing_if = "Option::is_none"
224    )]
225    pub instagram_page: Option<InstagramPageDTO>,
226    /// Play Notification Sound
227    #[serde(
228        rename = "playNotificationSound",
229        default,
230        skip_serializing_if = "Option::is_none"
231    )]
232    pub play_notification_sound: Option<bool>,
233    /// Voice Ai Send Action Text
234    #[serde(
235        rename = "voiceAiSendActionText",
236        default,
237        skip_serializing_if = "Option::is_none"
238    )]
239    pub voice_ai_send_action_text: Option<String>,
240    /// A2P Compliance
241    #[serde(
242        rename = "aTwoPCompliance",
243        default,
244        skip_serializing_if = "Option::is_none"
245    )]
246    pub a_two_p_compliance: Option<A2PComplianceDTO>,
247}
248
249/// `BusinessOfficeHoursDTO` from the GoHighLevel OpenAPI spec.
250#[derive(Debug, Clone, Default, Serialize, Deserialize)]
251pub struct BusinessOfficeHoursDTO {
252    /// Enable Business Hours
253    #[serde(
254        rename = "enableBusinessHours",
255        default,
256        skip_serializing_if = "Option::is_none"
257    )]
258    pub enable_business_hours: Option<bool>,
259    /// Open hours schedule
260    #[serde(rename = "openHours", default, skip_serializing_if = "Vec::is_empty")]
261    pub open_hours: Vec<String>,
262    /// Time Zone
263    #[serde(default, skip_serializing_if = "Option::is_none")]
264    pub timezone: Option<String>,
265    /// Time Zone
266    #[serde(
267        rename = "outsideOfficeHoursWelcomeMsg",
268        default,
269        skip_serializing_if = "Option::is_none"
270    )]
271    pub outside_office_hours_welcome_msg: Option<String>,
272}
273
274/// `CloneChatWidgetDTO` from the GoHighLevel OpenAPI spec.
275#[derive(Debug, Clone, Default, Serialize, Deserialize)]
276pub struct CloneChatWidgetDTO {
277    /// locationId
278    /// Required by the API.
279    #[serde(rename = "locationId")]
280    pub location_id: String,
281    /// chat widget ID
282    /// Required by the API.
283    #[serde(rename = "chatWidgetId")]
284    pub chat_widget_id: String,
285    /// Name for the cloned widget
286    #[serde(default, skip_serializing_if = "Option::is_none")]
287    pub name: Option<String>,
288}
289
290/// `CreateWidgetDTO` from the GoHighLevel OpenAPI spec.
291#[derive(Debug, Clone, Default, Serialize, Deserialize)]
292pub struct CreateWidgetDTO {
293    /// Version
294    /// Required by the API.
295    pub version: f64,
296    /// Chat type
297    /// Allowed values: `liveChat`, `emailChat`.
298    /// Required by the API.
299    #[serde(rename = "chatType")]
300    pub chat_type: String,
301    /// Name
302    /// Required by the API.
303    pub name: String,
304    /// Location ID
305    /// Required by the API.
306    #[serde(rename = "locationId")]
307    pub location_id: String,
308    /// Deleted
309    #[serde(default, skip_serializing_if = "Option::is_none")]
310    pub deleted: Option<bool>,
311    /// Default
312    #[serde(default, skip_serializing_if = "Option::is_none")]
313    pub default: Option<bool>,
314    /// Settings
315    #[serde(default, skip_serializing_if = "Option::is_none")]
316    pub settings: Option<WidgetSettingsDTO>,
317}
318
319/// `FBPageDTO` from the GoHighLevel OpenAPI spec.
320#[derive(Debug, Clone, Default, Serialize, Deserialize)]
321pub struct FBPageDTO {
322    /// Facebook Page ID
323    #[serde(
324        rename = "facebookPageId",
325        default,
326        skip_serializing_if = "Option::is_none"
327    )]
328    pub facebook_page_id: Option<String>,
329    /// Facebook Page Name
330    #[serde(
331        rename = "facebookPageName",
332        default,
333        skip_serializing_if = "Option::is_none"
334    )]
335    pub facebook_page_name: Option<String>,
336}
337
338/// `InstagramPageDTO` from the GoHighLevel OpenAPI spec.
339#[derive(Debug, Clone, Default, Serialize, Deserialize)]
340pub struct InstagramPageDTO {
341    /// Facebook Page ID
342    #[serde(
343        rename = "facebookPageId",
344        default,
345        skip_serializing_if = "Option::is_none"
346    )]
347    pub facebook_page_id: Option<String>,
348    /// Facebook Page Name
349    #[serde(
350        rename = "facebookPageName",
351        default,
352        skip_serializing_if = "Option::is_none"
353    )]
354    pub facebook_page_name: Option<String>,
355    /// Instagram Page ID
356    #[serde(
357        rename = "instagramPageId",
358        default,
359        skip_serializing_if = "Option::is_none"
360    )]
361    pub instagram_page_id: Option<String>,
362    /// Instagram UserName
363    #[serde(
364        rename = "instagramUsername",
365        default,
366        skip_serializing_if = "Option::is_none"
367    )]
368    pub instagram_username: Option<String>,
369}
370
371/// `RedirectDTO` from the GoHighLevel OpenAPI spec.
372#[derive(Debug, Clone, Default, Serialize, Deserialize)]
373pub struct RedirectDTO {
374    /// Redirect Action
375    #[serde(
376        rename = "redirectAction",
377        default,
378        skip_serializing_if = "Option::is_none"
379    )]
380    pub redirect_action: Option<bool>,
381    /// Redirect Website
382    #[serde(
383        rename = "redirectWebsite",
384        default,
385        skip_serializing_if = "Option::is_none"
386    )]
387    pub redirect_website: Option<String>,
388    /// Redirect Text
389    #[serde(
390        rename = "redirectText",
391        default,
392        skip_serializing_if = "Option::is_none"
393    )]
394    pub redirect_text: Option<String>,
395}
396
397/// `UpdateWidgetDTO` from the GoHighLevel OpenAPI spec.
398#[derive(Debug, Clone, Default, Serialize, Deserialize)]
399pub struct UpdateWidgetDTO {
400    /// Version
401    #[serde(default, skip_serializing_if = "Option::is_none")]
402    pub version: Option<f64>,
403    /// Chat type
404    /// Allowed values: `liveChat`, `emailChat`.
405    #[serde(rename = "chatType", default, skip_serializing_if = "Option::is_none")]
406    pub chat_type: Option<String>,
407    /// Name
408    #[serde(default, skip_serializing_if = "Option::is_none")]
409    pub name: Option<String>,
410    /// Default
411    #[serde(default, skip_serializing_if = "Option::is_none")]
412    pub default: Option<bool>,
413    /// Settings
414    #[serde(default, skip_serializing_if = "Option::is_none")]
415    pub settings: Option<WidgetSettingsDTO>,
416}
417
418/// `WidgetSettingsCustomizationDTO` from the GoHighLevel OpenAPI spec.
419#[derive(Debug, Clone, Default, Serialize, Deserialize)]
420pub struct WidgetSettingsCustomizationDTO {
421    /// Position
422    #[serde(default, skip_serializing_if = "Option::is_none")]
423    pub position: Option<String>,
424    /// Typography Color Options
425    #[serde(default, skip_serializing_if = "Option::is_none")]
426    pub sizes: Option<WidgetSettingsCustomizationSizeDTO>,
427}
428
429/// `WidgetSettingsCustomizationSizeDTO` from the GoHighLevel OpenAPI spec.
430#[derive(Debug, Clone, Default, Serialize, Deserialize)]
431pub struct WidgetSettingsCustomizationSizeDTO {
432    /// Width
433    #[serde(default, skip_serializing_if = "Option::is_none")]
434    pub width: Option<f64>,
435    /// Height
436    #[serde(default, skip_serializing_if = "Option::is_none")]
437    pub height: Option<f64>,
438}
439
440/// `WidgetSettingsDTO` from the GoHighLevel OpenAPI spec.
441#[derive(Debug, Clone, Default, Serialize, Deserialize)]
442pub struct WidgetSettingsDTO {
443    /// Acknowledgement Details
444    #[serde(
445        rename = "acknowledgementDetails",
446        default,
447        skip_serializing_if = "Option::is_none"
448    )]
449    pub acknowledgement_details: Option<AcknowledgementDetailsDTO>,
450    /// Name of the agency
451    #[serde(
452        rename = "agencyName",
453        default,
454        skip_serializing_if = "Option::is_none"
455    )]
456    pub agency_name: Option<String>,
457    /// Website URL of the agency
458    #[serde(
459        rename = "agencyWebsite",
460        default,
461        skip_serializing_if = "Option::is_none"
462    )]
463    pub agency_website: Option<String>,
464    /// Allow avatar image
465    #[serde(
466        rename = "allowAvatarImage",
467        default,
468        skip_serializing_if = "Option::is_none"
469    )]
470    pub allow_avatar_image: Option<bool>,
471    /// Boolean indicating whether to automatically detect country code
472    #[serde(
473        rename = "autoCountryCode",
474        default,
475        skip_serializing_if = "Option::is_none"
476    )]
477    pub auto_country_code: Option<bool>,
478    /// Country code
479    #[serde(
480        rename = "countryCode",
481        default,
482        skip_serializing_if = "Option::is_none"
483    )]
484    pub country_code: Option<String>,
485    /// Chat Type
486    /// Required by the API.
487    #[serde(rename = "chatType")]
488    pub chat_type: String,
489    /// Prompt Type
490    #[serde(
491        rename = "promptType",
492        default,
493        skip_serializing_if = "Option::is_none"
494    )]
495    pub prompt_type: Option<String>,
496    /// Message Chat Circle
497    /// Required by the API.
498    #[serde(rename = "chatIcon")]
499    pub chat_icon: String,
500    /// Boolean indicating whether to enable a revisit message
501    #[serde(
502        rename = "enableRevisitMessage",
503        default,
504        skip_serializing_if = "Option::is_none"
505    )]
506    pub enable_revisit_message: Option<bool>,
507    /// Heading text
508    #[serde(default, skip_serializing_if = "Option::is_none")]
509    pub heading: Option<String>,
510    /// Legal message
511    #[serde(rename = "legalMsg", default, skip_serializing_if = "Option::is_none")]
512    pub legal_msg: Option<String>,
513    /// Message acknowledging a live chat
514    #[serde(
515        rename = "liveChatAckMsg",
516        default,
517        skip_serializing_if = "Option::is_none"
518    )]
519    pub live_chat_ack_msg: Option<String>,
520    /// Message indicating the end of a live chat
521    #[serde(
522        rename = "liveChatEndedMsg",
523        default,
524        skip_serializing_if = "Option::is_none"
525    )]
526    pub live_chat_ended_msg: Option<String>,
527    /// Message asking for feedback after a live chat
528    #[serde(
529        rename = "liveChatFeedbackMsg",
530        default,
531        skip_serializing_if = "Option::is_none"
532    )]
533    pub live_chat_feedback_msg: Option<String>,
534    /// Note regarding live chat feedback
535    #[serde(
536        rename = "liveChatFeedbackNote",
537        default,
538        skip_serializing_if = "Option::is_none"
539    )]
540    pub live_chat_feedback_note: Option<String>,
541    /// Introduction message for a live chat
542    #[serde(
543        rename = "liveChatIntroMsg",
544        default,
545        skip_serializing_if = "Option::is_none"
546    )]
547    pub live_chat_intro_msg: Option<String>,
548    /// Message for inactive users during a live chat
549    #[serde(
550        rename = "liveChatUserInactiveMsg",
551        default,
552        skip_serializing_if = "Option::is_none"
553    )]
554    pub live_chat_user_inactive_msg: Option<String>,
555    /// Time for considering a user inactive during a live chat
556    #[serde(
557        rename = "liveChatUserInactiveTime",
558        default,
559        skip_serializing_if = "Option::is_none"
560    )]
561    pub live_chat_user_inactive_time: Option<String>,
562    /// Message for inactive visitors during a live chat
563    #[serde(
564        rename = "liveChatVisitorInactiveMsg",
565        default,
566        skip_serializing_if = "Option::is_none"
567    )]
568    pub live_chat_visitor_inactive_msg: Option<String>,
569    /// Time for considering a visitor inactive during a live chat
570    #[serde(
571        rename = "liveChatVisitorInactiveTime",
572        default,
573        skip_serializing_if = "Option::is_none"
574    )]
575    pub live_chat_visitor_inactive_time: Option<String>,
576    /// Locale setting
577    #[serde(default, skip_serializing_if = "Option::is_none")]
578    pub locale: Option<String>,
579    /// Avatar for prompts
580    #[serde(
581        rename = "promptAvatar",
582        default,
583        skip_serializing_if = "Option::is_none"
584    )]
585    pub prompt_avatar: Option<String>,
586    /// Prompt Avatar Alt Text
587    #[serde(
588        rename = "promptAvatarAltText",
589        default,
590        skip_serializing_if = "Option::is_none"
591    )]
592    pub prompt_avatar_alt_text: Option<String>,
593    /// Avatar Image Optimization
594    #[serde(
595        rename = "isPromptAvatarImageOptimize",
596        default,
597        skip_serializing_if = "Option::is_none"
598    )]
599    pub is_prompt_avatar_image_optimize: Option<bool>,
600    /// Prompt message
601    #[serde(rename = "promptMsg", default, skip_serializing_if = "Option::is_none")]
602    pub prompt_msg: Option<String>,
603    /// Message for revisiting prompts
604    #[serde(
605        rename = "revisitPromptMsg",
606        default,
607        skip_serializing_if = "Option::is_none"
608    )]
609    pub revisit_prompt_msg: Option<String>,
610    /// Text for send action
611    #[serde(
612        rename = "sendActionText",
613        default,
614        skip_serializing_if = "Option::is_none"
615    )]
616    pub send_action_text: Option<String>,
617    /// Boolean indicating whether to show agency branding
618    #[serde(
619        rename = "showAgencyBranding",
620        default,
621        skip_serializing_if = "Option::is_none"
622    )]
623    pub show_agency_branding: Option<bool>,
624    /// Boolean indicating whether to show a consent checkbox
625    #[serde(
626        rename = "showConsentCheckbox",
627        default,
628        skip_serializing_if = "Option::is_none"
629    )]
630    pub show_consent_checkbox: Option<bool>,
631    /// Boolean indicating whether to show a welcome message for live chat
632    #[serde(
633        rename = "showLiveChatWelcomeMsg",
634        default,
635        skip_serializing_if = "Option::is_none"
636    )]
637    pub show_live_chat_welcome_msg: Option<bool>,
638    /// Boolean indicating whether to show prompts
639    #[serde(
640        rename = "showPrompt",
641        default,
642        skip_serializing_if = "Option::is_none"
643    )]
644    pub show_prompt: Option<bool>,
645    /// Subheading text
646    #[serde(
647        rename = "subHeading",
648        default,
649        skip_serializing_if = "Option::is_none"
650    )]
651    pub sub_heading: Option<String>,
652    /// Success message
653    #[serde(
654        rename = "successMsg",
655        default,
656        skip_serializing_if = "Option::is_none"
657    )]
658    pub success_msg: Option<String>,
659    /// Contact information for support
660    #[serde(
661        rename = "supportContact",
662        default,
663        skip_serializing_if = "Option::is_none"
664    )]
665    pub support_contact: Option<String>,
666    /// Thank you message
667    #[serde(
668        rename = "thankYouMsg",
669        default,
670        skip_serializing_if = "Option::is_none"
671    )]
672    pub thank_you_msg: Option<String>,
673    /// Theme
674    #[serde(default, skip_serializing_if = "Option::is_none")]
675    pub theme: Option<WidgetSettingsThemeDTO>,
676    /// Boolean indicating whether to use an email field
677    #[serde(
678        rename = "useEmailField",
679        default,
680        skip_serializing_if = "Option::is_none"
681    )]
682    pub use_email_field: Option<bool>,
683    /// WhatsApp number
684    #[serde(rename = "waNumber", default, skip_serializing_if = "Option::is_none")]
685    pub wa_number: Option<String>,
686    /// Primary color for the widget
687    #[serde(
688        rename = "widgetPrimaryColor",
689        default,
690        skip_serializing_if = "Option::is_none"
691    )]
692    pub widget_primary_color: Option<String>,
693    /// Representative Assigned Message
694    #[serde(
695        rename = "representativeAssignedMessage",
696        default,
697        skip_serializing_if = "Option::is_none"
698    )]
699    pub representative_assigned_message: Option<String>,
700    /// Customizations
701    #[serde(default, skip_serializing_if = "Option::is_none")]
702    pub dimensions: Option<WidgetSettingsCustomizationDTO>,
703    /// Advance Settings
704    #[serde(
705        rename = "advanceSettings",
706        default,
707        skip_serializing_if = "Option::is_none"
708    )]
709    pub advance_settings: Option<AdvanceSettingsDTO>,
710    /// Location Country Code
711    #[serde(
712        rename = "locationCountryCode",
713        default,
714        skip_serializing_if = "Option::is_none"
715    )]
716    pub location_country_code: Option<String>,
717    /// Widget Id
718    #[serde(rename = "widgetId", default, skip_serializing_if = "Option::is_none")]
719    pub widget_id: Option<String>,
720    /// Widget Placement
721    #[serde(
722        rename = "widgetPlacement",
723        default,
724        skip_serializing_if = "Option::is_none"
725    )]
726    pub widget_placement: Option<String>,
727}
728
729/// `WidgetSettingsThemeCustomColorDTO` from the GoHighLevel OpenAPI spec.
730#[derive(Debug, Clone, Default, Serialize, Deserialize)]
731pub struct WidgetSettingsThemeCustomColorDTO {
732    /// Chat Bubble Color
733    #[serde(
734        rename = "chatBubbleColor",
735        default,
736        skip_serializing_if = "Option::is_none"
737    )]
738    pub chat_bubble_color: Option<String>,
739    /// Background Color
740    #[serde(
741        rename = "backgroundColor",
742        default,
743        skip_serializing_if = "Option::is_none"
744    )]
745    pub background_color: Option<String>,
746    /// Header Color
747    #[serde(
748        rename = "headerColor",
749        default,
750        skip_serializing_if = "Option::is_none"
751    )]
752    pub header_color: Option<String>,
753    /// Button Color
754    #[serde(
755        rename = "buttonColor",
756        default,
757        skip_serializing_if = "Option::is_none"
758    )]
759    pub button_color: Option<String>,
760    /// Avatar Background Color
761    #[serde(
762        rename = "avatarBackgroundColor",
763        default,
764        skip_serializing_if = "Option::is_none"
765    )]
766    pub avatar_background_color: Option<String>,
767    /// Avatar Border Color
768    #[serde(
769        rename = "avatarBorderColor",
770        default,
771        skip_serializing_if = "Option::is_none"
772    )]
773    pub avatar_border_color: Option<String>,
774    /// Sender Message Color
775    #[serde(
776        rename = "senderMessageColor",
777        default,
778        skip_serializing_if = "Option::is_none"
779    )]
780    pub sender_message_color: Option<String>,
781    /// Received Message Color
782    #[serde(
783        rename = "receivedMessageColor",
784        default,
785        skip_serializing_if = "Option::is_none"
786    )]
787    pub received_message_color: Option<String>,
788}
789
790/// `WidgetSettingsThemeDTO` from the GoHighLevel OpenAPI spec.
791#[derive(Debug, Clone, Default, Serialize, Deserialize)]
792pub struct WidgetSettingsThemeDTO {
793    /// Theme Name
794    #[serde(default, skip_serializing_if = "Option::is_none")]
795    pub name: Option<String>,
796    /// Custom Color Options
797    #[serde(default, skip_serializing_if = "Option::is_none")]
798    pub colors: Option<WidgetSettingsThemeCustomColorDTO>,
799}