mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	Bug: Instagram render template message twice (#3313)
This commit is contained in:
		| @@ -38,6 +38,10 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder | |||||||
|     @outgoing_echo ? :outgoing : :incoming |     @outgoing_echo ? :outgoing : :incoming | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def message_identifier | ||||||
|  |     message[:mid] | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def message_source_id |   def message_source_id | ||||||
|     @outgoing_echo ? recipient_id : sender_id |     @outgoing_echo ? recipient_id : sender_id | ||||||
|   end |   end | ||||||
| @@ -66,10 +70,6 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder | |||||||
|     @messaging[:message][:text] |     @messaging[:message][:text] | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def content_attributes |  | ||||||
|     { message_id: @messaging[:message][:mid] } |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   def build_message |   def build_message | ||||||
|     return if @outgoing_echo && already_sent_from_chatwoot? |     return if @outgoing_echo && already_sent_from_chatwoot? | ||||||
|  |  | ||||||
| @@ -103,22 +103,17 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder | |||||||
|       account_id: conversation.account_id, |       account_id: conversation.account_id, | ||||||
|       inbox_id: conversation.inbox_id, |       inbox_id: conversation.inbox_id, | ||||||
|       message_type: message_type, |       message_type: message_type, | ||||||
|       source_id: message_source_id, |       source_id: message_identifier, | ||||||
|       content: message_content, |       content: message_content, | ||||||
|       content_attributes: content_attributes, |  | ||||||
|       sender: @outgoing_echo ? nil : contact |       sender: @outgoing_echo ? nil : contact | ||||||
|     } |     } | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def already_sent_from_chatwoot? |   def already_sent_from_chatwoot? | ||||||
|     cw_message = conversation.messages.where( |     cw_message = conversation.messages.where( | ||||||
|       source_id: nil, |       source_id: @messaging[:message][:mid] | ||||||
|       message_type: 'outgoing', |  | ||||||
|       content: message_content, |  | ||||||
|       private: false, |  | ||||||
|       status: :sent |  | ||||||
|     ).first |     ).first | ||||||
|     cw_message.update(content_attributes: content_attributes) if cw_message.present? |  | ||||||
|     cw_message.present? |     cw_message.present? | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -63,9 +63,10 @@ class Instagram::SendOnInstagramService < Base::SendOnChannelService | |||||||
|       query: query |       query: query | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     Rails.logger.info("Instagram response: #{response} : #{message_content}") if response[:body] |     Rails.logger.info("Instagram response: #{response['error']} : #{message_content}") if response['error'] | ||||||
|  |     message.update!(source_id: response['message_id']) if response['message_id'].present? | ||||||
|  |  | ||||||
|     response[:body] |     response | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def calculate_app_secret_proof(app_secret, access_token) |   def calculate_app_secret_proof(app_secret, access_token) | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ describe Instagram::SendOnInstagramService do | |||||||
|         allow(Facebook::Messenger::Configuration::AppSecretProofCalculator).to receive(:call).and_return('app_secret_key', 'access_token') |         allow(Facebook::Messenger::Configuration::AppSecretProofCalculator).to receive(:call).and_return('app_secret_key', 'access_token') | ||||||
|         allow(HTTParty).to receive(:post).and_return( |         allow(HTTParty).to receive(:post).and_return( | ||||||
|           { |           { | ||||||
|             body: { recipient: { id: contact_inbox.source_id } } |             'message_id': 'anyrandommessageid1234567890' | ||||||
|           } |           } | ||||||
|         ) |         ) | ||||||
|       end |       end | ||||||
| @@ -29,7 +29,8 @@ describe Instagram::SendOnInstagramService do | |||||||
|       it 'if message is sent from chatwoot and is outgoing' do |       it 'if message is sent from chatwoot and is outgoing' do | ||||||
|         message = create(:message, message_type: 'outgoing', inbox: instagram_inbox, account: account, conversation: conversation) |         message = create(:message, message_type: 'outgoing', inbox: instagram_inbox, account: account, conversation: conversation) | ||||||
|         response = ::Instagram::SendOnInstagramService.new(message: message).perform |         response = ::Instagram::SendOnInstagramService.new(message: message).perform | ||||||
|         expect(response).to eq({ recipient: { id: contact_inbox.source_id } }) |  | ||||||
|  |         expect(response).to eq({  message_id: 'anyrandommessageid1234567890' }) | ||||||
|       end |       end | ||||||
|  |  | ||||||
|       it 'if message with attachment is sent from chatwoot and is outgoing' do |       it 'if message with attachment is sent from chatwoot and is outgoing' do | ||||||
| @@ -38,7 +39,8 @@ describe Instagram::SendOnInstagramService do | |||||||
|         attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png') |         attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png') | ||||||
|         message.save! |         message.save! | ||||||
|         response = ::Instagram::SendOnInstagramService.new(message: message).perform |         response = ::Instagram::SendOnInstagramService.new(message: message).perform | ||||||
|         expect(response).to eq({ recipient: { id: contact_inbox.source_id } }) |  | ||||||
|  |         expect(response).to eq({ message_id: 'anyrandommessageid1234567890' }) | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tejaswini Chile
					Tejaswini Chile