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