Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Asterisk manager interface (ami) client for nodejs
JavaScript

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
src
.gitignore
.npmignore
AUTHORS
LICENSE
README
package.json

README

NOTE: This is a work in progress. So expect more features to be added (and doc) with time.

Introduction
------------

For API and docs, check out the homepage at http://marcelog.github.com/Nami
A very similar, PHP alternative, is available at http://marcelog.github.com/PAMI

Nami by itself is just a library that allows your nodejs code to communicate to an
Asterisk Manager Interface (AMI). However, it includes a full application useful to
monitor an asterisk installation.

You will be able to login, receive asynchronous events, and send actions (also,
asynchronously receiving the according response with their optional related events).

This is supported by the Nami class (er.. function) which inherits from EventEmitter, so
your application is able to subscribe to the interesting nami events. 

This is very much like PAMI, so you might be interesting in checking that out too, 
at http://marcelog.github.com/PAMI/index.html

Requirements
------------
 * Nodejs (Tested with 0.6.5)
 * log4js (For logging, tested with 0.3.9)

Events used in Nami
-------------------
* namiConnected: Emitted when nami could successfully connect and logged in to an AMI
server.

* namiEvent: Emitted for all events. Listen to this generic event if you want to catch
any events.

* namiEvent(EventName): These events are thrown based on the event name received. Let's
say nami gets an event named "Dial", "VarSet", or "Hangup". This will emit the
events: "namiEventDial", "namiEventVarSet", and "NamiEventHangup".

* namiLoginIncorrect: Emitted when the login action fails (wrong password, etc).
* namiInvalidPeer: Emitted if nami tried to connect to anything that did not salute like
an AMI 1.1.

Internal Nami events
--------------------
* namiRawMessage: Whenever a full message is received from the
AMI (delimited by double crlf), this is emitted to invoke the decode routine. After
namiRawMessage, the decodification routine runs to properly identify this message as a
response, an event that belongs to a response, or an async event from server.

* namiRawEvent: Emitted when the decodification routine 
classified the received message as an async event from server.

* namiRawResponse: Emitted when the decodification routine classified the received
message as a response to an action.

Installation
------------
$ npm install log4js
$ npm install nami

 -or-
Download it from this repo :)

Configuration
-------------
Nami expects a configuration object, very much like this:
var namiConfig = {
    host: "amihost",
    port: 5038,
    username: "admin",
    secret: "secret"
};

Quickstart
----------
$ mkdir testnami
$ npm install log4js
$ npm install nami

var nami = new (require("nami").Nami)(namiConfig);
nami.on('namiEvent', function (event) { });
nami.on('namiEventDial', function (event) { });
nami.on('namiEventVarSet', function (event) { });
nami.on('namiEventHangup', function (event) { });
process.on('SIGINT', function () {
    nami.close();
    process.exit();
});
nami.on('namiConnected', function (event) {
    nami.send(new namiLib.Actions.CoreShowChannelsAction(), function(response) {
        logger.debug(' ---- Response: ' + util.inspect(response));
    });
});
nami.open();

A Better example
----------------
See src/index.js for a better example.

That's about it.

Supported Actions (Check the api for details)
---------------------------------------------
Login
Logoff
Ping
Hangup
CoreShowChannels
CoreStatus
CoreSettings
Status
DahdiShowChannels
ListCommands
AbsoluteTimeout
SipShowPeer
SipShowRegistry
SipQualifyPeer
SipPeers
AgentLogoff
Agents
AttendedTransfer
ChangeMonitor
Command
CreateConfig
DahdiDialOffHook
DahdiDndOff
DahdiDndOn
DahdiHangup
DahdiRestart
DbDel
DbDeltree
DbGet
DbPut
ExtensionState
GetConfig
GetConfigJson
GetVar
SetVar
JabberSend
ListCategories
PauseMonitor
LocalOptimizeAway
Reload
PlayDtmf
Park
ParkedCalls
Monitor
ModuleCheck
ModuleLoad
ModuleReload
ModuleUnload
MailboxCount
MailboxStatus
VoicemailUsersList
Redirect
UnpauseMonitor
StopMonitor
ShowDialPlan
SendText
Queues
QueueUnpause
QueuePause
QueueSummary
QueueStatus
QueueRule
QueueRemove
QueueAdd
QueueLog

Thanks to
--------
* Joshua Elson for his help in trying and debugging in loaded asterisk servers and testing with node 0.6.5 and newer npm versions

Something went wrong with that request. Please try again.