plivo 4.56.0 → 4.57.0

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
  SHA1:
3
- metadata.gz: f30ff0d80407fc770beb03a8889bf6dacafc8742
4
- data.tar.gz: 930c4826d997a597f909dc4eb83aac4d43e6729e
3
+ metadata.gz: a90c7167882dbe60104e0ff29cf88e4b4df1d762
4
+ data.tar.gz: e52148f05ce9e96049b63ea1453f9c050932c303
5
5
  SHA512:
6
- metadata.gz: 8293924cb842fb82415f1b3c4e1116a99340d9467d8827caa95906b4b249f2d82855d03379c8d80edff4cfb9ebcb4558933e7e9ae7f87ba85afb90e6f5b9eef7
7
- data.tar.gz: 57337155f190fd2d39abd96e0f6bb8304d3428ccbef7dafa61f3e0cde573ce3d24184a44db61da8bc92a4b29cbf125066dc2acb35a1dbee581d2e35b148381cf
6
+ metadata.gz: 418f3f2d85ea8482e99314de098c8719dae66581a5f9ea9d470ecb7f3820b3829a0348ea704810928d73a513b3704fcce6b3c2058eab247c63fd7bcb6b2916cb
7
+ data.tar.gz: 7f69bf8b16f6d7408d0767b58f8b041fe89eb66c2360b8a0fbafd2cb3b6c517118875b19204f3c7259210e98dce611113814771d78f6ed5d82451597e2177e2c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## [4.57.0](https://github.com/plivo/plivo-ruby/tree/v4.57.0) (2023-05-07)
4
+ **Feature - Adding support for interactive whatsapp messages**
5
+ - Added new param `interactive` to [send message API](https://www.plivo.com/docs/sms/api/message#send-a-message) to support interactive `whatsapp` messages
6
+
3
7
  ## [4.56.0](https://github.com/plivo/plivo-ruby/tree/v4.56.0) (2023-04-18)
4
8
  **Feature - Support for dynamic button components when sending a templated WhatsApp message**
5
9
  - Added new param `payload` in templates to support dynamic payload in templates
data/README.md CHANGED
@@ -9,7 +9,7 @@ The Plivo Ruby SDK makes it simpler to integrate communications into your Ruby a
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'plivo', '>= 4.56.0'
12
+ gem 'plivo', '>= 4.57.0'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -0,0 +1,139 @@
1
+ require_relative "template"
2
+
3
+ module Plivo
4
+ class Interactive
5
+ attr_accessor :type, :header, :body, :footer, :action
6
+
7
+ def initialize(type: nil, header: nil, body: nil, footer: nil, action: nil)
8
+ @type = type
9
+ @header = header
10
+ @body = body
11
+ @footer = footer
12
+ @action = action
13
+ end
14
+
15
+ def to_hash
16
+ {
17
+ type: @type,
18
+ header: @header&.to_hash,
19
+ body: @body&.to_hash,
20
+ footer: @footer&.to_hash,
21
+ action: @action&.to_hash
22
+ }.reject { |_, v| v.nil? }
23
+ end
24
+ end
25
+
26
+ class Header
27
+ attr_accessor :type, :text, :media
28
+
29
+ def initialize(type: nil, text: nil, media: nil)
30
+ @type = type
31
+ @text = text
32
+ @media = media
33
+ end
34
+
35
+ def to_hash
36
+ {
37
+ type: @type,
38
+ text: @text,
39
+ media: @media
40
+ }.reject { |_, v| v.nil? }
41
+ end
42
+ end
43
+
44
+ class Body
45
+ attr_accessor :text
46
+
47
+ def initialize(text: nil)
48
+ @text = text
49
+ end
50
+
51
+ def to_hash
52
+ {
53
+ text: @text
54
+ }.reject { |_, v| v.nil? }
55
+ end
56
+ end
57
+
58
+ class Footer
59
+ attr_accessor :text
60
+
61
+ def initialize(text: nil)
62
+ @text = text
63
+ end
64
+
65
+ def to_hash
66
+ {
67
+ text: @text
68
+ }.reject { |_, v| v.nil? }
69
+ end
70
+ end
71
+
72
+ class Action
73
+ attr_accessor :buttons, :sections
74
+
75
+ def initialize(buttons: nil, sections: nil)
76
+ @buttons = buttons ? buttons.map { |b| Buttons.new(**b) } : []
77
+ @sections = sections ? sections.map { |s| Section.new(**s) } : []
78
+ end
79
+
80
+ def to_hash
81
+ {
82
+ buttons: @buttons.map(&:to_hash),
83
+ sections: @sections.map(&:to_hash),
84
+ }.reject { |_, v| v.nil? }
85
+ end
86
+ end
87
+
88
+ class Buttons
89
+ attr_accessor :id, :title, :cta_url
90
+
91
+ def initialize(id: nil, title: nil, cta_url: nil)
92
+ @id = id
93
+ @title = title
94
+ @cta_url = cta_url
95
+ end
96
+
97
+ def to_hash
98
+ {
99
+ id: @id,
100
+ title: @title,
101
+ cta_url: @cta_url
102
+ }.reject { |_, v| v.nil? }
103
+ end
104
+ end
105
+
106
+ class Section
107
+ attr_accessor :title, :rows
108
+
109
+ def initialize(title: nil, rows: nil)
110
+ @title = title
111
+ @rows = rows ? rows.map { |r| Row.new(**r) } : []
112
+ end
113
+
114
+ def to_hash
115
+ {
116
+ title: @title,
117
+ rows: @rows.map(&:to_hash),
118
+ }.reject { |_, v| v.nil? }
119
+ end
120
+ end
121
+
122
+ class Row
123
+ attr_accessor :id, :title, :description
124
+
125
+ def initialize(id: nil, title: nil, description: nil)
126
+ @id = id
127
+ @title = title
128
+ @description = description
129
+ end
130
+
131
+ def to_hash
132
+ {
133
+ id: @id,
134
+ title: @title,
135
+ description: @description
136
+ }.reject { |_, v| v.nil? }
137
+ end
138
+ end
139
+ end
@@ -92,6 +92,7 @@ module Plivo
92
92
  # @option options [String] :dlt_template_id This is the DLT template id passed in the message request.
93
93
  # @option options [String] :dlt_template_category This is the DLT template category passed in the message request.
94
94
  # @option options [Hash] :template This is the template used in the whatsapp message request. It can handle both JSON and String.
95
+ # @option options [Hash] :interactive This is the interactive parameter used in the whatsapp message request. It can handle both JSON and String.
95
96
 
96
97
  def create(src = nil, dst = nil, text = nil, options = nil, powerpack_uuid = nil)
97
98
  #All params in One HASH
@@ -227,6 +228,29 @@ module Plivo
227
228
  end
228
229
  end
229
230
 
231
+ if value.key?(:template) && value.key?(:type) && (value[:type] != "whatsapp")
232
+ raise InvalidRequestError, 'template parameter is only applicable when type is whatsapp'
233
+ end
234
+
235
+ if value.is_a?(Hash) && !value[:interactive].nil?
236
+ if value.key?(:interactive)
237
+ if value[:interactive].is_a?(String)
238
+ begin
239
+ json_interactive = JSON.parse(value[:interactive])
240
+ params[:interactive] = json_interactive
241
+ rescue JSON::ParserError => e
242
+ raise InvalidRequestError, 'failed to parse interactive as JSON'
243
+ end
244
+ elsif value[:interactive].is_a?(Hash)
245
+ params[:interactive] = value[:interactive]
246
+ elsif value[:interactive].is_a?(Plivo::Interactive)
247
+ params[:interactive] = value[:interactive].to_hash
248
+ else
249
+ raise InvalidRequestError, 'invalid interactive format'
250
+ end
251
+ end
252
+ end
253
+
230
254
  #legacy code compatibility
231
255
  else
232
256
  valid_param?(:src, src, [Integer, String, Symbol], false)
@@ -372,6 +396,25 @@ module Plivo
372
396
  end
373
397
  end
374
398
 
399
+ if options.is_a?(Hash) && !options[:interactive].nil?
400
+ if options.key?(:interactive)
401
+ if options[:interactive].is_a?(String)
402
+ begin
403
+ json_interactive = JSON.parse(options[:interactive])
404
+ params[:interactive] = json_interactive
405
+ rescue JSON::ParserError => e
406
+ raise InvalidRequestError, 'failed to parse interactive as JSON'
407
+ end
408
+ elsif options[:interactive].is_a?(Hash)
409
+ params[:interactive] = options[:interactive]
410
+ elsif options[:interactive].is_a?(Plivo::Interactive)
411
+ params[:interactive] = options[:interactive].to_hash
412
+ else
413
+ raise InvalidRequestError, 'invalid interactive format'
414
+ end
415
+ end
416
+ end
417
+
375
418
  end
376
419
  perform_create(params)
377
420
  end
data/lib/plivo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plivo
2
- VERSION = "4.56.0".freeze
2
+ VERSION = "4.57.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plivo
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.56.0
4
+ version: 4.57.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Plivo SDKs Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-18 00:00:00.000000000 Z
11
+ date: 2024-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -166,6 +166,7 @@ files:
166
166
  - lib/plivo/base/response.rb
167
167
  - lib/plivo/base_client.rb
168
168
  - lib/plivo/exceptions.rb
169
+ - lib/plivo/interactive.rb
169
170
  - lib/plivo/jwt.rb
170
171
  - lib/plivo/phlo_client.rb
171
172
  - lib/plivo/resources.rb