diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 03fedb6e4..70e4c8d34 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -210,7 +210,7 @@ class Conversation < ApplicationRecord def mark_conversation_pending_if_bot # TODO: make this an inbox config instead of assuming bot conversations should start as pending - self.status = :pending if inbox.agent_bot_inbox&.active? || inbox.hooks.pluck(:app_id).include?('dialogflow') + self.status = :pending if inbox.active_bot? end def notify_conversation_creation diff --git a/app/models/inbox.rb b/app/models/inbox.rb index 54a87bd36..0a24466fb 100644 --- a/app/models/inbox.rb +++ b/app/models/inbox.rb @@ -101,6 +101,10 @@ class Inbox < ApplicationRecord channel_type == 'Channel::Whatsapp' end + def active_bot? + agent_bot_inbox&.active? || hooks.pluck(:app_id).include?('dialogflow') + end + def inbox_type channel.name end diff --git a/app/models/message.rb b/app/models/message.rb index a3f63dbe9..7919c5053 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -193,7 +193,18 @@ class Message < ApplicationRecord return if conversation.muted? return unless incoming? - conversation.open! if conversation.resolved? || conversation.snoozed? + conversation.open! if conversation.snoozed? + + reopen_resolved_conversation if conversation.resolved? + end + + def reopen_resolved_conversation + # mark resolved bot conversation as pending to be reopened by bot processor service + if conversation.inbox.active_bot? + conversation.pending! + else + conversation.open! + end end def execute_message_template_hooks diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index aeff941da..23c74a558 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -31,6 +31,17 @@ RSpec.describe Message, type: :model do message.save! expect(message.conversation.open?).to be false end + + it 'will mark the conversation as pending if the agent bot is active' do + agent_bot = create(:agent_bot) + inbox = conversation.inbox + inbox.agent_bot = agent_bot + inbox.save! + conversation.resolved! + message.save! + expect(conversation.open?).to be false + expect(conversation.pending?).to be true + end end context 'with webhook_data' do