chatwoot-develop/app/jobs/jasmine/response_job.rb

48 lines
1.3 KiB
Ruby

module Jasmine
class ResponseJob < ApplicationJob
queue_as :default
retry_on StandardError, wait: :polynomially_longer, attempts: 2
def perform(message_id)
message = Message.find_by(id: message_id)
return unless message
conversation = message.conversation
inbox = message.inbox
config = inbox.jasmine_inbox_config
# Double-check conditions (in case they changed since job was enqueued)
return unless config&.is_enabled?
return if conversation.assignee.present?
# Get response from BrainService
response_text = BrainService.new(
inbox: inbox,
conversation: conversation,
message: message
).respond
return if response_text.blank?
# Send response as outgoing message
send_response(conversation, response_text)
end
private
def send_response(conversation, content)
conversation.messages.create!(
message_type: :outgoing,
account_id: conversation.account_id,
inbox_id: conversation.inbox_id,
content: content,
sender: nil, # No agent, it's from Jasmine
content_type: :text
)
rescue StandardError => e
Rails.logger.error "[Jasmine::ResponseJob] Failed to send response: #{e.message}"
end
end
end