From 474e65f4c8fc07494496fcd3e04dbcde2e1db1e6 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Sun, 23 Apr 2023 18:28:14 -0700 Subject: [PATCH] feat: Save in_reply_to from WhatsApp messages (#6964) --- app/models/message.rb | 2 +- .../whatsapp/incoming_message_base_service.rb | 11 ++++------- .../incoming_message_service_helpers.rb | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/models/message.rb b/app/models/message.rb index 156b70240..1b1bd1479 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -72,7 +72,7 @@ class Message < ApplicationRecord # [: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, :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 diff --git a/app/services/whatsapp/incoming_message_base_service.rb b/app/services/whatsapp/incoming_message_base_service.rb index af90abdde..15357f75b 100644 --- a/app/services/whatsapp/incoming_message_base_service.rb +++ b/app/services/whatsapp/incoming_message_base_service.rb @@ -18,12 +18,6 @@ class Whatsapp::IncomingMessageBaseService 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]) @@ -58,6 +52,7 @@ class Whatsapp::IncomingMessageBaseService message = @processed_params[:messages].first log_error(message) && return if error_webhook_event?(message) + process_in_reply_to(message) if message_type == 'contacts' create_contact_messages(message) else @@ -143,7 +138,9 @@ class Whatsapp::IncomingMessageBaseService inbox_id: @inbox.id, message_type: :incoming, 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 diff --git a/app/services/whatsapp/incoming_message_service_helpers.rb b/app/services/whatsapp/incoming_message_service_helpers.rb index 099f9e88f..a5226fbab 100644 --- a/app/services/whatsapp/incoming_message_service_helpers.rb +++ b/app/services/whatsapp/incoming_message_service_helpers.rb @@ -86,4 +86,22 @@ module Whatsapp::IncomingMessageServiceHelpers def log_error(message) Rails.logger.warn "Whatsapp Error: #{message['errors'][0]['title']} - contact: #{message['from']}" 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