signalwire 2.3.2 → 2.3.3

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.
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