feat: discard Twilio events when Body parameter is not present (#11096)

- Discard Twilio events when body parameter is not present.

---------

Co-authored-by: Pranav <pranavrajs@gmail.com>
This commit is contained in:
Sojan Jose
2025-03-17 00:17:11 -07:00
committed by GitHub
parent bf5e4a92dd
commit 991b108a35
3 changed files with 64 additions and 8 deletions

View File

@@ -2,7 +2,6 @@ class Webhooks::TwilioDeliveryStatusJob < ApplicationJob
queue_as :low queue_as :low
def perform(params = {}) def perform(params = {})
# Process the Twilio delivery status webhook event in the background
::Twilio::DeliveryStatusService.new(params: params).perform ::Twilio::DeliveryStatusService.new(params: params).perform
end end
end end

View File

@@ -2,7 +2,10 @@ class Webhooks::TwilioEventsJob < ApplicationJob
queue_as :low queue_as :low
def perform(params = {}) 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 ::Twilio::IncomingMessageService.new(params: params).perform
end end
end end

View File

@@ -5,11 +5,11 @@ RSpec.describe Webhooks::TwilioEventsJob do
let(:params) do let(:params) do
{ {
'From' => '+1234567890', From: '+1234567890',
'To' => '+0987654321', To: '+0987654321',
'Body' => 'Test message', Body: 'Test message',
'AccountSid' => 'AC123', AccountSid: 'AC123',
'SmsSid' => 'SM123' SmsSid: 'SM123'
} }
end end
@@ -23,6 +23,60 @@ RSpec.describe Webhooks::TwilioEventsJob do
service = double service = double
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service) expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service)
expect(service).to receive(:perform) 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
end end