Commit Graph
6277 Commits
Author SHA1 Message Date
Captain 60fafc65ca New translations en.yml (Hindi)
[ci skip]
[ci skip]
2026-06-02 11:17:34 -07:00
Captain f53ae6457c New translations en.yml (Azerbaijani)
[ci skip]
[ci skip]
2026-06-02 11:17:32 -07:00
Captain 2bb9886c6d New translations en.yml (Latvian)
[ci skip]
[ci skip]
2026-06-02 11:17:30 -07:00
Captain 9b9875b847 New translations en.yml (Estonian)
[ci skip]
[ci skip]
2026-06-02 11:17:28 -07:00
Captain 7e5f19e2b0 New translations en.yml (Croatian)
[ci skip]
[ci skip]
2026-06-02 11:17:26 -07:00
Captain 0d73760dac New translations en.yml (Thai)
[ci skip]
[ci skip]
2026-06-02 11:17:24 -07:00
Captain 8527170d82 New translations en.yml (Bengali)
[ci skip]
[ci skip]
2026-06-02 11:17:22 -07:00
Captain 044282730f New translations en.yml (Tamil)
[ci skip]
[ci skip]
2026-06-02 11:17:20 -07:00
Captain d5bf7f81cb New translations en.yml (Persian)
[ci skip]
[ci skip]
2026-06-02 11:17:18 -07:00
Captain 8b125efac2 New translations en.yml (Indonesian)
[ci skip]
[ci skip]
2026-06-02 11:17:16 -07:00
Captain 69ea2dc58d New translations en.yml (Portuguese, Brazilian)
[ci skip]
[ci skip]
2026-06-02 11:17:14 -07:00
Captain 5cc2004a71 New translations en.yml (Icelandic)
[ci skip]
[ci skip]
2026-06-02 11:17:12 -07:00
Captain 92ac1c3825 New translations en.yml (Vietnamese)
[ci skip]
[ci skip]
2026-06-02 11:17:10 -07:00
Captain bc8f528f90 New translations en.yml (Urdu (Pakistan))
[ci skip]
[ci skip]
2026-06-02 11:16:32 -07:00
Captain bef1a6047a New translations en.yml (Chinese Traditional)
[ci skip]
[ci skip]
2026-06-02 11:16:26 -07:00
Captain ab4eb0e7d7 New translations en.yml (Chinese Simplified)
[ci skip]
[ci skip]
2026-06-02 11:16:24 -07:00
Captain e5b64287ac New translations en.yml (Ukrainian)
[ci skip]
[ci skip]
2026-06-02 11:16:22 -07:00
Captain 34a480e799 New translations en.yml (Turkish)
[ci skip]
[ci skip]
2026-06-02 11:16:20 -07:00
Captain 58b067c08f New translations en.yml (Swedish)
[ci skip]
[ci skip]
2026-06-02 11:16:18 -07:00
Captain 78faf125bd New translations en.yml (Albanian)
[ci skip]
[ci skip]
2026-06-02 11:16:15 -07:00
Captain 0d9662477d New translations en.yml (Slovenian)
[ci skip]
[ci skip]
2026-06-02 11:16:13 -07:00
Captain 3e31f63f09 New translations en.yml (Slovak)
[ci skip]
[ci skip]
2026-06-02 11:16:12 -07:00
Captain b84d98b90b New translations en.yml (Russian)
[ci skip]
[ci skip]
2026-06-02 11:16:09 -07:00
Captain 3a75ec02f0 New translations en.yml (Portuguese)
[ci skip]
[ci skip]
2026-06-02 11:16:07 -07:00
Captain 9cbe749994 New translations en.yml (Polish)
[ci skip]
[ci skip]
2026-06-02 11:16:05 -07:00
Captain e9ea5cbe45 New translations en.yml (Norwegian)
[ci skip]
[ci skip]
2026-06-02 11:16:03 -07:00
Captain 665549d52d New translations en.yml (Dutch)
[ci skip]
[ci skip]
2026-06-02 11:16:01 -07:00
Captain 17db86c2fe New translations en.yml (Lithuanian)
[ci skip]
[ci skip]
2026-06-02 11:15:59 -07:00
Captain 0ace7f38a6 New translations en.yml (Korean)
[ci skip]
[ci skip]
2026-06-02 11:15:57 -07:00
Captain 4a2250065c New translations en.yml (Georgian)
[ci skip]
[ci skip]
2026-06-02 11:15:55 -07:00
Captain 31ba25b12b New translations en.yml (Japanese)
[ci skip]
[ci skip]
2026-06-02 11:15:53 -07:00
Captain bc5bd51003 New translations en.yml (Italian)
[ci skip]
[ci skip]
2026-06-02 11:15:51 -07:00
Captain 6d933112e7 New translations en.yml (Armenian)
[ci skip]
[ci skip]
2026-06-02 11:15:49 -07:00
Captain 45d7e570b7 New translations en.yml (Hungarian)
[ci skip]
[ci skip]
2026-06-02 11:15:47 -07:00
Captain bb3ad70f0e New translations en.yml (Hebrew)
[ci skip]
[ci skip]
2026-06-02 11:15:45 -07:00
Captain c983c87537 New translations en.yml (Finnish)
[ci skip]
[ci skip]
2026-06-02 11:15:42 -07:00
Captain c5def0522f New translations en.yml (Greek)
[ci skip]
[ci skip]
2026-06-02 11:15:40 -07:00
Captain b95e59ee0d New translations en.yml (German)
[ci skip]
[ci skip]
2026-06-02 11:15:38 -07:00
Captain f49d825e8b New translations en.yml (Danish)
[ci skip]
[ci skip]
2026-06-02 11:15:36 -07:00
Captain 75a82d9ab7 New translations en.yml (Czech)
[ci skip]
[ci skip]
2026-06-02 11:15:34 -07:00
Captain 0eb121df75 New translations en.yml (Catalan)
[ci skip]
[ci skip]
2026-06-02 11:15:32 -07:00
Captain 18e45a0da6 New translations en.yml (Bulgarian)
[ci skip]
[ci skip]
2026-06-02 11:15:30 -07:00
Captain df14e97ff6 New translations en.yml (Arabic)
[ci skip]
[ci skip]
2026-06-02 11:15:28 -07:00
Captain 63c9cf3ad1 New translations en.yml (Spanish)
[ci skip]
[ci skip]
2026-06-02 11:15:26 -07:00
Captain ec36442f57 New translations en.yml (French)
[ci skip]
[ci skip]
2026-06-02 11:15:24 -07:00
Captain b81c43a5a2 New translations en.yml (Romanian)
[ci skip]
[ci skip]
2026-06-02 11:15:22 -07:00
Captain 23cad33d96 New translations conversation.json (Portuguese, Brazilian)
[ci skip]
[ci skip]
2026-06-02 11:13:36 -07:00
36a05097fa fix(webhooks): strip trailing newlines from webhook message content (#14272)
The TipTap/ProseMirror editor stores agent messages with trailing
paragraph nodes that produce trailing newlines (e.g. \`\n\n\n\`) in the
\`content\` field. While Chatwoot's native channel delivery already
handles this, webhook payloads and API responses were returning raw
content with trailing whitespace — causing visible blank space below
messages in every external integration that consumes Chatwoot webhooks
(WhatsApp via Evolution API, Telegram bots, custom webhook consumers).

Closes #13459

## Root cause

\`Messages::WebhookContentNormalizer\` already strips CommonMark hard
line breaks (\`\\\` + newline) for webhook consumers, but it did not
strip trailing whitespace. All webhook and API responses flow through
this normaliser, so it is the single correct place to apply the fix
without touching stored data.

## What changed

Added \`.rstrip\` to \`Messages::WebhookContentNormalizer.normalize\`:

\`\`\`ruby
# before
text.gsub(/\\\r?\n/, "\n")

# after
text.gsub(/\\\r?\n/, "\n").rstrip
\`\`\`

## Trade-offs considered

| Option | Decision |
|---|---|
| \`before_save\` on \`Message\` model | Would clean stored data but is
a broader change affecting all message creation paths and would require
a data migration for existing records. Out of scope for this bug. |
| Trim in each channel's send path | DRY violation — many channels, each
would need the same patch. |
| Fix at normaliser level (chosen) | Single location, only affects
webhook/API output, zero risk to stored data or native channel delivery.
|

**Known limitation:** existing messages in the database still have
trailing newlines in storage. They will be delivered correctly through
webhooks after this fix, but a follow-up migration could clean stored
content if needed.

## How to reproduce

1. Send an agent reply from the Chatwoot UI
2. Inspect the \`content\` field of the outgoing \`message_created\`
webhook payload
3. Observe trailing \`\n\n\n\` after the message text

After this fix, the \`content\` field is trimmed before delivery.

---------

Co-authored-by: Ramalau Debeila <rdebeila@datacentrix.co.za>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
2026-06-02 23:28:13 +05:30
0a181b0cea chore: Update translations (#14498)
Updates dashboard, widget, and backend locale files with the latest
translation sync from Crowdin.

## Closes

N/A

## What changed

- Refreshes translated dashboard JSON locale files across supported
languages.
- Adds the latest backend Help Center/public portal locale strings.
- Keeps the branch current with `develop` and resolves the `ar`, `fr`,
and `pt_BR` locale conflicts.

## Validation

- Parsed all changed JSON and YAML locale files successfully.
- Checked for leftover merge conflict markers.
- Ran `git diff --check`.

---------

Co-authored-by: Sojan Jose <sojan@pepalo.com>
2026-06-02 21:21:50 +05:30
Sony MathewandGitHub 87df43bdd0 revert: restore conversation unread count feature flag (#14623)
This reverts #14610 so conversation unread counts are again controlled
by the `conversation_unread_counts` feature flag across the API,
ActionCable broadcasts, notifier/listener paths, and dashboard sidebar
fetching.

## Closes
- None

## What changed
- Restores feature-flag checks for conversation unread count reads and
broadcasts.
- Restores the dashboard feature flag constant and sidebar/store
behavior for disabled unread counts.
- Restores the specs that cover disabled-feature behavior.

## How to test
- In an account with `conversation_unread_counts` enabled, verify
sidebar unread counts are fetched and updated in real time.
- Disable `conversation_unread_counts` for the account and verify unread
count requests/broadcasts are skipped.
2026-06-02 21:11:48 +05:30