diff --git a/app/services/twilio/send_on_twilio_service.rb b/app/services/twilio/send_on_twilio_service.rb index 0a76dac66..8ebd0178f 100644 --- a/app/services/twilio/send_on_twilio_service.rb +++ b/app/services/twilio/send_on_twilio_service.rb @@ -8,8 +8,9 @@ class Twilio::SendOnTwilioService < Base::SendOnChannelService def perform_reply begin twilio_message = channel.send_message(**message_params) - rescue Twilio::REST::TwilioError => e + rescue Twilio::REST::TwilioError, Twilio::REST::RestError => e ChatwootExceptionTracker.new(e, user: message.sender, account: message.account).capture_exception + message.update!(status: :failed, external_error: e.message) end message.update!(source_id: twilio_message.sid) if twilio_message end diff --git a/spec/services/twilio/send_on_twilio_service_spec.rb b/spec/services/twilio/send_on_twilio_service_spec.rb index 9579dd840..beae54b57 100644 --- a/spec/services/twilio/send_on_twilio_service_spec.rb +++ b/spec/services/twilio/send_on_twilio_service_spec.rb @@ -96,5 +96,15 @@ describe Twilio::SendOnTwilioService do described_class.new(message: message).perform expect(messages_double).to have_received(:create).with(hash_including(media_url: [anything])) end + + it 'if message is sent from chatwoot fails' do + allow(messages_double).to receive(:create).and_raise(Twilio::REST::TwilioError) + + outgoing_message = create( + :message, message_type: 'outgoing', inbox: twilio_inbox, account: account, conversation: conversation + ) + described_class.new(message: outgoing_message).perform + expect(outgoing_message.reload.status).to eq('failed') + end end end