diff --git a/app/jobs/webhooks/twilio_delivery_status_job.rb b/app/jobs/webhooks/twilio_delivery_status_job.rb index 324a17e94..d57946b4c 100644 --- a/app/jobs/webhooks/twilio_delivery_status_job.rb +++ b/app/jobs/webhooks/twilio_delivery_status_job.rb @@ -2,7 +2,6 @@ class Webhooks::TwilioDeliveryStatusJob < ApplicationJob queue_as :low def perform(params = {}) - # Process the Twilio delivery status webhook event in the background ::Twilio::DeliveryStatusService.new(params: params).perform end end diff --git a/app/jobs/webhooks/twilio_events_job.rb b/app/jobs/webhooks/twilio_events_job.rb index cd430a6eb..5f44d981b 100644 --- a/app/jobs/webhooks/twilio_events_job.rb +++ b/app/jobs/webhooks/twilio_events_job.rb @@ -2,7 +2,10 @@ class Webhooks::TwilioEventsJob < ApplicationJob queue_as :low def perform(params = {}) - # Process the Twilio webhook event in the background + # Skip processing if Body parameter or MediaUrl0 is not present + # This is to skip processing delivery events being delivered to this endpoint + return if params[:Body].blank? && params[:MediaUrl0].blank? + ::Twilio::IncomingMessageService.new(params: params).perform end end diff --git a/spec/jobs/webhooks/twilio_events_job_spec.rb b/spec/jobs/webhooks/twilio_events_job_spec.rb index 4eea87d6a..f42caf675 100644 --- a/spec/jobs/webhooks/twilio_events_job_spec.rb +++ b/spec/jobs/webhooks/twilio_events_job_spec.rb @@ -5,11 +5,11 @@ RSpec.describe Webhooks::TwilioEventsJob do let(:params) do { - 'From' => '+1234567890', - 'To' => '+0987654321', - 'Body' => 'Test message', - 'AccountSid' => 'AC123', - 'SmsSid' => 'SM123' + From: '+1234567890', + To: '+0987654321', + Body: 'Test message', + AccountSid: 'AC123', + SmsSid: 'SM123' } end @@ -23,6 +23,60 @@ RSpec.describe Webhooks::TwilioEventsJob do service = double expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service) expect(service).to receive(:perform) - described_class.new.perform(params) + described_class.perform_now(params) + end + + context 'when Body parameter or MediaUrl0 is not present' do + let(:params_without_body) do + { + From: '+1234567890', + To: '+0987654321', + AccountSid: 'AC123', + SmsSid: 'SM123' + } + end + + it 'does not process the event' do + expect(Twilio::IncomingMessageService).not_to receive(:new) + described_class.perform_now(params_without_body) + end + end + + context 'when Body parameter is present' do + let(:params_with_body) do + { + From: '+1234567890', + To: '+0987654321', + Body: 'Test message', + AccountSid: 'AC123', + SmsSid: 'SM123' + } + end + + it 'processes the event' do + service = double + expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_body).and_return(service) + expect(service).to receive(:perform) + described_class.perform_now(params_with_body) + end + end + + context 'when MediaUrl0 parameter is present' do + let(:params_with_media) do + { + From: '+1234567890', + To: '+0987654321', + MediaUrl0: 'https://example.com/media.jpg', + AccountSid: 'AC123', + SmsSid: 'SM123' + } + end + + it 'processes the event' do + service = double + expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_media).and_return(service) + expect(service).to receive(:perform) + described_class.perform_now(params_with_media) + end end end