# == Schema Information # # Table name: channel_web_widgets # # id :integer not null, primary key # continuity_via_email :boolean default(TRUE), not null # feature_flags :integer default(7), not null # hmac_mandatory :boolean default(FALSE) # hmac_token :string # pre_chat_form_enabled :boolean default(FALSE) # pre_chat_form_options :jsonb # reply_time :integer default("in_a_few_minutes") # website_token :string # website_url :string # welcome_tagline :string # welcome_title :string # widget_color :string default("#1f93ff") # created_at :datetime not null # updated_at :datetime not null # account_id :integer # # Indexes # # index_channel_web_widgets_on_hmac_token (hmac_token) UNIQUE # index_channel_web_widgets_on_website_token (website_token) UNIQUE # class Channel::WebWidget < ApplicationRecord include Channelable include FlagShihTzu self.table_name = 'channel_web_widgets' EDITABLE_ATTRS = [:website_url, :widget_color, :welcome_title, :welcome_tagline, :reply_time, :pre_chat_form_enabled, :continuity_via_email, :hmac_mandatory, { pre_chat_form_options: [:pre_chat_message, :require_email, { pre_chat_fields: [:field_type, :label, :placeholder, :name, :enabled, :type, :enabled, :required, :locale, { values: [] }] }] }, { selected_feature_flags: [] }].freeze before_validation :validate_pre_chat_options validates :website_url, presence: true validates :widget_color, presence: true has_secure_token :website_token has_secure_token :hmac_token has_flags 1 => :attachments, 2 => :emoji_picker, 3 => :end_conversation, :column => 'feature_flags', :check_for_column => false enum reply_time: { in_a_few_minutes: 0, in_a_few_hours: 1, in_a_day: 2 } def name 'Website' end def web_widget_script " " end def validate_pre_chat_options return if pre_chat_form_options.with_indifferent_access['pre_chat_fields'].present? self.pre_chat_form_options = { pre_chat_message: 'Share your queries or comments here.', pre_chat_fields: [ { 'field_type': 'standard', 'label': 'Email Id', 'name': 'emailAddress', 'type': 'email', 'required': true, 'enabled': false }, { 'field_type': 'standard', 'label': 'Full name', 'name': 'fullName', 'type': 'text', 'required': false, 'enabled': false }, { 'field_type': 'standard', 'label': 'Phone number', 'name': 'phoneNumber', 'type': 'text', 'required': false, 'enabled': false } ] } end def create_contact_inbox(additional_attributes = {}) ActiveRecord::Base.transaction do contact = inbox.account.contacts.create!( name: ::Haikunator.haikunate(1000), additional_attributes: additional_attributes ) contact_inbox = ::ContactInbox.create!( contact_id: contact.id, inbox_id: inbox.id, source_id: SecureRandom.uuid ) contact_inbox rescue StandardError => e Rails.logger.error e end end end