mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-29 18:22:53 +00:00
76 lines
1.6 KiB
Ruby
76 lines
1.6 KiB
Ruby
class MessageTemplates::Template::CsatSurvey
|
|
pattr_initialize [:conversation!]
|
|
|
|
def perform
|
|
return unless should_send_csat_survey?
|
|
|
|
ActiveRecord::Base.transaction do
|
|
conversation.messages.create!(csat_survey_message_params)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
delegate :contact, :account, :inbox, to: :conversation
|
|
|
|
def should_send_csat_survey?
|
|
return true unless survey_rules_configured?
|
|
|
|
labels = conversation.label_list
|
|
|
|
return true if rule_values.empty?
|
|
|
|
case rule_operator
|
|
when 'contains'
|
|
rule_values.any? { |label| labels.include?(label) }
|
|
when 'does_not_contain'
|
|
rule_values.none? { |label| labels.include?(label) }
|
|
else
|
|
true
|
|
end
|
|
end
|
|
|
|
def survey_rules_configured?
|
|
return false if csat_config.blank?
|
|
return false if csat_config['survey_rules'].blank?
|
|
return false if rule_values.empty?
|
|
|
|
true
|
|
end
|
|
|
|
def rule_operator
|
|
csat_config.dig('survey_rules', 'operator') || 'contains'
|
|
end
|
|
|
|
def rule_values
|
|
csat_config.dig('survey_rules', 'values') || []
|
|
end
|
|
|
|
def message_content
|
|
return I18n.t('conversations.templates.csat_input_message_body') if csat_config.blank? || csat_config['message'].blank?
|
|
|
|
csat_config['message']
|
|
end
|
|
|
|
def csat_survey_message_params
|
|
{
|
|
account_id: @conversation.account_id,
|
|
inbox_id: @conversation.inbox_id,
|
|
message_type: :template,
|
|
content_type: :input_csat,
|
|
content: message_content,
|
|
content_attributes: content_attributes
|
|
}
|
|
end
|
|
|
|
def csat_config
|
|
inbox.csat_config || {}
|
|
end
|
|
|
|
def content_attributes
|
|
{
|
|
display_type: csat_config['display_type'] || 'emoji'
|
|
}
|
|
end
|
|
end
|