fix(whatsapp): reuse Brazil contacts for Twilio

This commit is contained in:
Muhsin
2026-07-22 15:12:33 +04:00
parent 64ec41cc86
commit 466d01aec4
3 changed files with 26 additions and 1 deletions
@@ -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
@@ -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?
@@ -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',