mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 20:48:07 +00:00
This PR allows Copilot to be used without connecting the Captain assistant to an inbox. Currently, if Captain is enabled on an account, it takes over conversations and responds directly to users. This PR enables the use of Captain as a Copilot without allowing it to respond to users. Additionally, it allows using a different assistant for Copilot instead of the default Captain assistant. The selection logic for the Copilot assistant follows this order of preference: - If the user has selected a specific assistant, it takes first preference for Copilot. - If the above is not available, the assistant connected to the inbox takes preference. - If neither of the above is available, the first assistant in the account takes preference.
147 lines
3.4 KiB
JavaScript
147 lines
3.4 KiB
JavaScript
/* global axios */
|
|
import ApiClient from '../ApiClient';
|
|
|
|
class ConversationApi extends ApiClient {
|
|
constructor() {
|
|
super('conversations', { accountScoped: true });
|
|
}
|
|
|
|
get({
|
|
inboxId,
|
|
status,
|
|
assigneeType,
|
|
page,
|
|
labels,
|
|
teamId,
|
|
conversationType,
|
|
sortBy,
|
|
updatedWithin,
|
|
}) {
|
|
return axios.get(this.url, {
|
|
params: {
|
|
inbox_id: inboxId,
|
|
team_id: teamId,
|
|
status,
|
|
assignee_type: assigneeType,
|
|
page,
|
|
labels,
|
|
conversation_type: conversationType,
|
|
sort_by: sortBy,
|
|
updated_within: updatedWithin,
|
|
},
|
|
});
|
|
}
|
|
|
|
filter(payload) {
|
|
return axios.post(`${this.url}/filter`, payload.queryData, {
|
|
params: {
|
|
page: payload.page,
|
|
},
|
|
});
|
|
}
|
|
|
|
search({ q }) {
|
|
return axios.get(`${this.url}/search`, {
|
|
params: {
|
|
q,
|
|
page: 1,
|
|
},
|
|
});
|
|
}
|
|
|
|
toggleStatus({ conversationId, status, snoozedUntil = null }) {
|
|
return axios.post(`${this.url}/${conversationId}/toggle_status`, {
|
|
status,
|
|
snoozed_until: snoozedUntil,
|
|
});
|
|
}
|
|
|
|
togglePriority({ conversationId, priority }) {
|
|
return axios.post(`${this.url}/${conversationId}/toggle_priority`, {
|
|
priority,
|
|
});
|
|
}
|
|
|
|
assignAgent({ conversationId, agentId }) {
|
|
return axios.post(
|
|
`${this.url}/${conversationId}/assignments?assignee_id=${agentId}`,
|
|
{}
|
|
);
|
|
}
|
|
|
|
assignTeam({ conversationId, teamId }) {
|
|
const params = { team_id: teamId };
|
|
return axios.post(`${this.url}/${conversationId}/assignments`, params);
|
|
}
|
|
|
|
markMessageRead({ id }) {
|
|
return axios.post(`${this.url}/${id}/update_last_seen`);
|
|
}
|
|
|
|
markMessagesUnread({ id }) {
|
|
return axios.post(`${this.url}/${id}/unread`);
|
|
}
|
|
|
|
toggleTyping({ conversationId, status, isPrivate }) {
|
|
return axios.post(`${this.url}/${conversationId}/toggle_typing_status`, {
|
|
typing_status: status,
|
|
is_private: isPrivate,
|
|
});
|
|
}
|
|
|
|
mute(conversationId) {
|
|
return axios.post(`${this.url}/${conversationId}/mute`);
|
|
}
|
|
|
|
unmute(conversationId) {
|
|
return axios.post(`${this.url}/${conversationId}/unmute`);
|
|
}
|
|
|
|
meta({ inboxId, status, assigneeType, labels, teamId, conversationType }) {
|
|
return axios.get(`${this.url}/meta`, {
|
|
params: {
|
|
inbox_id: inboxId,
|
|
status,
|
|
assignee_type: assigneeType,
|
|
labels,
|
|
team_id: teamId,
|
|
conversation_type: conversationType,
|
|
},
|
|
});
|
|
}
|
|
|
|
sendEmailTranscript({ conversationId, email }) {
|
|
return axios.post(`${this.url}/${conversationId}/transcript`, { email });
|
|
}
|
|
|
|
updateCustomAttributes({ conversationId, customAttributes }) {
|
|
return axios.post(`${this.url}/${conversationId}/custom_attributes`, {
|
|
custom_attributes: customAttributes,
|
|
});
|
|
}
|
|
|
|
fetchParticipants(conversationId) {
|
|
return axios.get(`${this.url}/${conversationId}/participants`);
|
|
}
|
|
|
|
updateParticipants({ conversationId, userIds }) {
|
|
return axios.patch(`${this.url}/${conversationId}/participants`, {
|
|
user_ids: userIds,
|
|
});
|
|
}
|
|
|
|
getAllAttachments(conversationId) {
|
|
return axios.get(`${this.url}/${conversationId}/attachments`);
|
|
}
|
|
|
|
requestCopilot(conversationId, body) {
|
|
return axios.post(`${this.url}/${conversationId}/copilot`, body);
|
|
}
|
|
|
|
getInboxAssistant(conversationId) {
|
|
return axios.get(`${this.url}/${conversationId}/inbox_assistant`);
|
|
}
|
|
}
|
|
|
|
export default new ConversationApi();
|