fix: keep agent bot takeover guard human-only
This commit is contained in:
@@ -74,7 +74,7 @@ class Api::V1::Accounts::Conversations::MessagesController < Api::V1::Accounts::
|
||||
end
|
||||
|
||||
def ensure_agent_bot_takeover
|
||||
return unless Current.user && @conversation.assignee_agent_bot_id.present?
|
||||
return unless Current.user.is_a?(User) && @conversation.assignee_agent_bot_id.present?
|
||||
return if private_message? || incoming_message?
|
||||
|
||||
render json: { error: 'Conversation is assigned to an Agent Bot. Take over the conversation before replying.' }, status: :unprocessable_entity
|
||||
|
||||
@@ -42,9 +42,8 @@ const assignedAgent = computed({
|
||||
},
|
||||
});
|
||||
|
||||
const isUserTyping = computed(
|
||||
() => props.message !== '' && !props.isOnPrivateNote
|
||||
);
|
||||
const hasMessage = computed(() => props.message !== '');
|
||||
const isUserTyping = computed(() => hasMessage.value && !props.isOnPrivateNote);
|
||||
const isUnassigned = computed(() => !assignedAgent.value);
|
||||
const isAssignedToOtherAgent = computed(
|
||||
() => assignedAgent.value?.id !== currentUser.value?.id
|
||||
@@ -58,7 +57,7 @@ const showSelfAssignBanner = computed(() => {
|
||||
|
||||
const showBotHandoffBanner = computed(() => {
|
||||
return (
|
||||
isUserTyping.value && currentChat.value?.meta?.assignee_type === 'AgentBot'
|
||||
hasMessage.value && currentChat.value?.meta?.assignee_type === 'AgentBot'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@ RSpec.describe 'Conversation Messages API', type: :request do
|
||||
end
|
||||
|
||||
context 'when it is an authenticated agent bot' do
|
||||
let!(:agent_bot) { create(:agent_bot) }
|
||||
let!(:agent_bot) { create(:agent_bot, account: account) }
|
||||
|
||||
it 'creates a new outgoing message' do
|
||||
create(:agent_bot_inbox, inbox: inbox, agent_bot: agent_bot)
|
||||
@@ -152,6 +152,21 @@ RSpec.describe 'Conversation Messages API', type: :request do
|
||||
expect(conversation.messages.first.content).to eq(params[:content])
|
||||
end
|
||||
|
||||
it 'creates a new outgoing message when the agent bot owns the conversation' do
|
||||
create(:agent_bot_inbox, inbox: inbox, agent_bot: agent_bot)
|
||||
conversation.update!(assignee_agent_bot: agent_bot)
|
||||
params = { content: 'test-message' }
|
||||
|
||||
post api_v1_account_conversation_messages_url(account_id: account.id, conversation_id: conversation.display_id),
|
||||
params: params,
|
||||
headers: { api_access_token: agent_bot.access_token.token },
|
||||
as: :json
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(conversation.messages.count).to eq(1)
|
||||
expect(conversation.messages.first.content).to eq(params[:content])
|
||||
end
|
||||
|
||||
it 'creates a new outgoing input select message' do
|
||||
create(:agent_bot_inbox, inbox: inbox, agent_bot: agent_bot)
|
||||
select_item1 = build(:bot_message_select)
|
||||
|
||||
Reference in New Issue
Block a user