71 lines
2.1 KiB
Ruby
71 lines
2.1 KiB
Ruby
class ChatwootHub
|
|
DEFAULT_BASE_URL = 'https://hub.2.chatwoot.com'.freeze
|
|
|
|
def self.base_url
|
|
DEFAULT_BASE_URL
|
|
end
|
|
|
|
def self.push_notification_url
|
|
"#{base_url}/send_push"
|
|
end
|
|
|
|
def self.billing_base_url
|
|
"#{base_url}/billing"
|
|
end
|
|
|
|
def self.installation_identifier
|
|
identifier = InstallationConfig.find_by(name: 'INSTALLATION_IDENTIFIER')&.value
|
|
identifier ||= InstallationConfig.create!(name: 'INSTALLATION_IDENTIFIER', value: SecureRandom.uuid).value
|
|
identifier
|
|
end
|
|
|
|
def self.billing_url
|
|
"#{billing_base_url}?installation_identifier=#{installation_identifier}"
|
|
end
|
|
|
|
def self.pricing_plan
|
|
return 'community' unless ChatwootApp.enterprise?
|
|
|
|
InstallationConfig.find_by(name: 'INSTALLATION_PRICING_PLAN')&.value || 'community'
|
|
end
|
|
|
|
def self.pricing_plan_quantity
|
|
return 0 unless ChatwootApp.enterprise?
|
|
|
|
InstallationConfig.find_by(name: 'INSTALLATION_PRICING_PLAN_QUANTITY')&.value || 0
|
|
end
|
|
|
|
def self.support_config
|
|
{
|
|
support_website_token: InstallationConfig.find_by(name: 'CHATWOOT_SUPPORT_WEBSITE_TOKEN')&.value,
|
|
support_script_url: InstallationConfig.find_by(name: 'CHATWOOT_SUPPORT_SCRIPT_URL')&.value,
|
|
support_identifier_hash: InstallationConfig.find_by(name: 'CHATWOOT_SUPPORT_IDENTIFIER_HASH')&.value
|
|
}
|
|
end
|
|
|
|
def self.instance_config
|
|
{
|
|
installation_identifier: installation_identifier,
|
|
installation_version: Chatwoot.config[:version],
|
|
installation_host: URI.parse(ENV.fetch('FRONTEND_URL', '')).host,
|
|
installation_env: ENV.fetch('INSTALLATION_ENV', ''),
|
|
edition: ENV.fetch('CW_EDITION', '')
|
|
}
|
|
end
|
|
|
|
def self.send_push(fcm_options)
|
|
send_push_with_response(fcm_options)
|
|
rescue *ExceptionList::REST_CLIENT_EXCEPTIONS => e
|
|
Rails.logger.error "Exception: #{e.message}"
|
|
rescue StandardError => e
|
|
ChatwootExceptionTracker.new(e).capture_exception
|
|
end
|
|
|
|
def self.send_push_with_response(fcm_options)
|
|
info = { fcm_options: fcm_options }
|
|
RestClient.post(push_notification_url, info.merge(instance_config).to_json, { content_type: :json, accept: :json })
|
|
end
|
|
end
|
|
|
|
ChatwootHub.singleton_class.prepend_mod_with('ChatwootHub')
|