fix: Improve WhatsApp template message error handling (#12168)
WhatsApp template message errors were not being properly handled because the `@message instance` variable was only set in the `send_message` method but not in `send_template`. When template sending failed, the `handle_error` method couldn't update the message status due to the missing @message reference, resulting in silent failures with no user feedback.
This commit is contained in:
@@ -133,7 +133,8 @@ describe Whatsapp::OneoffCampaignService do
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
nil
|
||||
)
|
||||
|
||||
described_class.new(campaign: campaign).perform
|
||||
@@ -164,8 +165,8 @@ describe Whatsapp::OneoffCampaignService do
|
||||
|
||||
allow(whatsapp_channel).to receive(:send_template).and_return(nil)
|
||||
|
||||
expect(whatsapp_channel).to receive(:send_template).with(contact_error.phone_number, anything).and_raise(StandardError, error_message)
|
||||
expect(whatsapp_channel).to receive(:send_template).with(contact_success.phone_number, anything).once
|
||||
expect(whatsapp_channel).to receive(:send_template).with(contact_error.phone_number, anything, nil).and_raise(StandardError, error_message)
|
||||
expect(whatsapp_channel).to receive(:send_template).with(contact_success.phone_number, anything, nil).once
|
||||
|
||||
expect(Rails.logger).to receive(:error)
|
||||
.with("Failed to send WhatsApp template message to #{contact_error.phone_number}: #{error_message}")
|
||||
|
||||
@@ -187,7 +187,7 @@ describe Whatsapp::Providers::WhatsappCloudService do
|
||||
)
|
||||
.to_return(status: 200, body: whatsapp_response.to_json, headers: response_headers)
|
||||
|
||||
expect(service.send_template('+123456789', template_info)).to eq('message_id')
|
||||
expect(service.send_template('+123456789', template_info, message)).to eq('message_id')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -287,7 +287,7 @@ describe Whatsapp::Providers::WhatsappCloudService do
|
||||
context 'when there is a message' do
|
||||
it 'logs error and updates message status' do
|
||||
service.instance_variable_set(:@message, message)
|
||||
service.send(:handle_error, error_response_object)
|
||||
service.send(:handle_error, error_response_object, message)
|
||||
|
||||
expect(message.reload.status).to eq('failed')
|
||||
expect(message.reload.external_error).to eq(error_message)
|
||||
@@ -305,7 +305,7 @@ describe Whatsapp::Providers::WhatsappCloudService do
|
||||
|
||||
it 'logs error but does not update message' do
|
||||
service.instance_variable_set(:@message, message)
|
||||
service.send(:handle_error, error_response_object)
|
||||
service.send(:handle_error, error_response_object, message)
|
||||
|
||||
expect(message.reload.status).not_to eq('failed')
|
||||
expect(message.reload.external_error).to be_nil
|
||||
|
||||
Reference in New Issue
Block a user