class Stealth::Services::Facebook::Client
Constants
- FB_ENDPOINT
Attributes
api_endpoint[R]
reply[R]
Public Class Methods
fetch_profile(recipient_id:, fields: nil)
click to toggle source
# File lib/stealth/services/facebook/client.rb, line 60 def self.fetch_profile(recipient_id:, fields: nil) if fields.blank? fields = [:id, :name, :first_name, :last_name, :profile_pic] end query_hash = { fields: fields.join(','), access_token: Stealth.config.facebook.page_access_token } uri = URI::HTTPS.build( host: "graph.facebook.com", path: "/#{recipient_id}", query: query_hash.to_query ) res = http_client.get(uri.to_s) Stealth::Logger.l(topic: 'facebook', message: "Requested user profile for #{recipient_id}. Response: #{res.status.code}: #{res.body}" ) if res.status.success? MultiJson.load(res.body.to_s) else raise( Stealth::Errors::ServiceError, "Facebook error #{res.status}: #{res.body}" ) end end
http_client()
click to toggle source
# File lib/stealth/services/facebook/client.rb, line 53 def self.http_client headers = { 'Content-Type' => 'application/json' } HTTP.timeout(connect: 15, read: 60).headers(headers) end
new(reply:, endpoint: 'messages')
click to toggle source
# File lib/stealth/services/facebook/client.rb, line 23 def initialize(reply:, endpoint: 'messages') @reply = reply access_token = "access_token=#{Stealth.config.facebook.page_access_token}" @api_endpoint = [[FB_ENDPOINT, endpoint].join('/'), access_token].join('?') end
track(recipient_id:, metric:, value:, options: {})
click to toggle source
# File lib/stealth/services/facebook/client.rb, line 92 def self.track(recipient_id:, metric:, value:, options: {}) metric_values = [{ '_eventName' => metric, '_valueToSum' => value }] metric_values.first.merge!(options) params = { event: 'CUSTOM_APP_EVENTS', custom_events: MultiJson.dump(metric_values), advertiser_tracking_enabled: 1, application_tracking_enabled: 1, extinfo: MultiJson.dump(['mb1']), page_scoped_user_id: recipient_id, page_id: Stealth.config.facebook.page_id } uri = URI::HTTPS.build( host: "graph.facebook.com", path: "/#{Stealth.config.facebook.app_id}/activities" ) res = http_client.post(uri.to_s, body: MultiJson.dump(params)) Stealth::Logger.l( topic: "facebook", message: "Sent custom event for metric: #{metric} and value: #{value}. Response: #{res.status}: #{res.body}" ) if res.status.success? MultiJson.load(res.body.to_s) else raise( Stealth::Errors::ServiceError, "Facebook error #{res.status}: #{res.body}" ) end end
Public Instance Methods
transmit()
click to toggle source
# File lib/stealth/services/facebook/client.rb, line 29 def transmit res = self .class .http_client .post(api_endpoint, body: MultiJson.dump(reply)) if res.status.client_error? # HTTP 4xx error # Messenger error sub-codes (https://developers.facebook.com/docs/messenger-platform/reference/send-api/error-codes) case res.body when /1545041/ raise Stealth::Errors::UserOptOut when /2018108/ raise Stealth::Errors::UserOptOut when /2018028/ raise Stealth::Errors::InvalidSessionID.new('Cannot message users who are not admins, developers or testers of the app until pages_messaging permission is reviewed and the app is live.') end end Stealth::Logger.l( topic: "facebook", message: "Transmitted. Response: #{res.status.code}: #{res.body}" ) end