class Stealth::Services::Smooch::MessageHandler

Attributes

headers[R]
params[R]
service_message[R]
smooch_response[R]

Public Class Methods

new(params:, headers:) click to toggle source
# File lib/stealth/services/smooch/message_handler.rb, line 17
def initialize(params:, headers:)
  @params = params
  @headers = headers
end

Public Instance Methods

coordinate() click to toggle source
# File lib/stealth/services/smooch/message_handler.rb, line 22
def coordinate
  # Queue the request processing so we can respond quickly to Smooch
  # and also keep track of this message
  Stealth::Services::HandleMessageJob.perform_async(
    'smooch',
    params,
    headers
  )

  # Relay our acceptance
  [200, 'OK']
end
process() click to toggle source
# File lib/stealth/services/smooch/message_handler.rb, line 35
def process
  @service_message = ServiceMessage.new(service: 'smooch')
  @smooch_response = params
  service_message.sender_id = get_sender_id

  process_smooch_event

  service_message
end

Private Instance Methods

get_sender_id() click to toggle source
# File lib/stealth/services/smooch/message_handler.rb, line 47
def get_sender_id
  smooch_response['appUser']['_id']
end
process_smooch_event() click to toggle source
# File lib/stealth/services/smooch/message_handler.rb, line 51
def process_smooch_event
  if smooch_response['trigger'] == 'message:appUser'
    smooch_message = smooch_response['messages'].first
    service_message.timestamp = Time.at(smooch_message['received']).to_datetime

    message_event = Stealth::Services::Smooch::MessageEvent.new(
      service_message: service_message,
      params: smooch_message
    )
  elsif smooch_response['trigger'] == 'postback'
    smooch_postback = smooch_response['postbacks'].first
    service_message.timestamp = Time.at(smooch_postback.dig('message', 'received')).to_datetime

    message_event = Stealth::Services::Smooch::PostbackEvent.new(
      service_message: service_message,
      params: smooch_postback
    )
  elsif smooch_response['trigger'] == 'conversation:start'
    service_message.timestamp = Time.at(smooch_response['timestamp']).to_datetime

    message_event = Stealth::Services::Smooch::ConversationStartEvent.new(
      service_message: service_message,
      params: smooch_response
    )
  end

  message_event.process
end