Class: Adhearsion::VoIP::Asterisk::Commands::QueueProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/adhearsion/voip/asterisk/commands.rb

Defined Under Namespace

Classes: AgentProxy, QueueAgentsListProxy, QueueDoesNotExistError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, environment) ⇒ QueueProxy

Returns a new instance of QueueProxy.



1106
1107
1108
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1106

def initialize(name, environment)
  @name, @environment = name, environment
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



1105
1106
1107
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1105

def environment
  @environment
end

#nameObject (readonly)

Returns the value of attribute name.



1105
1106
1107
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1105

def name
  @name
end

Class Method Details

.format_join_hash_key_arguments(options) ⇒ Object

Raises:

  • (ArgumentError)


1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1058

def format_join_hash_key_arguments(options)

  bad_argument = lambda do |(key, value)|
    raise ArgumentError, "Unrecognize value for #{key.inspect} -- #{value.inspect}"
  end

  # Direct Queue() arguments:
  timeout        = options.delete :timeout
  announcement   = options.delete :announce

  # Terse single-character options
  ring_style     = options.delete :play
  allow_hangup   = options.delete :allow_hangup
  allow_transfer = options.delete :allow_transfer

  raise ArgumentError, "Unrecognized args to join!: #{options.inspect}" if options.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

  terse_character_options = ring_style + allow_transfer + allow_hangup

  [terse_character_options, '', announcement, timeout].map(&:to_s)
end

Instance Method Details

#agents(options = {}) ⇒ QueueAgentsListProxy

Get the agents associated with a queue

Parameters:

  • options (Hash) (defaults to: {})

Returns:

Raises:

  • (ArgumentError)


1151
1152
1153
1154
1155
1156
1157
1158
1159
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1151

def agents(options={})
  cached = options.has_key?(:cache) ? options.delete(:cache) : true
  raise ArgumentError, "Unrecognized arguments to agents(): #{options.inspect}" if options.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

Returns:

  • (Boolean)


1177
1178
1179
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1177

def any?
  waiting_count > 0
end

#empty?Boolean

Check whether the waiting count is zero

Returns:

  • (Boolean)


1171
1172
1173
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1171

def empty?
  waiting_count == 0
end

#exists?Boolean

Check whether a queue exists/is defined in Asterisk

Returns:

  • (Boolean)


1183
1184
1185
1186
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1183

def exists?
  environment.execute('RemoveQueueMember', name, 'SIP/AdhearsionQueueExistenceCheck')
  environment.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! :allow_transfer => :agent, :timeout => 30.seconds,

Parameters:

  • options (Hash) (defaults to: {})

    :timeout - The number of seconds to wait for an agent to answer :play - Can be :ringing or :music. :announce - A sound file to play instead of the normal queue announcement. :allow_transfer - Can be :caller, :agent, or :everyone. Allow someone to transfer the call. :allow_hangup - Can be :caller, :agent, or :everyone. Allow someone to hangup with the * key.



1142
1143
1144
1145
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1142

def join!(options={})
  environment.execute("queue", name, *self.class.format_join_hash_key_arguments(options))
 normalize_queue_status_variable environment.variable("QUEUESTATUS")
end

#waiting_countInteger

Check how many channels are waiting in the queue

Returns:

  • (Integer)

Raises:

  • QueueDoesNotExistError



1164
1165
1166
1167
# File 'lib/adhearsion/voip/asterisk/commands.rb', line 1164

def waiting_count
  raise QueueDoesNotExistError.new(name) unless exists?
  environment.variable("QUEUE_WAITING_COUNT(#{name})").to_i
end