Fix: Handled IG unsupported file type (#5650)
We get 'unsupported_type' in the web-hook event only when Instagram faces issues processing the attachments. https://developers.facebook.com/docs/messenger-platform/instagram/features/webhook/ according to their document, we are handling the given types and are ignoring this one for now. Fixes: #5428
This commit is contained in:
parent
199f462af4
commit
ceaffe862a
3 changed files with 42 additions and 1 deletions
|
@ -72,6 +72,7 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
|
||||||
|
|
||||||
def build_message
|
def build_message
|
||||||
return if @outgoing_echo && already_sent_from_chatwoot?
|
return if @outgoing_echo && already_sent_from_chatwoot?
|
||||||
|
return if message_content.blank? && all_unsupported_files?
|
||||||
|
|
||||||
@message = conversation.messages.create!(message_params)
|
@message = conversation.messages.create!(message_params)
|
||||||
|
|
||||||
|
@ -117,6 +118,13 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
|
||||||
cw_message.present?
|
cw_message.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def all_unsupported_files?
|
||||||
|
return if attachments.empty?
|
||||||
|
|
||||||
|
attachments_type = attachments.pluck(:type).uniq.first
|
||||||
|
unsupported_file_type?(attachments_type)
|
||||||
|
end
|
||||||
|
|
||||||
### Sample response
|
### Sample response
|
||||||
# {
|
# {
|
||||||
# "object": "instagram",
|
# "object": "instagram",
|
||||||
|
|
|
@ -2,7 +2,8 @@ class Messages::Messenger::MessageBuilder
|
||||||
include ::FileTypeHelper
|
include ::FileTypeHelper
|
||||||
|
|
||||||
def process_attachment(attachment)
|
def process_attachment(attachment)
|
||||||
return if attachment['type'].to_sym == :template
|
# This check handles very rare case if there are multiple files to attach with only one usupported file
|
||||||
|
return if unsupported_file_type?(attachment['type'])
|
||||||
|
|
||||||
attachment_obj = @message.attachments.new(attachment_params(attachment).except(:remote_file_url))
|
attachment_obj = @message.attachments.new(attachment_params(attachment).except(:remote_file_url))
|
||||||
attachment_obj.save!
|
attachment_obj.save!
|
||||||
|
@ -80,4 +81,10 @@ class Messages::Messenger::MessageBuilder
|
||||||
ChatwootExceptionTracker.new(e, account: @inbox.account).capture_exception
|
ChatwootExceptionTracker.new(e, account: @inbox.account).capture_exception
|
||||||
{}
|
{}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def unsupported_file_type?(attachment_type)
|
||||||
|
[:template, :unsupported_type].include? attachment_type.to_sym
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -70,5 +70,31 @@ describe ::Messages::Instagram::MessageBuilder do
|
||||||
expect(message.content).to eq('This story is no longer available.')
|
expect(message.content).to eq('This story is no longer available.')
|
||||||
expect(message.attachments.count).to eq(1)
|
expect(message.attachments.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'does not create message for unsupported file type' do
|
||||||
|
allow(Koala::Facebook::API).to receive(:new).and_return(fb_object)
|
||||||
|
allow(fb_object).to receive(:get_object).and_return(
|
||||||
|
{
|
||||||
|
name: 'Jane',
|
||||||
|
id: 'Sender-id-1',
|
||||||
|
account_id: instagram_inbox.account_id,
|
||||||
|
profile_pic: 'https://chatwoot-assets.local/sample.png'
|
||||||
|
}.with_indifferent_access
|
||||||
|
)
|
||||||
|
story_mention_params[:entry][0][:messaging][0]['message']['attachments'][0]['type'] = 'unsupported_type'
|
||||||
|
messaging = story_mention_params[:entry][0][:messaging][0]
|
||||||
|
contact_inbox
|
||||||
|
described_class.new(messaging, instagram_inbox, outgoing_echo: false).perform
|
||||||
|
|
||||||
|
instagram_inbox.reload
|
||||||
|
|
||||||
|
# we would have contact created but message and attachments won't be created
|
||||||
|
expect(instagram_inbox.conversations.count).to be 0
|
||||||
|
expect(instagram_inbox.messages.count).to be 0
|
||||||
|
|
||||||
|
contact = instagram_channel.inbox.contacts.first
|
||||||
|
|
||||||
|
expect(contact.name).to eq('Jane Dae')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue