From 961ec86ba9c51adadb8ea5a4940cfae47eb493b7 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Tue, 23 Jun 2026 11:35:52 +0530 Subject: [PATCH 01/32] chore: support custom variables in auto-resolution message (#14782) # Pull Request Template ## Description This PR adds support for custom variables in auto-resolution messages within Conversation Workflows. Agents can insert variables (e.g. `{{contact.name}}`) into the custom auto-resolution message using the variable picker by typing `{{`. These variables are resolved with actual conversation data when the auto-resolution message is sent. The field uses the existing editor with the formatting toolbar hidden, since auto-resolution messages are delivered across all channels, including SMS, where formatting isn't supported. Existing message content is preserved as-is, and typing `{{` opens the variable picker for quick insertion. Fixes https://linear.app/chatwoot/issue/CW-7369/support-custom-variables-in-conversations-workflow-text-fields ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ### Screenshots image ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --- app/javascript/dashboard/constants/editor.js | 5 +++++ .../dashboard/settings/account/components/AutoResolve.vue | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/javascript/dashboard/constants/editor.js b/app/javascript/dashboard/constants/editor.js index 5f4fe0e03..cb0996136 100644 --- a/app/javascript/dashboard/constants/editor.js +++ b/app/javascript/dashboard/constants/editor.js @@ -163,6 +163,11 @@ export const FORMATTING = { nodes: [], menu: [], }, + 'Context::NoToolbar': { + marks: ['strong', 'em', 'link'], + nodes: ['bulletList', 'orderedList'], + menu: [], + }, }; // Editor menu options for Full Editor diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue b/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue index 034f40d35..54eafa59e 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/account/components/AutoResolve.vue @@ -5,7 +5,7 @@ import { useI18n } from 'vue-i18n'; import { useAccount } from 'dashboard/composables/useAccount'; import { useAlert } from 'dashboard/composables'; import WithLabel from 'v3/components/Form/WithLabel.vue'; -import TextArea from 'next/textarea/TextArea.vue'; +import Editor from 'next/Editor/Editor.vue'; import Switch from 'next/switch/Switch.vue'; import NextButton from 'dashboard/components-next/button/Button.vue'; import DurationInput from 'next/input/DurationInput.vue'; @@ -162,9 +162,13 @@ const toggleAutoResolve = async () => { :label="t('GENERAL_SETTINGS.FORM.AUTO_RESOLVE.MESSAGE.LABEL')" :help-message="t('GENERAL_SETTINGS.FORM.AUTO_RESOLVE.MESSAGE.HELP')" > -