Skip to main content

ghl_models/v3/
chat_widget.rs

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