feat(ee): Add reporting events for bots (#9027)
Added a new event conversation_bot_resolved and added a job to auto resolve the bot conversations if there was no activity for the last 1 hour.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
module Enterprise::Account::ConversationsResolutionSchedulerJob
|
||||
def perform
|
||||
super
|
||||
Account.feature_response_bot.all.find_each(batch_size: 100) do |account|
|
||||
account.inboxes.each do |inbox|
|
||||
ResponseBot::InboxPendingConversationsResolutionJob.perform_later(inbox) if inbox.response_bot_enabled?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,19 @@
|
||||
class ResponseBot::InboxPendingConversationsResolutionJob < ApplicationJob
|
||||
queue_as :low
|
||||
|
||||
def perform(inbox)
|
||||
# limiting the number of conversations to be resolved to avoid any performance issues
|
||||
resolvable_conversations = inbox.conversations.pending.where('last_activity_at < ? ', Time.now.utc - 1.hour).limit(Limits::BULK_ACTIONS_LIMIT)
|
||||
resolvable_conversations.each do |conversation|
|
||||
conversation.messages.create!(
|
||||
{
|
||||
message_type: :outgoing,
|
||||
account_id: conversation.account_id,
|
||||
inbox_id: conversation.inbox_id,
|
||||
content: 'Resolving the conversation as it has been inactive for a while. Please start a new conversation if you need further assistance.'
|
||||
}
|
||||
)
|
||||
conversation.resolved!
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,4 +1,4 @@
|
||||
class ResponseBotJob < ApplicationJob
|
||||
class ResponseBot::ResponseBotJob < ApplicationJob
|
||||
queue_as :medium
|
||||
|
||||
def perform(conversation)
|
||||
@@ -1,4 +1,4 @@
|
||||
class ResponseBuilderJob < ApplicationJob
|
||||
class ResponseBot::ResponseBuilderJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(response_document)
|
||||
@@ -1,5 +1,5 @@
|
||||
# app/jobs/response_document_content_job.rb
|
||||
class ResponseDocumentContentJob < ApplicationJob
|
||||
class ResponseBot::ResponseDocumentContentJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(response_document)
|
||||
@@ -35,12 +35,12 @@ class ResponseDocument < ApplicationRecord
|
||||
def ensure_content
|
||||
return unless content.nil?
|
||||
|
||||
ResponseDocumentContentJob.perform_later(self)
|
||||
ResponseBot::ResponseDocumentContentJob.perform_later(self)
|
||||
end
|
||||
|
||||
def handle_content_change
|
||||
return unless saved_change_to_content? && content.present?
|
||||
|
||||
ResponseBuilderJob.perform_later(self)
|
||||
ResponseBot::ResponseBuilderJob.perform_later(self)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module Enterprise::MessageTemplates::HookExecutionService
|
||||
def trigger_templates
|
||||
super
|
||||
ResponseBotJob.perform_later(conversation) if should_process_response_bot?
|
||||
ResponseBot::ResponseBotJob.perform_later(conversation) if should_process_response_bot?
|
||||
end
|
||||
|
||||
def should_process_response_bot?
|
||||
|
||||
@@ -80,8 +80,8 @@ class Enterprise::MessageTemplates::ResponseBotService
|
||||
case action
|
||||
when 'handoff'
|
||||
conversation.messages.create!('message_type': :outgoing, 'account_id': conversation.account_id, 'inbox_id': conversation.inbox_id,
|
||||
'content': 'passing to an agent')
|
||||
conversation.update(status: :open)
|
||||
'content': 'Transferring to another agent for further assistance.')
|
||||
conversation.bot_handoff!
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -6,6 +6,11 @@ class Features::ResponseBotService
|
||||
create_tables
|
||||
end
|
||||
|
||||
def disable_in_installation
|
||||
drop_tables
|
||||
disable_vector_extension
|
||||
end
|
||||
|
||||
def enable_vector_extension
|
||||
MIGRATION_VERSION.enable_extension 'vector'
|
||||
rescue ActiveRecord::StatementInvalid
|
||||
|
||||
Reference in New Issue
Block a user