Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/models/concerns/smooch_capi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +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')}"
# 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)
Expand Down Expand Up @@ -69,7 +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']}"
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!
Expand Down
10 changes: 10 additions & 0 deletions test/models/concerns/smooch_capi_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
Loading