plivo 4.21.0 → 4.22.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: d4221884a48c30837e399b3cccf82a2b316b1c8b
4
- data.tar.gz: 439b0e03c1e2208bc8c00670decba683c9c4a8d9
3
+ metadata.gz: 99a81ae9a72d5cd9f5332d84de77f442c565b9a5
4
+ data.tar.gz: 274d0f0c5e278e9fb003eda9c2b022a6840a99b0
5
5
  SHA512:
6
- metadata.gz: d349d186ca2bd0b10e6b38b29bb1d44f431e9e00fc97643e72f82c78ff154f1850df29a030bc6fcad71cf7e9e74831d0049b94a2eb5eb3c091fe833d364e461e
7
- data.tar.gz: f2cc7bdb7e9aafa70a7954c20f6344a25833e565ad8db8d3bff362de546bb46139a886757b3290e4c3f5ca2ecb8e6726aedc3ebbf81dbd4563d0fed70758b656
6
+ metadata.gz: 8e5703701787286d5a30a520dedb09bd7c03593f0ac7f8d54a1cfa0ceafaaec31a8b91e135282022f8fcf2fc3fb79191e794bafe844733ac7fc09c337c1d86a3
7
+ data.tar.gz: edf485c5a4d6e3429dc1dec71fe32fe3d31662627bec06d2de407ee6320fc6b5b0bc1d5dce6ef79d6e88305fe76264dfbea5c848bc77e7f829a5168e3577cda9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ## [4.22.0](https://github.com/plivo/plivo-ruby/releases/tag/v4.22.0) (2021-11-11)
4
+ **Features - Voice: Multiparty calls**
5
+ - The [Add Multiparty Call API](https://www.plivo.com/docs/voice/api/multiparty-call/participants#add-a-participant) allows for greater functionality by accepting options like `start recording audio`, `stop recording audio`, and their HTTP methods.
6
+ - [Multiparty Calls](https://www.plivo.com/docs/voice/api/multiparty-call/) now has new APIs to `stop` and `play` audio.
7
+
3
8
  ## [4.21.0](https://github.com/plivo/plivo-ruby/releases/tag/v4.21.0) (2021-10-11)
4
9
  **Features - Messaging**
5
10
  - This version includes advancements to the Messaging Interface that deals with the [Send SMS/MMS](https://www.plivo.com/docs/sms/api/message#send-a-message) interface, Creating a standard structure for `request/input` arguments to make implementation easier and incorporating support for the older interface.
data/README.md CHANGED
@@ -8,7 +8,7 @@ The Plivo Ruby SDK makes it simpler to integrate communications into your Ruby a
8
8
  Add this line to your application's Gemfile:
9
9
 
10
10
  ```ruby
11
- gem 'plivo', '>= 4.21.0'
11
+ gem 'plivo', '>= 4.22.0'
12
12
  ```
13
13
 
14
14
  And then execute:
@@ -60,7 +60,11 @@ module Plivo
60
60
  enter_sound='beep:1',
61
61
  enter_sound_method='GET',
62
62
  exit_sound='beep:2',
63
- exit_sound_method='GET')
63
+ exit_sound_method='GET',
64
+ start_recording_audio=nil,
65
+ start_recording_audio_method='GET',
66
+ stop_recording_audio=nil,
67
+ stop_recording_audio_method='GET')
64
68
  if (from and to) and call_uuid
65
69
  raise_invalid_request('cannot specify call_uuid when (from, to) is provided')
66
70
  end
@@ -117,6 +121,10 @@ module Plivo
117
121
  valid_param?(:enter_sound_method, enter_sound_method.upcase, String, false, %w[GET POST])
118
122
  is_one_among_string_url?(:exit_sound, exit_sound, false , %w[beep:1 beep:2 none])
119
123
  valid_param?(:exit_sound_method, exit_sound_method.upcase, String, false, %w[GET POST])
124
+ valid_param?(:start_recording_audio_method, start_recording_audio_method.upcase, String, false, %w[GET POST])
125
+ valid_url?(:start_recording_audio, start_recording_audio, false ) unless start_recording_audio.nil?
126
+ valid_param?(:stop_recording_audio_method, stop_recording_audio_method.upcase, String, false, %w[GET POST])
127
+ valid_url?(:stop_recording_audio, stop_recording_audio, false ) unless stop_recording_audio.nil?
120
128
  if (to!=nil) && (ring_timeout.is_a?(String)) && (to.split('<').size < ring_timeout.split('<').size)
121
129
  raise_invalid_request("RingTimeout:number of ring_timout(s) should be same as number of destination(s)")
122
130
  end
@@ -168,6 +176,10 @@ module Plivo
168
176
  params[:enter_sound_method] = enter_sound_method.upcase unless exit_sound_method.nil?
169
177
  params[:exit_sound] = exit_sound unless exit_sound.nil?
170
178
  params[:exit_sound_method] = exit_sound_method.upcase unless exit_sound_method.nil?
179
+ params[:start_recording_audio] = start_recording_audio unless start_recording_audio.nil?
180
+ params[:start_recording_audio_method] = start_recording_audio_method.upcase unless start_recording_audio_method.nil?
181
+ params[:stop_recording_audio] = stop_recording_audio unless stop_recording_audio.nil?
182
+ params[:stop_recording_audio_method] = stop_recording_audio_method.upcase unless stop_recording_audio_method.nil?
171
183
  perform_action_apiresponse('Participant', 'POST', params, true )
172
184
  end
173
185
 
@@ -204,7 +216,6 @@ module Plivo
204
216
  perform_action_apiresponse('Record/Resume', 'POST')
205
217
  end
206
218
 
207
-
208
219
  def start_participant_recording(member_id, file_format='mp3', status_callback_url=nil, status_callback_method='POST')
209
220
  valid_param?(:member_id, member_id, [String, Integer], true)
210
221
  MultiPartyCallParticipant.new(@_client, resource_id: mpc_id[1], member_id: member_id).start_participant_recording(file_format, status_callback_url, status_callback_method)
@@ -246,6 +257,17 @@ module Plivo
246
257
  valid_param?(:member_id, member_id, [String, Integer], true)
247
258
  MultiPartyCallParticipant.new(@_client,resource_id: @id, member_id: member_id).get_participant
248
259
  end
260
+
261
+ def start_play_audio(member_id, url)
262
+ valid_param?(:member_id, member_id, [String, Integer], true)
263
+ valid_url?(:url, url, true)
264
+ MultiPartyCallMember.new(@_client, resource_id: @id, member_id: member_id).start_play_audio(url)
265
+ end
266
+
267
+ def stop_play_audio(member_id)
268
+ valid_param?(:member_id, member_id, [String, Integer], true)
269
+ MultiPartyCallMember.new(@_client, resource_id: @id, member_id: member_id).stop_play_audio
270
+ end
249
271
  end
250
272
 
251
273
  class MultiPartyCallParticipant < Base::SecondaryResource
@@ -311,6 +333,36 @@ module Plivo
311
333
  end
312
334
  end
313
335
 
336
+ class MultiPartyCallMember < Base::SecondaryResource
337
+ def initialize(client, options = nil)
338
+ @_name = 'MultiPartyCall'
339
+ @_identifier_string = 'mpc_uuid'
340
+ @_secondary_name = 'Member'
341
+ @_secondary_identifier_string = 'member_id'
342
+ super
343
+ @_is_voice_request = true
344
+ if options.key? :multi_party_prefix
345
+ @id = options[:multi_party_prefix] + '_' + @id
346
+ elsif @id.split('_').size > 1
347
+ nil
348
+ else
349
+ @id = 'uuid_' + @id
350
+ end
351
+ configure_secondary_resource_uri
352
+ end
353
+
354
+ def start_play_audio(url)
355
+ valid_url?(:url, url, true)
356
+ params = {}
357
+ params[:url] = url unless url.nil?
358
+ perform_action_apiresponse('Play', 'POST', params, true)
359
+ end
360
+
361
+ def stop_play_audio
362
+ perform_action_apiresponse('Play', 'DELETE')
363
+ end
364
+ end
365
+
314
366
  class MultiPartyCallInterface < Base::ResourceInterface
315
367
  def initialize(client, resource_list_json = nil)
316
368
  @_name = 'MultiPartyCall'
@@ -394,6 +446,8 @@ module Plivo
394
446
  options[:enter_sound_method] = 'GET' unless options.key?(:enter_sound_method)
395
447
  options[:exit_sound] = 'beep:2' unless options.key?(:exit_sound)
396
448
  options[:exit_sound_method] = 'GET' unless options.key?(:exit_sound_method)
449
+ options[:start_recording_audio_method] = 'GET' unless options.key?(:start_recording_audio_method)
450
+ options[:stop_recording_audio_method] = 'GET' unless options.key?(:stop_recording_audio_method)
397
451
  valid_param?(:friendly_name, options[:friendly_name], String, false) unless options[:friendly_name].nil?
398
452
  valid_param?(:uuid, options[:uuid], String, false) unless options[:uuid].nil?
399
453
  mpc_id = make_mpc_id(options[:uuid], options[:friendly_name])
@@ -403,7 +457,8 @@ module Plivo
403
457
  options[:wait_music_method],options[:agent_hold_music_url],options[:agent_hold_music_method],options[:customer_hold_music_url],options[:customer_hold_music_method],
404
458
  options[:recording_callback_url],options[:recording_callback_method],options[:status_callback_url],options[:status_callback_method],options[:on_exit_action_url], options[:on_exit_action_method],
405
459
  options[:record],options[:record_file_format],options[:status_callback_events],options[:stay_alone], options[:coach_mode],options[:mute],options[:hold],options[:start_mpc_on_enter],options[:end_mpc_on_exit],
406
- options[:relay_dtmf_inputs],options[:enter_sound],options[:enter_sound_method],options[:exit_sound],options[:exit_sound_method])
460
+ options[:relay_dtmf_inputs],options[:enter_sound],options[:enter_sound_method],options[:exit_sound],options[:exit_sound_method], options[:start_recording_audio], options[:start_recording_audio_method],
461
+ options[:stop_recording_audio], options[:stop_recording_audio_method])
407
462
  end
408
463
 
409
464
  def start(options = {})
@@ -549,6 +604,30 @@ module Plivo
549
604
  mpc_id = make_mpc_id(options[:uuid], options[:friendly_name])
550
605
  MultiPartyCallParticipant.new(@_client, resource_id: mpc_id[1], multi_party_prefix: mpc_id[0], member_id: options[:member_id]).get_participant
551
606
  end
607
+
608
+ def start_play_audio(options = {})
609
+ valid_param?(:options, options, Hash, false)
610
+ if not options[:member_id]
611
+ raise_invalid_request("Member Id is mandatory")
612
+ end
613
+ valid_param?(:member_id, options[:member_id], [String, Integer], true)
614
+ valid_param?(:uuid, options[:uuid], String, false) unless options[:uuid].nil?
615
+ valid_param?(:friendly_name, options[:friendly_name], String, false) unless options[:friendly_name].nil?
616
+ mpc_id = make_mpc_id(options[:uuid], options[:friendly_name])
617
+ MultiPartyCallMember.new(@_client, resource_id: mpc_id[1], multi_party_prefix: mpc_id[0], member_id: options[:member_id]).start_play_audio(options[:url])
618
+ end
619
+
620
+ def stop_play_audio(options = {})
621
+ valid_param?(:options, options, Hash, false)
622
+ if not options[:member_id]
623
+ raise_invalid_request("Member Id is mandatory")
624
+ end
625
+ valid_param?(:member_id, options[:member_id], [String, Integer], true)
626
+ valid_param?(:uuid, options[:uuid], String, false) unless options[:uuid].nil?
627
+ valid_param?(:friendly_name, options[:friendly_name], String, false) unless options[:friendly_name].nil?
628
+ mpc_id = make_mpc_id(options[:uuid], options[:friendly_name])
629
+ MultiPartyCallMember.new(@_client, resource_id: mpc_id[1], multi_party_prefix: mpc_id[0], member_id: options[:member_id]).stop_play_audio
630
+ end
552
631
  end
553
632
  end
554
633
  end
data/lib/plivo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plivo
2
- VERSION = "4.21.0".freeze
2
+ VERSION = "4.22.0".freeze
3
3
  end
@@ -9,7 +9,9 @@ module Plivo
9
9
  statusCallbackEvents statusCallbackUrl statusCallbackMethod
10
10
  stayAlone coachMode mute hold startMpcOnEnter endMpcOnExit
11
11
  enterSound enterSoundMethod exitSound exitSoundMethod
12
- onExitActionUrl onExitActionMethod relayDTMFInputs]
12
+ onExitActionUrl onExitActionMethod relayDTMFInputs
13
+ startRecordingAudio startRecordingAudioMethod
14
+ stopRecordingAudio stopRecordingAudioMethod]
13
15
 
14
16
  VALID_ROLE_VALUES = %w[agent supervisor customer]
15
17
  VALID_METHOD_VALUES = %w[GET POST]
@@ -179,6 +181,26 @@ module Plivo
179
181
  raise PlivoXMLError, "invalid attribute value #{attributes[:customerHoldMusicUrl]} for customerHoldMusicUrl"
180
182
  end
181
183
 
184
+ if attributes[:startRecordingAudio] && !valid_url?(:startRecordingAudio, attributes[:startRecordingAudio], false)
185
+ raise PlivoXMLError, "invalid attribute value #{attributes[:startRecordingAudio]} for startRecordingAudio"
186
+ end
187
+
188
+ if attributes[:stopRecordingAudio] && !valid_url?(:stopRecordingAudio, attributes[:stopRecordingAudio], false)
189
+ raise PlivoXMLError, "invalid attribute value #{attributes[:stopRecordingAudio]} for stopRecordingAudio"
190
+ end
191
+
192
+ if attributes[:startRecordingAudioMethod] && !VALID_METHOD_VALUES.include?(attributes[:startRecordingAudioMethod].upcase)
193
+ raise PlivoXMLError, "invalid attribute value #{attributes[:startRecordingAudioMethod]} for startRecordingAudioMethod"
194
+ elsif !attributes[:startRecordingAudioMethod]
195
+ attributes[:startRecordingAudioMethod] = 'GET'
196
+ end
197
+
198
+ if attributes[:stopRecordingAudioMethod] && !VALID_METHOD_VALUES.include?(attributes[:stopRecordingAudioMethod].upcase)
199
+ raise PlivoXMLError, "invalid attribute value #{attributes[:stopRecordingAudioMethod]} for stopRecordingAudioMethod"
200
+ elsif !attributes[:stopRecordingAudioMethod]
201
+ attributes[:stopRecordingAudioMethod] = 'GET'
202
+ end
203
+
182
204
  raise PlivoXMLError, 'No MPC name set for the MPC' unless body
183
205
  super(body, attributes)
184
206
  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.21.0
4
+ version: 4.22.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: 2021-10-11 00:00:00.000000000 Z
11
+ date: 2021-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday