bandwidth-sdk 9.3.0 → 9.4.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
  SHA256:
3
- metadata.gz: 714d17e79fcabfbf641b2953be3d87f4661957c4ce6452a9add5fba71f7e06fc
4
- data.tar.gz: 910e102f0b21b52e4ab8cacb474595a95960f8d5db93689c41261d775175bc86
3
+ metadata.gz: 18a1aa70f505740cb401da02868903300dd1dea4bad46e34334387a24b5ed391
4
+ data.tar.gz: c6d3de5ab878190e7a7b9fe29fd503b240aa3434c3fd54b72bce236d1ddfafd9
5
5
  SHA512:
6
- metadata.gz: 4bd7b9cb0599cbe42a6f414b2ba26b5b3aa3267f8b27be6748e6f50e0f53e0eb382860abcbedf3330e0aaf6c5c4994ee08986c5df2b898a021c84e8d7f7407a6
7
- data.tar.gz: 875c6add47513bdd45c8db63c614f5ea58c030370a1c5265840eb0a8a1c652487ff0d0752d853fbdf2a2f3fb644b6afa87e4ecc98f8b70a168aca8f9321a2799
6
+ metadata.gz: 97b472c59acf4f4fe5552a5a7c561d0b36fdbdbeb7c240fc0d3c4dfcf3eee3a46d0ca5316325f1245086ab6efc91101a80a9826d49078ccee6d2f7563db6171c
7
+ data.tar.gz: 526b08eeab6f9335208edd49b2c3ea7b01193b4077254374d5cf496d20048231ff990029a92c2e4c33013657ef5a5cad7705296073910a5b6406862d7d06ee9b
@@ -3,14 +3,11 @@ Dir[File.dirname(__FILE__) + '/verbs/*'].each {|file|
3
3
  require_relative file
4
4
  }
5
5
 
6
- SSML_REGEX = /<([a-zA-Z\/\/].*?)>/
7
- SPEAK_SENTENCE_REGEX = /<SpeakSentence.*?>.*?<\/SpeakSentence>/
8
-
9
6
  module Bandwidth
10
7
  module Voice
11
- class Response
8
+ class Bxml
12
9
  # Initializer
13
- # @param verbs [Array] optional list of verbs to include into response
10
+ # @param verbs [Array] optional list of verbs to include in the bxml tag
14
11
  def initialize(verbs = nil)
15
12
  @verbs = verbs || []
16
13
  end
@@ -19,7 +16,7 @@ module Bandwidth
19
16
  def to_bxml()
20
17
  xml = Builder::XmlMarkup.new()
21
18
  xml.instruct!(:xml, :version=>'1.0', :encoding=>'UTF-8')
22
- xml.Response do
19
+ xml.Bxml do
23
20
  @verbs.each {|verb| verb.to_bxml(xml)}
24
21
  end
25
22
  xml.target!().gsub(SPEAK_SENTENCE_REGEX){|s|s.gsub(SSML_REGEX, '<\1>')}
@@ -0,0 +1,39 @@
1
+ require 'builder'
2
+ Dir[File.dirname(__FILE__) + '/verbs/*'].each {|file|
3
+ require_relative file
4
+ }
5
+
6
+ SSML_REGEX = /&lt;([a-zA-Z\/\/].*?)&gt;/
7
+ SPEAK_SENTENCE_REGEX = /<SpeakSentence.*?>.*?<\/SpeakSentence>/
8
+
9
+ module Bandwidth
10
+ module Voice
11
+ class Response
12
+ # Initializer
13
+ # @param verbs [Array] optional list of verbs to include into response
14
+ def initialize(verbs = nil)
15
+ @verbs = verbs || []
16
+ end
17
+
18
+ # Return BXML representaion of this response
19
+ def to_bxml()
20
+ xml = Builder::XmlMarkup.new()
21
+ xml.instruct!(:xml, :version=>'1.0', :encoding=>'UTF-8')
22
+ xml.Response do
23
+ @verbs.each {|verb| verb.to_bxml(xml)}
24
+ end
25
+ xml.target!().gsub(SPEAK_SENTENCE_REGEX){|s|s.gsub(SSML_REGEX, '<\1>')}
26
+ end
27
+
28
+ # Add one or more verbs to this response
29
+ def push(*verbs)
30
+ @verbs.push(*verbs)
31
+ end
32
+
33
+ # Add a verb to this response
34
+ def <<(verb)
35
+ @verbs << verb
36
+ end
37
+ end
38
+ end
39
+ end
@@ -252,6 +252,87 @@ module Voice
252
252
  ApiResponse.new(_response)
253
253
  end
254
254
 
255
+ # Makes a PUT request to /api/v2/accounts/{accountId}/calls/{callId}/bxml
256
+ # @param [String] account_id Required parameter: Example:
257
+ # @param [String] call_id Required parameter: Example:
258
+ # @param [String] body Required parameter: Example:
259
+ # @return [void] response from the API call
260
+ def modify_call_bxml(account_id,
261
+ call_id,
262
+ body
263
+ )
264
+ # Prepare query url.
265
+ _query_builder = config.get_base_uri(Server::VOICEDEFAULT)
266
+ _query_builder << '/api/v2/accounts/{accountId}/calls/{callId}/bxml'
267
+ _query_builder = APIHelper.append_url_with_template_parameters(
268
+ _query_builder,
269
+ 'accountId' => { 'value' => account_id, 'encode' => false },
270
+ 'callId' => { 'value' => call_id, 'encode' => false }
271
+ )
272
+ _query_url = APIHelper.clean_url _query_builder
273
+
274
+ # Prepare headers.
275
+ _headers = {
276
+ 'content-type' => 'application/xml; charset=utf-8'
277
+ }
278
+
279
+ # Prepare and execute HttpRequest.
280
+ _request = config.http_client.put(
281
+ _query_url,
282
+ headers: _headers,
283
+ parameters: body.to_json
284
+ )
285
+ VoiceBasicAuth.apply(config, _request)
286
+ _response = execute_request(_request)
287
+
288
+ # Validate response against endpoint and global error codes.
289
+ case _response.status_code
290
+ when 400
291
+ raise ApiErrorException.new(
292
+ 'Something\'s not quite right... Your request is invalid. Please' \
293
+ ' fix it before trying again.',
294
+ _response
295
+ )
296
+ when 401
297
+ raise APIException.new(
298
+ 'Your credentials are invalid. Please use your Bandwidth dashboard' \
299
+ ' credentials to authenticate to the API.',
300
+ _response
301
+ )
302
+ when 403
303
+ raise ApiErrorException.new(
304
+ 'User unauthorized to perform this action.',
305
+ _response
306
+ )
307
+ when 404
308
+ raise ApiErrorException.new(
309
+ 'The resource specified cannot be found or does not belong to you.',
310
+ _response
311
+ )
312
+ when 415
313
+ raise ApiErrorException.new(
314
+ 'We don\'t support that media type. If a request body is required,' \
315
+ ' please send it to us as `application/xml`.',
316
+ _response
317
+ )
318
+ when 429
319
+ raise ApiErrorException.new(
320
+ 'You\'re sending requests to this endpoint too frequently. Please' \
321
+ ' slow your request rate down and try again.',
322
+ _response
323
+ )
324
+ when 500
325
+ raise ApiErrorException.new(
326
+ 'Something unexpected happened. Please try again.',
327
+ _response
328
+ )
329
+ end
330
+ validate_response(_response)
331
+
332
+ # Return appropriate response type.
333
+ ApiResponse.new(_response)
334
+ end
335
+
255
336
  # Pauses or resumes a recording.
256
337
  # @param [String] account_id Required parameter: Example:
257
338
  # @param [String] call_id Required parameter: Example:
data/lib/bandwidth.rb CHANGED
@@ -47,6 +47,7 @@ require_relative 'bandwidth/http/auth/web_rtc_basic_auth'
47
47
  require_relative 'bandwidth/http/auth/web_rtc_basic_auth.rb'
48
48
 
49
49
  # External Files
50
+ require_relative 'bandwidth/voice_lib/bxml/response.rb'
50
51
  require_relative 'bandwidth/voice_lib/bxml/bxml.rb'
51
52
  require_relative 'bandwidth/voice_lib/bxml/verbs/bridge.rb'
52
53
  require_relative 'bandwidth/voice_lib/bxml/verbs/conference.rb'
@@ -262,6 +262,34 @@ class IntegrationTest < Test::Unit::TestCase
262
262
  assert_equal(expected, actual)
263
263
  end
264
264
 
265
+ def test_empty_bxml_verb
266
+ bxml = Bandwidth::Voice::Bxml.new()
267
+
268
+ expected = '<?xml version="1.0" encoding="UTF-8"?><Bxml></Bxml>'
269
+ actual = bxml.to_bxml()
270
+ assert_equal(expected, actual)
271
+ end
272
+
273
+ def test_bxml_speak_sentence_pause
274
+ bxml = Bandwidth::Voice::Bxml.new()
275
+
276
+ speak_sentence = Bandwidth::Voice::SpeakSentence.new({
277
+ :sentence => "new modify call bxml is pog",
278
+ :voice => "Julie"
279
+ })
280
+
281
+ pause = Bandwidth::Voice::Pause.new({
282
+ :duration => 6
283
+ })
284
+
285
+ bxml.push(speak_sentence)
286
+ bxml.push(pause)
287
+
288
+ expected = '<?xml version="1.0" encoding="UTF-8"?><Bxml><SpeakSentence voice="Julie">new modify call bxml is pog</SpeakSentence><Pause duration="6"/></Bxml>'
289
+ actual = bxml.to_bxml()
290
+ assert_equal(expected, actual)
291
+ end
292
+
265
293
  def test_hangup
266
294
  hangup = Bandwidth::Voice::Hangup.new()
267
295
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bandwidth-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.3.0
4
+ version: 9.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bandwidth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-26 00:00:00.000000000 Z
11
+ date: 2022-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logging
@@ -206,6 +206,7 @@ files:
206
206
  - lib/bandwidth/utilities/date_time_helper.rb
207
207
  - lib/bandwidth/utilities/file_wrapper.rb
208
208
  - lib/bandwidth/voice_lib/bxml/bxml.rb
209
+ - lib/bandwidth/voice_lib/bxml/response.rb
209
210
  - lib/bandwidth/voice_lib/bxml/verbs/bridge.rb
210
211
  - lib/bandwidth/voice_lib/bxml/verbs/conference.rb
211
212
  - lib/bandwidth/voice_lib/bxml/verbs/forward.rb