Class: Adhearsion::Asterisk::QueueProxy
- Inherits:
-
Object
- Object
- Adhearsion::Asterisk::QueueProxy
- Defined in:
- lib/adhearsion/asterisk/queue_proxy.rb,
lib/adhearsion/asterisk/queue_proxy/agent_proxy.rb,
lib/adhearsion/asterisk/queue_proxy/queue_agents_list_proxy.rb
Defined Under Namespace
Classes: AgentProxy, QueueAgentsListProxy, QueueDoesNotExistError
Instance Attribute Summary collapse
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
-
#agents(options = {}) ⇒ QueueAgentsListProxy
Get the agents associated with a queue.
-
#any? ⇒ Boolean
Check whether any calls are waiting in the queue.
-
#empty? ⇒ Boolean
Check whether the waiting count is zero.
-
#exists? ⇒ Boolean
Check whether a queue exists/is defined in Asterisk.
-
#initialize(name, environment) ⇒ QueueProxy
constructor
A new instance of QueueProxy.
-
#join!(options = {}) ⇒ Object
Makes the current channel join the queue.
-
#waiting_count ⇒ Integer
Check how many channels are waiting in the queue.
Constructor Details
#initialize(name, environment) ⇒ QueueProxy
Returns a new instance of QueueProxy.
57 58 59 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 57 def initialize(name, environment) @name, @environment = name, environment end |
Instance Attribute Details
#environment ⇒ Object (readonly)
Returns the value of attribute environment.
55 56 57 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 55 def environment @environment end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
55 56 57 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 55 def name @name end |
Class Method Details
.format_join_hash_key_arguments(options) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 9 def format_join_hash_key_arguments() bad_argument = lambda do |(key, value)| raise ArgumentError, "Unrecognize value for #{key.inspect} -- #{value.inspect}" end # Direct Queue() arguments: timeout = .delete :timeout announcement = .delete :announce # Terse single-character options ring_style = .delete :play allow_hangup = .delete :allow_hangup allow_transfer = .delete :allow_transfer agi = .delete :agi raise ArgumentError, "Unrecognized args to join!: #{.inspect}" if .any? ring_style = case ring_style when :ringing then 'r' when :music then '' when nil else bad_argument[:play => ring_style] end.to_s allow_hangup = case allow_hangup when :caller then 'H' when :agent then 'h' when :everyone then 'Hh' when nil else bad_argument[:allow_hangup => allow_hangup] end.to_s allow_transfer = case allow_transfer when :caller then 'T' when :agent then 't' when :everyone then 'Tt' when nil else bad_argument[:allow_transfer => allow_transfer] end.to_s = ring_style + allow_transfer + allow_hangup [, '', announcement, timeout, agi].map(&:to_s) end |
Instance Method Details
#agents(options = {}) ⇒ QueueAgentsListProxy
Get the agents associated with a queue
105 106 107 108 109 110 111 112 113 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 105 def agents( = {}) cached = .has_key?(:cache) ? .delete(:cache) : true raise ArgumentError, "Unrecognized arguments to #agents: #{.inspect}" if .keys.any? if cached @cached_proxy ||= QueueAgentsListProxy.new(self, true) else @uncached_proxy ||= QueueAgentsListProxy.new(self, false) end end |
#any? ⇒ Boolean
Check whether any calls are waiting in the queue
131 132 133 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 131 def any? waiting_count > 0 end |
#empty? ⇒ Boolean
Check whether the waiting count is zero
125 126 127 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 125 def empty? waiting_count == 0 end |
#exists? ⇒ Boolean
Check whether a queue exists/is defined in Asterisk
137 138 139 140 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 137 def exists? environment.execute('RemoveQueueMember', name, 'SIP/AdhearsionQueueExistenceCheck') environment.get_variable("RQMSTATUS") != 'NOSUCHQUEUE' end |
#join!(options = {}) ⇒ Object
Makes the current channel join the queue.
@example
queue('sales').join!
@example
queue('sales').join! :timeout => 1.minute
@example
queue('sales').join! :play => :music
@example
queue('sales').join! :play => :ringing
@example
queue('sales').join! :announce => "custom/special-queue-announcement"
@example
queue('sales').join! :allow_transfer => :caller
@example
queue('sales').join! :allow_transfer => :agent
@example
queue('sales').join! :allow_hangup => :caller
@example
queue('sales').join! :allow_hangup => :agent
@example
queue('sales').join! :allow_hangup => :everyone
@example
queue('sales').join! :agi => 'agi://localhost/sales_queue_callback'
@example
queue('sales').join! :allow_transfer => :agent, :timeout => 30.seconds,
96 97 98 99 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 96 def join!( = {}) environment.execute("queue", name, *self.class.format_join_hash_key_arguments()) normalize_queue_status_variable environment.get_variable("QUEUESTATUS") end |
#waiting_count ⇒ Integer
Check how many channels are waiting in the queue
118 119 120 121 |
# File 'lib/adhearsion/asterisk/queue_proxy.rb', line 118 def waiting_count raise QueueDoesNotExistError.new(name) unless exists? environment.get_variable("QUEUE_WAITING_COUNT(#{name})").to_i end |