mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	Add status reopen activity message for api channel (#6839)
This commit is contained in:
		| @@ -32,7 +32,13 @@ module ActivityMessageHandler | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def send_automation_activity |   def send_automation_activity | ||||||
|     content = I18n.t("conversations.activity.status.#{status}", user_name: 'Automation System') |     content = if Current.executed_by.instance_of?(AutomationRule) | ||||||
|  |                 I18n.t("conversations.activity.status.#{status}", user_name: 'Automation System') | ||||||
|  |               elsif Current.executed_by.instance_of?(Contact) | ||||||
|  |                 Current.executed_by = nil | ||||||
|  |                 I18n.t('conversations.activity.status.system_auto_open') | ||||||
|  |               end | ||||||
|  |  | ||||||
|     ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content |     ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -257,11 +257,18 @@ class Message < ApplicationRecord | |||||||
|     # mark resolved bot conversation as pending to be reopened by bot processor service |     # mark resolved bot conversation as pending to be reopened by bot processor service | ||||||
|     if conversation.inbox.active_bot? |     if conversation.inbox.active_bot? | ||||||
|       conversation.pending! |       conversation.pending! | ||||||
|  |     elsif conversation.inbox.api? | ||||||
|  |       Current.executed_by = sender if reopened_by_contact? | ||||||
|  |       conversation.open! | ||||||
|     else |     else | ||||||
|       conversation.open! |       conversation.open! | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def reopened_by_contact? | ||||||
|  |     incoming? && !private? && Current.user.class != sender.class && sender.instance_of?(Contact) | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def execute_message_template_hooks |   def execute_message_template_hooks | ||||||
|     ::MessageTemplates::HookExecutionService.new(message: self).perform |     ::MessageTemplates::HookExecutionService.new(message: self).perform | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -129,6 +129,7 @@ en: | |||||||
|         pending: "Conversation was marked as pending by %{user_name}" |         pending: "Conversation was marked as pending by %{user_name}" | ||||||
|         snoozed: "Conversation was snoozed by %{user_name}" |         snoozed: "Conversation was snoozed by %{user_name}" | ||||||
|         auto_resolved: "Conversation was marked resolved by system due to %{duration} days of inactivity" |         auto_resolved: "Conversation was marked resolved by system due to %{duration} days of inactivity" | ||||||
|  |         system_auto_open: System reopened the conversation due to a new incoming message. | ||||||
|       assignee: |       assignee: | ||||||
|         self_assigned: "%{user_name} self-assigned this conversation" |         self_assigned: "%{user_name} self-assigned this conversation" | ||||||
|         assigned: "Assigned to %{assignee_name} by %{user_name}" |         assigned: "Assigned to %{assignee_name} by %{user_name}" | ||||||
|   | |||||||
| @@ -80,6 +80,32 @@ RSpec.describe 'Conversation Messages API', type: :request do | |||||||
|         expect(conversation.messages.last.attachments.first.file.present?).to be(true) |         expect(conversation.messages.last.attachments.first.file.present?).to be(true) | ||||||
|         expect(conversation.messages.last.attachments.first.file_type).to eq('image') |         expect(conversation.messages.last.attachments.first.file_type).to eq('image') | ||||||
|       end |       end | ||||||
|  |  | ||||||
|  |       context 'when api inbox' do | ||||||
|  |         let(:api_channel) { create(:channel_api, account: account) } | ||||||
|  |         let(:api_inbox) { create(:inbox, channel: api_channel, account: account) } | ||||||
|  |         let(:inbox_member) { create(:inbox_member, user: agent, inbox: api_inbox) } | ||||||
|  |         let(:conversation) { create(:conversation, inbox: api_inbox, account: account) } | ||||||
|  |  | ||||||
|  |         it 'reopens the conversation with new incoming message' do | ||||||
|  |           create(:message, conversation: conversation, account: account) | ||||||
|  |           conversation.resolved! | ||||||
|  |  | ||||||
|  |           params = { content: 'test-message', private: false, message_type: 'incoming' } | ||||||
|  |  | ||||||
|  |           post api_v1_account_conversation_messages_url(account_id: account.id, conversation_id: conversation.display_id), | ||||||
|  |                params: params, | ||||||
|  |                headers: agent.create_new_auth_token, | ||||||
|  |                as: :json | ||||||
|  |  | ||||||
|  |           expect(response).to have_http_status(:success) | ||||||
|  |           expect(conversation.reload.status).to eq('open') | ||||||
|  |           expect(Conversations::ActivityMessageJob) | ||||||
|  |             .to(have_been_enqueued.at_least(:once) | ||||||
|  |               .with(conversation, { account_id: conversation.account_id, inbox_id: conversation.inbox_id, message_type: :activity, | ||||||
|  |                                     content: 'System reopened the conversation due to a new incoming message.' })) | ||||||
|  |         end | ||||||
|  |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     context 'when it is an authenticated agent bot' do |     context 'when it is an authenticated agent bot' do | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tejaswini Chile
					Tejaswini Chile