bandwidth-sdk 6.2.0 → 9.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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bandwidth/api_helper.rb +19 -29
  3. data/lib/bandwidth/client.rb +8 -8
  4. data/lib/bandwidth/configuration.rb +20 -32
  5. data/lib/bandwidth/http/auth/{two_factor_auth_basic_auth.rb → multi_factor_auth_basic_auth.rb} +3 -3
  6. data/lib/bandwidth/http/faraday_client.rb +1 -1
  7. data/lib/bandwidth/messaging_lib/messaging/client.rb +14 -5
  8. data/lib/bandwidth/messaging_lib/messaging/controllers/api_controller.rb +78 -71
  9. data/lib/bandwidth/messaging_lib/messaging/controllers/base_controller.rb +3 -5
  10. data/lib/bandwidth/messaging_lib/messaging/exceptions/messaging_exception.rb +5 -2
  11. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_callback_message.rb +31 -11
  12. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_message.rb +54 -25
  13. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_message_item.rb +102 -24
  14. data/lib/bandwidth/messaging_lib/messaging/models/bandwidth_messages_list.rb +23 -4
  15. data/lib/bandwidth/messaging_lib/messaging/models/deferred_result.rb +20 -4
  16. data/lib/bandwidth/messaging_lib/messaging/models/media.rb +27 -80
  17. data/lib/bandwidth/messaging_lib/messaging/models/message_request.rb +32 -14
  18. data/lib/bandwidth/messaging_lib/messaging/models/page_info.rb +28 -8
  19. data/lib/bandwidth/messaging_lib/messaging/models/tag.rb +20 -4
  20. data/lib/bandwidth/models/base_model.rb +30 -8
  21. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/client.rb +15 -6
  22. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/controllers/base_controller.rb +3 -5
  23. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/controllers/mfa_controller.rb +28 -23
  24. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/exceptions/error_with_request_exception.rb +5 -2
  25. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/exceptions/forbidden_request_exception.rb +4 -1
  26. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/exceptions/unauthorized_request_exception.rb +4 -1
  27. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/models/two_factor_code_request_schema.rb +27 -12
  28. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/models/two_factor_messaging_response.rb +17 -2
  29. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/models/two_factor_verify_code_response.rb +17 -2
  30. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/models/two_factor_verify_request_schema.rb +29 -10
  31. data/lib/bandwidth/{two_factor_auth_lib/two_factor_auth → multi_factor_auth_lib/multi_factor_auth}/models/two_factor_voice_response.rb +17 -2
  32. data/lib/bandwidth/multi_factor_auth_lib/multi_factor_auth.rb +23 -0
  33. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/controllers/api_controller.rb +212 -210
  34. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/controllers/base_controller.rb +3 -5
  35. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/exceptions/accounts_tnlookup400_error_exception.rb +4 -1
  36. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_request.rb +17 -2
  37. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_response.rb +20 -4
  38. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/order_status.rb +28 -7
  39. data/lib/bandwidth/phone_number_lookup_lib/phone_number_lookup/models/result.rb +43 -18
  40. data/lib/bandwidth/utilities/date_time_helper.rb +156 -0
  41. data/lib/bandwidth/utilities/file_wrapper.rb +1 -2
  42. data/lib/bandwidth/voice_lib/voice/client.rb +14 -5
  43. data/lib/bandwidth/voice_lib/voice/controllers/api_controller.rb +418 -379
  44. data/lib/bandwidth/voice_lib/voice/controllers/base_controller.rb +3 -5
  45. data/lib/bandwidth/voice_lib/voice/exceptions/{api_error_response_exception.rb → api_error_exception.rb} +8 -5
  46. data/lib/bandwidth/voice_lib/voice/models/call_callback.rb +343 -0
  47. data/lib/bandwidth/voice_lib/voice/models/call_recording_metadata.rb +250 -0
  48. data/lib/bandwidth/voice_lib/voice/models/call_state.rb +284 -0
  49. data/lib/bandwidth/voice_lib/voice/models/callback_method_enum.rb +2 -20
  50. data/lib/bandwidth/voice_lib/voice/models/conference_callback.rb +211 -0
  51. data/lib/bandwidth/voice_lib/voice/models/conference_event_method_enum.rb +2 -20
  52. data/lib/bandwidth/voice_lib/voice/models/{conference_member_detail.rb → conference_member_state.rb} +43 -20
  53. data/lib/bandwidth/voice_lib/voice/models/conference_recording_metadata.rb +173 -0
  54. data/lib/bandwidth/voice_lib/voice/models/conference_state.rb +153 -0
  55. data/lib/bandwidth/voice_lib/voice/models/create_call_request.rb +301 -0
  56. data/lib/bandwidth/voice_lib/voice/models/create_call_response.rb +256 -0
  57. data/lib/bandwidth/voice_lib/voice/models/diversion.rb +80 -0
  58. data/lib/bandwidth/voice_lib/voice/models/fallback_method_enum.rb +17 -0
  59. data/lib/bandwidth/voice_lib/voice/models/machine_detection_configuration.rb +218 -0
  60. data/lib/bandwidth/voice_lib/voice/models/mode_enum.rb +20 -0
  61. data/lib/bandwidth/voice_lib/voice/models/{modify_call_recording_state.rb → modify_call_recording_request.rb} +19 -6
  62. data/lib/bandwidth/voice_lib/voice/models/modify_call_request.rb +156 -0
  63. data/lib/bandwidth/voice_lib/voice/models/modify_conference_request.rb +144 -0
  64. data/lib/bandwidth/voice_lib/voice/models/state1_enum.rb +7 -4
  65. data/lib/bandwidth/voice_lib/voice/models/state_enum.rb +4 -7
  66. data/lib/bandwidth/voice_lib/voice/models/transcribe_recording_request.rb +108 -0
  67. data/lib/bandwidth/voice_lib/voice/models/transcript.rb +20 -4
  68. data/lib/bandwidth/voice_lib/voice/models/transcription.rb +35 -17
  69. data/lib/bandwidth/voice_lib/voice/models/transcription_metadata.rb +89 -0
  70. data/lib/bandwidth/voice_lib/voice/models/transcription_response.rb +18 -1
  71. data/lib/bandwidth/voice_lib/voice.rb +20 -18
  72. data/lib/bandwidth/web_rtc_lib/utils/web_rtc_transfer.rb +7 -2
  73. data/lib/bandwidth/web_rtc_lib/web_rtc/client.rb +4 -4
  74. data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/api_controller.rb +75 -64
  75. data/lib/bandwidth/web_rtc_lib/web_rtc/controllers/base_controller.rb +3 -5
  76. data/lib/bandwidth/web_rtc_lib/web_rtc/exceptions/error_exception.rb +5 -2
  77. data/lib/bandwidth/web_rtc_lib/web_rtc/models/accounts_participants_response.rb +20 -5
  78. data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant.rb +37 -14
  79. data/lib/bandwidth/web_rtc_lib/web_rtc/models/participant_subscription.rb +15 -2
  80. data/lib/bandwidth/web_rtc_lib/web_rtc/models/session.rb +20 -4
  81. data/lib/bandwidth/web_rtc_lib/web_rtc/models/subscriptions.rb +20 -3
  82. data/lib/bandwidth.rb +20 -18
  83. data/test/integration/test_integration.rb +92 -57
  84. metadata +35 -31
  85. data/lib/bandwidth/two_factor_auth_lib/two_factor_auth.rb +0 -22
  86. data/lib/bandwidth/voice_lib/voice/models/api_call_response.rb +0 -207
  87. data/lib/bandwidth/voice_lib/voice/models/api_call_state_response.rb +0 -164
  88. data/lib/bandwidth/voice_lib/voice/models/api_create_call_request.rb +0 -248
  89. data/lib/bandwidth/voice_lib/voice/models/api_modify_call_request.rb +0 -116
  90. data/lib/bandwidth/voice_lib/voice/models/api_modify_conference_request.rb +0 -107
  91. data/lib/bandwidth/voice_lib/voice/models/api_transcribe_recording_request.rb +0 -80
  92. data/lib/bandwidth/voice_lib/voice/models/conference_detail.rb +0 -108
  93. data/lib/bandwidth/voice_lib/voice/models/conference_recording_metadata_response.rb +0 -126
  94. data/lib/bandwidth/voice_lib/voice/models/disconnect_cause_enum.rb +0 -47
  95. data/lib/bandwidth/voice_lib/voice/models/recording_metadata_response.rb +0 -190
  96. data/lib/bandwidth/voice_lib/voice/models/state2_enum.rb +0 -20
  97. data/lib/bandwidth/voice_lib/voice/models/status1_enum.rb +0 -29
  98. data/lib/bandwidth/voice_lib/voice/models/status3_enum.rb +0 -32
@@ -11,19 +11,19 @@ module Messaging
11
11
  super(config, http_call_back: http_call_back)
12
12
  end
13
13
 
14
- # listMedia
15
- # @param [String] user_id Required parameter: User's account ID
14
+ # Gets a list of your media files. No query parameters are supported.
15
+ # @param [String] account_id Required parameter: User's account ID
16
16
  # @param [String] continuation_token Optional parameter: Continuation token
17
17
  # used to retrieve subsequent media.
18
18
  # @return [List of Media] response from the API call
19
- def list_media(user_id,
19
+ def list_media(account_id,
20
20
  continuation_token: nil)
21
21
  # Prepare query url.
22
22
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
23
- _query_builder << '/users/{userId}/media'
23
+ _query_builder << '/users/{accountId}/media'
24
24
  _query_builder = APIHelper.append_url_with_template_parameters(
25
25
  _query_builder,
26
- 'userId' => { 'value' => user_id, 'encode' => false }
26
+ 'accountId' => { 'value' => account_id, 'encode' => false }
27
27
  )
28
28
  _query_url = APIHelper.clean_url _query_builder
29
29
 
@@ -42,32 +42,33 @@ module Messaging
42
42
  _response = execute_request(_request)
43
43
 
44
44
  # Validate response against endpoint and global error codes.
45
- if _response.status_code == 400
45
+ case _response.status_code
46
+ when 400
46
47
  raise MessagingException.new(
47
48
  '400 Request is malformed or invalid',
48
49
  _response
49
50
  )
50
- elsif _response.status_code == 401
51
+ when 401
51
52
  raise MessagingException.new(
52
53
  '401 The specified user does not have access to the account',
53
54
  _response
54
55
  )
55
- elsif _response.status_code == 403
56
+ when 403
56
57
  raise MessagingException.new(
57
58
  '403 The user does not have access to this API',
58
59
  _response
59
60
  )
60
- elsif _response.status_code == 404
61
+ when 404
61
62
  raise MessagingException.new(
62
63
  '404 Path not found',
63
64
  _response
64
65
  )
65
- elsif _response.status_code == 415
66
+ when 415
66
67
  raise MessagingException.new(
67
68
  '415 The content-type of the request is incorrect',
68
69
  _response
69
70
  )
70
- elsif _response.status_code == 429
71
+ when 429
71
72
  raise MessagingException.new(
72
73
  '429 The rate limit has been reached',
73
74
  _response
@@ -83,18 +84,18 @@ module Messaging
83
84
  )
84
85
  end
85
86
 
86
- # getMedia
87
- # @param [String] user_id Required parameter: User's account ID
87
+ # Downloads a media file you previously uploaded.
88
+ # @param [String] account_id Required parameter: User's account ID
88
89
  # @param [String] media_id Required parameter: Media ID to retrieve
89
90
  # @return [Binary] response from the API call
90
- def get_media(user_id,
91
+ def get_media(account_id,
91
92
  media_id)
92
93
  # Prepare query url.
93
94
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
94
- _query_builder << '/users/{userId}/media/{mediaId}'
95
+ _query_builder << '/users/{accountId}/media/{mediaId}'
95
96
  _query_builder = APIHelper.append_url_with_template_parameters(
96
97
  _query_builder,
97
- 'userId' => { 'value' => user_id, 'encode' => false },
98
+ 'accountId' => { 'value' => account_id, 'encode' => false },
98
99
  'mediaId' => { 'value' => media_id, 'encode' => false }
99
100
  )
100
101
  _query_url = APIHelper.clean_url _query_builder
@@ -107,32 +108,33 @@ module Messaging
107
108
  _response = execute_request(_request, binary: true)
108
109
 
109
110
  # Validate response against endpoint and global error codes.
110
- if _response.status_code == 400
111
+ case _response.status_code
112
+ when 400
111
113
  raise MessagingException.new(
112
114
  '400 Request is malformed or invalid',
113
115
  _response
114
116
  )
115
- elsif _response.status_code == 401
117
+ when 401
116
118
  raise MessagingException.new(
117
119
  '401 The specified user does not have access to the account',
118
120
  _response
119
121
  )
120
- elsif _response.status_code == 403
122
+ when 403
121
123
  raise MessagingException.new(
122
124
  '403 The user does not have access to this API',
123
125
  _response
124
126
  )
125
- elsif _response.status_code == 404
127
+ when 404
126
128
  raise MessagingException.new(
127
129
  '404 Path not found',
128
130
  _response
129
131
  )
130
- elsif _response.status_code == 415
132
+ when 415
131
133
  raise MessagingException.new(
132
134
  '415 The content-type of the request is incorrect',
133
135
  _response
134
136
  )
135
- elsif _response.status_code == 429
137
+ when 429
136
138
  raise MessagingException.new(
137
139
  '429 The rate limit has been reached',
138
140
  _response
@@ -146,12 +148,11 @@ module Messaging
146
148
  )
147
149
  end
148
150
 
149
- # uploadMedia
150
- # @param [String] user_id Required parameter: User's account ID
151
+ # Uploads a file the normal HTTP way. You may add headers to the request in
152
+ # order to provide some control to your media-file.
153
+ # @param [String] account_id Required parameter: User's account ID
151
154
  # @param [String] media_id Required parameter: The user supplied custom
152
155
  # media ID
153
- # @param [Long] content_length Required parameter: The size of the
154
- # entity-body
155
156
  # @param [File | UploadIO] body Required parameter: Example:
156
157
  # @param [String] content_type Optional parameter: The media type of the
157
158
  # entity-body
@@ -159,18 +160,17 @@ module Messaging
159
160
  # used to specify directives that MUST be obeyed by all caching mechanisms
160
161
  # along the request/response chain.
161
162
  # @return [void] response from the API call
162
- def upload_media(user_id,
163
+ def upload_media(account_id,
163
164
  media_id,
164
- content_length,
165
165
  body,
166
166
  content_type: 'application/octet-stream',
167
167
  cache_control: nil)
168
168
  # Prepare query url.
169
169
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
170
- _query_builder << '/users/{userId}/media/{mediaId}'
170
+ _query_builder << '/users/{accountId}/media/{mediaId}'
171
171
  _query_builder = APIHelper.append_url_with_template_parameters(
172
172
  _query_builder,
173
- 'userId' => { 'value' => user_id, 'encode' => false },
173
+ 'accountId' => { 'value' => account_id, 'encode' => false },
174
174
  'mediaId' => { 'value' => media_id, 'encode' => false }
175
175
  )
176
176
  _query_url = APIHelper.clean_url _query_builder
@@ -187,7 +187,6 @@ module Messaging
187
187
  _headers = {
188
188
  'content-type' => body_content_type,
189
189
  'content-length' => body_wrapper.size.to_s,
190
- 'Content-Length' => content_length,
191
190
  'Cache-Control' => cache_control
192
191
  }
193
192
 
@@ -201,32 +200,33 @@ module Messaging
201
200
  _response = execute_request(_request)
202
201
 
203
202
  # Validate response against endpoint and global error codes.
204
- if _response.status_code == 400
203
+ case _response.status_code
204
+ when 400
205
205
  raise MessagingException.new(
206
206
  '400 Request is malformed or invalid',
207
207
  _response
208
208
  )
209
- elsif _response.status_code == 401
209
+ when 401
210
210
  raise MessagingException.new(
211
211
  '401 The specified user does not have access to the account',
212
212
  _response
213
213
  )
214
- elsif _response.status_code == 403
214
+ when 403
215
215
  raise MessagingException.new(
216
216
  '403 The user does not have access to this API',
217
217
  _response
218
218
  )
219
- elsif _response.status_code == 404
219
+ when 404
220
220
  raise MessagingException.new(
221
221
  '404 Path not found',
222
222
  _response
223
223
  )
224
- elsif _response.status_code == 415
224
+ when 415
225
225
  raise MessagingException.new(
226
226
  '415 The content-type of the request is incorrect',
227
227
  _response
228
228
  )
229
- elsif _response.status_code == 429
229
+ when 429
230
230
  raise MessagingException.new(
231
231
  '429 The rate limit has been reached',
232
232
  _response
@@ -238,18 +238,21 @@ module Messaging
238
238
  ApiResponse.new(_response)
239
239
  end
240
240
 
241
- # deleteMedia
242
- # @param [String] user_id Required parameter: User's account ID
241
+ # Deletes a media file from Bandwidth API server. Make sure you don't have
242
+ # any application scripts still using the media before you delete. If you
243
+ # accidentally delete a media file, you can immediately upload a new file
244
+ # with the same name.
245
+ # @param [String] account_id Required parameter: User's account ID
243
246
  # @param [String] media_id Required parameter: The media ID to delete
244
247
  # @return [void] response from the API call
245
- def delete_media(user_id,
248
+ def delete_media(account_id,
246
249
  media_id)
247
250
  # Prepare query url.
248
251
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
249
- _query_builder << '/users/{userId}/media/{mediaId}'
252
+ _query_builder << '/users/{accountId}/media/{mediaId}'
250
253
  _query_builder = APIHelper.append_url_with_template_parameters(
251
254
  _query_builder,
252
- 'userId' => { 'value' => user_id, 'encode' => false },
255
+ 'accountId' => { 'value' => account_id, 'encode' => false },
253
256
  'mediaId' => { 'value' => media_id, 'encode' => false }
254
257
  )
255
258
  _query_url = APIHelper.clean_url _query_builder
@@ -262,32 +265,33 @@ module Messaging
262
265
  _response = execute_request(_request)
263
266
 
264
267
  # Validate response against endpoint and global error codes.
265
- if _response.status_code == 400
268
+ case _response.status_code
269
+ when 400
266
270
  raise MessagingException.new(
267
271
  '400 Request is malformed or invalid',
268
272
  _response
269
273
  )
270
- elsif _response.status_code == 401
274
+ when 401
271
275
  raise MessagingException.new(
272
276
  '401 The specified user does not have access to the account',
273
277
  _response
274
278
  )
275
- elsif _response.status_code == 403
279
+ when 403
276
280
  raise MessagingException.new(
277
281
  '403 The user does not have access to this API',
278
282
  _response
279
283
  )
280
- elsif _response.status_code == 404
284
+ when 404
281
285
  raise MessagingException.new(
282
286
  '404 Path not found',
283
287
  _response
284
288
  )
285
- elsif _response.status_code == 415
289
+ when 415
286
290
  raise MessagingException.new(
287
291
  '415 The content-type of the request is incorrect',
288
292
  _response
289
293
  )
290
- elsif _response.status_code == 429
294
+ when 429
291
295
  raise MessagingException.new(
292
296
  '429 The rate limit has been reached',
293
297
  _response
@@ -299,8 +303,8 @@ module Messaging
299
303
  ApiResponse.new(_response)
300
304
  end
301
305
 
302
- # getMessages
303
- # @param [String] user_id Required parameter: User's account ID
306
+ # Gets a list of messages based on query parameters.
307
+ # @param [String] account_id Required parameter: User's account ID
304
308
  # @param [String] message_id Optional parameter: The ID of the message to
305
309
  # search for. Special characters need to be encoded using URL encoding
306
310
  # @param [String] source_tn Optional parameter: The phone number that sent
@@ -309,7 +313,7 @@ module Messaging
309
313
  # received the message
310
314
  # @param [String] message_status Optional parameter: The status of the
311
315
  # message. One of RECEIVED, QUEUED, SENDING, SENT, FAILED, DELIVERED,
312
- # DLR_EXPIRED
316
+ # ACCEPTED, UNDELIVERED
313
317
  # @param [Integer] error_code Optional parameter: The error code of the
314
318
  # message
315
319
  # @param [String] from_date_time Optional parameter: The start of the date
@@ -324,7 +328,7 @@ module Messaging
324
328
  # in search result. Default 100. The sum of limit and after cannot be more
325
329
  # than 10000
326
330
  # @return [BandwidthMessagesList] response from the API call
327
- def get_messages(user_id,
331
+ def get_messages(account_id,
328
332
  message_id: nil,
329
333
  source_tn: nil,
330
334
  destination_tn: nil,
@@ -336,10 +340,10 @@ module Messaging
336
340
  limit: nil)
337
341
  # Prepare query url.
338
342
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
339
- _query_builder << '/users/{userId}/messages'
343
+ _query_builder << '/users/{accountId}/messages'
340
344
  _query_builder = APIHelper.append_url_with_template_parameters(
341
345
  _query_builder,
342
- 'userId' => { 'value' => user_id, 'encode' => false }
346
+ 'accountId' => { 'value' => account_id, 'encode' => false }
343
347
  )
344
348
  _query_builder = APIHelper.append_url_with_query_parameters(
345
349
  _query_builder,
@@ -369,32 +373,33 @@ module Messaging
369
373
  _response = execute_request(_request)
370
374
 
371
375
  # Validate response against endpoint and global error codes.
372
- if _response.status_code == 400
376
+ case _response.status_code
377
+ when 400
373
378
  raise MessagingException.new(
374
379
  '400 Request is malformed or invalid',
375
380
  _response
376
381
  )
377
- elsif _response.status_code == 401
382
+ when 401
378
383
  raise MessagingException.new(
379
384
  '401 The specified user does not have access to the account',
380
385
  _response
381
386
  )
382
- elsif _response.status_code == 403
387
+ when 403
383
388
  raise MessagingException.new(
384
389
  '403 The user does not have access to this API',
385
390
  _response
386
391
  )
387
- elsif _response.status_code == 404
392
+ when 404
388
393
  raise MessagingException.new(
389
394
  '404 Path not found',
390
395
  _response
391
396
  )
392
- elsif _response.status_code == 415
397
+ when 415
393
398
  raise MessagingException.new(
394
399
  '415 The content-type of the request is incorrect',
395
400
  _response
396
401
  )
397
- elsif _response.status_code == 429
402
+ when 429
398
403
  raise MessagingException.new(
399
404
  '429 The rate limit has been reached',
400
405
  _response
@@ -409,18 +414,19 @@ module Messaging
409
414
  )
410
415
  end
411
416
 
412
- # createMessage
413
- # @param [String] user_id Required parameter: User's account ID
417
+ # Endpoint for sending text messages and picture messages using V2
418
+ # messaging.
419
+ # @param [String] account_id Required parameter: User's account ID
414
420
  # @param [MessageRequest] body Required parameter: Example:
415
421
  # @return [BandwidthMessage] response from the API call
416
- def create_message(user_id,
422
+ def create_message(account_id,
417
423
  body)
418
424
  # Prepare query url.
419
425
  _query_builder = config.get_base_uri(Server::MESSAGINGDEFAULT)
420
- _query_builder << '/users/{userId}/messages'
426
+ _query_builder << '/users/{accountId}/messages'
421
427
  _query_builder = APIHelper.append_url_with_template_parameters(
422
428
  _query_builder,
423
- 'userId' => { 'value' => user_id, 'encode' => false }
429
+ 'accountId' => { 'value' => account_id, 'encode' => false }
424
430
  )
425
431
  _query_url = APIHelper.clean_url _query_builder
426
432
 
@@ -440,32 +446,33 @@ module Messaging
440
446
  _response = execute_request(_request)
441
447
 
442
448
  # Validate response against endpoint and global error codes.
443
- if _response.status_code == 400
449
+ case _response.status_code
450
+ when 400
444
451
  raise MessagingException.new(
445
452
  '400 Request is malformed or invalid',
446
453
  _response
447
454
  )
448
- elsif _response.status_code == 401
455
+ when 401
449
456
  raise MessagingException.new(
450
457
  '401 The specified user does not have access to the account',
451
458
  _response
452
459
  )
453
- elsif _response.status_code == 403
460
+ when 403
454
461
  raise MessagingException.new(
455
462
  '403 The user does not have access to this API',
456
463
  _response
457
464
  )
458
- elsif _response.status_code == 404
465
+ when 404
459
466
  raise MessagingException.new(
460
467
  '404 Path not found',
461
468
  _response
462
469
  )
463
- elsif _response.status_code == 415
470
+ when 415
464
471
  raise MessagingException.new(
465
472
  '415 The content-type of the request is incorrect',
466
473
  _response
467
474
  )
468
- elsif _response.status_code == 429
475
+ when 429
469
476
  raise MessagingException.new(
470
477
  '429 The rate limit has been reached',
471
478
  _response
@@ -19,14 +19,12 @@ module Bandwidth
19
19
 
20
20
  def validate_parameters(args)
21
21
  args.each do |_name, value|
22
- if value.nil?
23
- raise ArgumentError, "Required parameter #{_name} cannot be nil."
24
- end
22
+ raise ArgumentError, "Required parameter #{_name} cannot be nil." if value.nil?
25
23
  end
26
24
  end
27
25
 
28
26
  def execute_request(request, binary: false)
29
- @http_call_back.on_before_request(request) if @http_call_back
27
+ @http_call_back&.on_before_request(request)
30
28
 
31
29
  APIHelper.clean_hash(request.headers)
32
30
  request.headers.merge!(@global_headers)
@@ -36,7 +34,7 @@ module Bandwidth
36
34
  else
37
35
  config.http_client.execute_as_string(request)
38
36
  end
39
- @http_call_back.on_after_response(response) if @http_call_back
37
+ @http_call_back&.on_after_response(response)
40
38
 
41
39
  response
42
40
  end
@@ -6,6 +6,9 @@
6
6
  module Bandwidth
7
7
  # MessagingException class.
8
8
  class MessagingException < APIException
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
9
12
  # TODO: Write general description for this method
10
13
  # @return [String]
11
14
  attr_accessor :type
@@ -27,8 +30,8 @@ module Bandwidth
27
30
  # @param [Hash] The deserialized response sent by the server in the
28
31
  # response body.
29
32
  def unbox(hash)
30
- @type = hash['type']
31
- @description = hash['description']
33
+ @type = hash.key?('type') ? hash['type'] : SKIP
34
+ @description = hash.key?('description') ? hash['description'] : SKIP
32
35
  end
33
36
  end
34
37
  end
@@ -6,6 +6,9 @@
6
6
  module Bandwidth
7
7
  # BandwidthCallbackMessage Model.
8
8
  class BandwidthCallbackMessage < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
9
12
  # TODO: Write general description for this method
10
13
  # @return [String]
11
14
  attr_accessor :time
@@ -42,18 +45,35 @@ module Bandwidth
42
45
  @_hash
43
46
  end
44
47
 
48
+ # An array for optional fields
49
+ def optionals
50
+ %w[
51
+ time
52
+ type
53
+ to
54
+ error_code
55
+ description
56
+ message
57
+ ]
58
+ end
59
+
60
+ # An array for nullable fields
61
+ def nullables
62
+ []
63
+ end
64
+
45
65
  def initialize(time = nil,
46
66
  type = nil,
47
67
  to = nil,
48
68
  error_code = nil,
49
69
  description = nil,
50
70
  message = nil)
51
- @time = time
52
- @type = type
53
- @to = to
54
- @error_code = error_code
55
- @description = description
56
- @message = message
71
+ @time = time unless time == SKIP
72
+ @type = type unless type == SKIP
73
+ @to = to unless to == SKIP
74
+ @error_code = error_code unless error_code == SKIP
75
+ @description = description unless description == SKIP
76
+ @message = message unless message == SKIP
57
77
  end
58
78
 
59
79
  # Creates an instance of the object from a hash.
@@ -61,11 +81,11 @@ module Bandwidth
61
81
  return nil unless hash
62
82
 
63
83
  # Extract variables from the hash.
64
- time = hash['time']
65
- type = hash['type']
66
- to = hash['to']
67
- error_code = hash['errorCode']
68
- description = hash['description']
84
+ time = hash.key?('time') ? hash['time'] : SKIP
85
+ type = hash.key?('type') ? hash['type'] : SKIP
86
+ to = hash.key?('to') ? hash['to'] : SKIP
87
+ error_code = hash.key?('errorCode') ? hash['errorCode'] : SKIP
88
+ description = hash.key?('description') ? hash['description'] : SKIP
69
89
  message = BandwidthMessage.from_hash(hash['message']) if hash['message']
70
90
 
71
91
  # Create object from extracted values.
@@ -6,6 +6,9 @@
6
6
  module Bandwidth
7
7
  # BandwidthMessage Model.
8
8
  class BandwidthMessage < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
9
12
  # The id of the message
10
13
  # @return [String]
11
14
  attr_accessor :id
@@ -39,7 +42,10 @@ module Bandwidth
39
42
  # @return [String]
40
43
  attr_accessor :from
41
44
 
42
- # The list of media URLs sent in the message
45
+ # The list of media URLs sent in the message. Including a `filename` field
46
+ # in the `Content-Disposition` header of the media linked with a URL will
47
+ # set the displayed file name. This is a best practice to ensure that your
48
+ # media has a readable file name.
43
49
  # @return [List of String]
44
50
  attr_accessor :media
45
51
 
@@ -73,6 +79,29 @@ module Bandwidth
73
79
  @_hash
74
80
  end
75
81
 
82
+ # An array for optional fields
83
+ def optionals
84
+ %w[
85
+ id
86
+ owner
87
+ application_id
88
+ time
89
+ segment_count
90
+ direction
91
+ to
92
+ from
93
+ media
94
+ text
95
+ tag
96
+ priority
97
+ ]
98
+ end
99
+
100
+ # An array for nullable fields
101
+ def nullables
102
+ []
103
+ end
104
+
76
105
  def initialize(id = nil,
77
106
  owner = nil,
78
107
  application_id = nil,
@@ -85,18 +114,18 @@ module Bandwidth
85
114
  text = nil,
86
115
  tag = nil,
87
116
  priority = nil)
88
- @id = id
89
- @owner = owner
90
- @application_id = application_id
91
- @time = time
92
- @segment_count = segment_count
93
- @direction = direction
94
- @to = to
95
- @from = from
96
- @media = media
97
- @text = text
98
- @tag = tag
99
- @priority = priority
117
+ @id = id unless id == SKIP
118
+ @owner = owner unless owner == SKIP
119
+ @application_id = application_id unless application_id == SKIP
120
+ @time = time unless time == SKIP
121
+ @segment_count = segment_count unless segment_count == SKIP
122
+ @direction = direction unless direction == SKIP
123
+ @to = to unless to == SKIP
124
+ @from = from unless from == SKIP
125
+ @media = media unless media == SKIP
126
+ @text = text unless text == SKIP
127
+ @tag = tag unless tag == SKIP
128
+ @priority = priority unless priority == SKIP
100
129
  end
101
130
 
102
131
  # Creates an instance of the object from a hash.
@@ -104,18 +133,18 @@ module Bandwidth
104
133
  return nil unless hash
105
134
 
106
135
  # Extract variables from the hash.
107
- id = hash['id']
108
- owner = hash['owner']
109
- application_id = hash['applicationId']
110
- time = hash['time']
111
- segment_count = hash['segmentCount']
112
- direction = hash['direction']
113
- to = hash['to']
114
- from = hash['from']
115
- media = hash['media']
116
- text = hash['text']
117
- tag = hash['tag']
118
- priority = hash['priority']
136
+ id = hash.key?('id') ? hash['id'] : SKIP
137
+ owner = hash.key?('owner') ? hash['owner'] : SKIP
138
+ application_id = hash.key?('applicationId') ? hash['applicationId'] : SKIP
139
+ time = hash.key?('time') ? hash['time'] : SKIP
140
+ segment_count = hash.key?('segmentCount') ? hash['segmentCount'] : SKIP
141
+ direction = hash.key?('direction') ? hash['direction'] : SKIP
142
+ to = hash.key?('to') ? hash['to'] : SKIP
143
+ from = hash.key?('from') ? hash['from'] : SKIP
144
+ media = hash.key?('media') ? hash['media'] : SKIP
145
+ text = hash.key?('text') ? hash['text'] : SKIP
146
+ tag = hash.key?('tag') ? hash['tag'] : SKIP
147
+ priority = hash.key?('priority') ? hash['priority'] : SKIP
119
148
 
120
149
  # Create object from extracted values.
121
150
  BandwidthMessage.new(id,