From 27ec791353dadc990a67b10701e19981421f6470 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Wed, 21 May 2025 04:09:18 +0530 Subject: [PATCH] fix: Display message content for CSAT messages in non-widget inboxes (#11528) We made so many improvements for CSAT via https://github.com/chatwoot/chatwoot/pull/11485. However, we missed showing message content in the dashboard for CSAT URLs created in non-widget inboxes. This PR fixes the issue by ensuring that CSAT-configured messages are passed along with CSAT responses, otherwise defaulting to the translation. --- app/models/message.rb | 8 +++++++- spec/models/message_spec.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/models/message.rb b/app/models/message.rb index f5d7712d2..a952e0265 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -185,7 +185,13 @@ class Message < ApplicationRecord # move this to a presenter return self[:content] if !input_csat? || inbox.web_widget? - I18n.t('conversations.survey.response', link: "#{ENV.fetch('FRONTEND_URL', nil)}/survey/responses/#{conversation.uuid}") + survey_link = "#{ENV.fetch('FRONTEND_URL', nil)}/survey/responses/#{conversation.uuid}" + + if inbox.csat_config&.dig('message').present? + "#{inbox.csat_config['message']} #{survey_link}" + else + I18n.t('conversations.survey.response', link: survey_link) + end end def email_notifiable_message? diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index 4c66e37ee..b4be3ac5a 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -475,4 +475,35 @@ RSpec.describe Message do end end end + + describe '#content' do + let(:conversation) { create(:conversation) } + let(:message) { create(:message, conversation: conversation, content_type: 'input_csat', content: 'Original content') } + + it 'returns original content for web widget inbox' do + allow(message.inbox).to receive(:web_widget?).and_return(true) + expect(message.content).to eq('Original content') + end + + context 'when inbox is not a web widget' do + before do + allow(message.inbox).to receive(:web_widget?).and_return(false) + allow(ENV).to receive(:fetch).with('FRONTEND_URL', nil).and_return('https://app.chatwoot.com') + end + + it 'returns custom message with survey link when csat message is configured' do + allow(message.inbox).to receive(:csat_config).and_return({ 'message' => 'Custom survey message:' }) + expected_content = "Custom survey message: https://app.chatwoot.com/survey/responses/#{conversation.uuid}" + expect(message.content).to eq(expected_content) + end + + it 'returns default message with survey link when no custom csat message' do + allow(message.inbox).to receive(:csat_config).and_return(nil) + allow(I18n).to receive(:t).with('conversations.survey.response', link: "https://app.chatwoot.com/survey/responses/#{conversation.uuid}") + .and_return("Please rate your conversation: https://app.chatwoot.com/survey/responses/#{conversation.uuid}") + expected_content = "Please rate your conversation: https://app.chatwoot.com/survey/responses/#{conversation.uuid}" + expect(message.content).to eq(expected_content) + end + end + end end