Skip to content

emilianodellacasa/ruby-asterisk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RUBY-ASTERISK

Code Climate Donate via Zerocracy Managed by Zerocracy Maintainability

This gem add support to your Ruby or RubyOnRails projects to Asterisk Manager Interface

There was a project with the same name, but it appears to be discontinued so I decided to start a new project

Installation

Rails3

Add to your Gemfile and run the bundle command to install it.

 gem "ruby-asterisk"

Rails2

Simply run in your terminal

 gem install ruby-asterisk

Usage

INITIALIZE

To create a new AMI session, just call the following command

 @ami = RubyAsterisk::AMI.new("192.168.1.1",5038)

LOGIN

To log in, provide to the created sessions a valid username and password

 @ami.login("mark","mysecret")

Like all commands, it will return a Response command that could be parsed accordingly

CORE SHOW CHANNELS

To get a list of all channels currently active on your Asterisk installation, use the following command

 @ami.core_show_channels

PARKED CALLS

To get a list of all parked calls on your Asterisk PBX, use the following command

 @ami.parked_calls

ORIGINATE

To start a new call use the following command

 @ami.originate("SIP/9100","OUTGOING","123456","1","var1=12,var2=99") # CHANNEL, CONTEXT, CALLEE, PRIORITY, VARIABLES

COMMAND

To execute a cli command use the following code

 @ami.command("core show channels")

MEETME LIST

To get a list of all active conferences use the following command

 @ami.meet_me_list

EXTENSION STATE

To get the state of an extension use the following command

 @ami.extension_state(@exten,@context)

DEVICE STATE LIST

To get list of states of devices

 @ami.device_state_list(@exten,@context)

SKINNY DEVICES AND LINES

To get list of skinny devices

 @ami.skinny_devices

To get list of skinny lines

 @ami.skinny_lines

QUEUE PAUSE

To pause or unpause a member in a call queue

 @ami.queue_pause("SIP/100", "true", "myqueue", "reason")                                                                            

PING

To ping asterisk AMI

 @ami.ping

EVENT MASK

To enable or disable sending events to this manager connection

 @ami.event_mask("on")

SIPpeers

To get a list of sip peers (equivalent to "sip show peers" call on the asterisk server). This can be used to get a buddy list.

 @ami.sip_peers

SIP SHOW PEER

To get info of a peer (equivalent to "sip show peer" call on the asterisk server).

 @ami.sip_show_peer(peer)

SIP SHOW REGISTRY

Retrieve a status of SIP registries and their statuses from the Asterisk server.

 @ami.sip_show_registry

STATUS

To get a status of a single channel or for all channels

 @ami.status 

ATXFER

Attendand transfer

 @ami.atxfer(channel, exten, context, priority = '1')

WAIT EVENT

Wait for an event to occur. Timeout in seconds to wait for events, -1 means forever

 wait_event(timeout=-1)

MONITOR

Monitor a channel

 monitor(channel,mix=false,file=nil,format='wav')

STOP MONITOR

Stop monitoring a channel

 stop_monitor(channel)

PAUSE MONITOR

Pause monitoring of a channel

 pause_monitor(channel)

UNPAUSE MONITOR

Unpause monitoring of a channel

 unpause_monitor(channel)

CHANGE MONITOR

Change monitoring filename of a channel

 change_monitor(channel,file)

THE RESPONSE OBJECT

The response object contains all information about all data received from Asterisk. Here follows a list of all object's properties:

  • type
  • success
  • action_id
  • message
  • data
  • raw_response

The data property contains all additional information obtained from Asterisk, like for example the list of active channels after a "core show channels" command.

Todo List

  • Adding initialization parameters for Telnet options like Output_log, Waittime, Dump_log, timeout;
  • Adding test cases for better code coverage;
  • Refactoring of ruby-asterisk.rb, adding method_missing for the purpose of supporting as much AMI commands as possible

Development

Questions or problems? Please post them on the issue tracker. You can contribute changes by forking the project and submitting a pull request. You can ensure the tests passing by running bundle and rake.

This gem is created by Emiliano Della Casa and is under the MIT License and it is distributed by courtesy of Engim srl.