mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-30 02:32:29 +00:00
In the recent Slack integration update, we made changes to how hooks are handled. Now, hooks require an additional check to be enabled. By default, new hooks are created in a disabled state, which might lead to issues with the hooks not being executed as expected. This migration updates the status attribute of hooks to have 'enabled' as the default value, ensuring that new hooks are enabled by default and can function properly.
71 lines
2.0 KiB
Ruby
71 lines
2.0 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: integrations_hooks
|
|
#
|
|
# id :bigint not null, primary key
|
|
# access_token :string
|
|
# hook_type :integer default("account")
|
|
# settings :jsonb
|
|
# status :integer default("enabled")
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :integer
|
|
# app_id :string
|
|
# inbox_id :integer
|
|
# reference_id :string
|
|
#
|
|
class Integrations::Hook < ApplicationRecord
|
|
include Reauthorizable
|
|
|
|
attr_readonly :app_id, :account_id, :inbox_id, :hook_type
|
|
before_validation :ensure_hook_type
|
|
validates :account_id, presence: true
|
|
validates :app_id, presence: true
|
|
validates :inbox_id, presence: true, if: -> { hook_type == 'inbox' }
|
|
validate :validate_settings_json_schema
|
|
validates :app_id, uniqueness: { scope: [:account_id], unless: -> { app.present? && app.params[:allow_multiple_hooks].present? } }
|
|
|
|
# TODO: This seems to be only used for slack at the moment
|
|
# We can add a validator when storing the integration settings and toggle this in future
|
|
enum status: { disabled: 0, enabled: 1 }
|
|
|
|
belongs_to :account
|
|
belongs_to :inbox, optional: true
|
|
has_secure_token :access_token
|
|
|
|
enum hook_type: { account: 0, inbox: 1 }
|
|
|
|
def app
|
|
@app ||= Integrations::App.find(id: app_id)
|
|
end
|
|
|
|
def slack?
|
|
app_id == 'slack'
|
|
end
|
|
|
|
def disable
|
|
update(status: 'disabled')
|
|
end
|
|
|
|
def process_event(event)
|
|
case app_id
|
|
when 'openai'
|
|
Integrations::Openai::ProcessorService.new(hook: self, event: event).perform if app_id == 'openai'
|
|
else
|
|
'No processor found'
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def ensure_hook_type
|
|
self.hook_type = app.params[:hook_type] if app.present?
|
|
end
|
|
|
|
def validate_settings_json_schema
|
|
return if app.blank? || app.params[:settings_json_schema].blank?
|
|
|
|
errors.add(:settings, ': Invalid settings data') unless JSONSchemer.schema(app.params[:settings_json_schema]).valid?(settings)
|
|
end
|
|
end
|