mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-30 02:32:29 +00:00
Add status reopen activity message for api channel (#6839)
This commit is contained in:
@@ -32,7 +32,13 @@ module ActivityMessageHandler
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
|
||||
@@ -257,11 +257,18 @@ class Message < ApplicationRecord
|
||||
# mark resolved bot conversation as pending to be reopened by bot processor service
|
||||
if conversation.inbox.active_bot?
|
||||
conversation.pending!
|
||||
elsif conversation.inbox.api?
|
||||
Current.executed_by = sender if reopened_by_contact?
|
||||
conversation.open!
|
||||
else
|
||||
conversation.open!
|
||||
end
|
||||
end
|
||||
|
||||
def reopened_by_contact?
|
||||
incoming? && !private? && Current.user.class != sender.class && sender.instance_of?(Contact)
|
||||
end
|
||||
|
||||
def execute_message_template_hooks
|
||||
::MessageTemplates::HookExecutionService.new(message: self).perform
|
||||
end
|
||||
|
||||
@@ -129,6 +129,7 @@ en:
|
||||
pending: "Conversation was marked as pending by %{user_name}"
|
||||
snoozed: "Conversation was snoozed by %{user_name}"
|
||||
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:
|
||||
self_assigned: "%{user_name} self-assigned this conversation"
|
||||
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_type).to eq('image')
|
||||
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
|
||||
|
||||
context 'when it is an authenticated agent bot' do
|
||||
|
||||
Reference in New Issue
Block a user