class FacebookMessenger

Facebook Logger

Public Class Methods

new(params = {}) click to toggle source

@param params Hash @raise ArgumentError When token is nil

Calls superclass method Envoy::new
# File lib/botanalytics/facebook.rb, line 9
def initialize(params = {})
    super(params)
    @fb_token = params.fetch(:fb_token, nil)
    @path = 'messages/facebook-messenger/'
    @profile_path = 'facebook-messenger/users/'
    @async = params.fetch(:async, false)
    informs("Logging enabled for #{self.class.name}...")
    if @async
        require 'concurrent'
        @executor_service = Concurrent::ThreadPoolExecutor.new(
            min_threads: 1,
            max_threads: Concurrent.processor_count * 2,
            max_queue: Concurrent.processor_count * 1000,
            fallback_policy: :caller_runs
        )
        informs("Mode: Async...")
    end
end

Public Instance Methods

log_incoming(message) click to toggle source

@param message Hash

# File lib/botanalytics/facebook.rb, line 28
def log_incoming(message)
    validation = validate(message, "Incoming message")
    if validation[:ok]
        payload = {
            'recipient': nil,
            'timestamp': (Time.new.to_f*1000).to_i,
            'message': message
        }
        informs("Logging incoming message...")
        informs(message)
        if @async
            @executor_service.post do
                submits(payload, @path)
            end
        else
            submits(payload, @path)
        end
    else
        fails(validation[:err], validation[:reason], message)
    end
end
log_outgoing(message, sender_id) click to toggle source

@param message Hash @param sender_id String

# File lib/botanalytics/facebook.rb, line 51
def log_outgoing(message, sender_id)
    validation = validate_outgoing(message, sender_id)
    if validation[:ok]
        payload = {
            'recipient': sender_id,
            'timestamp': (Time.new.to_f*1000).to_i,
            'message': message,
            'fb_token': @fb_token
        }
        informs("Logging outgoing message...")
        informs(message)
        if @async
            @executor_service.post do
                submits(payload, @path)
            end
        else
            submits(payload, @path)
        end
    else
        fails(validation[:err], validation[:reason], message)
    end
end
log_user_profile(message) click to toggle source

@param message Hash

# File lib/botanalytics/facebook.rb, line 75
def log_user_profile(message)
    validation = validate(message, "User profile")
    if validation[:ok]
        informs("Logging user profile message...")
        informs(message)
        if @async
            @executor_service.post do
                submits(message, @profile_path)
            end
        else
            submits(message, @profile_path)
        end
    else
        fails(validation[:err], validation[:reason], message)
    end
end

Private Instance Methods

validate(payload, name) click to toggle source
# File lib/botanalytics/facebook.rb, line 92
def validate(payload, name)
    is_valid(payload, {}, name)
end
validate_outgoing(message, sender_id) click to toggle source
# File lib/botanalytics/facebook.rb, line 96
def validate_outgoing(message, sender_id)
    mv = is_valid(message, {}, "Outgoing message")
    unless mv[:ok]
        return mv
    end
    is_valid(sender_id, "", "Sender id")
end