jicksta-adhearsion 0.8.2 → 0.8.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.
- data/CHANGELOG +11 -0
- data/Rakefile +7 -0
- data/adhearsion.gemspec +1 -1
- data/lib/adhearsion/initializer.rb +2 -2
- data/lib/adhearsion/version.rb +1 -1
- data/lib/adhearsion/voip/asterisk/commands.rb +20 -2
- data/lib/adhearsion/voip/asterisk/manager_interface.rb +33 -0
- data/lib/theatre/invocation.rb +1 -1
- metadata +3 -1
data/CHANGELOG
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
0.8.3
|
2
|
+
|
3
|
+
0.8.2
|
4
|
+
- When a call hangs up, Adhearsion will no longer show random exceptions (that were okay) and instead allows the user to rescue a Hangup exception.
|
5
|
+
- ManagerInterfaceResponse now include()s DRbUndumped, allowing send_action() to be called directly over DRb.
|
6
|
+
- Fixes an inconsequential bug when CTL-C'ing Adhearsion.
|
7
|
+
|
8
|
+
0.8.1
|
9
|
+
- The sandbox component now comes
|
10
|
+
- Minor bug fixes
|
11
|
+
|
1
12
|
0.8.0 rev 2
|
2
13
|
- Added a few non-critical files to the .gemspec. They were ignored
|
3
14
|
|
data/Rakefile
CHANGED
@@ -118,3 +118,10 @@ task :debug_gem do
|
|
118
118
|
Thread.new { spec = eval("$SAFE = 3\n#{gemspec}") }.join
|
119
119
|
puts "SUCCESS: Gemspec runs at the $SAFE level 3."
|
120
120
|
end
|
121
|
+
|
122
|
+
desc 'Install the package as a gem.'
|
123
|
+
task :install_gem => [:clobber_package, :package] do
|
124
|
+
windows = /djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
|
125
|
+
gem = Dir['pkg/*.gem'].first
|
126
|
+
sh "#{'sudo ' unless windows}gem install --local #{gem}"
|
127
|
+
end
|
data/adhearsion.gemspec
CHANGED
@@ -112,7 +112,7 @@ ADHEARSION_FILES = %w{
|
|
112
112
|
|
113
113
|
Gem::Specification.new do |s|
|
114
114
|
s.name = "adhearsion"
|
115
|
-
s.version = "0.8.
|
115
|
+
s.version = "0.8.3"
|
116
116
|
|
117
117
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
118
118
|
s.authors = ["Jay Phillips"]
|
@@ -128,15 +128,15 @@ module Adhearsion
|
|
128
128
|
switch_to_root_directory
|
129
129
|
catch_termination_signal
|
130
130
|
bootstrap_rc
|
131
|
-
daemonize! if should_daemonize?
|
132
131
|
initialize_log_file
|
133
132
|
load_all_init_files
|
134
133
|
init_components_subsystem
|
135
134
|
init_modules
|
136
135
|
init_events_subsystem
|
137
|
-
create_pid_file if pid_file
|
138
136
|
load_components
|
139
137
|
init_events_file
|
138
|
+
daemonize! if should_daemonize?
|
139
|
+
create_pid_file if pid_file
|
140
140
|
|
141
141
|
ahn_log "Adhearsion initialized!"
|
142
142
|
|
data/lib/adhearsion/version.rb
CHANGED
@@ -161,12 +161,13 @@ module Adhearsion
|
|
161
161
|
execute "SendDTMF", digits.to_s
|
162
162
|
end
|
163
163
|
|
164
|
+
# The with_next_message method...
|
164
165
|
def with_next_message(&block)
|
165
166
|
raise LocalJumpError, "Must supply a block" unless block_given?
|
166
167
|
block.call(next_message)
|
167
168
|
end
|
168
169
|
|
169
|
-
# This command
|
170
|
+
# This command should be used to advance to the next message in the Asterisk Comedian Voicemail application
|
170
171
|
def next_message
|
171
172
|
@call.inbox.pop
|
172
173
|
end
|
@@ -438,6 +439,9 @@ module Adhearsion
|
|
438
439
|
raise Adhearsion::VoIP::DSL::Dialplan::ControlPassingException.new(context)
|
439
440
|
end
|
440
441
|
|
442
|
+
# The queue method puts a call into a call queue to be answered by an agent registered with that queue.
|
443
|
+
# A full description may be found here: http://www.voip-info.org/wiki-Asterisk+cmd+Queue
|
444
|
+
# The queue method takes a queue_name as an argument to place the caller in the appropriate queue.
|
441
445
|
def queue(queue_name)
|
442
446
|
queue_name = queue_name.to_s
|
443
447
|
|
@@ -558,6 +562,9 @@ module Adhearsion
|
|
558
562
|
raw_response("SET VARIABLE %s %p" % [variable_name.to_s, value.to_s]) == "200 result=1"
|
559
563
|
end
|
560
564
|
|
565
|
+
# The variable method allows you to either set or get a channel variable from Asterisk
|
566
|
+
# The method takes a hash key/value pair if you would like to set a variable
|
567
|
+
# Or a single string with the variable to get from Asterisk
|
561
568
|
def variable(*args)
|
562
569
|
if args.last.kind_of? Hash
|
563
570
|
assignments = args.pop
|
@@ -574,6 +581,11 @@ module Adhearsion
|
|
574
581
|
end
|
575
582
|
end
|
576
583
|
|
584
|
+
# Use the voicemail method to send a caller to a voicemail box to leave a message.
|
585
|
+
# A complete description is avilable at:
|
586
|
+
# http://www.voip-info.org/tiki-index.php?page=Asterisk+cmd+VoiceMail
|
587
|
+
# The method takes the mailbox_number of the user to leave a message for and a
|
588
|
+
# greeting_option that will determine which message gets played to the caller.
|
577
589
|
def voicemail(*args)
|
578
590
|
options_hash = args.last.kind_of?(Hash) ? args.pop : {}
|
579
591
|
mailbox_number = args.shift
|
@@ -606,6 +618,9 @@ module Adhearsion
|
|
606
618
|
end
|
607
619
|
end
|
608
620
|
|
621
|
+
# The voicemail_main method puts a caller into the voicemail system to fetch their voicemail
|
622
|
+
# or set options for their voicemail box. A full description may be found here:
|
623
|
+
# http://www.voip-info.org/wiki-Asterisk+cmd+VoiceMailMain
|
609
624
|
def voicemail_main(options={})
|
610
625
|
mailbox, context, folder = options.values_at :mailbox, :context, :folder
|
611
626
|
authenticate = options.has_key?(:authenticate) ? options[:authenticate] : true
|
@@ -730,6 +745,7 @@ module Adhearsion
|
|
730
745
|
|
731
746
|
protected
|
732
747
|
|
748
|
+
# wait_for_digits waits for the input of digits based on the number of milliseconds
|
733
749
|
def wait_for_digit(timeout=-1)
|
734
750
|
timeout *= 1_000 if timeout != -1
|
735
751
|
result = result_digit_from raw_response("WAIT FOR DIGIT #{timeout.to_i}")
|
@@ -744,12 +760,14 @@ module Adhearsion
|
|
744
760
|
nil
|
745
761
|
end
|
746
762
|
|
763
|
+
# set_callier_id_number method allows setting of the callerid number of the call
|
747
764
|
def set_caller_id_number(caller_id)
|
748
765
|
return unless caller_id
|
749
766
|
raise ArgumentError, "Caller ID must be numerical" if caller_id.to_s !~ /^\d+$/
|
750
767
|
raw_response %(SET CALLERID %p) % caller_id
|
751
768
|
end
|
752
769
|
|
770
|
+
# set_caller_id_name method allows the setting of the callerid name of the call
|
753
771
|
def set_caller_id_name(caller_id_name)
|
754
772
|
return unless caller_id_name
|
755
773
|
variable "CALLERID(name)" => caller_id_name
|
@@ -891,7 +909,7 @@ module Adhearsion
|
|
891
909
|
|
892
910
|
def validate_digits(digits)
|
893
911
|
returning digits.to_s do |digits_as_string|
|
894
|
-
raise ArgumentError, "Can only be called with valid digits!" unless digits_as_string =~
|
912
|
+
raise ArgumentError, "Can only be called with valid digits!" unless digits_as_string =~ /^[0-9*#-]+$/
|
895
913
|
end
|
896
914
|
end
|
897
915
|
|
@@ -298,6 +298,8 @@ module Adhearsion
|
|
298
298
|
########### ###########
|
299
299
|
####### #######
|
300
300
|
|
301
|
+
# ping sends an action to the Asterisk Manager Interface that returns a pong
|
302
|
+
# more details here: http://www.voip-info.org/wiki/index.php?page=Asterisk+Manager+API+Action+Ping
|
301
303
|
def ping
|
302
304
|
deprecation_warning
|
303
305
|
send_action "Ping"
|
@@ -310,6 +312,29 @@ module Adhearsion
|
|
310
312
|
" See http://docs.adhearsion.com/AMI for more information."
|
311
313
|
end
|
312
314
|
|
315
|
+
# The originate method launches a call to Asterisk, full details here:
|
316
|
+
# http://www.voip-info.org/tiki-index.php?page=Asterisk+Manager+API+Action+Originate
|
317
|
+
# Takes these arguments as a hash:
|
318
|
+
#
|
319
|
+
# Channel: Channel on which to originate the call (The same as you specify in the Dial application command)
|
320
|
+
# Context: Context to use on connect (must use Exten & Priority with it)
|
321
|
+
# Exten: Extension to use on connect (must use Context & Priority with it)
|
322
|
+
# Priority: Priority to use on connect (must use Context & Exten with it)
|
323
|
+
# Timeout: Timeout (in milliseconds) for the originating connection to happen(defaults to 30000 milliseconds)
|
324
|
+
# CallerID: CallerID to use for the call
|
325
|
+
# Variable: Channels variables to set (max 32). Variables will be set for both channels (local and connected).
|
326
|
+
# Account: Account code for the call
|
327
|
+
# Application: Application to use on connect (use Data for parameters)
|
328
|
+
# Data : Data if Application parameter is used
|
329
|
+
# Async: For the origination to be asynchronous (allows multiple calls to be generated without waiting for a response)
|
330
|
+
# ActionID: The request identifier. It allows you to identify the response to this request.
|
331
|
+
# You may use a number or a string. Useful when you make several simultaneous requests.
|
332
|
+
#
|
333
|
+
# For example:
|
334
|
+
# originate { :channel => 'SIP/1000@sipnetworks.com',
|
335
|
+
# :context => 'my_context',
|
336
|
+
# :exten => 's',
|
337
|
+
# :priority => '1' }
|
313
338
|
def originate(options={})
|
314
339
|
deprecation_warning
|
315
340
|
options = options.clone
|
@@ -335,11 +360,15 @@ module Adhearsion
|
|
335
360
|
call_and_exec caller, "Dial", :args => dial_args, :caller_id => opts[:caller_id]
|
336
361
|
end
|
337
362
|
|
363
|
+
# hangup terminates a call accepts a channel as the argument
|
364
|
+
# full details here: http://www.voip-info.org/wiki/index.php?page=Asterisk+Manager+API+Action+Hangup
|
338
365
|
def hangup(channel)
|
339
366
|
deprecation_warning
|
340
367
|
send_action "Hangup", :channel => channel
|
341
368
|
end
|
342
369
|
|
370
|
+
# call_and_exec allows you to make a call to a channel and then execute an Astersik application
|
371
|
+
# on that call
|
343
372
|
def call_and_exec(channel, app, opts={})
|
344
373
|
deprecation_warning
|
345
374
|
args = { :channel => channel, :application => app }
|
@@ -348,6 +377,10 @@ module Adhearsion
|
|
348
377
|
originate args
|
349
378
|
end
|
350
379
|
|
380
|
+
# call_into_context is syntactic sugar for the Asterisk originate command that allows you to
|
381
|
+
# lanuch a call into a particular context. For example:
|
382
|
+
#
|
383
|
+
# call_into_context('SIP/1000@sipnetworks.com', 'my_context', { :variables => { :session_guid => new_guid }})
|
351
384
|
def call_into_context(channel, context, options={})
|
352
385
|
deprecation_warning
|
353
386
|
args = {:channel => channel, :context => context}
|
data/lib/theatre/invocation.rb
CHANGED
@@ -32,7 +32,7 @@ module Theatre
|
|
32
32
|
@returned_value_lock = Monitor.new
|
33
33
|
|
34
34
|
# Used when wait() is called to notify all waiting threads by using a ConditionVariable
|
35
|
-
@returned_value_blocker = Monitor::ConditionVariable.new @returned_value_lock
|
35
|
+
@returned_value_blocker = @returned_value_lock.new_cond#Monitor::ConditionVariable.new @returned_value_lock
|
36
36
|
end
|
37
37
|
|
38
38
|
def queued
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jicksta-adhearsion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jay Phillips
|
@@ -14,6 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubigen
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -23,6 +24,7 @@ dependencies:
|
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: log4r
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|