fix: Change the message status to failed if the Twilio message delivery status is undelivered (#8097)

This commit is contained in:
Muhsin Keloth
2023-10-12 15:27:38 +05:30
committed by GitHub
parent 7c9884b853
commit bd918ee506
2 changed files with 11 additions and 4 deletions

View File

@@ -13,7 +13,7 @@ class Twilio::DeliveryStatusService
private private
def process_statuses def process_statuses
@message.status = params[:MessageStatus] @message.status = status
@message.external_error = external_error if error_occurred? @message.external_error = external_error if error_occurred?
@message.save! @message.save!
end end
@@ -22,6 +22,10 @@ class Twilio::DeliveryStatusService
%w[sent delivered read failed undelivered].include?(params[:MessageStatus]) %w[sent delivered read failed undelivered].include?(params[:MessageStatus])
end end
def status
params[:MessageStatus] == 'undelivered' ? 'failed' : params[:MessageStatus]
end
def external_error def external_error
return nil unless error_occurred? return nil unless error_occurred?

View File

@@ -59,21 +59,24 @@ describe Twilio::DeliveryStatusService do
expect(conversation.reload.messages.last.status).to eq('sent') expect(conversation.reload.messages.last.status).to eq('sent')
end end
it 'updates message status to failed if message status is failed' do it 'updates message status to failed if message status is undelivered' do
params = { params = {
SmsSid: 'SMxx', SmsSid: 'SMxx',
From: '+12345', From: '+12345',
AccountSid: 'ACxxx', AccountSid: 'ACxxx',
MessagingServiceSid: twilio_channel.messaging_service_sid, MessagingServiceSid: twilio_channel.messaging_service_sid,
MessageSid: conversation.messages.last.source_id, MessageSid: conversation.messages.last.source_id,
MessageStatus: 'failed' MessageStatus: 'undelivered',
ErrorCode: '30002',
ErrorMessage: 'Account suspended'
} }
described_class.new(params: params).perform described_class.new(params: params).perform
expect(conversation.reload.messages.last.status).to eq('failed') expect(conversation.reload.messages.last.status).to eq('failed')
expect(conversation.reload.messages.last.external_error).to eq('30002 - Account suspended')
end end
it 'updates message status to failed and updates the error message if message status is undelivered' do it 'updates message status to failed and updates the error message if message status is failed' do
params = { params = {
SmsSid: 'SMxx', SmsSid: 'SMxx',
From: '+12345', From: '+12345',