whatsapp_sdk 0.2.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f68cc009fe9fd27e79ac8e7f1a128204c66a565f055bce04bf4338f63ccb4f63
4
- data.tar.gz: 49c4b5891624196c2557166cce8587e645a12e16716ccbc216c19f048cf2ab41
3
+ metadata.gz: 21f67768ad0e420df08a3ba0046968b6576e4d60bf0f601d902c968d3cfa9a29
4
+ data.tar.gz: 1db186a1de042f4da848587a9c4fd366b52ca28111de7fff63ae93ef776e98d8
5
5
  SHA512:
6
- metadata.gz: 91204e0864c369777ff18f63c95f846acbcfa6248ed52fa0db6d05f43784be704e124edffcc73f4d3e0d565269b1784058ede119bdd862d067f75a49550d67df
7
- data.tar.gz: 606a0b4ab9601388c2c737e47306cbc2432ef763efd82a869dd92be7d23d8fc2a6877573f1db5119b20ff8135523469a47ed02e2f75f857f33b238b6e7e23be5
6
+ metadata.gz: 933a7f3caa079cb0e551bbb772516c3ab03f0f57bb97ef05934acad663ef600cacfcf1ff0b65c65b87596df2424aaa3e6f293134f9ddce9a55d0bfd0dcb833cd
7
+ data.tar.gz: 429575992b1728097f53daba070ad74e4622f4ae8e21c73e40ecf06947b8c9697e5fd0272ab105f10f7cb9e023ff2dc2574f6268d5a34b318d7b422fe95c51a5
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+
17
+ **Expected behavior**
18
+ A clear and concise description of what you expected to happen.
19
+
20
+ **Additional context**
21
+ Add any other context about the problem here.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Additional context**
14
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,72 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ "main" ]
20
+ schedule:
21
+ - cron: '20 22 * * 6'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+
52
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
53
+ # queries: security-extended,security-and-quality
54
+
55
+
56
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
57
+ # If this step fails, then you should remove it and run the build manually (see below)
58
+ - name: Autobuild
59
+ uses: github/codeql-action/autobuild@v2
60
+
61
+ # ℹ️ Command-line programs to run using the OS shell.
62
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
63
+
64
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
65
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
66
+
67
+ # - run: |
68
+ # echo "Run, Build Application using script"
69
+ # ./location_of_script_within_repo/buildscript.sh
70
+
71
+ - name: Perform CodeQL Analysis
72
+ uses: github/codeql-action/analyze@v2
data/.rubocop.yml CHANGED
@@ -1,3 +1,7 @@
1
+ require:
2
+ - rubocop-minitest
3
+ - rubocop-performance
4
+
1
5
  AllCops:
2
6
  NewCops: enable
3
7
 
@@ -28,3 +32,6 @@ Metrics/AbcSize:
28
32
  # Wait until https://github.com/rubocop/rubocop/issues/8761 is fixed
29
33
  Gemspec/RequiredRubyVersion:
30
34
  Enabled: false
35
+
36
+ Minitest/MultipleAssertions:
37
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,8 +1,16 @@
1
1
  # Unreleased
2
2
 
3
+ # v 0.3.2
4
+ - Include Zeitwerk
5
+
6
+ # v 0.3.1
7
+ - Update Meta API to v14
8
+
9
+ # v 0.3.0
10
+ - Allow Apps to have a singleton global authentication client.
11
+
3
12
  # v 0.2.0
4
13
  - Added Media API
5
- - Update Facebook API to v14
6
14
  - Added error and sucess responses
7
15
  - Added faraday-multiplart as part of the library
8
16
 
data/Gemfile CHANGED
@@ -4,19 +4,22 @@ source "https://rubygems.org"
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
- # Specify your gem's dependencies in whatsapp_sdk.gemspec
8
7
  gem("faraday")
9
8
  gem("faraday-multipart")
10
9
  gem("oj")
10
+ gem("rake", ">= 12.3.3")
11
+ gem("zeitwerk", ">= 2.6.0")
11
12
 
12
13
  group(:test) do
13
14
  gem('mocha')
15
+ gem('rubocop', require: false)
16
+ gem('rubocop-minitest', require: false)
17
+ gem('rubocop-performance', require: false)
14
18
  end
15
19
 
16
20
  group(:development) do
17
21
  gem('pry')
18
22
  gem('pry-nav')
19
- gem('rubocop', require: false)
20
23
  end
21
24
 
22
25
  gemspec
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- whatsapp_sdk (0.2.0)
4
+ whatsapp_sdk (0.3.2)
5
5
  faraday (~> 2.3.0)
6
6
  faraday-multipart (~> 1.0.4)
7
7
  oj (~> 3.13.13)
8
+ zeitwerk (~> 2.6.0)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
@@ -18,10 +19,10 @@ GEM
18
19
  multipart-post (~> 2)
19
20
  faraday-net_http (2.0.3)
20
21
  method_source (1.0.0)
21
- minitest (5.15.0)
22
+ minitest (5.16.1)
22
23
  mocha (1.14.0)
23
- multipart-post (2.2.2)
24
- oj (3.13.13)
24
+ multipart-post (2.2.3)
25
+ oj (3.13.14)
25
26
  parallel (1.22.1)
26
27
  parser (3.1.2.0)
27
28
  ast (~> 2.4.1)
@@ -31,10 +32,10 @@ GEM
31
32
  pry-nav (1.0.0)
32
33
  pry (>= 0.9.10, < 0.15)
33
34
  rainbow (3.1.1)
34
- rake (10.5.0)
35
+ rake (13.0.6)
35
36
  regexp_parser (2.5.0)
36
37
  rexml (3.2.5)
37
- rubocop (1.30.0)
38
+ rubocop (1.30.1)
38
39
  parallel (~> 1.10)
39
40
  parser (>= 3.1.0.0)
40
41
  rainbow (>= 2.2.2, < 4.0)
@@ -45,9 +46,15 @@ GEM
45
46
  unicode-display_width (>= 1.4.0, < 3.0)
46
47
  rubocop-ast (1.18.0)
47
48
  parser (>= 3.1.1.0)
49
+ rubocop-minitest (0.20.1)
50
+ rubocop (>= 0.90, < 2.0)
51
+ rubocop-performance (1.14.2)
52
+ rubocop (>= 1.7.0, < 2.0)
53
+ rubocop-ast (>= 0.4.0)
48
54
  ruby-progressbar (1.11.0)
49
55
  ruby2_keywords (0.0.5)
50
- unicode-display_width (2.1.0)
56
+ unicode-display_width (2.2.0)
57
+ zeitwerk (2.6.0)
51
58
 
52
59
  PLATFORMS
53
60
  x86_64-darwin-21
@@ -61,9 +68,12 @@ DEPENDENCIES
61
68
  oj
62
69
  pry
63
70
  pry-nav
64
- rake (~> 10.0)
71
+ rake (>= 12.3.3)
65
72
  rubocop
73
+ rubocop-minitest
74
+ rubocop-performance
66
75
  whatsapp_sdk!
76
+ zeitwerk (>= 2.6.0)
67
77
 
68
78
  BUNDLED WITH
69
79
  2.3.9
data/README.md CHANGED
@@ -1,7 +1,14 @@
1
1
  # Ruby Whatsapp SDK
2
+ [![Gem Version](https://badge.fury.io/rb/whatsapp_sdk.svg)](https://badge.fury.io/rb/whatsapp_sdk)
3
+ [![CircleCI](https://circleci.com/gh/circleci/circleci-docs.svg?style=svg)](https://circleci.com/gh/ignacio-chiazzo/ruby_whatsapp_sdk)
4
+ <a href="https://codeclimate.com/github/ignacio-chiazzo/ruby_whatsapp_sdk/maintainability"><img src="https://api.codeclimate.com/v1/badges/169cce95450272e4ad7d/maintainability" /></a>
2
5
 
3
6
  The SDK provides a set of operations and classes to use the Whatsapp API.
4
- Send stickers, messages, audio, videos, locations or just ask for the phone numbers through this library in a few steps!
7
+ Send stickers, messages, audio, videos, and locations or just ask for the phone numbers through this library in a few steps!
8
+
9
+
10
+ https://user-images.githubusercontent.com/11672878/173238826-6fc0a6f8-d0ee-4eae-8947-7dfd3b8b3446.mov
11
+
5
12
 
6
13
  ## Installation
7
14
 
@@ -21,12 +28,22 @@ Or install it yourself as:
21
28
 
22
29
  ## Quick Start
23
30
 
24
- There are two primary resources, `Messages` and `PhoneNumbers`. The first one allows clients to send any kind of message (text, audio, location, video, image, etc.), and the latter will enable clients to query the phone numbers associated.
31
+ There are three primary resources, `Messages`, `Media` and `PhoneNumbers`. `Messages` allows users to send any kind of message (text, audio, location, video, image, etc.). `Media` allows users to manage media, and `Phone Numbers` enable clients to query the associated phone numbers.
25
32
 
26
- To use `Messages` or `PhoneNumbers` you need to create a `Client` instance by passing the `access_token` like this:
33
+ To use `Messages`, `Media` or `PhoneNumbers`, you need to initialize the `Client` that contains auth information. There are two ways to do it
34
+
35
+ 1) Using an initializer
36
+
37
+ ```ruby
38
+ WhatsappSdk.configure do |config|
39
+ config.access_token = ACCESS_TOKEN
40
+ end
41
+ ```
42
+ OR 2) creating a `Client` instance and pass it to the `Messages`, `Medias` or `PhoneNumbers` instance like this:
27
43
 
28
44
  ```ruby
29
45
  client = WhatsappSdk::Api::Client.new("<ACCESS TOKEN>") # replace this with a valid access token
46
+ messages_api = WhatsappSdk::Api::Messages.new(client)
30
47
  ```
31
48
 
32
49
  Each API operation returns a `WhatsappSdk::Api::Response` that contains `data` and `error` and a couple of helpful functions such as `ok?` and `error?`. There are three types of response `WhatsappSdk::Api::MessageDataResponse`, `WhatsappSdk::Api::PhoneNumberDataResponse` and `WhatsappSdk::Api::PhoneNumbersDataResponse`. Each of them contains different attributes.
@@ -35,12 +52,13 @@ Each API operation returns a `WhatsappSdk::Api::Response` that contains `data` a
35
52
  First, create the client and then create an instance `WhatsappSdk::Api::Messages` that requires a client as a param like this:
36
53
 
37
54
  ```ruby
38
- client = WhatsappSdk::Api::Client.new("<ACCESS TOKEN>") # replace this with a valid access_token
39
- messages_api = WhatsappSdk::Api::Messages.new(client)
40
- phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new(client)
41
- medias_api = WhatsappSdk::Api::Medias.new(client)
55
+ messages_api = WhatsappSdk::Api::Messages.new
56
+ phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new
57
+ medias_api = WhatsappSdk::Api::Medias.new
42
58
  ```
43
59
 
60
+ Note: Remember to initialize the client first!
61
+
44
62
  ### Phone numbers API
45
63
  Get the list of phone numbers registered
46
64
  ```ruby
@@ -82,11 +100,19 @@ medias_api.delete(media_id: MEDIA_ID)
82
100
  messages_api.send_text(sender_id: 1234, recipient_number: "112345678", message: "hola")
83
101
  ```
84
102
 
103
+ **Read a message**
104
+ ```ruby
105
+ messages_api.read_message(sender_id: 1234, message_id: "wamid.HBgLMTM0M12345678910=")
106
+ ```
107
+
108
+ Note: To get the `message_id` you can set up [Webhooks](https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components) that will listen and fire an event when a message is received.
109
+
110
+
85
111
  **Send a location message**
86
112
 
87
113
  ```ruby
88
114
  messages_api.send_location(
89
- sender_id: 123123, recipient_number: "56789",
115
+ sender_id: 123123, recipient_number: "56789",
90
116
  longitude: 45.4215, latitude: 75.6972, name: "nacho", address: "141 cooper street"
91
117
  )
92
118
  ```
@@ -94,12 +120,12 @@ messages_api.send_location(
94
120
  **Send an image message**
95
121
  It could use a link or an image_id.
96
122
  ```ruby
97
- # with a link
123
+ # with a link
98
124
  messages_api.send_image(
99
125
  sender_id: 123123, recipient_number: "56789", link: "image_link", caption: "Ignacio Chiazzo Profile"
100
126
  )
101
127
 
102
- # with an image id
128
+ # with an image id
103
129
  messages_api.send_image(
104
130
  sender_id: 123123, recipient_number: "56789", image_id: "1234", caption: "Ignacio Chiazzo Profile"
105
131
  )
@@ -108,22 +134,22 @@ messages_api.send_image(
108
134
  **Send an audio message**
109
135
  It could use a link or an audio_id.
110
136
  ```ruby
111
- # with a link
137
+ # with a link
112
138
  messages_api.send_audio(sender_id: 123123, recipient_number: "56789", link: "audio_link")
113
139
 
114
- # with an audio id
140
+ # with an audio id
115
141
  messages_api.send_audio(sender_id: 123123, recipient_number: "56789", audio_id: "1234")
116
142
  ```
117
143
 
118
144
  **Send a document message**
119
145
  It could use a link or a document_id.
120
146
  ```ruby
121
- # with a link
147
+ # with a link
122
148
  messages_api.send_document(
123
149
  sender_id: 123123, recipient_number: "56789", link: "document_link", caption: "Ignacio Chiazzo"
124
150
  )
125
151
 
126
- # with a document id
152
+ # with a document id
127
153
  messages_api.send_document(
128
154
  sender_id: 123123, recipient_number: "56789", document_id: "1234", caption: "Ignacio Chiazzo"
129
155
  )
@@ -132,7 +158,7 @@ messages_api.send_document(
132
158
  **Send a sticker message**
133
159
  It could use a link or a sticker_id.
134
160
  ```ruby
135
- # with a link
161
+ # with a link
136
162
  messages_api.send_sticker(sender_id: 123123, recipient_number: "56789", link: "link")
137
163
 
138
164
  # with a sticker_id
@@ -218,7 +244,7 @@ Visit [the example file](/example.rb) with examples to call the API in a single
218
244
 
219
245
  ## Troubleshooting
220
246
 
221
- - If the API response is success but the message is not delivered, make sure the device you're sending the message to is using a supported Whatsapp version. [Check documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/support/troubleshooting#message-not-delivered)
247
+ - If the API response is `success` but the message is not delivered, make sure the device you're sending the message to is using a supported Whatsapp version. [Check documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/support/troubleshooting#message-not-delivered)
222
248
 
223
249
  ## Development
224
250
 
@@ -228,7 +254,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
228
254
 
229
255
  ## Contributing
230
256
 
231
- Bug reports and pull requests are welcome on GitHub at [https://github.com/ignacio-chiazzo/whatsapp_sdk](https://github.com/ignacio-chiazzo/whatsapp_sdk) This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
257
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk) This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
232
258
 
233
259
  ## License
234
260
 
data/example.rb CHANGED
@@ -11,7 +11,7 @@ gemfile(true) do
11
11
 
12
12
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
13
13
 
14
- gem "whatsapp_sdk", github: "ignacio-chiazzo/whatsapp_sdk", branch: "main"
14
+ gem "whatsapp_sdk", path: "/Users/ignaciochiazzo/src/whatsapp_sdk"
15
15
  gem "pry"
16
16
  gem "pry-nav"
17
17
  end
@@ -22,11 +22,18 @@ require "pry-nav"
22
22
 
23
23
  ################# UPDATE CONSTANTS #################
24
24
 
25
- ACCESS_TOKEN = "<TODO replace>"
26
- SENDER_ID = "<TODO replace>"
27
- RECIPIENT_NUMBER = "<TODO replace>"
28
- BUSINESS_ID = "<TODO replace>"
29
- IMAGE_LINK = "<TODO replace>"
25
+ ACCESS_TOKEN = "EAAHwuHDNkqoBAOtjFZAw1MUOXsFOv4EMP8Hi2mtzvcHSPbYWD4HLLLRapjPIDQWagke3cF2IIZCbtlhMZCluO1sH7C594q0q9UqZAXwufTqBtebRlssZCLwKeC69l6Emdmt2gRYGDnhTJH0mrM7L5ivZAWezhjOvtzdnKJ7xBZALiQRKB6JrEAgAZBcnBMfBZC75xR0ZACXQUPoplhjN1a5FTA" # replace this with a valid access_token # TODO replace
26
+ SENDER_ID = 107_878_721_936_019
27
+ RECIPIENT_NUMBER = 13_437_772_910
28
+ BUSINESS_ID = 114_503_234_599_312
29
+ IMAGE_LINK = "https://ignaciochiazzo.com/static/4c403819b9750c8ad8b20a75308f2a8a/876d5/profile-pic.avif"
30
+ binding.pry
31
+ # message_sent = messages_api.send_text(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, message: "holis")
32
+
33
+ ################# Initialize Client #################
34
+ WhatsappSdk.configure do |config|
35
+ config.access_token = ACCESS_TOKEN
36
+ end
30
37
 
31
38
  ################# HELPERS ########################
32
39
  def print_message_sent(message_response)
@@ -38,10 +45,9 @@ def print_message_sent(message_response)
38
45
  end
39
46
  ##################################################
40
47
 
41
- client = WhatsappSdk::Api::Client.new(ACCESS_TOKEN)
42
- medias_api = WhatsappSdk::Api::Medias.new(client)
43
- messages_api = WhatsappSdk::Api::Messages.new(client)
44
- phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new(client)
48
+ medias_api = WhatsappSdk::Api::Medias.new
49
+ messages_api = WhatsappSdk::Api::Messages.new
50
+ phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new
45
51
 
46
52
  ############################## Phone Numbers API ##############################
47
53
  phone_numbers_api.registered_number(SENDER_ID)
@@ -53,6 +59,7 @@ uploaded_media = medias_api.upload(sender_id: SENDER_ID, file_path: "tmp/whatsap
53
59
  puts "Uploaded media id: #{uploaded_media.data&.id}"
54
60
 
55
61
  # get a media
62
+ uploaded_media = medias_api.upload(sender_id: SENDER_ID, file_path: "tmp/whatsapp.png", type: "image/png")
56
63
  media = medias_api.media(media_id: uploaded_media.data&.id).data
57
64
  puts "Media info: #{media.raw_data_response}"
58
65
 
@@ -60,9 +67,9 @@ puts "Media info: #{media.raw_data_response}"
60
67
  download_image = medias_api.download(url: media&.url, file_path: 'tmp/downloaded_whatsapp.png')
61
68
  puts "Downloaded: #{download_image.data.success?}"
62
69
 
63
- # delete a media
64
- deleted_media = medias_api.delete(media_id: media&.id)
65
- puts "Deleted: #{deleted_media.data.success?}"
70
+ # # delete a media
71
+ # deleted_media = medias_api.delete(media_id: media&.id)
72
+ # puts "Deleted: #{deleted_media.data.success?}"
66
73
 
67
74
  ############################## Messages API ##############################
68
75
 
@@ -77,6 +84,9 @@ location_sent = messages_api.send_location(
77
84
  )
78
85
  print_message_sent(location_sent)
79
86
 
87
+ ######### READ A MESSAGE
88
+ # messages_api.read_message(sender_id: SENDER_ID, message_id: msg_id)
89
+
80
90
  ######### SEND AN IMAGE
81
91
  # Send an image with a link
82
92
  image_sent = messages_api.send_image(
@@ -91,28 +101,28 @@ messages_api.send_image(
91
101
 
92
102
  ######### SEND AUDIOS
93
103
  ## with a link
94
- # messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "audio_link")
104
+ messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "audio_link")
95
105
 
96
106
  ## with an audio id
97
- # messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, audio_id: "1234")
107
+ messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, audio_id: "1234")
98
108
 
99
109
  ######### SEND DOCUMENTS
100
110
  ## with a link
101
- # messages_api.send_document(
102
- # sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "document_link", caption: "Ignacio Chiazzo"
103
- # )
111
+ messages_api.send_document(
112
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "document_link", caption: "Ignacio Chiazzo"
113
+ )
104
114
 
105
115
  ## with a document id
106
- # messages_api.send_document(
107
- # sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, document_id: "1234", caption: "Ignacio Chiazzo"
108
- # )
116
+ messages_api.send_document(
117
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, document_id: "1234", caption: "Ignacio Chiazzo"
118
+ )
109
119
 
110
120
  ######### SEND STICKERS
111
121
  ## with a link
112
- # messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "link")
122
+ messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "link")
113
123
 
114
124
  ## with a sticker_id
115
- # messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, sticker_id: "1234")
125
+ messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, sticker_id: "1234")
116
126
 
117
127
  ######### SEND A TEMPLATE
118
128
  # Note: The template must have been created previously.
@@ -122,49 +132,49 @@ response_with_object = messages_api.send_template(sender_id: SENDER_ID, recipien
122
132
  name: "hello_world", language: "en_US", components: [])
123
133
  puts response_with_object
124
134
 
125
- # Send a template with components. Remember to create the template first.
126
- # header_component = WhatsappSdk::Resource::Component.new(
127
- # type: WhatsappSdk::Resource::Component::Type::HEADER
128
- # )
135
+ # Send a template with components.Remember to create the template first.
136
+ header_component = WhatsappSdk::Resource::Component.new(
137
+ type: WhatsappSdk::Resource::Component::Type::HEADER
138
+ )
129
139
 
130
- # image = WhatsappSdk::Resource::Media.new(type: "image", link: "http(s)://URL", caption: "caption")
131
- # document = WhatsappSdk::Resource::Media.new(type: "document", link: "http(s)://URL", filename: "txt.rb")
132
- # video = WhatsappSdk::Resource::Media.new(type: "video", id: 123)
140
+ image = WhatsappSdk::Resource::Media.new(type: "image", link: "http(s)://URL", caption: "caption")
141
+ document = WhatsappSdk::Resource::Media.new(type: "document", link: "http(s)://URL", filename: "txt.rb")
142
+ video = WhatsappSdk::Resource::Media.new(type: "video", id: 123)
133
143
 
134
- # parameter_image = WhatsappSdk::Resource::ParameterObject.new(
135
- # type: "image",
136
- # image: image
137
- # )
144
+ parameter_image = WhatsappSdk::Resource::ParameterObject.new(
145
+ type: "image",
146
+ image: image
147
+ )
138
148
 
139
- # parameter_document = WhatsappSdk::Resource::ParameterObject.new(
140
- # type: "document",
141
- # document: document
142
- # )
149
+ parameter_document = WhatsappSdk::Resource::ParameterObject.new(
150
+ type: "document",
151
+ document: document
152
+ )
143
153
 
144
- # parameter_video = WhatsappSdk::Resource::ParameterObject.new(
145
- # type: "video",
146
- # video: video
147
- # )
154
+ parameter_video = WhatsappSdk::Resource::ParameterObject.new(
155
+ type: "video",
156
+ video: video
157
+ )
148
158
 
149
- # parameter_text = WhatsappSdk::Resource::ParameterObject.new(
150
- # type: "text",
151
- # text: "I am a text"
152
- # )
159
+ parameter_text = WhatsappSdk::Resource::ParameterObject.new(
160
+ type: "text",
161
+ text: "I am a text"
162
+ )
153
163
 
154
- # header_component.add_parameter(parameter_text)
155
- # header_component.add_parameter(parameter_image)
156
- # header_component.add_parameter(parameter_video)
157
- # header_component.add_parameter(parameter_document)
158
- # header_component.to_json
164
+ header_component.add_parameter(parameter_text)
165
+ header_component.add_parameter(parameter_image)
166
+ header_component.add_parameter(parameter_video)
167
+ header_component.add_parameter(parameter_document)
168
+ header_component.to_json
159
169
 
160
- # body_component = WhatsappSdk::Resource::Component.new(
161
- # type: WhatsappSdk::Resource::Component::Type::BODY
162
- # )
163
- # body_component.add_parameter(parameter_text)
164
- # body_component.add_parameter(parameter_image)
165
- # body_component.add_parameter(parameter_video)
166
- # body_component.add_parameter(parameter_document)
167
- # body_component.to_json
170
+ body_component = WhatsappSdk::Resource::Component.new(
171
+ type: WhatsappSdk::Resource::Component::Type::BODY
172
+ )
173
+ body_component.add_parameter(parameter_text)
174
+ body_component.add_parameter(parameter_image)
175
+ body_component.add_parameter(parameter_video)
176
+ body_component.add_parameter(parameter_document)
177
+ body_component.to_json
168
178
 
169
179
  # button_component_1 = WhatsappSdk::Resource::Component.new(
170
180
  # type: WhatsappSdk::Resource::Component::Type::BUTTON,
@@ -180,21 +190,26 @@ puts response_with_object
180
190
  # parameters: [WhatsappSdk::Resource::ButtonParameter.new(type: "payload", payload: "payload")]
181
191
  # )
182
192
 
183
- # # Send a template with component_json
184
- # response_with_json = messages_api.send_template(
185
- # sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, name: "hello_world", language: "en_US",
186
- # components_json: [
187
- # {
188
- # "type" => "header",
189
- # "parameters" => [
190
- # {
191
- # "type" => "image",
192
- # "image" => {
193
- # "link" => "https://www.google.com/imgres?imgurl=https%3A%2F%2Fqph.cf2.quoracdn.net%2Fmain-qimg-6d977408fdd90a09a1fee7ba9e2f777c-lq&imgrefurl=https%3A%2F%2Fwww.quora.com%2FHow-can-I-find-my-WhatsApp-ID&tbnid=lDAx1vzXwqCakM&vet=12ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ..i&docid=s-DNQVCrZmhJYM&w=602&h=339&q=example%20whatsapp%20image%20id&ved=2ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ"
194
- # }
195
- # }
196
- # ]
197
- # }
198
- # ]
199
- # )
200
- # puts response_with_json
193
+ # Send a template with component_json
194
+ response_with_json = messages_api.send_template(
195
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, name: "hello_world", language: "en_US",
196
+ components_json: [
197
+ {
198
+ "type" => "header",
199
+ "parameters" => [
200
+ {
201
+ "type" => "image",
202
+ "image" => {
203
+ "link" => "https://www.google.com/imgres?imgurl=https%3A%2F%2Fqph.cf2.quoracdn.net%2Fmain-qimg-6d977408fdd90a09a1fee7ba9e2f777c-lq&imgrefurl=https%3A%2F%2Fwww.quora.com%2FHow-can-I-find-my-WhatsApp-ID&tbnid=lDAx1vzXwqCakM&vet=12ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ..i&docid=s-DNQVCrZmhJYM&w=602&h=339&q=example%20whatsapp%20image%20id&ved=2ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ"
204
+ }
205
+ }
206
+ ]
207
+ }
208
+ ]
209
+ )
210
+ puts response_with_json
211
+
212
+
213
+ # # delete a media
214
+ deleted_media = medias_api.delete(media_id: media&.id)
215
+ puts "Deleted: #{deleted_media.data.success?}"
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WhatsappSdk
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.2"
5
5
  end
@@ -3,10 +3,10 @@
3
3
  module WhatsappSdk
4
4
  module Api
5
5
  class Request
6
- API_VERSION = "v13.0"
6
+ API_VERSION = "v14.0"
7
7
  API_CLIENT = "https://graph.facebook.com/#{API_VERSION}/"
8
8
 
9
- def initialize(client)
9
+ def initialize(client = WhatsappSdk.configuration.client)
10
10
  @client = client
11
11
  end
12
12
 
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WhatsappSdk
4
+ # This module allows client instantiating the client as a singleton like the following example:
5
+ # WhatsappSdk.configure do |config|
6
+ # config.access_token = ACCESS_TOKEN
7
+ # end
8
+ #
9
+ # The gem have access to the client through WhatsappSdk.configuration.client
10
+ class Configuration
11
+ attr_accessor :access_token
12
+
13
+ def initialize(access_token = nil)
14
+ @access_token = access_token
15
+ end
16
+
17
+ def client
18
+ return unless access_token
19
+
20
+ WhatsappSdk::Api::Client.new(access_token)
21
+ end
22
+ end
23
+ end
data/lib/whatsapp_sdk.rb CHANGED
@@ -1,35 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # APIs
4
- require_relative "whatsapp_sdk/api/phone_numbers"
5
- require_relative "whatsapp_sdk/api/messages"
6
- require_relative "whatsapp_sdk/api/medias"
7
- require_relative "whatsapp_sdk/api/client"
3
+ require "zeitwerk"
4
+ loader = Zeitwerk::Loader.for_gem
5
+ loader.setup
8
6
 
9
- # APIs responses
10
- require_relative "whatsapp_sdk/api/responses/message_data_response"
11
- require_relative "whatsapp_sdk/api/responses/phone_number_data_response"
12
- require_relative "whatsapp_sdk/api/responses/phone_numbers_data_response"
13
- require_relative "whatsapp_sdk/api/responses/message_error_response"
14
- require_relative "whatsapp_sdk/api/responses/data_response"
15
- require_relative "whatsapp_sdk/api/responses/read_message_data_response"
16
- require_relative "whatsapp_sdk/api/responses/media_data_response"
17
- require_relative "whatsapp_sdk/api/responses/success_response"
18
- require_relative "whatsapp_sdk/api/responses/error_response"
7
+ module WhatsappSdk
8
+ class << self
9
+ def configuration
10
+ @configuration ||= Configuration.new
11
+ end
19
12
 
20
- # Resources
21
- require_relative "whatsapp_sdk/resource/address"
22
- require_relative "whatsapp_sdk/resource/button_parameter"
23
- require_relative "whatsapp_sdk/resource/component"
24
- require_relative "whatsapp_sdk/resource/contact_response"
25
- require_relative "whatsapp_sdk/resource/contact"
26
- require_relative "whatsapp_sdk/resource/currency"
27
- require_relative "whatsapp_sdk/resource/date_time"
28
- require_relative "whatsapp_sdk/resource/email"
29
- require_relative "whatsapp_sdk/resource/media"
30
- require_relative "whatsapp_sdk/resource/message"
31
- require_relative "whatsapp_sdk/resource/name"
32
- require_relative "whatsapp_sdk/resource/org"
33
- require_relative "whatsapp_sdk/resource/parameter_object"
34
- require_relative "whatsapp_sdk/resource/phone_number"
35
- require_relative "whatsapp_sdk/resource/url"
13
+ def configure
14
+ yield(configuration)
15
+ end
16
+ end
17
+ end
data/whatsapp_sdk.gemspec CHANGED
@@ -9,10 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.version = WhatsappSdk::VERSION
10
10
  spec.authors = ["ignacio-chiazzo"]
11
11
  spec.email = ["ignaciochiazzo@gmail.com"]
12
-
13
- spec.summary = "Use the Whatsapp SDK to comunicate with Whatsapp API"
14
- spec.description = "Ruby Whatsapp SDK. Use the Whatsapp API through this library"
15
- spec.homepage = "https://github.com/ignacio-chiazzo/whatsapp_sdk"
12
+ spec.summary = "Use the Ruby Whatsapp SDK to comunicate with Whatsapp API using the Cloud API"
13
+ spec.description = <<-DESCRIPTION
14
+ Use the Ruby Whatsapp SDK to comunicate with Whatsapp API using the Cloud API.
15
+ Create bots to send and receive messages using the Whatsapp SDK in a few minutes.
16
+ DESCRIPTION
17
+ spec.homepage = "https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk"
16
18
  spec.license = "MIT"
17
19
  spec.required_ruby_version = '>= 1.8.6'
18
20
 
@@ -20,8 +22,8 @@ Gem::Specification.new do |spec|
20
22
  # to allow pushing to a single host or delete this section to allow pushing to any host.
21
23
  if spec.respond_to?(:metadata)
22
24
  spec.metadata["homepage_uri"] = spec.homepage
23
- spec.metadata["source_code_uri"] = "https://github.com/ignacio-chiazzo/whatsapp_sdk"
24
- spec.metadata["changelog_uri"] = "https://github.com/ignacio-chiazzo/whatsapp_sdk/blob/main/CHANGELOG.md"
25
+ spec.metadata["source_code_uri"] = "https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk"
26
+ spec.metadata["changelog_uri"] = "https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/blob/main/CHANGELOG.md"
25
27
  else
26
28
  raise "RubyGems 2.0 or newer is required to protect against " \
27
29
  "public gem pushes."
@@ -38,10 +40,11 @@ Gem::Specification.new do |spec|
38
40
 
39
41
  spec.add_development_dependency "bundler", "~> 2.3"
40
42
  spec.add_development_dependency "minitest", "~> 5.0"
41
- spec.add_development_dependency "rake", "~> 10.0"
43
+ spec.add_development_dependency "rake", "~> 12.3.3"
42
44
 
43
45
  spec.add_dependency("faraday", "~> 2.3.0")
44
46
  spec.add_dependency("faraday-multipart", "~> 1.0.4")
45
47
  spec.add_dependency("oj", "~> 3.13.13")
48
+ spec.add_dependency("zeitwerk", "~> 2.6.0")
46
49
  spec.metadata['rubygems_mfa_required'] = 'true'
47
50
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whatsapp_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ignacio-chiazzo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-11 00:00:00.000000000 Z
11
+ date: 2022-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: faraday
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,23 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.13.13
97
- description: Ruby Whatsapp SDK. Use the Whatsapp API through this library
97
+ - !ruby/object:Gem::Dependency
98
+ name: zeitwerk
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.6.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.6.0
111
+ description: |2
112
+ Use the Ruby Whatsapp SDK to comunicate with Whatsapp API using the Cloud API.
113
+ Create bots to send and receive messages using the Whatsapp SDK in a few minutes.
98
114
  email:
99
115
  - ignaciochiazzo@gmail.com
100
116
  executables: []
@@ -102,6 +118,9 @@ extensions: []
102
118
  extra_rdoc_files: []
103
119
  files:
104
120
  - ".circleci/config.yml"
121
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
122
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
123
+ - ".github/workflows/codeql-analysis.yml"
105
124
  - ".github/workflows/dependency-review.yml"
106
125
  - ".github/workflows/ruby.yml"
107
126
  - ".gitignore"
@@ -134,6 +153,7 @@ files:
134
153
  - lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb
135
154
  - lib/whatsapp_sdk/api/responses/read_message_data_response.rb
136
155
  - lib/whatsapp_sdk/api/responses/success_response.rb
156
+ - lib/whatsapp_sdk/configuration.rb
137
157
  - lib/whatsapp_sdk/error.rb
138
158
  - lib/whatsapp_sdk/resource/address.rb
139
159
  - lib/whatsapp_sdk/resource/button_parameter.rb
@@ -152,13 +172,13 @@ files:
152
172
  - lib/whatsapp_sdk/resource/url.rb
153
173
  - tmp/whatsapp.png
154
174
  - whatsapp_sdk.gemspec
155
- homepage: https://github.com/ignacio-chiazzo/whatsapp_sdk
175
+ homepage: https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk
156
176
  licenses:
157
177
  - MIT
158
178
  metadata:
159
- homepage_uri: https://github.com/ignacio-chiazzo/whatsapp_sdk
160
- source_code_uri: https://github.com/ignacio-chiazzo/whatsapp_sdk
161
- changelog_uri: https://github.com/ignacio-chiazzo/whatsapp_sdk/blob/main/CHANGELOG.md
179
+ homepage_uri: https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk
180
+ source_code_uri: https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk
181
+ changelog_uri: https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/blob/main/CHANGELOG.md
162
182
  rubygems_mfa_required: 'true'
163
183
  post_install_message:
164
184
  rdoc_options: []
@@ -178,5 +198,6 @@ requirements: []
178
198
  rubygems_version: 3.2.3
179
199
  signing_key:
180
200
  specification_version: 4
181
- summary: Use the Whatsapp SDK to comunicate with Whatsapp API
201
+ summary: Use the Ruby Whatsapp SDK to comunicate with Whatsapp API using the Cloud
202
+ API
182
203
  test_files: []