@@ -7,26 +7,36 @@ class Whatsapp::IncomingMessageBaseService
|
||||
def perform
|
||||
processed_params
|
||||
|
||||
perform_statuses
|
||||
if processed_params[:statuses].present?
|
||||
process_statuses
|
||||
elsif processed_params[:messages].present?
|
||||
process_messages
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_message_by_source_id(source_id)
|
||||
return unless source_id
|
||||
|
||||
@message = Message.find_by(source_id: source_id)
|
||||
end
|
||||
|
||||
def process_messages
|
||||
# message allready exists so we don't need to process
|
||||
return if find_message_by_source_id(@processed_params[:messages].first[:id])
|
||||
|
||||
set_contact
|
||||
return unless @contact
|
||||
|
||||
set_conversation
|
||||
|
||||
perform_messages
|
||||
create_messages
|
||||
end
|
||||
|
||||
private
|
||||
def process_statuses
|
||||
return unless find_message_by_source_id(@processed_params[:statuses].first[:id])
|
||||
|
||||
def perform_statuses
|
||||
return if @processed_params[:statuses].blank?
|
||||
|
||||
status = @processed_params[:statuses].first
|
||||
@message = Message.find_by(source_id: status[:id])
|
||||
return unless @message
|
||||
|
||||
update_message_with_status(@message, status)
|
||||
update_message_with_status(@message, @processed_params[:statuses].first)
|
||||
end
|
||||
|
||||
def update_message_with_status(message, status)
|
||||
@@ -38,8 +48,8 @@ class Whatsapp::IncomingMessageBaseService
|
||||
message.save!
|
||||
end
|
||||
|
||||
def perform_messages
|
||||
return if @processed_params[:messages].blank? || unprocessable_message_type?
|
||||
def create_messages
|
||||
return if unprocessable_message_type?
|
||||
|
||||
@message = @conversation.messages.build(
|
||||
content: message_content(@processed_params[:messages].first),
|
||||
@@ -50,7 +60,7 @@ class Whatsapp::IncomingMessageBaseService
|
||||
source_id: @processed_params[:messages].first[:id].to_s
|
||||
)
|
||||
attach_files
|
||||
attach_location
|
||||
attach_location if message_type == 'location'
|
||||
@message.save!
|
||||
end
|
||||
|
||||
@@ -60,9 +70,7 @@ class Whatsapp::IncomingMessageBaseService
|
||||
|
||||
def message_content(message)
|
||||
# TODO: map interactive messages back to button messages in chatwoot
|
||||
message.dig(:text, :body) ||
|
||||
message.dig(:button, :text) ||
|
||||
message.dig(:interactive, :button_reply, :title) ||
|
||||
message.dig(:text, :body) || message.dig(:button, :text) || message.dig(:interactive, :button_reply, :title) ||
|
||||
message.dig(:interactive, :list_reply, :title)
|
||||
end
|
||||
|
||||
@@ -142,8 +150,6 @@ class Whatsapp::IncomingMessageBaseService
|
||||
end
|
||||
|
||||
def attach_location
|
||||
return unless @processed_params[:messages].first[:type] == 'location'
|
||||
|
||||
location = @processed_params[:messages].first['location']
|
||||
location_name = location['name'] ? "#{location['name']}, #{location['address']}" : ''
|
||||
@message.attachments.new(
|
||||
|
||||
Reference in New Issue
Block a user