WhatsApp templates with variables in both a text header and body currently show inputs only for the body. Agents therefore cannot provide the header value in the template composer, even though the API and backend support the corresponding `processed_params.header` payload. The composer now displays text-header variables separately, previews their substituted values, and sends them alongside body parameters. Templates using media headers remain unchanged. Related: https://github.com/chatwoot/utils/pull/65 ### Things to know This PR consumes the released `@chatwoot/utils@0.0.57`, which adds text-header parameter construction and completeness validation. ### How to reproduce 1. Open a WhatsApp template containing text header `Welcome {{1}}` and body variables `{{1}}` and `{{2}}`. 2. Observe that the current composer displays only two body inputs and omits the header input. ### How to test 1. Open the same template in the conversation composer. 2. Confirm one header input and two body inputs are displayed. 3. Fill the values and confirm both the header and body previews update. 4. Send the template and confirm `processed_params` contains `header.1`, `body.1`, and `body.2`. --------- Co-authored-by: Muhsin <12408980+muhsin-k@users.noreply.github.com>
180 lines
5.4 KiB
JSON
180 lines
5.4 KiB
JSON
{
|
|
"name": "@chatwoot/chatwoot",
|
|
"version": "4.16.2",
|
|
"license": "MIT",
|
|
"scripts": {
|
|
"eslint": "eslint app/**/*.{js,vue}",
|
|
"eslint:fix": "eslint app/**/*.{js,vue} --fix",
|
|
"test": "TZ=UTC vitest --no-watch --no-cache --no-coverage --logHeapUsage",
|
|
"test:watch": "TZ=UTC vitest --no-cache --no-coverage",
|
|
"test:coverage": "TZ=UTC vitest --no-watch --no-cache --coverage",
|
|
"start:dev": "foreman start -f ./Procfile.dev",
|
|
"start:test": "RAILS_ENV=test foreman start -f ./Procfile.test",
|
|
"dev": "overmind start -f ./Procfile.dev",
|
|
"ruby:prettier": "bundle exec rubocop -a",
|
|
"build:sdk": "vite build --config vite.lib.config.ts",
|
|
"prepare": "husky install",
|
|
"size": "size-limit",
|
|
"story:dev": "histoire dev",
|
|
"story:build": "histoire build",
|
|
"story:preview": "histoire preview",
|
|
"sync:i18n": "bin/sync_i18n_file_change"
|
|
},
|
|
"size-limit": [
|
|
{
|
|
"path": "public/vite/assets/widget-*.js",
|
|
"limit": "300 KB"
|
|
},
|
|
{
|
|
"path": "public/packs/js/sdk.js",
|
|
"limit": "40 KB"
|
|
}
|
|
],
|
|
"dependencies": {
|
|
"@amplitude/analytics-browser": "^2.11.10",
|
|
"@breezystack/lamejs": "^1.2.7",
|
|
"@chatwoot/ninja-keys": "1.2.3",
|
|
"@chatwoot/prosemirror-schema": "1.4.1",
|
|
"@chatwoot/utils": "^0.0.57",
|
|
"@formkit/core": "^1.7.2",
|
|
"@formkit/vue": "^1.7.2",
|
|
"@hcaptcha/vue3-hcaptcha": "^1.3.0",
|
|
"@highlightjs/vue-plugin": "^2.1.0",
|
|
"@hotwired/turbo-rails": "^8.0.13",
|
|
"@iconify-json/fluent": "^1.2.32",
|
|
"@iconify-json/material-symbols": "^1.2.10",
|
|
"@lk77/vue3-color": "^3.0.6",
|
|
"@radix-ui/colors": "^3.0.0",
|
|
"@rails/actioncable": "6.1.3",
|
|
"@rails/ujs": "^7.1.400",
|
|
"@scmmishra/pico-search": "0.6.0",
|
|
"@sentry/vue": "^8.55.0",
|
|
"@sindresorhus/slugify": "2.2.1",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@tanstack/vue-table": "^8.20.5",
|
|
"@twilio/voice-sdk": "^2.12.4",
|
|
"@vitejs/plugin-vue": "^5.2.4",
|
|
"@vue/compiler-sfc": "^3.5.8",
|
|
"@vuelidate/core": "^2.0.3",
|
|
"@vuelidate/validators": "^2.0.4",
|
|
"@vueuse/components": "^12.0.0",
|
|
"@vueuse/core": "^12.0.0",
|
|
"activestorage": "^5.2.6",
|
|
"axios": "^1.15.0",
|
|
"camelcase-keys": "^9.1.3",
|
|
"chart.js": "~4.4.4",
|
|
"color2k": "^2.0.2",
|
|
"company-email-validator": "^1.1.0",
|
|
"core-js": "3.38.1",
|
|
"countries-and-timezones": "^3.6.0",
|
|
"date-fns": "2.21.1",
|
|
"date-fns-tz": "^1.3.3",
|
|
"dompurify": "3.4.11",
|
|
"flag-icons": "^7.2.3",
|
|
"floating-vue": "^5.2.2",
|
|
"highlight.js": "^11.10.0",
|
|
"html-to-image": "^1.11.13",
|
|
"html2canvas": "^1.4.1",
|
|
"idb": "^8.0.0",
|
|
"js-cookie": "^3.0.5",
|
|
"json-logic-js": "^2.0.5",
|
|
"lettersanitizer": "^1.0.6",
|
|
"libphonenumber-js": "^1.11.9",
|
|
"markdown-it": "^14.1.1",
|
|
"markdown-it-link-attributes": "^4.0.1",
|
|
"md5": "^2.3.0",
|
|
"mitt": "^3.0.1",
|
|
"opus-recorder": "^8.0.5",
|
|
"pinia": "^3.0.4",
|
|
"qrcode": "^1.5.4",
|
|
"semver": "7.6.3",
|
|
"snakecase-keys": "^8.0.1",
|
|
"timezone-phone-codes": "^0.0.2",
|
|
"tinykeys": "^3.0.0",
|
|
"urlpattern-polyfill": "^10.0.0",
|
|
"video.js": "7.21.1",
|
|
"videojs-record": "4.5.0",
|
|
"videojs-wavesurfer": "3.8.0",
|
|
"virtua": "^0.48.6",
|
|
"vue": "^3.5.12",
|
|
"vue-chartjs": "5.3.1",
|
|
"vue-datepicker-next": "^1.0.3",
|
|
"vue-dompurify-html": "^5.3.0",
|
|
"vue-i18n": "9.14.5",
|
|
"vue-letter": "^0.2.1",
|
|
"vue-router": "~4.4.5",
|
|
"vue-upload-component": "^3.1.17",
|
|
"vue3-click-away": "^1.2.4",
|
|
"vuedraggable": "^4.1.0",
|
|
"vuex": "~4.1.0",
|
|
"vuex-router-sync": "6.0.0-rc.1",
|
|
"wavesurfer.js": "7.8.6"
|
|
},
|
|
"devDependencies": {
|
|
"@egoist/tailwindcss-icons": "^1.9.2",
|
|
"@histoire/plugin-vue": "0.17.15",
|
|
"@iconify-json/logos": "^1.2.10",
|
|
"@iconify-json/lucide": "^1.2.82",
|
|
"@iconify-json/ph": "^1.2.2",
|
|
"@iconify-json/ri": "^1.2.6",
|
|
"@iconify-json/teenyicons": "^1.2.2",
|
|
"@intlify/eslint-plugin-vue-i18n": "^3.2.0",
|
|
"@rollup/plugin-yaml": "^4.1.2",
|
|
"@size-limit/file": "^8.2.4",
|
|
"@vitest/coverage-v8": "3.0.5",
|
|
"@vue/test-utils": "^2.4.6",
|
|
"autoprefixer": "^10.4.20",
|
|
"eslint": "^8.57.0",
|
|
"eslint-config-airbnb-base": "15.0.0",
|
|
"eslint-config-prettier": "^9.1.0",
|
|
"eslint-interactive": "^11.1.0",
|
|
"eslint-plugin-html": "7.1.0",
|
|
"eslint-plugin-import": "2.30.0",
|
|
"eslint-plugin-prettier": "5.2.1",
|
|
"eslint-plugin-vitest-globals": "^1.5.0",
|
|
"eslint-plugin-vue": "^9.28.0",
|
|
"fake-indexeddb": "^6.0.0",
|
|
"histoire": "0.17.15",
|
|
"husky": "^7.0.0",
|
|
"jsdom": "^27.2.0",
|
|
"lint-staged": "^16.2.7",
|
|
"postcss": "^8.4.47",
|
|
"postcss-preset-env": "^8.5.1",
|
|
"prettier": "^3.3.3",
|
|
"prosemirror-model": "^1.22.3",
|
|
"size-limit": "^8.2.4",
|
|
"tailwindcss": "^3.4.19",
|
|
"vite": "6.4.2",
|
|
"vite-plugin-ruby": "^5.2.1",
|
|
"vitest": "3.0.5"
|
|
},
|
|
"engines": {
|
|
"node": "24.x",
|
|
"pnpm": "10.x"
|
|
},
|
|
"husky": {
|
|
"hooks": {
|
|
"pre-push": "sh bin/validate_push"
|
|
}
|
|
},
|
|
"pnpm": {
|
|
"overrides": {
|
|
"vite": "6.4.2",
|
|
"vitest": "3.0.5",
|
|
"minimatch@<4": "3.1.5",
|
|
"minimatch@>=9.0.0 <9.0.7": "9.0.9",
|
|
"rollup": ">=4.59.0"
|
|
}
|
|
},
|
|
"lint-staged": {
|
|
"app/**/*.{js,vue}": [
|
|
"eslint --fix",
|
|
"git add"
|
|
],
|
|
"*.scss": [
|
|
"scss-lint"
|
|
]
|
|
},
|
|
"packageManager": "pnpm@10.2.0+sha512.0d27364e0139c6aadeed65ada153135e0ca96c8da42123bd50047f961339dc7a758fc2e944b428f52be570d1bd3372455c1c65fa2e7aa0bfbf931190f9552001"
|
|
}
|