messagemedia_messages_sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.md +608 -0
  4. data/lib/message_media_messages.rb +50 -0
  5. data/lib/message_media_messages/api_helper.rb +209 -0
  6. data/lib/message_media_messages/configuration.rb +29 -0
  7. data/lib/message_media_messages/controllers/base_controller.rb +57 -0
  8. data/lib/message_media_messages/controllers/delivery_reports_controller.rb +208 -0
  9. data/lib/message_media_messages/controllers/messages_controller.rb +336 -0
  10. data/lib/message_media_messages/controllers/replies_controller.rb +208 -0
  11. data/lib/message_media_messages/exceptions/api_exception.rb +18 -0
  12. data/lib/message_media_messages/http/auth/basic_auth.rb +20 -0
  13. data/lib/message_media_messages/http/faraday_client.rb +55 -0
  14. data/lib/message_media_messages/http/http_call_back.rb +22 -0
  15. data/lib/message_media_messages/http/http_client.rb +92 -0
  16. data/lib/message_media_messages/http/http_context.rb +18 -0
  17. data/lib/message_media_messages/http/http_method_enum.rb +11 -0
  18. data/lib/message_media_messages/http/http_request.rb +48 -0
  19. data/lib/message_media_messages/http/http_response.rb +21 -0
  20. data/lib/message_media_messages/message_media_messages_client.rb +39 -0
  21. data/lib/message_media_messages/models/base_model.rb +34 -0
  22. data/lib/message_media_messages/models/cancel_scheduled_message_request.rb +35 -0
  23. data/lib/message_media_messages/models/check_delivery_reports_response.rb +35 -0
  24. data/lib/message_media_messages/models/check_replies_response.rb +35 -0
  25. data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request.rb +35 -0
  26. data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request_11.rb +35 -0
  27. data/lib/message_media_messages/models/confirm_replies_as_received_request.rb +35 -0
  28. data/lib/message_media_messages/models/confirm_replies_as_received_request_8.rb +35 -0
  29. data/lib/message_media_messages/models/send_messages_request.rb +35 -0
  30. data/lib/message_media_messages/models/send_messages_response.rb +35 -0
  31. data/test/controllers/controller_test_base.rb +30 -0
  32. data/test/controllers/test_delivery_reports_controller.rb +131 -0
  33. data/test/controllers/test_messages_controller.rb +105 -0
  34. data/test/controllers/test_replies_controller.rb +132 -0
  35. data/test/http_response_catcher.rb +16 -0
  36. data/test/test_helper.rb +91 -0
  37. metadata +168 -0
@@ -0,0 +1,50 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+ require 'date'
4
+ require 'json'
5
+ require 'faraday'
6
+ require 'certifi'
7
+ require 'logging'
8
+
9
+ require_relative 'message_media_messages/api_helper.rb'
10
+ require_relative 'message_media_messages/message_media_messages_client.rb'
11
+
12
+ # Http
13
+ require_relative 'message_media_messages/http/http_call_back.rb'
14
+ require_relative 'message_media_messages/http/http_client.rb'
15
+ require_relative 'message_media_messages/http/http_method_enum.rb'
16
+ require_relative 'message_media_messages/http/http_request.rb'
17
+ require_relative 'message_media_messages/http/http_response.rb'
18
+ require_relative 'message_media_messages/http/http_context.rb'
19
+ require_relative 'message_media_messages/http/faraday_client.rb'
20
+ require_relative 'message_media_messages/http/auth/basic_auth.rb'
21
+
22
+ # Models
23
+ require_relative 'message_media_messages/models/base_model.rb'
24
+ require_relative 'message_media_messages/models' \
25
+ '/check_delivery_reports_response.rb'
26
+ require_relative 'message_media_messages/models' \
27
+ '/confirm_replies_as_received_request_8.rb'
28
+ require_relative 'message_media_messages/models' \
29
+ '/confirm_replies_as_received_request.rb'
30
+ require_relative 'message_media_messages/models/check_replies_response.rb'
31
+ require_relative 'message_media_messages/models' \
32
+ '/cancel_scheduled_message_request.rb'
33
+ require_relative 'message_media_messages/models/send_messages_response.rb'
34
+ require_relative 'message_media_messages/models/send_messages_request.rb'
35
+ require_relative 'message_media_messages/models' \
36
+ '/confirm_delivery_reports_as_received_request.rb'
37
+ require_relative 'message_media_messages/models' \
38
+ '/confirm_delivery_reports_as_received_request_11.rb'
39
+
40
+ # Exceptions
41
+ require_relative 'message_media_messages/exceptions/api_exception.rb'
42
+
43
+ require_relative 'message_media_messages/configuration.rb'
44
+
45
+ # Controllers
46
+ require_relative 'message_media_messages/controllers/base_controller.rb'
47
+ require_relative 'message_media_messages/controllers/messages_controller.rb'
48
+ require_relative 'message_media_messages/controllers' \
49
+ '/delivery_reports_controller.rb'
50
+ require_relative 'message_media_messages/controllers/replies_controller.rb'
@@ -0,0 +1,209 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # API utility class
6
+ class APIHelper
7
+ # Serializes an array parameter (creates key value pairs).
8
+ # @param [String] The name of the parameter.
9
+ # @param [Array] The value of the parameter.
10
+ # @param [String] The format of the serialization.
11
+ def self.serialize_array(key, array, formatting: 'indexed')
12
+ tuples = []
13
+
14
+ if formatting == 'unindexed'
15
+ tuples += array.map { |element| ["#{key}[]", element] }
16
+ elsif formatting == 'indexed'
17
+ tuples += array.map.with_index do |element, index|
18
+ ["#{key}[#{index}]", element]
19
+ end
20
+ elsif formatting == 'plain'
21
+ tuples += array.map { |element| [key, element] }
22
+ else
23
+ raise ArgumentError, 'Invalid format provided.'
24
+ end
25
+ tuples
26
+ end
27
+
28
+ # Replaces template parameters in the given url.
29
+ # @param [String] The query string builder to replace the template
30
+ # parameters.
31
+ # @param [Hash] The parameters to replace in the url.
32
+ def self.append_url_with_template_parameters(query_builder, parameters)
33
+ # perform parameter validation
34
+ unless query_builder.instance_of? String
35
+ raise ArgumentError, 'Given value for parameter \"query_builder\" is
36
+ invalid.'
37
+ end
38
+
39
+ # Return if there are no parameters to replace.
40
+ return query_builder if parameters.nil?
41
+
42
+ # Iterate and append parameters.
43
+ parameters.each do |key, value|
44
+ replace_value = ''
45
+
46
+ if value.nil?
47
+ replace_value = ''
48
+ elsif value.instance_of? Array
49
+ value.map! { |element| CGI.escape(element.to_s) }
50
+ replace_value = value.join('/')
51
+ else
52
+ replace_value = CGI.escape(value.to_s)
53
+ end
54
+
55
+ # Find the template parameter and replace it with its value.
56
+ query_builder = query_builder.gsub('{' + key.to_s + '}', replace_value)
57
+ end
58
+ query_builder
59
+ end
60
+
61
+ # Appends the given set of parameters to the given query string.
62
+ # @param [String] The query string builder to add the query parameters to.
63
+ # @param [Hash] The parameters to append.
64
+ # @param [String] The format of array parameter serialization.
65
+ def self.append_url_with_query_parameters(query_builder, parameters,
66
+ array_serialization: 'indexed')
67
+ # Perform parameter validation.
68
+ unless query_builder.instance_of? String
69
+ raise ArgumentError, 'Given value for parameter \"query_builder\"
70
+ is invalid.'
71
+ end
72
+
73
+ # Return if there are no parameters to replace.
74
+ return query_builder if parameters.nil?
75
+
76
+ parameters.each do |key, value|
77
+ seperator = query_builder.include?('?') ? '&' : '?'
78
+ unless value.nil?
79
+ if value.instance_of? Array
80
+ value.compact!
81
+ query_builder += if array_serialization == 'csv'
82
+ "#{seperator}#{key}=#{value.map do |element|
83
+ CGI.escape(element.to_s)
84
+ end.join(',')}"
85
+ elsif array_serialization == 'psv'
86
+ "#{seperator}#{key}=#{value.map do |element|
87
+ CGI.escape(element.to_s)
88
+ end.join('|')}"
89
+ elsif array_serialization == 'tsv'
90
+ "#{seperator}#{key}=#{value.map do |element|
91
+ CGI.escape(element.to_s)
92
+ end.join('\t')}"
93
+ else
94
+ "#{seperator}#{APIHelper.serialize_array(
95
+ key, value, formatting: array_serialization
96
+ ).map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }
97
+ .join('&')}"
98
+ end
99
+ else
100
+ query_builder += "#{seperator}#{key}=#{CGI.escape(value.to_s)}"
101
+ end
102
+ end
103
+ end
104
+ query_builder
105
+ end
106
+
107
+ # Validates and processes the given Url.
108
+ # @param [String] The given Url to process.
109
+ # @return [String] Pre-processed Url as string.
110
+ def self.clean_url(url)
111
+ # Perform parameter validation.
112
+ raise ArgumentError, 'Invalid Url.' unless url.instance_of? String
113
+
114
+ # Ensure that the urls are absolute.
115
+ matches = url.match(%r{^(https?:\/\/[^\/]+)})
116
+ raise ArgumentError, 'Invalid Url format.' if matches.nil?
117
+
118
+ # Get the http protocol match.
119
+ protocol = matches[1]
120
+
121
+ # Check if parameters exist.
122
+ index = url.index('?')
123
+
124
+ # Remove redundant forward slashes.
125
+ query = url[protocol.length...(!index.nil? ? index : url.length)]
126
+ query.gsub!(%r{\/\/+}, '/')
127
+
128
+ # Get the parameters.
129
+ parameters = !index.nil? ? url[url.index('?')...url.length] : ''
130
+
131
+ # Return processed url.
132
+ protocol + query + parameters
133
+ end
134
+
135
+ # Parses JSON string.
136
+ # @param [String] A JSON string.
137
+ def self.json_deserialize(json)
138
+ return JSON.parse(json)
139
+ rescue StandardError
140
+ raise TypeError, 'Server responded with invalid JSON.'
141
+ end
142
+
143
+ # Removes elements with empty values from a hash.
144
+ # @param [Hash] The hash to clean.
145
+ def self.clean_hash(hash)
146
+ hash.delete_if { |_key, value| value.to_s.strip.empty? }
147
+ end
148
+
149
+ # Form encodes a hash of parameters.
150
+ # @param [Hash] The hash of parameters to encode.
151
+ # @return [Hash] A hash with the same parameters form encoded.
152
+ def self.form_encode_parameters(form_parameters)
153
+ encoded = {}
154
+ form_parameters.each do |key, value|
155
+ encoded.merge!(APIHelper.form_encode(value, key))
156
+ end
157
+ encoded
158
+ end
159
+
160
+ # Form encodes an object.
161
+ # @param [Dynamic] An object to form encode.
162
+ # @param [String] The name of the object.
163
+ # @return [Hash] A form encoded representation of the object in the form
164
+ # of a hash.
165
+ def self.form_encode(obj, instance_name)
166
+ retval = {}
167
+
168
+ # If this is a structure, resolve it's field names.
169
+ obj = obj.to_hash if obj.is_a? BaseModel
170
+
171
+ # Create a form encoded hash for this object.
172
+ if obj.nil?
173
+ nil
174
+ elsif obj.instance_of? Array
175
+ obj.each_with_index do |value, index|
176
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
177
+ index.to_s + ']'))
178
+ end
179
+ elsif obj.instance_of? Hash
180
+ obj.each do |key, value|
181
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' +
182
+ key + ']'))
183
+ end
184
+ else
185
+ retval[instance_name] = obj
186
+ end
187
+ retval
188
+ end
189
+ end
190
+ end
191
+
192
+ # Extend types to support to_bool.
193
+ module ToBoolean
194
+ def to_bool
195
+ return true if self == true || to_s.strip =~ /^(true|yes|y|1)$/i
196
+ false
197
+ end
198
+ end
199
+
200
+ # Extend NilClass type to support to_bool.
201
+ class NilClass; include ToBoolean; end
202
+ # Extend TrueClass type to support to_bool.
203
+ class TrueClass; include ToBoolean; end
204
+ # Extend FalseClass type to support to_bool.
205
+ class FalseClass; include ToBoolean; end
206
+ # Extend Numeric type to support to_bool.
207
+ class Numeric; include ToBoolean; end
208
+ # Extend String type to support to_bool.
209
+ class String; include ToBoolean; end
@@ -0,0 +1,29 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+
6
+ Logging.logger.root.appenders = Logging.appenders.stdout
7
+ Logging.logger.root.level = :info
8
+
9
+ # All configuration including auth info and base URI for the API access
10
+ # are configured in this class.
11
+ class Configuration
12
+ # The base Uri for API calls
13
+ @base_uri = 'https://api.messagemedia.com'
14
+
15
+ # The username to use with basic authentication
16
+ @basic_auth_user_name = 'TODO: Replace'
17
+
18
+ # The password to use with basic authentication
19
+ @basic_auth_password = 'TODO: Replace'
20
+
21
+ # The attribute accessors for public properties.
22
+ class << self
23
+ attr_accessor :array_serialization
24
+ attr_accessor :base_uri
25
+ attr_accessor :basic_auth_user_name
26
+ attr_accessor :basic_auth_password
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,57 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # Base controller.
6
+ class BaseController
7
+ attr_accessor :http_client, :http_call_back
8
+
9
+ def initialize(http_client: nil, http_call_back: nil)
10
+ @http_client = http_client || FaradayClient.new
11
+ @http_call_back = http_call_back
12
+
13
+ @global_headers = {
14
+ 'user-agent' => 'messagemedia-messages-ruby-sdk-1.0.0'
15
+ }
16
+ @logger = Logging.logger[self]
17
+ @logger.info("Instantiated controller class.")
18
+ end
19
+
20
+ def validate_parameters(args)
21
+ args.each do |_name, value|
22
+ if value.nil?
23
+ raise ArgumentError, "Required parameter #{_name} cannot be nil."
24
+ end
25
+ end
26
+ end
27
+
28
+ def execute_request(request, binary: false, name: nil)
29
+ @logger.info("Calling the on_before_request method of http_call_back for #{name}.") if @http_call_back
30
+ @http_call_back.on_before_request(request) if @http_call_back
31
+
32
+ @logger.info("Merging global headers with endpoint headers for #{name}.")
33
+ APIHelper.clean_hash(request.headers)
34
+ request.headers = @global_headers.clone.merge(request.headers)
35
+
36
+ @logger.debug("Raw request for #{name} is: #{request.inspect}")
37
+ response = if binary
38
+ @http_client.execute_as_binary(request)
39
+ else
40
+ @http_client.execute_as_string(request)
41
+ end
42
+ @logger.debug("Raw response for #{name} is: #{response.inspect}")
43
+ @logger.info("Wrapping request and response in a context object for #{name}.")
44
+ context = HttpContext.new(request, response)
45
+
46
+ @logger.info("Calling on_after_response method of http_call_back for #{name}.") if @http_call_back
47
+ @http_call_back.on_after_response(context) if @http_call_back
48
+
49
+ context
50
+ end
51
+
52
+ def validate_response(context)
53
+ raise APIException.new 'HTTP Response Not OK', context unless
54
+ context.response.status_code.between?(200, 208) # [200,208] = HTTP OK
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,208 @@
1
+ # This file was automatically generated for MessageMedia by APIMATIC v2.0
2
+ # ( https://apimatic.io ).
3
+
4
+ module MessageMediaMessages
5
+ # DeliveryReportsController
6
+ class DeliveryReportsController < BaseController
7
+ @instance = DeliveryReportsController.new
8
+
9
+ class << self
10
+ attr_accessor :instance
11
+ end
12
+
13
+ def instance
14
+ self.class.instance
15
+ end
16
+
17
+ # Check for any delivery reports that have been received.
18
+ # Delivery reports are a notification of the change in status of a message
19
+ # as it is being processed.
20
+ # Each request to the check delivery reports endpoint will return any
21
+ # delivery reports received that
22
+ # have not yet been confirmed using the confirm delivery reports endpoint. A
23
+ # response from the check
24
+ # delivery reports endpoint will have the following structure:
25
+ # ```json
26
+ # {
27
+ # "delivery_reports": [
28
+ # {
29
+ # "callback_url": "https://my.callback.url.com",
30
+ # "delivery_report_id": "01e1fa0a-6e27-4945-9cdb-18644b4de043",
31
+ # "source_number": "+61491570157",
32
+ # "date_received": "2017-05-20T06:30:37.642Z",
33
+ # "status": "enroute",
34
+ # "delay": 0,
35
+ # "submitted_date": "2017-05-20T06:30:37.639Z",
36
+ # "original_text": "My first message!",
37
+ # "message_id": "d781dcab-d9d8-4fb2-9e03-872f07ae94ba",
38
+ # "vendor_account_id": {
39
+ # "vendor_id": "MessageMedia",
40
+ # "account_id": "MyAccount"
41
+ # },
42
+ # "metadata": {
43
+ # "key1": "value1",
44
+ # "key2": "value2"
45
+ # }
46
+ # },
47
+ # {
48
+ # "callback_url": "https://my.callback.url.com",
49
+ # "delivery_report_id": "0edf9022-7ccc-43e6-acab-480e93e98c1b",
50
+ # "source_number": "+61491570158",
51
+ # "date_received": "2017-05-21T01:46:42.579Z",
52
+ # "status": "enroute",
53
+ # "delay": 0,
54
+ # "submitted_date": "2017-05-21T01:46:42.574Z",
55
+ # "original_text": "My second message!",
56
+ # "message_id": "fbb3b3f5-b702-4d8b-ab44-65b2ee39a281",
57
+ # "vendor_account_id": {
58
+ # "vendor_id": "MessageMedia",
59
+ # "account_id": "MyAccount"
60
+ # },
61
+ # "metadata": {
62
+ # "key1": "value1",
63
+ # "key2": "value2"
64
+ # }
65
+ # }
66
+ # ]
67
+ # }
68
+ # ```
69
+ # Each delivery report will contain details about the message, including any
70
+ # metadata specified
71
+ # and the new status of the message (as each delivery report indicates a
72
+ # change in status of a
73
+ # message) and the timestamp at which the status changed. Every delivery
74
+ # report will have a
75
+ # unique delivery report ID for use with the confirm delivery reports
76
+ # endpoint.
77
+ # *Note: The source number and destination number properties in a delivery
78
+ # report are the inverse of
79
+ # those specified in the message that the delivery report relates to. The
80
+ # source number of the
81
+ # delivery report is the destination number of the original message.*
82
+ # Subsequent requests to the check delivery reports endpoint will return the
83
+ # same delivery reports
84
+ # and a maximum of 100 delivery reports will be returned in each request.
85
+ # Applications should use the
86
+ # confirm delivery reports endpoint in the following pattern so that
87
+ # delivery reports that have been
88
+ # processed are no longer returned in subsequent check delivery reports
89
+ # requests.
90
+ # 1. Call check delivery reports endpoint
91
+ # 2. Process each delivery report
92
+ # 3. Confirm all processed delivery reports using the confirm delivery
93
+ # reports endpoint
94
+ # *Note: It is recommended to use the Webhooks feature to receive reply
95
+ # messages rather than
96
+ # polling the check delivery reports endpoint.*
97
+ # @return CheckDeliveryReportsResponse response from the API call
98
+ def get_check_delivery_reports
99
+ begin
100
+ @logger.info("get_check_delivery_reports called.")
101
+ # Prepare query url.
102
+ @logger.info("Preparing query URL for get_check_delivery_reports.")
103
+ _query_builder = Configuration.base_uri.dup
104
+ _query_builder << '/v1/delivery_reports'
105
+ _query_url = APIHelper.clean_url _query_builder
106
+
107
+ # Prepare headers.
108
+ @logger.info("Preparing headers for get_check_delivery_reports.")
109
+ _headers = {
110
+ 'accept' => 'application/json'
111
+ }
112
+
113
+ # Prepare and execute HttpRequest.
114
+ @logger.info('Preparing and executing HttpRequest for get_check_delivery_reports.')
115
+ _request = @http_client.get(
116
+ _query_url,
117
+ headers: _headers
118
+ )
119
+ BasicAuth.apply(_request)
120
+ _context = execute_request(_request, name: 'get_check_delivery_reports')
121
+ validate_response(_context)
122
+
123
+ # Return appropriate response type.
124
+ @logger.info("Returning response for get_check_delivery_reports.")
125
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
126
+ CheckDeliveryReportsResponse.from_hash(decoded)
127
+
128
+ rescue Exception => e
129
+ @logger.error(e)
130
+ raise e
131
+ end
132
+ end
133
+
134
+ # Mark a delivery report as confirmed so it is no longer return in check
135
+ # delivery reports requests.
136
+ # The confirm delivery reports endpoint is intended to be used in
137
+ # conjunction with the check delivery
138
+ # reports endpoint to allow for robust processing of delivery reports. Once
139
+ # one or more delivery
140
+ # reports have been processed, they can then be confirmed using the confirm
141
+ # delivery reports endpoint so they
142
+ # are no longer returned in subsequent check delivery reports requests.
143
+ # The confirm delivery reports endpoint takes a list of delivery report IDs
144
+ # as follows:
145
+ # ```json
146
+ # {
147
+ # "delivery_report_ids": [
148
+ # "011dcead-6988-4ad6-a1c7-6b6c68ea628d",
149
+ # "3487b3fa-6586-4979-a233-2d1b095c7718",
150
+ # "ba28e94b-c83d-4759-98e7-ff9c7edb87a1"
151
+ # ]
152
+ # }
153
+ # ```
154
+ # Up to 100 delivery reports can be confirmed in a single confirm delivery
155
+ # reports request.
156
+ # @param [ConfirmDeliveryReportsAsReceivedRequest] body Required parameter:
157
+ # Example:
158
+ # @return Mixed response from the API call
159
+ def create_confirm_delivery_reports_as_received(body)
160
+ begin
161
+ @logger.info("create_confirm_delivery_reports_as_received called.")
162
+ # Prepare query url.
163
+ @logger.info("Preparing query URL for create_confirm_delivery_reports_as_received.")
164
+ _query_builder = Configuration.base_uri.dup
165
+ _query_builder << '/v1/delivery_reports/confirmed'
166
+ _query_url = APIHelper.clean_url _query_builder
167
+
168
+ # Prepare headers.
169
+ @logger.info("Preparing headers for create_confirm_delivery_reports_as_received.")
170
+ _headers = {
171
+ 'accept' => 'application/json',
172
+ 'content-type' => 'application/json; charset=utf-8'
173
+ }
174
+
175
+ # Prepare and execute HttpRequest.
176
+ @logger.info('Preparing and executing HttpRequest for create_confirm_delivery_reports_as_received.')
177
+ _request = @http_client.post(
178
+ _query_url,
179
+ headers: _headers,
180
+ parameters: body.to_json
181
+ )
182
+ BasicAuth.apply(_request)
183
+ _context = execute_request(_request, name: 'create_confirm_delivery_reports_as_received')
184
+
185
+ # Validate response against endpoint and global error codes.
186
+ @logger.info("Validating response for create_confirm_delivery_reports_as_received.")
187
+ if _context.response.status_code == 400
188
+ raise APIException.new(
189
+ '',
190
+ _context
191
+ )
192
+ end
193
+ validate_response(_context)
194
+
195
+ # Return appropriate response type.
196
+ @logger.info("Returning response for create_confirm_delivery_reports_as_received.")
197
+ decoded = APIHelper.json_deserialize(_context.response.raw_body) unless
198
+ _context.response.raw_body.nil? ||
199
+ _context.response.raw_body.to_s.strip.empty?
200
+ decoded
201
+
202
+ rescue Exception => e
203
+ @logger.error(e)
204
+ raise e
205
+ end
206
+ end
207
+ end
208
+ end