From 73ad27e94c647cc80e27ca89daed3820bf527a42 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Wed, 26 Nov 2025 21:01:31 +0530 Subject: [PATCH 1/6] fix: Show WhatsApp templates only for inboxes with templates (#12965) Fixed the logic to show WhatsApp templates option only for inboxes that have templates available. --- .../dashboard/components/widgets/conversation/ReplyBox.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index 80551eaf8..c74dcecea 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -174,7 +174,12 @@ export default { return false; }, showWhatsappTemplates() { - return this.isAWhatsAppCloudChannel && !this.isPrivate; + // We support WhatsApp templates for API channels if someone updates templates manually via API + // That's why we don't explicitly check for WhatsApp channel type here + const templates = this.$store.getters['inboxes/getWhatsAppTemplates']( + this.inboxId + ); + return !!(templates && templates.length) && !this.isPrivate; }, showContentTemplates() { return this.isATwilioWhatsAppChannel && !this.isPrivate; From f1079574e3d438001baa6be466d7af83dbcaca95 Mon Sep 17 00:00:00 2001 From: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com> Date: Wed, 26 Nov 2025 22:38:26 +0530 Subject: [PATCH 2/6] fix: Disable SSL verification for LINE webhooks in development (#12960) ## Summary - Fixes SSL certificate verification errors when testing LINE webhooks in development environments - Configures the LINE Bot API client to skip SSL verification only in development mode ## Background When testing LINE webhooks locally on macOS, the LINE Bot SDK was failing with: ``` OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get certificate CRL) ``` This occurs because the LINE Bot SDK tries to fetch user profiles via HTTPS, and OpenSSL on macOS development environments may not have proper access to Certificate Revocation Lists (CRLs). ## Changes - Added `http_options` configuration to the LINE Bot client in `Channel::Line#client` - Sets `verify_mode: OpenSSL::SSL::VERIFY_NONE` only when `Rails.env.development?` is true - Production environments continue to use full SSL verification for security ## Test Plan - [x] Send a LINE message to trigger webhook in development - [x] Verify webhook is processed without SSL errors - [x] Confirm change only applies in development mode Co-authored-by: Muhsin Keloth --- app/models/channel/line.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/channel/line.rb b/app/models/channel/line.rb index 63b0924da..ad1d2a843 100644 --- a/app/models/channel/line.rb +++ b/app/models/channel/line.rb @@ -40,6 +40,8 @@ class Channel::Line < ApplicationRecord config.channel_id = line_channel_id config.channel_secret = line_channel_secret config.channel_token = line_channel_token + # Skip SSL verification in development to avoid certificate issues + config.http_options = { verify_mode: OpenSSL::SSL::VERIFY_NONE } if Rails.env.development? end end end From 3ded13c8d5a7486b687f85813704b21159bfd12f Mon Sep 17 00:00:00 2001 From: Aakash Bakhle <48802744+aakashb95@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:27:11 +0530 Subject: [PATCH 3/6] chore(revert): switch label suggestions back gpt 4 mini (#12959) Co-authored-by: aakashb95 Co-authored-by: Muhsin Keloth --- .../lib/enterprise/integrations/openai_processor_service.rb | 2 +- lib/integrations/openai_base_service.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/enterprise/lib/enterprise/integrations/openai_processor_service.rb b/enterprise/lib/enterprise/integrations/openai_processor_service.rb index 594c5d806..5a98ad4c4 100644 --- a/enterprise/lib/enterprise/integrations/openai_processor_service.rb +++ b/enterprise/lib/enterprise/integrations/openai_processor_service.rb @@ -65,7 +65,7 @@ module Enterprise::Integrations::OpenaiProcessorService return value_from_cache if content.blank? { - model: self.class::LABEL_SUGGESTION_MODEL, + model: self.class::GPT_MODEL, messages: [ { role: 'system', diff --git a/lib/integrations/openai_base_service.rb b/lib/integrations/openai_base_service.rb index 116352a8f..c19f605c1 100644 --- a/lib/integrations/openai_base_service.rb +++ b/lib/integrations/openai_base_service.rb @@ -7,7 +7,7 @@ class Integrations::OpenaiBaseService # 120000 * 4 = 480,000 characters (rounding off downwards to 400,000 to be safe) TOKEN_LIMIT = 400_000 GPT_MODEL = ENV.fetch('OPENAI_GPT_MODEL', 'gpt-4o-mini').freeze - LABEL_SUGGESTION_MODEL = 'gpt-5-nano'.freeze + ALLOWED_EVENT_NAMES = %w[rephrase summarize reply_suggestion fix_spelling_grammar shorten expand make_friendly make_formal simplify].freeze CACHEABLE_EVENTS = %w[].freeze From eb0410af5303723246deda5d4196c1455e3fc60f Mon Sep 17 00:00:00 2001 From: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:31:56 +0530 Subject: [PATCH 4/6] fix: handle string return values in MailPresenter#from method (#12966) --- app/presenters/mail_presenter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/presenters/mail_presenter.rb b/app/presenters/mail_presenter.rb index e98d2d085..202c255a1 100644 --- a/app/presenters/mail_presenter.rb +++ b/app/presenters/mail_presenter.rb @@ -125,7 +125,7 @@ class MailPresenter < SimpleDelegator def from # changing to downcase to avoid case mismatch while finding contact - (@mail.reply_to.presence || @mail.from).map(&:downcase) + Array.wrap(@mail.reply_to.presence || @mail.from).map(&:downcase) end def sender_name From dedb0426fb384c4b021642fa13677295cde37c19 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:32:34 +0530 Subject: [PATCH 5/6] chore: Improve pagination with compact number formatting and pluralization (#12962) --- .../pagination/PaginationFooter.vue | 32 +- .../dashboard/i18n/locale/en/companies.json | 2 +- .../dashboard/i18n/locale/en/components.json | 4 +- .../dashboard/i18n/locale/en/contact.json | 2 +- .../composables/specs/useLocale.spec.js | 188 +++++++++ .../specs/useNumberFormatter.spec.js | 364 ++++++++++++++++++ .../shared/composables/useLocale.js | 57 +++ .../shared/composables/useNumberFormatter.js | 67 ++++ 8 files changed, 701 insertions(+), 15 deletions(-) create mode 100644 app/javascript/shared/composables/specs/useLocale.spec.js create mode 100644 app/javascript/shared/composables/specs/useNumberFormatter.spec.js create mode 100644 app/javascript/shared/composables/useLocale.js create mode 100644 app/javascript/shared/composables/useNumberFormatter.js diff --git a/app/javascript/dashboard/components-next/pagination/PaginationFooter.vue b/app/javascript/dashboard/components-next/pagination/PaginationFooter.vue index e58b2db86..0a919dbbf 100644 --- a/app/javascript/dashboard/components-next/pagination/PaginationFooter.vue +++ b/app/javascript/dashboard/components-next/pagination/PaginationFooter.vue @@ -1,6 +1,7 @@ @@ -91,9 +99,11 @@ const pageInfo = computed(() => { />
- {{ currentPage }} + {{ formatFullNumber(currentPage) }} + + + {{ pageInfo }} - {{ pageInfo }}