feat: whatsapp duplicate message (#7004)
This commit is contained in:
@@ -20,13 +20,15 @@ class Whatsapp::IncomingMessageBaseService
|
||||
|
||||
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])
|
||||
return if find_message_by_source_id(@processed_params[:messages].first[:id]) || message_under_process?
|
||||
|
||||
cache_message_source_id_in_redis
|
||||
set_contact
|
||||
return unless @contact
|
||||
|
||||
set_conversation
|
||||
create_messages
|
||||
clear_message_source_id_from_redis
|
||||
end
|
||||
|
||||
def process_statuses
|
||||
@@ -53,11 +55,8 @@ class Whatsapp::IncomingMessageBaseService
|
||||
log_error(message) && return if error_webhook_event?(message)
|
||||
|
||||
process_in_reply_to(message)
|
||||
if message_type == 'contacts'
|
||||
create_contact_messages(message)
|
||||
else
|
||||
create_regular_message(message)
|
||||
end
|
||||
|
||||
message_type == 'contacts' ? create_contact_messages(message) : create_regular_message(message)
|
||||
end
|
||||
|
||||
def create_contact_messages(message)
|
||||
|
||||
@@ -104,4 +104,21 @@ module Whatsapp::IncomingMessageServiceHelpers
|
||||
|
||||
@message = Message.find_by(source_id: source_id)
|
||||
end
|
||||
|
||||
def message_under_process?
|
||||
key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
|
||||
Redis::Alfred.get(key)
|
||||
end
|
||||
|
||||
def cache_message_source_id_in_redis
|
||||
return if @processed_params.try(:[], :messages).blank?
|
||||
|
||||
key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
|
||||
::Redis::Alfred.setex(key, true)
|
||||
end
|
||||
|
||||
def clear_message_source_id_from_redis
|
||||
key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
|
||||
::Redis::Alfred.delete(key)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user