mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class Integrations::Facebook::DeliveryStatus
 | 
						|
  pattr_initialize [:params!]
 | 
						|
 | 
						|
  def perform
 | 
						|
    return if facebook_channel.blank?
 | 
						|
    return unless conversation
 | 
						|
 | 
						|
    process_delivery_status if params.delivery_watermark
 | 
						|
    process_read_status if params.read_watermark
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def process_delivery_status
 | 
						|
    timestamp = Time.zone.at(params.delivery_watermark.to_i).to_datetime.utc
 | 
						|
    ::Conversations::UpdateMessageStatusJob.perform_later(conversation.id, timestamp, :delivered)
 | 
						|
  end
 | 
						|
 | 
						|
  def process_read_status
 | 
						|
    timestamp = Time.zone.at(params.read_watermark.to_i).to_datetime.utc
 | 
						|
    ::Conversations::UpdateMessageStatusJob.perform_later(conversation.id, timestamp, :read)
 | 
						|
  end
 | 
						|
 | 
						|
  def contact
 | 
						|
    ::ContactInbox.find_by(source_id: params.sender_id)&.contact
 | 
						|
  end
 | 
						|
 | 
						|
  def conversation
 | 
						|
    @conversation ||= ::Conversation.find_by(contact_id: contact.id) if contact.present?
 | 
						|
  end
 | 
						|
 | 
						|
  def facebook_channel
 | 
						|
    @facebook_channel ||= Channel::FacebookPage.find_by(page_id: params.recipient_id)
 | 
						|
  end
 | 
						|
end
 |