From 1230d1f2512e5f2135564a91aff4974d43c26094 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Wed, 30 Jul 2025 11:07:18 +0400 Subject: [PATCH 1/7] chore: Added support for inbox variables (#11952) --- .../components/widgets/conversation/ReplyBox.vue | 1 + app/javascript/shared/constants/messages.js | 8 ++++++++ package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index 8bf81d0c3..e5243ac04 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -372,6 +372,7 @@ export default { const variables = getMessageVariables({ conversation: this.currentChat, contact: this.currentContact, + inbox: this.inbox, }); return variables; }, diff --git a/app/javascript/shared/constants/messages.js b/app/javascript/shared/constants/messages.js index f5fa834fc..7b7b4f331 100644 --- a/app/javascript/shared/constants/messages.js +++ b/app/javascript/shared/constants/messages.js @@ -157,6 +157,14 @@ export const MESSAGE_VARIABLES = [ label: 'Agent email', key: 'agent.email', }, + { + key: 'inbox.name', + label: 'Inbox name', + }, + { + label: 'Inbox id', + key: 'inbox.id', + }, ]; export const ATTACHMENT_ICONS = { diff --git a/package.json b/package.json index e0fd2cf7b..668ea8b57 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@breezystack/lamejs": "^1.2.7", "@chatwoot/ninja-keys": "1.2.3", "@chatwoot/prosemirror-schema": "1.1.6-next", - "@chatwoot/utils": "^0.0.47", + "@chatwoot/utils": "^0.0.48", "@formkit/core": "^1.6.7", "@formkit/vue": "^1.6.7", "@hcaptcha/vue3-hcaptcha": "^1.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a88cfc084..16e830a87 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,8 +23,8 @@ importers: specifier: 1.1.6-next version: 1.1.6-next '@chatwoot/utils': - specifier: ^0.0.47 - version: 0.0.47 + specifier: ^0.0.48 + version: 0.0.48 '@formkit/core': specifier: ^1.6.7 version: 1.6.7 @@ -406,8 +406,8 @@ packages: '@chatwoot/prosemirror-schema@1.1.6-next': resolution: {integrity: sha512-9lf7FrcED/B5oyGrMmIkbegkhlC/P0NrtXoX8k94YWRosZcx0hGVGhpTud+0Mhm7saAfGerKIwTRVDmmnxPuCA==} - '@chatwoot/utils@0.0.47': - resolution: {integrity: sha512-0z/MY+rBjDnf6zuWbMdzexH+zFDXU/g5fPr/kcUxnqtvPsZIQpL8PvwSPBW0+wS6R7LChndNkdviV1e9H8Yp+Q==} + '@chatwoot/utils@0.0.48': + resolution: {integrity: sha512-67M2lvpBp0Ciczv1uRzabOXSCGiEeJE3wYVoPAxkqI35CJSkotu4tSX2TFOwagUQoRyU6F8YV3xXGfCpDN9WAA==} engines: {node: '>=10'} '@codemirror/commands@6.7.0': @@ -5255,7 +5255,7 @@ snapshots: prosemirror-utils: 1.2.2(prosemirror-model@1.22.3)(prosemirror-state@1.4.3) prosemirror-view: 1.34.1 - '@chatwoot/utils@0.0.47': + '@chatwoot/utils@0.0.48': dependencies: date-fns: 2.30.0 From df4de508e70deefb8fa88b09bc69add7a0bdb798 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Wed, 30 Jul 2025 19:34:27 +0530 Subject: [PATCH 2/7] feat: New Scenarios page (#11975) --- .../dashboard/api/captain/scenarios.js | 36 ++ app/javascript/dashboard/api/captain/tools.js | 16 + .../components-next/Editor/Editor.vue | 2 + .../captain/assistant/AddNewRulesDialog.vue | 6 +- .../assistant/AddNewScenariosDialog.vue | 155 +++++++++ .../captain/assistant/RuleCard.vue | 1 - .../captain/assistant/ScenariosCard.story.vue | 45 +++ .../captain/assistant/ScenariosCard.vue | 218 ++++++++++++ .../captain/assistant/ToolsDropdown.story.vue | 37 ++ .../captain/assistant/ToolsDropdown.vue | 54 +++ .../components/widgets/WootWriter/Editor.vue | 26 +- .../widgets/conversation/TagTools.vue | 56 +++ .../helper/AnalyticsHelper/events.js | 1 + .../dashboard/helper/editorHelper.js | 11 + .../i18n/locale/en/integrations.json | 69 ++++ .../captain/assistants/guardrails/Index.vue | 5 + .../captain/assistants/guidelines/Index.vue | 7 + .../captain/assistants/scenarios/Index.vue | 320 ++++++++++++++++++ .../captain/assistants/settings/Settings.vue | 2 +- .../dashboard/captain/captain.routes.js | 16 + .../dashboard/store/captain/scenarios.js | 38 +++ .../dashboard/store/captain/tools.js | 24 ++ app/javascript/dashboard/store/index.js | 4 + .../captain/scenarios/index.json.jbuilder | 7 +- package.json | 2 +- pnpm-lock.yaml | 10 +- .../captain/scenarios_controller_spec.rb | 8 +- 27 files changed, 1161 insertions(+), 15 deletions(-) create mode 100644 app/javascript/dashboard/api/captain/scenarios.js create mode 100644 app/javascript/dashboard/api/captain/tools.js create mode 100644 app/javascript/dashboard/components-next/captain/assistant/AddNewScenariosDialog.vue create mode 100644 app/javascript/dashboard/components-next/captain/assistant/ScenariosCard.story.vue create mode 100644 app/javascript/dashboard/components-next/captain/assistant/ScenariosCard.vue create mode 100644 app/javascript/dashboard/components-next/captain/assistant/ToolsDropdown.story.vue create mode 100644 app/javascript/dashboard/components-next/captain/assistant/ToolsDropdown.vue create mode 100644 app/javascript/dashboard/components/widgets/conversation/TagTools.vue create mode 100644 app/javascript/dashboard/routes/dashboard/captain/assistants/scenarios/Index.vue create mode 100644 app/javascript/dashboard/store/captain/scenarios.js create mode 100644 app/javascript/dashboard/store/captain/tools.js diff --git a/app/javascript/dashboard/api/captain/scenarios.js b/app/javascript/dashboard/api/captain/scenarios.js new file mode 100644 index 000000000..3e61c28a3 --- /dev/null +++ b/app/javascript/dashboard/api/captain/scenarios.js @@ -0,0 +1,36 @@ +/* global axios */ +import ApiClient from '../ApiClient'; + +class CaptainScenarios extends ApiClient { + constructor() { + super('captain/assistants', { accountScoped: true }); + } + + get({ assistantId, page = 1, searchKey } = {}) { + return axios.get(`${this.url}/${assistantId}/scenarios`, { + params: { page, searchKey }, + }); + } + + show({ assistantId, id }) { + return axios.get(`${this.url}/${assistantId}/scenarios/${id}`); + } + + create({ assistantId, ...data } = {}) { + return axios.post(`${this.url}/${assistantId}/scenarios`, { + scenario: data, + }); + } + + update({ assistantId, id }, data = {}) { + return axios.put(`${this.url}/${assistantId}/scenarios/${id}`, { + scenario: data, + }); + } + + delete({ assistantId, id }) { + return axios.delete(`${this.url}/${assistantId}/scenarios/${id}`); + } +} + +export default new CaptainScenarios(); diff --git a/app/javascript/dashboard/api/captain/tools.js b/app/javascript/dashboard/api/captain/tools.js new file mode 100644 index 000000000..20edaa95e --- /dev/null +++ b/app/javascript/dashboard/api/captain/tools.js @@ -0,0 +1,16 @@ +/* global axios */ +import ApiClient from '../ApiClient'; + +class CaptainTools extends ApiClient { + constructor() { + super('captain/assistants/tools', { accountScoped: true }); + } + + get(params = {}) { + return axios.get(this.url, { + params, + }); + } +} + +export default new CaptainTools(); diff --git a/app/javascript/dashboard/components-next/Editor/Editor.vue b/app/javascript/dashboard/components-next/Editor/Editor.vue index 9e5ff6ab5..a2f139bdc 100644 --- a/app/javascript/dashboard/components-next/Editor/Editor.vue +++ b/app/javascript/dashboard/components-next/Editor/Editor.vue @@ -20,6 +20,7 @@ const props = defineProps({ enableVariables: { type: Boolean, default: false }, enableCannedResponses: { type: Boolean, default: true }, enabledMenuOptions: { type: Array, default: () => [] }, + enableCaptainTools: { type: Boolean, default: false }, }); const emit = defineEmits(['update:modelValue']); @@ -98,6 +99,7 @@ watch( :enable-variables="enableVariables" :enable-canned-responses="enableCannedResponses" :enabled-menu-options="enabledMenuOptions" + :enable-captain-tools="enableCaptainTools" @input="handleInput" @focus="handleFocus" @blur="handleBlur" diff --git a/app/javascript/dashboard/components-next/captain/assistant/AddNewRulesDialog.vue b/app/javascript/dashboard/components-next/captain/assistant/AddNewRulesDialog.vue index ecdb2d654..c1a465c64 100644 --- a/app/javascript/dashboard/components-next/captain/assistant/AddNewRulesDialog.vue +++ b/app/javascript/dashboard/components-next/captain/assistant/AddNewRulesDialog.vue @@ -1,5 +1,6 @@