feat: Save in_reply_to from WhatsApp messages (#6964)
This commit is contained in:
@@ -72,7 +72,7 @@ class Message < ApplicationRecord
|
|||||||
# [:external_error : Can specify if the message creation failed due to an error at external API
|
# [:external_error : Can specify if the message creation failed due to an error at external API
|
||||||
store :content_attributes, accessors: [:submitted_email, :items, :submitted_values, :email, :in_reply_to, :deleted,
|
store :content_attributes, accessors: [:submitted_email, :items, :submitted_values, :email, :in_reply_to, :deleted,
|
||||||
:external_created_at, :story_sender, :story_id, :external_error,
|
:external_created_at, :story_sender, :story_id, :external_error,
|
||||||
:translations], coder: JSON
|
:translations, :in_reply_to_external_id], coder: JSON
|
||||||
|
|
||||||
store :external_source_ids, accessors: [:slack], coder: JSON, prefix: :external_source_id
|
store :external_source_ids, accessors: [:slack], coder: JSON, prefix: :external_source_id
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,6 @@ class Whatsapp::IncomingMessageBaseService
|
|||||||
|
|
||||||
private
|
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
|
def process_messages
|
||||||
# message allready exists so we don't need to process
|
# message allready exists so we don't need to process
|
||||||
return if find_message_by_source_id(@processed_params[:messages].first[:id])
|
return if find_message_by_source_id(@processed_params[:messages].first[:id])
|
||||||
@@ -58,6 +52,7 @@ class Whatsapp::IncomingMessageBaseService
|
|||||||
message = @processed_params[:messages].first
|
message = @processed_params[:messages].first
|
||||||
log_error(message) && return if error_webhook_event?(message)
|
log_error(message) && return if error_webhook_event?(message)
|
||||||
|
|
||||||
|
process_in_reply_to(message)
|
||||||
if message_type == 'contacts'
|
if message_type == 'contacts'
|
||||||
create_contact_messages(message)
|
create_contact_messages(message)
|
||||||
else
|
else
|
||||||
@@ -143,7 +138,9 @@ class Whatsapp::IncomingMessageBaseService
|
|||||||
inbox_id: @inbox.id,
|
inbox_id: @inbox.id,
|
||||||
message_type: :incoming,
|
message_type: :incoming,
|
||||||
sender: @contact,
|
sender: @contact,
|
||||||
source_id: message[:id].to_s
|
source_id: message[:id].to_s,
|
||||||
|
in_reply_to_external_id: @in_reply_to_external_id,
|
||||||
|
in_reply_to: @in_reply_to
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -86,4 +86,22 @@ module Whatsapp::IncomingMessageServiceHelpers
|
|||||||
def log_error(message)
|
def log_error(message)
|
||||||
Rails.logger.warn "Whatsapp Error: #{message['errors'][0]['title']} - contact: #{message['from']}"
|
Rails.logger.warn "Whatsapp Error: #{message['errors'][0]['title']} - contact: #{message['from']}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def process_in_reply_to(message)
|
||||||
|
return if message['context'].blank?
|
||||||
|
|
||||||
|
@in_reply_to_external_id = message['context']['id']
|
||||||
|
|
||||||
|
return if @in_reply_to_external_id.blank?
|
||||||
|
|
||||||
|
in_reply_to_message = Message.find_by(source_id: @in_reply_to_external_id)
|
||||||
|
|
||||||
|
@in_reply_to = in_reply_to_message.id if in_reply_to_message.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_message_by_source_id(source_id)
|
||||||
|
return unless source_id
|
||||||
|
|
||||||
|
@message = Message.find_by(source_id: source_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user