signalwire 2.3.2 → 2.3.3

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: 71faeeb60f034a4e12e5389161bd930b76be463ab5bbff6d4c8cc34732d66f2c
4
- data.tar.gz: 14661cf2afbe90123ad580a96bdf9e25ee77a1b5ea77caa6abb49515beb3f53f
3
+ metadata.gz: 617cfadba260ca55f6a9930c26eca415a3db201fdad4165a86f6c06955a98471
4
+ data.tar.gz: e78dc8b25ac1cd28e0252962497ed620aa9794635b23b1fc72347b1458e79dfb
5
5
  SHA512:
6
- metadata.gz: 8043e8fd96285a6bd4e4263c8825901f52e85123566fa588860f5ecf178d588cb1fb0c420d3e67701df99cf032875b93ea74e42c37c30395256e4fe10ce1ae38
7
- data.tar.gz: 2dd59c3fca26721d5060a1c12774e58353394c449521c2359a94b05574b4da6ea85c0c2fa2c321aa15051e2778bfadc178971dbd81abb9703914b39f7f054448
6
+ metadata.gz: 9ca9a848b357a319f84ec836fb73a75a99e5054064fbdf59ffcb44da615b0009df676da2c8abd434062747888618016220e8f016b35682808ebf3acab2a51df4
7
+ data.tar.gz: f367464b5544df04e67828765a16c5368af055eb1e24328f9e8a97d93ebac5105a8ebcd840cdee984a257825e9363c49d7f5d791b636ba7e830286962374ad54
@@ -5,6 +5,13 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.3.3] - 2020-03-09
9
+ ### Fixed
10
+ - `record` correctly set up for terminators now.
11
+ - Make AMD more usable and less complex.
12
+ - AMD now returns immediately in `wait_for_beep` mode if it detects a human.
13
+ - Relax `gemspec` dependencies.
14
+
8
15
  ## [2.3.2] - 2020-01-29
9
16
  ### Fixed
10
17
  - Correctly return AMD result in Relay.
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
+ %w[
5
+ bundler/setup
6
+ signalwire
7
+ ].each { |f| require f }
8
+
9
+ # Set logging to debug for testing
10
+ Signalwire::Logger.logger.level = ::Logger::DEBUG
11
+
12
+ class OutboundConsumer < Signalwire::Relay::Consumer
13
+ def ready
14
+ logger.info 'Dialing out'
15
+ call = client.calling.new_call(from: ENV['FROM_NUMBER'], to: ENV['TO_NUMBER'])
16
+ call.dial
17
+ result = call.amd(timeout: 10, wait_for_beep: true)
18
+ pp "---------------------------------- Detect AM result was:"
19
+ pp result.type
20
+ pp result.result
21
+ pp result.successful
22
+
23
+ call.hangup
24
+ rescue StandardError => e
25
+ logger.error e.inspect
26
+ logger.error e.backtrace
27
+ end
28
+ end
29
+
30
+ OutboundConsumer.new.run
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
+ %w[
5
+ bundler/setup
6
+ signalwire
7
+ ].each { |f| require f }
8
+
9
+ # Set logging to debug for testing
10
+ Signalwire::Logger.logger.level = ::Logger::DEBUG
11
+
12
+ class OutboundConsumer < Signalwire::Relay::Consumer
13
+ def ready
14
+ dial_result = client.calling.new_call(from: ENV['FROM_NUMBER'], to: ENV['TO_NUMBER']).dial
15
+ tts = [{ type: 'tts', params: { text: 'Say something funny!' } }]
16
+ result = dial_result.call.prompt collect: {speech: {language: 'en-US'}}, play: tts
17
+ dial_result.call.play_tts text: "You ordered #{result.result} hamburgers. Thank you!"
18
+ dial_result.call.hangup
19
+ # this makes it so the errors don't stop the process
20
+ rescue StandardError => e
21
+ logger.error e.inspect
22
+ logger.error e.backtrace
23
+ end
24
+ end
25
+
26
+ OutboundConsumer.new.run
@@ -16,6 +16,7 @@ class OutboundConsumer < Signalwire::Relay::Consumer
16
16
  call.dial
17
17
  call.play_tts text: 'please leave your message after the beep. Press pound when done.'
18
18
  result = call.record(beep: true, terminators: "#")
19
+ sleep 1 # wait for recording to be uploaded
19
20
  call.play_tts text: 'you said:'
20
21
  call.play_audio result.url
21
22
  call.hangup
@@ -389,7 +389,7 @@ module Signalwire::Relay::Calling
389
389
  speech_obj[:language] = args[:speech_language] if args[:speech_language]
390
390
  speech_obj[:hints] = args[:speech_hints] if args[:speech_hints]
391
391
  speech_obj[:end_silence_timeout] = args[:end_silence_timeout] if args[:end_silence_timeout]
392
- collect[:digits] = digits_obj
392
+ collect[:speech] = speech_obj
393
393
  end
394
394
 
395
395
  collect
@@ -90,7 +90,6 @@ module Signalwire::Relay::Calling
90
90
  collect = compile_collect_arguments(args) if collect.nil? && collect_p.nil?
91
91
 
92
92
  set_parameters(binding, %i{collect text language gender volume}, %i{collect text})
93
-
94
93
  prompt(collect: collect, play: tts_payload(text, language, gender), volume: volume)
95
94
  end
96
95
 
@@ -3,8 +3,7 @@ module Signalwire::Relay::Calling
3
3
 
4
4
  def detect(type:, **args)
5
5
  component = build_detect_component(type, args)
6
- component.wait_for(Relay::CallDetectState::MACHINE, Relay::CallDetectState::HUMAN,
7
- Relay::CallDetectState::UNKNOWN, Relay::CallDetectState::CED, Relay::CallDetectState::CNG)
6
+ component.wait_for(Relay::CallDetectState::CED, Relay::CallDetectState::CNG)
8
7
  DetectResult.new(component: component)
9
8
  end
10
9
 
@@ -4,7 +4,23 @@ module Signalwire::Relay::Calling
4
4
  class Detect < ControlComponent
5
5
  attr_reader :result, :type
6
6
 
7
- FINISHED_EVENTS = [Relay::CallDetectState::FINISHED, Relay::CallDetectState::ERROR]
7
+ FINISHED_EVENTS = [
8
+ Relay::CallDetectState::FINISHED,
9
+ Relay::CallDetectState::ERROR,
10
+ Relay::CallDetectState::READY,
11
+ Relay::CallDetectState::NOT_READY,
12
+ Relay::CallDetectState::MACHINE,
13
+ Relay::CallDetectState::HUMAN,
14
+ Relay::CallDetectState::UNKNOWN
15
+ ]
16
+
17
+ READY_EVENTS = [
18
+ Relay::CallDetectState::FINISHED,
19
+ Relay::CallDetectState::ERROR,
20
+ Relay::CallDetectState::READY,
21
+ Relay::CallDetectState::HUMAN
22
+ ]
23
+
8
24
  MACHINE_EVENTS = [Relay::CallDetectState::READY, Relay::CallDetectState::NOT_READY]
9
25
 
10
26
  def initialize(call:, detect:, wait_for_beep: false, timeout: 30)
@@ -38,26 +54,22 @@ module Signalwire::Relay::Calling
38
54
  detect_result = event.call_params[:detect]
39
55
  @type = detect_result[:type]
40
56
  params = detect_result[:params]
41
- res_event = params[:event]
42
- @state = res_event
43
-
44
- return complete(event) if FINISHED_EVENTS.include?(@state) || @type == Relay::CallDetectType::DIGIT
57
+ @state = params[:event]
45
58
 
46
- if has_blocker?
47
- @received_events << @state
48
- return
49
- end
59
+ # if we are detecting digits we are done
60
+ return complete(event) if @type == Relay::CallDetectType::DIGIT
50
61
 
51
- if @waiting_for_ready
52
- return (@state == Relay::CallDetectState::READY ? complete(event) : nil)
53
- end
54
-
55
- if (@wait_for_beep && @state == Relay::CallDetectState::MACHINE)
56
- @waiting_for_ready = true
57
- return
62
+ if @type == 'machine'
63
+ if @wait_for_beep
64
+ return complete(event) if READY_EVENTS.include?(@state)
65
+ else
66
+ return complete(event) if FINISHED_EVENTS.include?(@state)
67
+ end
68
+ else
69
+ check_for_waiting_events
58
70
  end
59
-
60
- check_for_waiting_events
71
+
72
+ @received_events << @state
61
73
  broadcast_event(event)
62
74
  end
63
75
 
@@ -71,20 +83,10 @@ module Signalwire::Relay::Calling
71
83
  def complete(event)
72
84
  @completed = true
73
85
  @event = event
86
+ @result = @state
74
87
 
75
- if has_blocker?
76
- @successful = @state == Relay::CallDetectState::FINISHED
77
-
78
- if MACHINE_EVENTS.include?(@state)
79
- @result = Relay::CallDetectState::MACHINE
80
- else
81
- @result = @state
82
- end
83
- unblock(event)
84
- else
85
- @result = @received_events.join(',')
86
- @successful = @state != Relay::CallDetectState::ERROR
87
- end
88
+ @successful = @state != Relay::CallDetectState::ERROR
89
+ unblock(event) if has_blocker?
88
90
  end
89
91
  end
90
92
  end
@@ -51,7 +51,7 @@ module Signalwire::Relay::Calling
51
51
  end
52
52
 
53
53
  def after_execute(execute_event)
54
- @url = execute_event.call_params[:url]
54
+ @url = execute_event.dig(:params, :params, :params, :url)
55
55
  end
56
56
  end
57
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Signalwire
4
- VERSION = '2.3.2'
4
+ VERSION = '2.3.3'
5
5
  end
@@ -25,20 +25,20 @@ Gem::Specification.new do |spec|
25
25
  spec.required_ruby_version = '>= 2.0'
26
26
 
27
27
  spec.add_development_dependency 'bundler', '~> 2.1'
28
- spec.add_development_dependency 'bundler-audit', '~> 0.6.1'
29
- spec.add_development_dependency 'guard-rspec', '~> 4.7.3'
30
- spec.add_development_dependency 'rake', '~> 10.0'
31
- spec.add_development_dependency 'rdoc', '~> 6.1.1'
28
+ spec.add_development_dependency 'bundler-audit', '~> 0.6'
29
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
30
+ spec.add_development_dependency 'rake', '~> 12.3'
31
+ spec.add_development_dependency 'rdoc', '~> 6.1'
32
32
  spec.add_development_dependency 'rspec', '~> 3.0'
33
- spec.add_development_dependency 'rubocop', '~> 0.67.2'
34
- spec.add_development_dependency 'ruby-prof', '~> 0.17.0'
35
- spec.add_development_dependency 'simplecov', '~> 0.16.1'
36
- spec.add_development_dependency 'vcr', '~> 4.0.0'
37
- spec.add_development_dependency 'webmock', '~> 3.5.1'
33
+ spec.add_development_dependency 'rubocop', '~> 0.67'
34
+ spec.add_development_dependency 'ruby-prof', '~> 0.17'
35
+ spec.add_development_dependency 'simplecov', '~> 0.16'
36
+ spec.add_development_dependency 'vcr', '~> 4.0'
37
+ spec.add_development_dependency 'webmock', '~> 3.5'
38
38
 
39
39
  spec.add_dependency 'twilio-ruby', '~> 5.0'
40
- spec.add_dependency 'faye-websocket', '~> 0.10.9'
41
- spec.add_dependency 'concurrent-ruby', '~> 1.1.5'
40
+ spec.add_dependency 'faye-websocket', '~> 0.10'
41
+ spec.add_dependency 'concurrent-ruby', '~> 1.1'
42
42
  spec.add_dependency 'has-guarded-handlers', '~> 1.6.3'
43
- spec.add_dependency 'logger', '~> 1.3.0'
43
+ spec.add_dependency 'logger', '~> 1.3'
44
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signalwire
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - SignalWire Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-28 00:00:00.000000000 Z
11
+ date: 2020-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,56 +30,56 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.1
33
+ version: '0.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.6.1
40
+ version: '0.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: guard-rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 4.7.3
47
+ version: '4.7'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 4.7.3
54
+ version: '4.7'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '12.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '12.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 6.1.1
75
+ version: '6.1'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 6.1.1
82
+ version: '6.1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,70 +100,70 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.67.2
103
+ version: '0.67'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.67.2
110
+ version: '0.67'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: ruby-prof
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.17.0
117
+ version: '0.17'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.17.0
124
+ version: '0.17'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.16.1
131
+ version: '0.16'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 0.16.1
138
+ version: '0.16'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: vcr
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 4.0.0
145
+ version: '4.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 4.0.0
152
+ version: '4.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: webmock
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 3.5.1
159
+ version: '3.5'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 3.5.1
166
+ version: '3.5'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: twilio-ruby
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -184,28 +184,28 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 0.10.9
187
+ version: '0.10'
188
188
  type: :runtime
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 0.10.9
194
+ version: '0.10'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: concurrent-ruby
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 1.1.5
201
+ version: '1.1'
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 1.1.5
208
+ version: '1.1'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: has-guarded-handlers
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: 1.3.0
229
+ version: '1.3'
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: 1.3.0
236
+ version: '1.3'
237
237
  description:
238
238
  email:
239
239
  - open.source@signalwire.com
@@ -262,7 +262,9 @@ files:
262
262
  - examples/relay/inbound_send_digits.rb
263
263
  - examples/relay/messaging/messaging_receive.rb
264
264
  - examples/relay/messaging/messaging_send.rb
265
+ - examples/relay/outbound_amd.rb
265
266
  - examples/relay/outbound_collect.rb
267
+ - examples/relay/outbound_collect_speech.rb
266
268
  - examples/relay/outbound_consumer.rb
267
269
  - examples/relay/outbound_detect.rb
268
270
  - examples/relay/outbound_record.rb