Skip to content

Commit 482bcda

Browse files
author
Caitano28
committed
Create fallback for missing WhatsApp edit originals
1 parent af0ded5 commit 482bcda

2 files changed

Lines changed: 33 additions & 3 deletions

File tree

app/services/whatsapp/incoming_message_base_service.rb

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ def process_message_edit
172172

173173
original_message = inbox.messages.find_by(source_id: original_source_id)
174174
unless original_message
175-
Rails.logger.info("[WHATSAPP] Message edit ignored because original was not found original_source_id=#{original_source_id} event_id=#{message[:id]}")
175+
Rails.logger.info("[WHATSAPP] Message edit fallback creating missing original original_source_id=#{original_source_id} event_id=#{message[:id]}")
176+
create_message_from_edit_fallback(message, original_source_id)
176177
return true
177178
end
178179

@@ -192,6 +193,28 @@ def process_message_edit
192193
true
193194
end
194195

196+
def create_message_from_edit_fallback(message, original_source_id)
197+
set_message_type
198+
set_contact
199+
return unless @contact
200+
return if @contact.blocked? && !outgoing_echo
201+
202+
ActiveRecord::Base.transaction do
203+
set_conversation
204+
create_message(message, source_id: original_source_id)
205+
@message.content_attributes = (@message.content_attributes || {}).merge(
206+
'edited' => true,
207+
'edit_event_id' => message[:id],
208+
'edited_at' => Time.current.utc.iso8601,
209+
'edit_missing_original_fallback' => true
210+
)
211+
@message.content_attributes['edit_timestamp'] = message[:edit_timestamp] if message[:edit_timestamp].present?
212+
attach_files
213+
attach_location if message_type == 'location'
214+
@message.save!
215+
end
216+
end
217+
195218
def message_edit_event?
196219
message = messages_data&.first
197220
message.present? && message[:message_type].to_s == 'message_edit'

spec/services/whatsapp/incoming_message_whatsapp_cloud_service_spec.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,17 @@
395395
expect(original_message.content_attributes['existing']).to be true
396396
end
397397

398-
it 'does not create a new message when the edited original message is missing' do
398+
it 'creates a fallback message when the edited original message is missing' do
399399
expect do
400400
described_class.new(inbox: whatsapp_channel.inbox, params: edited_params).perform
401-
end.not_to change(whatsapp_channel.inbox.messages, :count)
401+
end.to change(whatsapp_channel.inbox.messages, :count).by(1)
402+
403+
fallback_message = whatsapp_channel.inbox.messages.find_by!(source_id: original_source_id)
404+
expect(fallback_message.content).to eq('Edited message body')
405+
expect(fallback_message.content_attributes['edited']).to be true
406+
expect(fallback_message.content_attributes['edit_event_id']).to eq(edit_event_id)
407+
expect(fallback_message.content_attributes['edit_timestamp']).to eq('1770407830000')
408+
expect(fallback_message.content_attributes['edit_missing_original_fallback']).to be true
402409
end
403410
end
404411

0 commit comments

Comments
 (0)