fix: Stop raising errors for unsupported Whatsapp messages (#5541)
- Handle unsupported Whatsapp messages
This commit is contained in:
parent
8f4944fda0
commit
a533f43fbf
2 changed files with 58 additions and 1 deletions
|
@ -12,7 +12,7 @@ class Whatsapp::IncomingMessageBaseService
|
||||||
|
|
||||||
set_conversation
|
set_conversation
|
||||||
|
|
||||||
return if @processed_params[:messages].blank?
|
return if @processed_params[:messages].blank? || unprocessable_message_type?
|
||||||
|
|
||||||
@message = @conversation.messages.build(
|
@message = @conversation.messages.build(
|
||||||
content: message_content(@processed_params[:messages].first),
|
content: message_content(@processed_params[:messages].first),
|
||||||
|
@ -86,6 +86,10 @@ class Whatsapp::IncomingMessageBaseService
|
||||||
@processed_params[:messages].first[:type]
|
@processed_params[:messages].first[:type]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def unprocessable_message_type?
|
||||||
|
%w[reaction contacts].include?(message_type)
|
||||||
|
end
|
||||||
|
|
||||||
def attach_files
|
def attach_files
|
||||||
return if %w[text button interactive].include?(message_type)
|
return if %w[text button interactive].include?(message_type)
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,59 @@ RSpec.describe Webhooks::WhatsappEventsJob, type: :job do
|
||||||
job.perform_now(wb_params)
|
job.perform_now(wb_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'Ignore reaction type message and stop raising error' do
|
||||||
|
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
||||||
|
validate_provider_config: false)
|
||||||
|
wb_params = {
|
||||||
|
phone_number: channel.phone_number,
|
||||||
|
object: 'whatsapp_business_account',
|
||||||
|
entry: [{
|
||||||
|
changes: [{
|
||||||
|
value: {
|
||||||
|
contacts: [{ profile: { name: 'Test Test' }, wa_id: '1111981136571' }],
|
||||||
|
messages: [{
|
||||||
|
from: '1111981136571', reaction: { emoji: '👍' }, timestamp: '1664799904', type: 'reaction'
|
||||||
|
}],
|
||||||
|
metadata: {
|
||||||
|
phone_number_id: other_channel.provider_config['phone_number_id'],
|
||||||
|
display_phone_number: other_channel.phone_number.delete('+')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}.with_indifferent_access
|
||||||
|
expect do
|
||||||
|
Whatsapp::IncomingMessageWhatsappCloudService.new(inbox: other_channel.inbox, params: wb_params).perform
|
||||||
|
end.not_to change(Message, :count)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'Ignore contacts type message and stop raising error' do
|
||||||
|
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
||||||
|
validate_provider_config: false)
|
||||||
|
wb_params = {
|
||||||
|
phone_number: channel.phone_number,
|
||||||
|
object: 'whatsapp_business_account',
|
||||||
|
entry: [{
|
||||||
|
changes: [{
|
||||||
|
value: {
|
||||||
|
contacts: [{ profile: { name: 'Test Test' }, wa_id: '1111981136571' }],
|
||||||
|
messages: [{ from: '1111981136571',
|
||||||
|
contacts: [{ phones: [{ phone: '+1987654' }], name: { first_name: 'contact name' } }],
|
||||||
|
timestamp: '1664799904',
|
||||||
|
type: 'contacts' }],
|
||||||
|
metadata: {
|
||||||
|
phone_number_id: other_channel.provider_config['phone_number_id'],
|
||||||
|
display_phone_number: other_channel.phone_number.delete('+')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}.with_indifferent_access
|
||||||
|
expect do
|
||||||
|
Whatsapp::IncomingMessageWhatsappCloudService.new(inbox: other_channel.inbox, params: wb_params).perform
|
||||||
|
end.not_to change(Message, :count)
|
||||||
|
end
|
||||||
|
|
||||||
it 'will not enque Whatsapp::IncomingMessageWhatsappCloudService when invalid phone number id' do
|
it 'will not enque Whatsapp::IncomingMessageWhatsappCloudService when invalid phone number id' do
|
||||||
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
||||||
validate_provider_config: false)
|
validate_provider_config: false)
|
||||||
|
|
Loading…
Reference in a new issue