diff --git a/app/services/twilio/incoming_message_service.rb b/app/services/twilio/incoming_message_service.rb index 02a1636ed..5f6704ff6 100644 --- a/app/services/twilio/incoming_message_service.rb +++ b/app/services/twilio/incoming_message_service.rb @@ -119,7 +119,7 @@ class Twilio::IncomingMessageService { name: contact_name, phone_number: phone_number.presence, - additional_attributes: additional_attributes + additional_attributes: additional_attributes, phone_number_candidates: twilio_whatsapp_phone_number_candidates } end diff --git a/app/services/twilio/whatsapp_identifier_helper.rb b/app/services/twilio/whatsapp_identifier_helper.rb index 731823903..37af346cb 100644 --- a/app/services/twilio/whatsapp_identifier_helper.rb +++ b/app/services/twilio/whatsapp_identifier_helper.rb @@ -41,6 +41,13 @@ module Twilio::WhatsappIdentifierHelper Whatsapp::PhoneNumberNormalizationService.new(inbox).normalize_and_find_contact_by_provider("whatsapp:#{phone_number}", :twilio) end + def twilio_whatsapp_phone_number_candidates + return unless twilio_channel.whatsapp? && phone_number.present? + + candidates = Whatsapp::PhoneNumberNormalizationService.new(inbox).phone_number_candidates(phone_number.delete_prefix('+')).drop(1) + candidates.map { |candidate| "+#{candidate}" }.presence + end + def twilio_whatsapp_source_id(identifier) identifier = identifier.to_s return if identifier.blank? diff --git a/spec/services/twilio/incoming_message_service_spec.rb b/spec/services/twilio/incoming_message_service_spec.rb index dc30f6e62..be7ed5ed2 100644 --- a/spec/services/twilio/incoming_message_service_spec.rb +++ b/spec/services/twilio/incoming_message_service_spec.rb @@ -670,6 +670,24 @@ describe Twilio::IncomingMessageService do expect(whatsapp_twilio_channel.inbox.contact_inboxes.first.source_id).to eq('whatsapp:+5541988887777') end + it 'reuses an existing contact in new format when the inbox has no contact inbox' do + existing_contact = create(:contact, account: account, phone_number: '+5541988887777') + + params = { + SmsSid: 'SMxx', + From: 'whatsapp:+554188887777', + AccountSid: 'ACxxx', + MessagingServiceSid: whatsapp_twilio_channel.messaging_service_sid, + Body: 'Test message from Brazil', + ProfileName: 'João Silva' + } + + expect { described_class.new(params: params).perform }.not_to change(account.contacts, :count) + + contact_inbox = whatsapp_twilio_channel.inbox.contact_inboxes.find_by!(source_id: 'whatsapp:+554188887777') + expect(contact_inbox.contact).to eq(existing_contact) + end + it 'creates contact inbox with incoming number when no existing contact' do params = { SmsSid: 'SMxx',