File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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'
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments