Class: WhatsappSdk::Api::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/whatsapp_sdk/api/client.rb

Constant Summary collapse

API_VERSIONS =
[
  'v21.0', 'v20.0', 'v19.0', 'v18.0', 'v17.0', 'v16.0', 'v15.0', 'v14.0', 'v13.0', 'v12.0',
  'v11.0', 'v10.0', 'v9.0', 'v8.0', 'v7.0', 'v6.0', 'v5.0', 'v4.0', 'v3.3',
  'v3.2', 'v3.1', 'v3.0', 'v2.12', 'v2.11', 'v2.10', 'v2.9', 'v2.8', 'v2.7',
  'v2.6', 'v2.5', 'v2.4', 'v2.3', 'v2.2', 'v2.1'
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(access_token = WhatsappSdk.configuration.access_token, api_version = WhatsappSdk.configuration.api_version, logger = nil, logger_options = {}) ⇒ Client



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/whatsapp_sdk/api/client.rb', line 16

def initialize(
  access_token = WhatsappSdk.configuration.access_token,
  api_version = WhatsappSdk.configuration.api_version,
  logger = nil,
  logger_options = {}
)
  @access_token = access_token
  @logger = logger
  @logger_options = logger_options

  validate_api_version(api_version)
  @api_version = api_version
end

Instance Method Details

#business_profilesObject



42
43
44
# File 'lib/whatsapp_sdk/api/client.rb', line 42

def business_profiles
  @business_profiles ||= WhatsappSdk::Api::BusinessProfile.new(self)
end

#download_file(url:, content_type_header:, file_path: nil) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/whatsapp_sdk/api/client.rb', line 66

def download_file(url:, content_type_header:, file_path: nil)
  uri = URI.parse(url)
  request = Net::HTTP::Get.new(uri)
  request["Authorization"] = "Bearer #{@access_token}"
  request.content_type = content_type_header
  req_options = { use_ssl: uri.scheme == "https" }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  File.write(file_path, response.body, mode: 'wb') if response.code == "200" && file_path

  response
end

#mediaObject



30
31
32
# File 'lib/whatsapp_sdk/api/client.rb', line 30

def media
  @media ||= WhatsappSdk::Api::Medias.new(self)
end

#messagesObject



34
35
36
# File 'lib/whatsapp_sdk/api/client.rb', line 34

def messages
  @messages ||= WhatsappSdk::Api::Messages.new(self)
end

#phone_numbersObject



38
39
40
# File 'lib/whatsapp_sdk/api/client.rb', line 38

def phone_numbers
  @phone_numbers ||= WhatsappSdk::Api::PhoneNumbers.new(self)
end

#send_request(endpoint: "", full_url: nil, http_method: "post", params: {}, headers: {}, multipart: false) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/whatsapp_sdk/api/client.rb', line 50

def send_request(endpoint: "", full_url: nil, http_method: "post", params: {}, headers: {}, multipart: false)
  url = full_url || "#{ApiConfiguration::API_URL}/#{@api_version}/"

  faraday_request = faraday(url:, multipart:)

  response = faraday_request.public_send(http_method, endpoint, request_params(params, headers), headers)

  if response.status > 499 || Api::Responses::GenericErrorResponse.response_error?(response: response.body)
    raise Api::Responses::HttpResponseError.new(http_status: response.status, body: JSON.parse(response.body))
  end

  return nil if response.body == ""

  JSON.parse(response.body)
end

#templatesObject



46
47
48
# File 'lib/whatsapp_sdk/api/client.rb', line 46

def templates
  @templates ||= WhatsappSdk::Api::Templates.new(self)
end