feat: Handle Facebook send message/attachments errors (#8197)
This commit is contained in:
@@ -15,7 +15,9 @@ class Facebook::SendOnFacebookService < Base::SendOnChannelService
|
|||||||
|
|
||||||
def send_message_to_facebook(delivery_params)
|
def send_message_to_facebook(delivery_params)
|
||||||
result = Facebook::Messenger::Bot.deliver(delivery_params, page_id: channel.page_id)
|
result = Facebook::Messenger::Bot.deliver(delivery_params, page_id: channel.page_id)
|
||||||
message.update!(source_id: JSON.parse(result)['message_id'])
|
parsed_result = JSON.parse(result)
|
||||||
|
message.update!(status: :failed, external_error: external_error(parsed_result)) if parsed_result['error'].present?
|
||||||
|
message.update!(source_id: parsed_result['message_id']) if parsed_result['message_id'].present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def fb_text_message_params
|
def fb_text_message_params
|
||||||
@@ -27,6 +29,14 @@ class Facebook::SendOnFacebookService < Base::SendOnChannelService
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def external_error(response)
|
||||||
|
# https://developers.facebook.com/docs/graph-api/guides/error-handling/
|
||||||
|
error_message = response['error']['message']
|
||||||
|
error_code = response['error']['code']
|
||||||
|
|
||||||
|
"#{error_code} - #{error_message}"
|
||||||
|
end
|
||||||
|
|
||||||
def fb_attachment_message_params
|
def fb_attachment_message_params
|
||||||
attachment = message.attachments.first
|
attachment = message.attachments.first
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -87,6 +87,15 @@ describe Facebook::SendOnFacebookService do
|
|||||||
tag: 'ACCOUNT_UPDATE'
|
tag: 'ACCOUNT_UPDATE'
|
||||||
}, { page_id: facebook_channel.page_id })
|
}, { page_id: facebook_channel.page_id })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'if message sent from chatwoot is failed' do
|
||||||
|
message = create(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, conversation: conversation)
|
||||||
|
allow(bot).to receive(:deliver).and_return({ error: { message: 'Invalid OAuth access token.', type: 'OAuthException', code: 190,
|
||||||
|
fbtrace_id: 'BLBz/WZt8dN' } }.to_json)
|
||||||
|
described_class.new(message: message).perform
|
||||||
|
expect(bot).to have_received(:deliver)
|
||||||
|
expect(message.reload.status).to eq('failed')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user