From 5f09fbe20010716a5848338bc648cebb0dca416d Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Thu, 10 Apr 2025 10:51:54 +0530 Subject: [PATCH] chore: rename service --- .../conversations/can_reply_service.rb | 70 +++++++++++++++++++ app/services/conversations/reply_service.rb | 59 ---------------- 2 files changed, 70 insertions(+), 59 deletions(-) create mode 100644 app/services/conversations/can_reply_service.rb delete mode 100644 app/services/conversations/reply_service.rb diff --git a/app/services/conversations/can_reply_service.rb b/app/services/conversations/can_reply_service.rb new file mode 100644 index 000000000..c56740e4e --- /dev/null +++ b/app/services/conversations/can_reply_service.rb @@ -0,0 +1,70 @@ +class Conversations::CanReplyService + DEFAULT_MESSAGING_WINDOW = 24 + EXTENDED_MESSAGING_WINDOW = 7.days + INSTAGRAM_MESSENGER_TYPE = 'instagram_direct_message' + + def initialize(conversation) + @conversation = conversation + end + + def can_reply? + return false if last_incoming_message.nil? + + channel = @conversation.inbox&.channel + return true unless channel&.messaging_window_enabled? + + case channel_type + when :instagram_messenger + can_reply_on_instagram_via_messenger? + when :instagram_direct + can_reply_on_instagram? + else + last_message_in_messaging_window?(messaging_window) + end + end + + private + + def channel_type + return :instagram_messenger if instagram_via_messenger? + return :instagram_direct if @conversation.inbox.instagram_direct? + :other + end + + def messaging_window + return DEFAULT_MESSAGING_WINDOW unless @conversation.inbox.api? + + window = @conversation.inbox.channel.additional_attributes['agent_reply_time_window'].to_i + window.positive? ? window : DEFAULT_MESSAGING_WINDOW + end + + def last_message_in_messaging_window?(time) + Time.current < last_incoming_message.created_at + time.hours + end + + def instagram_via_messenger? + @conversation.additional_attributes['type'] == INSTAGRAM_MESSENGER_TYPE + end + + def can_reply_on_instagram_via_messenger? + global_config = GlobalConfig.get('ENABLE_MESSENGER_CHANNEL_HUMAN_AGENT') + extended_window_enabled?(global_config['ENABLE_MESSENGER_CHANNEL_HUMAN_AGENT']) + end + + def can_reply_on_instagram? + global_config = GlobalConfig.get('ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT') + extended_window_enabled?(global_config['ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT']) + end + + def extended_window_enabled?(enabled) + if enabled + Time.current < last_incoming_message.created_at + EXTENDED_MESSAGING_WINDOW + else + last_message_in_messaging_window?(DEFAULT_MESSAGING_WINDOW) + end + end + + def last_incoming_message + @conversation.messages&.incoming&.last + end +end diff --git a/app/services/conversations/reply_service.rb b/app/services/conversations/reply_service.rb deleted file mode 100644 index 7f94f890a..000000000 --- a/app/services/conversations/reply_service.rb +++ /dev/null @@ -1,59 +0,0 @@ -class Conversations::CanReplyService - def initialize(conversation) - @conversation = conversation - end - - def can_reply? - channel = @conversation.inbox&.channel - - return can_reply_on_instagram_via_messenger? if instagram_via_messenger? - return can_reply_on_instagram? if @conversation.inbox.instagram_direct? - return true unless channel&.messaging_window_enabled? - - last_message_in_messaging_window?(messaging_window) - end - - private - - def messaging_window - @conversation.inbox.api? ? @conversation.inbox.channel.additional_attributes['agent_reply_time_window'].to_i : 24 - end - - def last_message_in_messaging_window?(time) - return false if last_incoming_message.nil? - - Time.current < last_incoming_message.created_at + time.hours - end - - def instagram_via_messenger? - @conversation.additional_attributes['type'] == 'instagram_direct_message' - end - - def can_reply_on_instagram_via_messenger? - global_config = GlobalConfig.get('ENABLE_MESSENGER_CHANNEL_HUMAN_AGENT') - - return false if last_incoming_message.nil? - - if global_config['ENABLE_MESSENGER_CHANNEL_HUMAN_AGENT'] - Time.current < last_incoming_message.created_at + 7.days - else - last_message_in_messaging_window?(24) - end - end - - def can_reply_on_instagram? - global_config = GlobalConfig.get('ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT') - - return false if last_incoming_message.nil? - - if global_config['ENABLE_INSTAGRAM_CHANNEL_HUMAN_AGENT'] - Time.current < last_incoming_message.created_at + 7.days - else - last_message_in_messaging_window?(24) - end - end - - def last_incoming_message - @conversation.messages&.incoming&.last - end -end