asterisk-ami 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/asterisk-ami.gemspec +1 -1
- data/lib/ami.rb +4 -0
- data/lib/asterisk/action.rb +7 -6
- data/lib/asterisk/ami/version.rb +1 -1
- data/lib/asterisk/connection.rb +5 -3
- data/lib/asterisk/event.rb +3 -2
- data/lib/asterisk/server/socket.rb +51 -18
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2c16d3026df5c4f13a86a2a772fdf6cae201ed3
|
4
|
+
data.tar.gz: 2b46c96f5058776a98ddc6a35dfefe3bb55c3166
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f88972ba1a2a6633b03fd8ed7594b4a07bc2608dcaa693fab203c055c546e78550127c5d9392c517e71d3e7fc221e90af38a05bab6ecc28611e61561ff96b3ac
|
7
|
+
data.tar.gz: b2c99e20a2ba41333d681c13106372988ea3ae519192f6d3688d4c45c37e0ec8032319b7c564b4ac2d2e0cc4fcc6d5655d80dd04ed862225a4c70ebfbf0d8c74
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Asterisk::Ami
|
2
2
|
|
3
|
-
|
3
|
+
Asterisk Websocket to AMI proxy.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,9 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
Run the ami proxy from the command line with the following command changing the ami_* parameters with your access details for asterisk.
|
22
|
+
|
23
|
+
$ bundle exec asterisk-ami localhost 8088 ami_user ami_password ami_host
|
22
24
|
|
23
25
|
## Contributing
|
24
26
|
|
data/asterisk-ami.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "titleize"
|
22
22
|
spec.add_dependency "json"
|
23
|
-
spec.add_dependency "em-websocket", "
|
23
|
+
spec.add_dependency "em-websocket", ">= 0.5.0"
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
25
|
spec.add_development_dependency "rake"
|
26
26
|
end
|
data/lib/ami.rb
CHANGED
@@ -9,6 +9,7 @@ module Asterisk
|
|
9
9
|
|
10
10
|
def initialize(username, password, host="localhost", port=5038)
|
11
11
|
@connection = Asterisk::Connection.new(username, password, host, port)
|
12
|
+
@connected = false
|
12
13
|
end
|
13
14
|
|
14
15
|
def connect
|
@@ -95,5 +96,8 @@ module Asterisk
|
|
95
96
|
Asterisk::Action.new("MailboxCount", {"Mailbox" => "#{exten}@#{context}"}).send(@connection)
|
96
97
|
end
|
97
98
|
|
99
|
+
private
|
100
|
+
attr_accessor :connected
|
101
|
+
|
98
102
|
end
|
99
103
|
end
|
data/lib/asterisk/action.rb
CHANGED
@@ -2,12 +2,13 @@ require File.expand_path(File.dirname(__FILE__)) + "/message_helper"
|
|
2
2
|
|
3
3
|
module Asterisk
|
4
4
|
class Action
|
5
|
+
|
5
6
|
include Asterisk::MessageHelper
|
6
7
|
|
7
8
|
def initialize(command, options={})
|
8
9
|
@command = command
|
9
10
|
@options = options
|
10
|
-
@options[:action_id] = Random.rand(
|
11
|
+
@options[:action_id] = Random.rand(99999999) unless @options[:action_id]
|
11
12
|
end
|
12
13
|
|
13
14
|
def self.parse(str)
|
@@ -17,11 +18,11 @@ module Asterisk
|
|
17
18
|
|
18
19
|
# send the ami action
|
19
20
|
def send(connection)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
connection.write(self.to_ami)
|
22
|
+
end
|
23
|
+
|
24
|
+
def action_id
|
25
|
+
@options[:action_id]
|
25
26
|
end
|
26
27
|
|
27
28
|
# convert the action to ami string to send down wire
|
data/lib/asterisk/ami/version.rb
CHANGED
data/lib/asterisk/connection.rb
CHANGED
@@ -20,13 +20,13 @@ module Asterisk
|
|
20
20
|
puts "connected"
|
21
21
|
@connection.waitfor(/Asterisk Call Manager\/\d+\.\d+/) {|response| puts response }
|
22
22
|
puts "Logging in.."
|
23
|
-
Asterisk::Action.new(:login, :username => @username, :secret => @password).send(
|
23
|
+
Asterisk::Action.new(:login, :username => @username, :secret => @password).send(self)
|
24
24
|
puts "Done."
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def write(
|
29
|
-
@connection.write(
|
28
|
+
def write(command)
|
29
|
+
@connection.write(command + "\r\n\r\n")
|
30
30
|
end
|
31
31
|
|
32
32
|
def events(&block)
|
@@ -43,6 +43,8 @@ module Asterisk
|
|
43
43
|
begin
|
44
44
|
if message.include?("Event")
|
45
45
|
yield Asterisk::Event.parse(message) if block_given?
|
46
|
+
else
|
47
|
+
puts message
|
46
48
|
end
|
47
49
|
rescue Errno::EPIPE => e
|
48
50
|
puts "Error in connection to Asterisk: #{e.message}"
|
data/lib/asterisk/event.rb
CHANGED
@@ -9,24 +9,26 @@ require 'em-websocket'
|
|
9
9
|
Thread.abort_on_exception = true
|
10
10
|
# WebSocket.debug = true
|
11
11
|
|
12
|
-
if ARGV.size
|
13
|
-
$stderr.puts("Usage: asterisk-ami
|
12
|
+
if ARGV.size < 3
|
13
|
+
$stderr.puts("Usage: asterisk-ami AMI_USERNAME AMI_PASSWORD AMI_HOSTNAME [ACCEPTED_DOMAIN] [PORT]")
|
14
14
|
exit(1)
|
15
15
|
end
|
16
16
|
|
17
|
-
# server = WebSocketServer.new(
|
18
|
-
# :accepted_domains => [ARGV[0], "localhost"],
|
19
|
-
# :port => ARGV[1].to_i())
|
20
17
|
|
21
|
-
port = ARGV[1].to_i
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
host = ARGV[3]
|
20
|
+
port = ARGV[4].to_i
|
21
|
+
|
22
|
+
ami_host = ARGV[0]
|
23
|
+
ami_username = ARGV[1]
|
24
|
+
ami_password = ARGV[2]
|
25
|
+
|
26
|
+
host = "0.0.0.0" if host.nil?
|
27
|
+
port = 8088 if port==0
|
26
28
|
|
27
29
|
puts "Starting Server on port #{port}"
|
28
30
|
EM.run {
|
29
|
-
EM::WebSocket.run(:host =>
|
31
|
+
EM::WebSocket.run(:host => host, :port => port) do |ws|
|
30
32
|
ws.onopen { |handshake|
|
31
33
|
|
32
34
|
puts "Websocket connection request received"
|
@@ -44,18 +46,48 @@ EM.run {
|
|
44
46
|
puts "Recieved message: #{msg}"
|
45
47
|
|
46
48
|
if msg.is_json?
|
47
|
-
puts "its json"
|
48
49
|
data = JSON.parse(msg)
|
49
|
-
puts data
|
50
50
|
if data["command"]
|
51
|
-
puts "its a command"
|
52
51
|
case data["command"]
|
53
52
|
when "initiate-call"
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
ami_command = Asterisk::Action.new(:originate, :action_id => data["action_id"], :channel => "SIP/#{data["from"]}", :extension => data["to"], :priority => 1, :context => "default")
|
54
|
+
when "hangup"
|
55
|
+
ami_command = Asterisk::Action.new(:hangup, :action_id => data["action_id"], :channel => data["channel"])
|
56
|
+
when "transfer"
|
57
|
+
ami_command = Asterisk::Action.new(:blind_transfer, :action_id => data["action_id"], :channel => data["channel"], :extension => data["to"], :context => "default")
|
58
|
+
|
59
|
+
when "hold"
|
60
|
+
if data.has_key?("timeout")
|
61
|
+
timeout = data["timeout"].to_s.to_i
|
62
|
+
else
|
63
|
+
timeout = 60
|
64
|
+
end
|
65
|
+
ami_command = Asterisk::Action.new(:park, :action_id => data["action_id"], :channel => data["channel"], :channel2 => data["my_channel"], :timeout => (timeout*1000).to_s)
|
66
|
+
when "unhold"
|
67
|
+
ami_command = Asterisk::Action.new(:bridge, :action_id => data["action_id"], :channel => data["my_channel"], :channel2 => data["remote_channel"], :tone => "yes")
|
68
|
+
when "start-recording"
|
69
|
+
ami_command = Asterisk::Action.new(:monitor, :action_id => data["action_id"], :channel => data["channel"], :format => "wav", :mix => "true")
|
70
|
+
when "stop-recording"
|
71
|
+
ami_command = Asterisk::Action.new(:stop_monitor, :action_id => data["action_id"], :channel => data["channel"])
|
72
|
+
when "pause-recording"
|
73
|
+
ami_command = Asterisk::Action.new(:pause_monitor, :action_id => data["action_id"], :channel => data["channel"])
|
74
|
+
when "resume-recording"
|
75
|
+
ami_command = Asterisk::Action.new(:unpause_monitor, :action_id => data["action_id"], :channel => data["channel"])
|
76
|
+
when "queue-add"
|
77
|
+
ami_command = Asterisk::Action.new(:queue_add, :action_id => data["action_id"], :channel => data["channel"])
|
78
|
+
when "queue-pause"
|
79
|
+
ami_command = Asterisk::Action.new(:queue_pause, :action_id => data["action_id"], :channel => data["channel"])
|
80
|
+
when "queue-remove"
|
81
|
+
ami_command = Asterisk::Action.new(:queue_remove, :action_id => data["action_id"], :channel => data["channel"])
|
82
|
+
when "queues"
|
83
|
+
ami_command = Asterisk::Action.new(:queues, :action_id => data["action_id"], :channel => data["channel"])
|
84
|
+
when "queue-status"
|
85
|
+
ami_command = Asterisk::Action.new(:queue_status, :action_id => data["action_id"], :channel => data["channel"])
|
86
|
+
when "get_variable"
|
87
|
+
ami_command = Asterisk::Action.new(:get_var, :action_id => data["action_id"], :channel => data["channel"], :variable => data["name"])
|
57
88
|
end
|
58
|
-
ami_command.
|
89
|
+
puts ami_command.to_ami
|
90
|
+
@connection.send(ami_command)
|
59
91
|
else
|
60
92
|
ws.send ("No action found to execute, you must supply a command")
|
61
93
|
end
|
@@ -64,9 +96,10 @@ EM.run {
|
|
64
96
|
end
|
65
97
|
}
|
66
98
|
|
67
|
-
@connection = Asterisk::Connection.new(
|
99
|
+
@connection = Asterisk::Connection.new(ami_username, ami_password, ami_host)
|
68
100
|
t = Thread.new do
|
69
101
|
@connection.events do |data|
|
102
|
+
puts " ==== #{data[:event]} ==== "
|
70
103
|
puts data.to_json
|
71
104
|
ws.send(data.to_json)
|
72
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asterisk-ami
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stewart McKee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: titleize
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
name: em-websocket
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.5.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
127
|
version: '0'
|
128
128
|
requirements: []
|
129
129
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.4.8
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: Asterisk AMI integration gem
|