49 lines
1.2 KiB
Ruby
49 lines
1.2 KiB
Ruby
class CsatSurveyService
|
|
pattr_initialize [:conversation!]
|
|
|
|
def perform
|
|
return unless should_send_csat_survey?
|
|
|
|
if within_messaging_window?
|
|
::MessageTemplates::Template::CsatSurvey.new(conversation: conversation).perform
|
|
else
|
|
create_csat_not_sent_activity_message
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
delegate :inbox, :contact, to: :conversation
|
|
|
|
def should_send_csat_survey?
|
|
conversation_allows_csat? && csat_enabled? && !csat_already_sent?
|
|
end
|
|
|
|
def conversation_allows_csat?
|
|
conversation.resolved? && !conversation.tweet?
|
|
end
|
|
|
|
def csat_enabled?
|
|
inbox.csat_survey_enabled?
|
|
end
|
|
|
|
def csat_already_sent?
|
|
conversation.messages.where(content_type: :input_csat).present?
|
|
end
|
|
|
|
def within_messaging_window?
|
|
conversation.can_reply?
|
|
end
|
|
|
|
def create_csat_not_sent_activity_message
|
|
content = I18n.t('conversations.activity.csat.not_sent_due_to_messaging_window')
|
|
activity_message_params = {
|
|
account_id: conversation.account_id,
|
|
inbox_id: conversation.inbox_id,
|
|
message_type: :activity,
|
|
content: content
|
|
}
|
|
::Conversations::ActivityMessageJob.perform_later(conversation, activity_message_params) if content
|
|
end
|
|
end
|