From ea7a4c78009e98219c9995b3d6ef588947b814e9 Mon Sep 17 00:00:00 2001 From: Sawy Date: Tue, 12 May 2026 11:27:12 +0300 Subject: [PATCH 1/2] CV2-6650: use user_id as fallback for wa_id --- app/models/concerns/smooch_capi.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/smooch_capi.rb b/app/models/concerns/smooch_capi.rb index 291dc0343..ed13255b4 100644 --- a/app/models/concerns/smooch_capi.rb +++ b/app/models/concerns/smooch_capi.rb @@ -39,7 +39,8 @@ def capi_api_get_user_data(uid, payload) end def get_capi_uid(value) - "#{value.dig('metadata', 'display_phone_number')}:#{value.dig('contacts', 0, 'wa_id')}" + "#{value.dig('metadata', 'display_phone_number')}:#{value.dig('contacts', 0, 'wa_id')}" || # WhatsApp phone + "#{value.dig('metadata', 'display_phone_number')}:#{value.dig('contacts', 0, 'user_id')}" # WhatsApp BSUID (fallback) end def get_capi_message_text(message) @@ -69,7 +70,8 @@ def store_capi_media(media_id, mime_type) def handle_capi_system_message(message) if message.dig('system', 'type') == 'user_changed_number' old_uid = "#{self.config['capi_phone_number']}:#{message['from']}" - new_uid = "#{self.config['capi_phone_number']}:#{message['system']['wa_id']}" + new_uid = "#{self.config['capi_phone_number']}:#{message['system']['wa_id']}" || + "#{self.config['capi_phone_number']}:#{message['system']['user_id']}" TiplineSubscription.where(uid: old_uid).find_each do |subscription| subscription.uid = new_uid subscription.save! From 6d7c81bd4bae46d55ab70affa8c2eb9fc8f4a47d Mon Sep 17 00:00:00 2001 From: Sawy Date: Fri, 15 May 2026 17:38:17 +0300 Subject: [PATCH 2/2] CV2-6650: fix tests --- app/models/concerns/smooch_capi.rb | 9 +++++---- test/models/concerns/smooch_capi_test.rb | 10 ++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/models/concerns/smooch_capi.rb b/app/models/concerns/smooch_capi.rb index ed13255b4..2f51ed9a0 100644 --- a/app/models/concerns/smooch_capi.rb +++ b/app/models/concerns/smooch_capi.rb @@ -39,8 +39,9 @@ def capi_api_get_user_data(uid, payload) end def get_capi_uid(value) - "#{value.dig('metadata', 'display_phone_number')}:#{value.dig('contacts', 0, 'wa_id')}" || # WhatsApp phone - "#{value.dig('metadata', 'display_phone_number')}:#{value.dig('contacts', 0, 'user_id')}" # WhatsApp BSUID (fallback) + # Get WhatsApp phone and fallback to WhatsApp BSUID + user_id = value.dig('contacts', 0, 'wa_id') || value.dig('contacts', 0, 'user_id') + "#{value.dig('metadata', 'display_phone_number')}:#{user_id}" end def get_capi_message_text(message) @@ -70,8 +71,8 @@ def store_capi_media(media_id, mime_type) def handle_capi_system_message(message) if message.dig('system', 'type') == 'user_changed_number' old_uid = "#{self.config['capi_phone_number']}:#{message['from']}" - new_uid = "#{self.config['capi_phone_number']}:#{message['system']['wa_id']}" || - "#{self.config['capi_phone_number']}:#{message['system']['user_id']}" + user_id = message['system']['wa_id'] || message['system']['user_id'] + new_uid = "#{self.config['capi_phone_number']}:#{user_id}" TiplineSubscription.where(uid: old_uid).find_each do |subscription| subscription.uid = new_uid subscription.save! diff --git a/test/models/concerns/smooch_capi_test.rb b/test/models/concerns/smooch_capi_test.rb index 2a9f9d327..89fc2eb19 100644 --- a/test/models/concerns/smooch_capi_test.rb +++ b/test/models/concerns/smooch_capi_test.rb @@ -164,6 +164,16 @@ def teardown assert_equal 'message:appUser', preprocessed_message[:trigger] end + test 'should preprocess incoming text and fallback to user_id' do + payload = JSON.parse(@incoming_text_message_payload.clone) + payload['entry'][0]['changes'][0]['value']['contacts'][0]['wa_id'] = nil + payload['entry'][0]['changes'][0]['value']['contacts'][0]['user_id'] = 'id:654321' + preprocessed_message = Bot::Smooch.preprocess_message(payload.to_json) + # Verify _id and authId include user_id when wa_id is nil + assert_equal "123456:id:654321", preprocessed_message.dig('appUser', '_id') + assert_equal "123456:id:654321", preprocessed_message.dig('messages', 0, 'authorId') + end + test 'should preprocess message delivery event' do preprocessed_message = Bot::Smooch.preprocess_message(@message_delivery_payload) assert_equal @uid, preprocessed_message.dig('appUser', '_id')